#include <QApplication>
#include <QSplashScreen>
#include <QSettings>
-#include <boost/python.hpp>
+#include <QDir>
+#include <QFileInfo>
+#include <QFontDatabase>
+#include <QWebSettings>
+#include <QMessageBox>
#include <boost/scoped_ptr.hpp>
#include "MainWindow.hh"
#include "PythonPublisher.hh"
#define prefix_
///////////////////////////////cc.p////////////////////////////////////////
+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");
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;
QString iconPath (settings.value("icon").toString());
settings.endGroup();
+
+ settings.beginGroup("Fonts");
+ QString loadFontDir (settings.value("loaddir").toString());
+ if (!loadFontDir.isEmpty()) {
+ QDir dir (loadFontDir);
+ if (dir.exists()) {
+ QFileInfoList files (dir.entryInfoList(QDir::Files));
+ for (QFileInfoList::iterator i (files.begin()), i_end (files.end());
+ i != i_end; ++i)
+ QFontDatabase::addApplicationFont(i->absoluteFilePath());
+ }
+ else
+ std::cerr << "WARNING: Font directory not found" << std::endl;
+ }
+ settings.endGroup();
+
settings.beginGroup("Viewer");
- pykit::PythonPublisher publisher (settings.value("init").toString().toStdString());
+ pykit::PythonPublisher publisher;
+ qt_drt_overwritePluginDirectories();
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 (boost::python::error_already_set & ex) {
- PyErr_Print();
- throw;
- }
- 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;
}
}
// c-file-style: "j32"
// indent-tabs-mode: nil
// ispell-local-dictionary: "american"
-// compile-command: "scons -U"
+// compile-command: "make"
// End: