initial release
[pykit.git] / main.cc
1 // $Id$
2 //
3 // Copyright (C) 2010
4 //     Stefan Bund <info@j32.de>
5
6 /** \file
7     \brief main non-inline non-template implementation */
8
9 //#include "main.hh"
10 //#include "main.ih"
11
12 // Custom includes
13 #include <stdlib.h>
14 #include <iostream>
15 #include <QApplication>
16 #include <QSplashScreen>
17 #include <QSettings>
18 #include <boost/python.hpp>
19 #include <boost/scoped_ptr.hpp>
20 #include "MainWindow.hh"
21 #include "PythonPublisher.hh"
22
23 //#include "main.mpp"
24 #define prefix_
25 ///////////////////////////////cc.p////////////////////////////////////////
26
27 int main(int argc, char *argv[])
28 {
29     try {
30         QApplication app (argc, argv);
31
32         QSettings settings ("pykit.ini", QSettings::IniFormat);
33         QStringList arguments (app.arguments());
34         settings.beginGroup("AppData");
35
36         app.setApplicationName(settings.value("name").toString());
37         app.setApplicationVersion(settings.value("version").toString());
38         app.setOrganizationDomain(settings.value("organization").toString());
39         app.setOrganizationName(settings.value("organization").toString());
40
41         QString splashPath (settings.value("splash").toString());
42         boost::scoped_ptr<QSplashScreen> splash;
43         if (!splashPath.isEmpty()) {
44             QPixmap splashPixmap (settings.value("splash").toString());
45             splash.reset(new QSplashScreen (splashPixmap));
46             splash->show();
47         }
48
49         QString iconPath (settings.value("icon").toString());
50
51         settings.endGroup();
52         settings.beginGroup("Viewer");
53
54         pykit::PythonPublisher publisher (settings.value("init").toString().toStdString());
55
56         QString url (settings.value("home").toString());
57         if (arguments.size()>1)
58             url = arguments.at(1);
59         pykit::MainWindow window (QUrl(url), &publisher);
60         window.setWindowTitle(app.applicationName());
61         if (!iconPath.isEmpty())
62             window.setWindowIcon(QIcon(iconPath));
63         window.setWindowIconText(window.windowTitle());
64
65         window.show();
66         if (splash)
67             splash->finish(&window);
68
69         return app.exec();
70     }
71     catch (boost::python::error_already_set & ex) {
72         PyErr_Print();
73         throw;
74     }
75     catch (std::exception & ex) {
76         std::cerr << "Exception:\n" << ex.what() << "\n";
77         throw;
78     }
79 }
80
81 ///////////////////////////////cc.e////////////////////////////////////////
82 #undef prefix_
83 //#include "main.mpp"
84
85 \f
86 // Local Variables:
87 // mode: c++
88 // fill-column: 100
89 // comment-column: 40
90 // c-file-style: "j32"
91 // indent-tabs-mode: nil
92 // ispell-local-dictionary: "american"
93 // compile-command: "scons -U"
94 // End: