annotate ui/main.cpp @ 777:ca149bad8195

(issue51) Set up autostart on installation.
author Andre Heinecke <andre.heinecke@intevation.de>
date Fri, 11 Jul 2014 18:31:09 +0200
parents 1e61903f61e2
children 8de162b91a22
rev   line source
404
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 365
diff changeset
1 /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 365
diff changeset
2 * Software engineering by Intevation GmbH
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 365
diff changeset
3 *
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 365
diff changeset
4 * This file is Free Software under the GNU GPL (v>=2)
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 365
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY!
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 365
diff changeset
6 * See LICENSE.txt for details.
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 365
diff changeset
7 */
0
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
8 #include "mainwindow.h"
612
2ea11a95aa4a Bail if the user is already running the application.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 499
diff changeset
9 #include "processhelp.h"
631
edf269b6e499 Add self test as first opertation on start
Andre Heinecke <andre.heinecke@intevation.de>
parents: 612
diff changeset
10 #include "logging.h"
634
80d1a80b3e8d Factor out selftest for better test and reviewability
Andre Heinecke <andre.heinecke@intevation.de>
parents: 633
diff changeset
11 #include "selftest.h"
0
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
12
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
13 #include <QApplication>
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
14 #include <QSystemTrayIcon>
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
15 #include <QtPlugin>
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
16 #include <QMessageBox>
17
c12825a651ed Read out content-length and use this to skip existing files
Andre Heinecke <aheinecke@intevation.de>
parents: 16
diff changeset
17 #include <QSettings>
423
3d1e9df24803 Add translation loading
Andre Heinecke <aheinecke@intevation.de>
parents: 409
diff changeset
18 #include <QDebug>
3d1e9df24803 Add translation loading
Andre Heinecke <aheinecke@intevation.de>
parents: 409
diff changeset
19 #include <QTranslator>
0
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
20
672
376978e9cc61 Add debug output about style
Andre Heinecke <andre.heinecke@intevation.de>
parents: 634
diff changeset
21 #include <QStyleFactory>
376978e9cc61 Add debug output about style
Andre Heinecke <andre.heinecke@intevation.de>
parents: 634
diff changeset
22
16
225a5ec20dad Use QSettings and manage downloader from mainwindow.
Andre Heinecke <aheinecke@intevation.de>
parents: 0
diff changeset
23 #ifndef VERSION
225a5ec20dad Use QSettings and manage downloader from mainwindow.
Andre Heinecke <aheinecke@intevation.de>
parents: 0
diff changeset
24 #define VERSION "0.0.1"
225a5ec20dad Use QSettings and manage downloader from mainwindow.
Andre Heinecke <aheinecke@intevation.de>
parents: 0
diff changeset
25 #endif
225a5ec20dad Use QSettings and manage downloader from mainwindow.
Andre Heinecke <aheinecke@intevation.de>
parents: 0
diff changeset
26
225a5ec20dad Use QSettings and manage downloader from mainwindow.
Andre Heinecke <aheinecke@intevation.de>
parents: 0
diff changeset
27 #ifndef APPNAME
407
af53c40e74b1 Rename m13ui to TrustBridge
Andre Heinecke <aheinecke@intevation.de>
parents: 404
diff changeset
28 #define APPNAME "TrustBridge"
16
225a5ec20dad Use QSettings and manage downloader from mainwindow.
Andre Heinecke <aheinecke@intevation.de>
parents: 0
diff changeset
29 #endif
225a5ec20dad Use QSettings and manage downloader from mainwindow.
Andre Heinecke <aheinecke@intevation.de>
parents: 0
diff changeset
30
225a5ec20dad Use QSettings and manage downloader from mainwindow.
Andre Heinecke <aheinecke@intevation.de>
parents: 0
diff changeset
31 #ifndef ORGANIZATION
409
09bb19e5e369 Remove m13 mentions and change test certificate to intevation.de
Andre Heinecke <aheinecke@intevation.de>
parents: 407
diff changeset
32 #define ORGANIZATION "BSI"
16
225a5ec20dad Use QSettings and manage downloader from mainwindow.
Andre Heinecke <aheinecke@intevation.de>
parents: 0
diff changeset
33 #endif
0
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
34
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
35 #ifdef Q_OS_WIN
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
36 Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
37 #else
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
38 Q_IMPORT_PLUGIN(QXcbIntegrationPlugin)
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
39 #endif
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
40
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
41 int main(int argc, char **argv)
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
42 {
631
edf269b6e499 Add self test as first opertation on start
Andre Heinecke <andre.heinecke@intevation.de>
parents: 612
diff changeset
43 /* First verify integrity even before calling QApplication*/
634
80d1a80b3e8d Factor out selftest for better test and reviewability
Andre Heinecke <andre.heinecke@intevation.de>
parents: 633
diff changeset
44 if (!selftest()) {
631
edf269b6e499 Add self test as first opertation on start
Andre Heinecke <andre.heinecke@intevation.de>
parents: 612
diff changeset
45 syslog_error_printf ("Integrity check failed.");
edf269b6e499 Add self test as first opertation on start
Andre Heinecke <andre.heinecke@intevation.de>
parents: 612
diff changeset
46 #ifdef RELEASE_BUILD
edf269b6e499 Add self test as first opertation on start
Andre Heinecke <andre.heinecke@intevation.de>
parents: 612
diff changeset
47 return -1;
edf269b6e499 Add self test as first opertation on start
Andre Heinecke <andre.heinecke@intevation.de>
parents: 612
diff changeset
48 #endif
634
80d1a80b3e8d Factor out selftest for better test and reviewability
Andre Heinecke <andre.heinecke@intevation.de>
parents: 633
diff changeset
49 }
631
edf269b6e499 Add self test as first opertation on start
Andre Heinecke <andre.heinecke@intevation.de>
parents: 612
diff changeset
50
0
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
51 QApplication app (argc, argv);
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
52
482
0f4331ed4e83 Close the application if started in tray mode and autstart is not set.
Raimund Renkert <rrenkert@intevation.de>
parents: 423
diff changeset
53 QApplication::setQuitOnLastWindowClosed(false);
0f4331ed4e83 Close the application if started in tray mode and autstart is not set.
Raimund Renkert <rrenkert@intevation.de>
parents: 423
diff changeset
54 QApplication::setOrganizationName(QString::fromLatin1(ORGANIZATION));
0f4331ed4e83 Close the application if started in tray mode and autstart is not set.
Raimund Renkert <rrenkert@intevation.de>
parents: 423
diff changeset
55 QApplication::setApplicationName(QString::fromLatin1(APPNAME));
0f4331ed4e83 Close the application if started in tray mode and autstart is not set.
Raimund Renkert <rrenkert@intevation.de>
parents: 423
diff changeset
56 QApplication::setApplicationVersion(QString::fromLatin1(VERSION));
0f4331ed4e83 Close the application if started in tray mode and autstart is not set.
Raimund Renkert <rrenkert@intevation.de>
parents: 423
diff changeset
57 QSettings::setDefaultFormat(QSettings::IniFormat);
0f4331ed4e83 Close the application if started in tray mode and autstart is not set.
Raimund Renkert <rrenkert@intevation.de>
parents: 423
diff changeset
58
672
376978e9cc61 Add debug output about style
Andre Heinecke <andre.heinecke@intevation.de>
parents: 634
diff changeset
59 qDebug() << "Application style is: " << app.style()->metaObject()->className();
376978e9cc61 Add debug output about style
Andre Heinecke <andre.heinecke@intevation.de>
parents: 634
diff changeset
60 qDebug() << "Available styles: " << QStyleFactory::keys().join(", ");
376978e9cc61 Add debug output about style
Andre Heinecke <andre.heinecke@intevation.de>
parents: 634
diff changeset
61
154
3349c9596043 Added commandline arguemnt '--tray' to hide or show the mainwindow.
Raimund Renkert <rrenkert@intevation.de>
parents: 73
diff changeset
62 QStringList arguments = QApplication::arguments();
3349c9596043 Added commandline arguemnt '--tray' to hide or show the mainwindow.
Raimund Renkert <rrenkert@intevation.de>
parents: 73
diff changeset
63 bool trayMode = arguments.contains("--tray");
3349c9596043 Added commandline arguemnt '--tray' to hide or show the mainwindow.
Raimund Renkert <rrenkert@intevation.de>
parents: 73
diff changeset
64
482
0f4331ed4e83 Close the application if started in tray mode and autstart is not set.
Raimund Renkert <rrenkert@intevation.de>
parents: 423
diff changeset
65 QSettings settings;
0f4331ed4e83 Close the application if started in tray mode and autstart is not set.
Raimund Renkert <rrenkert@intevation.de>
parents: 423
diff changeset
66 settings.beginGroup("settings");
499
077b4342d69b Default autostart to true and change setting to bool
Andre Heinecke <aheinecke@intevation.de>
parents: 487
diff changeset
67 bool autoStart = settings.value("autostart", true).toBool();
482
0f4331ed4e83 Close the application if started in tray mode and autstart is not set.
Raimund Renkert <rrenkert@intevation.de>
parents: 423
diff changeset
68 settings.endGroup();
0f4331ed4e83 Close the application if started in tray mode and autstart is not set.
Raimund Renkert <rrenkert@intevation.de>
parents: 423
diff changeset
69
499
077b4342d69b Default autostart to true and change setting to bool
Andre Heinecke <aheinecke@intevation.de>
parents: 487
diff changeset
70 if (trayMode && !autoStart) {
482
0f4331ed4e83 Close the application if started in tray mode and autstart is not set.
Raimund Renkert <rrenkert@intevation.de>
parents: 423
diff changeset
71 return 0;
0f4331ed4e83 Close the application if started in tray mode and autstart is not set.
Raimund Renkert <rrenkert@intevation.de>
parents: 423
diff changeset
72 }
0f4331ed4e83 Close the application if started in tray mode and autstart is not set.
Raimund Renkert <rrenkert@intevation.de>
parents: 423
diff changeset
73
612
2ea11a95aa4a Bail if the user is already running the application.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 499
diff changeset
74 if (ProcessHelp::otherProcessesExist(APPNAME)) {
2ea11a95aa4a Bail if the user is already running the application.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 499
diff changeset
75 qDebug() << "Another " << APPNAME << " process is already running. Exiting.";
2ea11a95aa4a Bail if the user is already running the application.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 499
diff changeset
76 ProcessHelp::activateWindowForProcess(APPNAME);
2ea11a95aa4a Bail if the user is already running the application.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 499
diff changeset
77 return 0;
2ea11a95aa4a Bail if the user is already running the application.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 499
diff changeset
78 }
2ea11a95aa4a Bail if the user is already running the application.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 499
diff changeset
79
423
3d1e9df24803 Add translation loading
Andre Heinecke <aheinecke@intevation.de>
parents: 409
diff changeset
80 QTranslator translator;
3d1e9df24803 Add translation loading
Andre Heinecke <aheinecke@intevation.de>
parents: 409
diff changeset
81 if (QLocale::system().name() == "C") {
3d1e9df24803 Add translation loading
Andre Heinecke <aheinecke@intevation.de>
parents: 409
diff changeset
82 /* Useful for testing / development as the primary target is german */
3d1e9df24803 Add translation loading
Andre Heinecke <aheinecke@intevation.de>
parents: 409
diff changeset
83 translator.load(":/l10n/trustbridge_de_DE");
3d1e9df24803 Add translation loading
Andre Heinecke <aheinecke@intevation.de>
parents: 409
diff changeset
84 } else {
3d1e9df24803 Add translation loading
Andre Heinecke <aheinecke@intevation.de>
parents: 409
diff changeset
85 translator.load(":/l10n/trustbridge_" + QLocale::system().name());
3d1e9df24803 Add translation loading
Andre Heinecke <aheinecke@intevation.de>
parents: 409
diff changeset
86 qDebug() << "Loading translations for: " << "trustbridge_" +
3d1e9df24803 Add translation loading
Andre Heinecke <aheinecke@intevation.de>
parents: 409
diff changeset
87 QLocale::system().name();
3d1e9df24803 Add translation loading
Andre Heinecke <aheinecke@intevation.de>
parents: 409
diff changeset
88 }
3d1e9df24803 Add translation loading
Andre Heinecke <aheinecke@intevation.de>
parents: 409
diff changeset
89 app.installTranslator(&translator);
3d1e9df24803 Add translation loading
Andre Heinecke <aheinecke@intevation.de>
parents: 409
diff changeset
90
712
1e61903f61e2 Only exit when no tray is available and we are in tray mode.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 672
diff changeset
91 if ((!QSystemTrayIcon::isSystemTrayAvailable() ||
1e61903f61e2 Only exit when no tray is available and we are in tray mode.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 672
diff changeset
92 !QSystemTrayIcon::supportsMessages()) && trayMode) {
16
225a5ec20dad Use QSettings and manage downloader from mainwindow.
Andre Heinecke <aheinecke@intevation.de>
parents: 0
diff changeset
93 QMessageBox::critical(0, QString::fromLatin1(APPNAME),
0
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
94 QObject::tr("Couldn't detect any system tray "
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
95 "on this system. This software can only "
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
96 "be used in a desktop environment."));
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
97 return 1;
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
98 }
16
225a5ec20dad Use QSettings and manage downloader from mainwindow.
Andre Heinecke <aheinecke@intevation.de>
parents: 0
diff changeset
99
365
75f7288ad67b Switch from listupdatedialog to installwrapper. Minor UI improvements
Andre Heinecke <aheinecke@intevation.de>
parents: 154
diff changeset
100 MainWindow mainWin(trayMode);
0
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
101
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
102 return app.exec();
cb0cde2c5eb9 Initial commit. Basically a Hello World with a Tray Icon.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
103 }

http://wald.intevation.org/projects/trustbridge/