4 // Stefan Bund <info@j32.de>
7 \brief main non-inline non-template implementation */
15 #include <QApplication>
16 #include <QSplashScreen>
20 #include <QFontDatabase>
21 #include <QWebSettings>
22 #include <QMessageBox>
23 #include <boost/scoped_ptr.hpp>
24 #include "MainWindow.hh"
25 #include "PythonPublisher.hh"
29 ///////////////////////////////cc.p////////////////////////////////////////
31 extern void qt_drt_overwritePluginDirectories();
34 QSize parseSize(QString const & s)
36 QStringList coords (s.split(" "));
37 if (coords.size() != 2)
39 return QSize(coords[0].toInt(), coords[1].toInt());
42 void showPlatformError(char const * reason)
45 msgBox.setText("Es ist ein interner Fehler bei der Initialisierung"
46 " aufgetreten. Bitte notieren sie die folgende"
47 " Fehlermeldung und wenden sie sich an den technischen"
49 msgBox.setDetailedText(reason);
50 msgBox.setInformativeText(QString("%1 wird beendet.").arg(QApplication::applicationName()));
51 msgBox.setWindowTitle(QApplication::applicationName());
56 int main(int argc, char *argv[])
58 QApplication app (argc, argv);
60 QSettings settings ("pykit.ini", QSettings::IniFormat);
61 QStringList arguments (app.arguments());
62 settings.beginGroup("AppData");
64 app.setApplicationName(settings.value("name").toString());
65 app.setApplicationVersion(settings.value("version").toString());
66 app.setOrganizationDomain(settings.value("organization").toString());
67 app.setOrganizationName(settings.value("organization").toString());
68 char * pluginsPath (getenv("PYKIT_PLUGIN_PATH"));
70 app.setLibraryPaths(QString(pluginsPath).split(":"));
72 QString splashPath (settings.value("splash").toString());
73 boost::scoped_ptr<QSplashScreen> splash;
74 if (!splashPath.isEmpty()) {
75 QPixmap splashPixmap (settings.value("splash").toString());
76 splash.reset(new QSplashScreen (splashPixmap));
80 QString iconPath (settings.value("icon").toString());
84 settings.beginGroup("Fonts");
85 QString loadFontDir (settings.value("loaddir").toString());
86 if (!loadFontDir.isEmpty()) {
87 QDir dir (loadFontDir);
89 QFileInfoList files (dir.entryInfoList(QDir::Files));
90 for (QFileInfoList::iterator i (files.begin()), i_end (files.end());
92 QFontDatabase::addApplicationFont(i->absoluteFilePath());
95 std::cerr << "WARNING: Font directory not found" << std::endl;
99 settings.beginGroup("Viewer");
101 pykit::PythonPublisher publisher;
102 qt_drt_overwritePluginDirectories();
104 QString url (settings.value("home").toString());
105 if (arguments.size()>1)
106 url = arguments.at(1);
108 if (settings.value("debug").toBool())
109 QWebSettings::globalSettings()->setAttribute(
110 QWebSettings::DeveloperExtrasEnabled, true);
111 pykit::MainWindow window (QUrl(url), &publisher);
112 window.setWindowTitle(app.applicationName());
113 if (!iconPath.isEmpty())
114 window.setWindowIcon(QIcon(iconPath));
115 window.setWindowIconText(window.windowTitle());
117 window.setMinimumSize(parseSize(settings.value("minsize").toString()));
118 window.resize(parseSize(settings.value("size").toString()));
122 splash->finish(&window);
126 catch (std::exception const & ex) {
127 std::cerr << "Exception:\n" << ex.what() << "\n";
128 showPlatformError(ex.what());
132 std::cerr << "Exception: <undefined>\n";
133 showPlatformError("undefined error condition");
138 ///////////////////////////////cc.e////////////////////////////////////////
140 //#include "main.mpp"
146 // comment-column: 40
147 // c-file-style: "j32"
148 // indent-tabs-mode: nil
149 // ispell-local-dictionary: "american"
150 // compile-command: "make"