add QWebInspector and debug config option
[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 <QDir>
19 #include <QFileInfo>
20 #include <QFontDatabase>
21 #include <QWebSettings>
22 #include <boost/scoped_ptr.hpp>
23 #include "MainWindow.hh"
24 #include "PythonPublisher.hh"
25
26 //#include "main.mpp"
27 #define prefix_
28 ///////////////////////////////cc.p////////////////////////////////////////
29
30 extern void qt_drt_overwritePluginDirectories();
31
32 namespace {
33     QSize parseSize(QString const & s)
34     {
35         QStringList coords (s.split(" "));
36         if (coords.size() != 2)
37             return QSize();
38         return QSize(coords[0].toInt(), coords[1].toInt());
39     }
40 }
41
42 int main(int argc, char *argv[])
43 {
44     try {
45         QApplication app (argc, argv);
46
47         QSettings settings ("pykit.ini", QSettings::IniFormat);
48         QStringList arguments (app.arguments());
49         settings.beginGroup("AppData");
50
51         app.setApplicationName(settings.value("name").toString());
52         app.setApplicationVersion(settings.value("version").toString());
53         app.setOrganizationDomain(settings.value("organization").toString());
54         app.setOrganizationName(settings.value("organization").toString());
55         char * pluginsPath (getenv("PYKIT_PLUGIN_PATH"));
56         if (pluginsPath)
57             app.setLibraryPaths(QString(pluginsPath).split(":"));
58
59         QString splashPath (settings.value("splash").toString());
60         boost::scoped_ptr<QSplashScreen> splash;
61         if (!splashPath.isEmpty()) {
62             QPixmap splashPixmap (settings.value("splash").toString());
63             splash.reset(new QSplashScreen (splashPixmap));
64             splash->show();
65         }
66
67         QString iconPath (settings.value("icon").toString());
68
69         settings.endGroup();
70
71         settings.beginGroup("Fonts");
72         QString loadFontDir (settings.value("loaddir").toString());
73         if (!loadFontDir.isEmpty()) {
74             QDir dir (loadFontDir);
75             if (dir.exists()) {
76                 QFileInfoList files (dir.entryInfoList(QDir::Files));
77                 for (QFileInfoList::iterator i (files.begin()), i_end (files.end());
78                      i != i_end; ++i)
79                     QFontDatabase::addApplicationFont(i->absoluteFilePath());
80             }
81             else
82                 std::cerr << "WARNING: Font directory not found" << std::endl;
83         }
84         settings.endGroup();
85
86         settings.beginGroup("Viewer");
87
88         pykit::PythonPublisher publisher;
89         qt_drt_overwritePluginDirectories();
90
91         QString url (settings.value("home").toString());
92         if (arguments.size()>1)
93             url = arguments.at(1);
94
95         if (settings.value("debug").toBool())
96             QWebSettings::globalSettings()->setAttribute(
97                 QWebSettings::DeveloperExtrasEnabled, true);
98         pykit::MainWindow window (QUrl(url), &publisher);
99         window.setWindowTitle(app.applicationName());
100         if (!iconPath.isEmpty())
101             window.setWindowIcon(QIcon(iconPath));
102         window.setWindowIconText(window.windowTitle());
103
104         window.setMinimumSize(parseSize(settings.value("minsize").toString()));
105         window.resize(parseSize(settings.value("size").toString()));
106
107         window.show();
108         if (splash)
109             splash->finish(&window);
110
111         return app.exec();
112     }
113     catch (std::exception & ex) {
114         std::cerr << "Exception:\n" << ex.what() << "\n";
115         throw;
116     }
117 }
118
119 ///////////////////////////////cc.e////////////////////////////////////////
120 #undef prefix_
121 //#include "main.mpp"
122
123 \f
124 // Local Variables:
125 // mode: c++
126 // fill-column: 100
127 // comment-column: 40
128 // c-file-style: "j32"
129 // indent-tabs-mode: nil
130 // ispell-local-dictionary: "american"
131 // compile-command: "make"
132 // End: