typo fix
[pykit.git] / main.cc
diff --git a/main.cc b/main.cc
index 355abf3..cbf1f65 100644 (file)
--- a/main.cc
+++ b/main.cc
@@ -18,6 +18,8 @@
 #include <QDir>
 #include <QFileInfo>
 #include <QFontDatabase>
+#include <QWebSettings>
+#include <QMessageBox>
 #include <boost/scoped_ptr.hpp>
 #include "MainWindow.hh"
 #include "PythonPublisher.hh"
 
 extern void qt_drt_overwritePluginDirectories();
 
+namespace {
+    QSize parseSize(QString const & s)
+    {
+        QStringList coords (s.split(" "));
+        if (coords.size() != 2)
+            return QSize();
+        return QSize(coords[0].toInt(), coords[1].toInt());
+    }
+
+    void showPlatformError(char const * reason)
+    {
+        QMessageBox msgBox;
+        msgBox.setText("Es ist ein interner Fehler bei der Initialisierung"
+                       " aufgetreten. Bitte notieren sie die folgende"
+                       " Fehlermeldung und wenden sie sich an den technischen"
+                       " Support.");
+        msgBox.setDetailedText(reason);
+        msgBox.setInformativeText(QString("%1 wird beendet.").arg(QApplication::applicationName()));
+        msgBox.setWindowTitle(QApplication::applicationName());
+        msgBox.exec();
+    }
+}
+
 int main(int argc, char *argv[])
 {
+    QApplication app (argc, argv);
     try {
-        QApplication app (argc, argv);
-
         QSettings settings ("pykit.ini", QSettings::IniFormat);
         QStringList arguments (app.arguments());
         settings.beginGroup("AppData");
@@ -41,6 +65,9 @@ int main(int argc, char *argv[])
         app.setApplicationVersion(settings.value("version").toString());
         app.setOrganizationDomain(settings.value("organization").toString());
         app.setOrganizationName(settings.value("organization").toString());
+        char * pluginsPath (getenv("PYKIT_PLUGIN_PATH"));
+        if (pluginsPath)
+            app.setLibraryPaths(QString(pluginsPath).split(":"));
 
         QString splashPath (settings.value("splash").toString());
         boost::scoped_ptr<QSplashScreen> splash;
@@ -77,21 +104,34 @@ int main(int argc, char *argv[])
         QString url (settings.value("home").toString());
         if (arguments.size()>1)
             url = arguments.at(1);
+
+        if (settings.value("debug").toBool())
+            QWebSettings::globalSettings()->setAttribute(
+                QWebSettings::DeveloperExtrasEnabled, true);
         pykit::MainWindow window (QUrl(url), &publisher);
         window.setWindowTitle(app.applicationName());
         if (!iconPath.isEmpty())
             window.setWindowIcon(QIcon(iconPath));
         window.setWindowIconText(window.windowTitle());
 
+        window.setMinimumSize(parseSize(settings.value("minsize").toString()));
+        window.resize(parseSize(settings.value("size").toString()));
+
         window.show();
         if (splash)
             splash->finish(&window);
 
         return app.exec();
     }
-    catch (std::exception & ex) {
+    catch (std::exception const & ex) {
         std::cerr << "Exception:\n" << ex.what() << "\n";
-        throw;
+        showPlatformError(ex.what());
+        return 1;
+    }
+    catch (...) {
+        std::cerr << "Exception: <undefined>\n";
+        showPlatformError("undefined error condition");
+        return 1;
     }
 }
 
@@ -107,5 +147,5 @@ int main(int argc, char *argv[])
 // c-file-style: "j32"
 // indent-tabs-mode: nil
 // ispell-local-dictionary: "american"
-// compile-command: "scons -U"
+// compile-command: "make"
 // End: