typo fix
[pykit.git] / main.cc
diff --git a/main.cc b/main.cc
index bd65730..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"
@@ -36,13 +38,25 @@ namespace {
             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");
@@ -51,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;
@@ -87,6 +104,10 @@ 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())
@@ -102,9 +123,15 @@ int main(int argc, char *argv[])
 
         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;
     }
 }