view ui/main.cpp @ 634:80d1a80b3e8d

Factor out selftest for better test and reviewability
author Andre Heinecke <andre.heinecke@intevation.de>
date Mon, 23 Jun 2014 16:43:07 +0200
parents 6c090638b2b4
children 376978e9cc61
line wrap: on
line source
/* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik
 * Software engineering by Intevation GmbH
 *
 * This file is Free Software under the GNU GPL (v>=2)
 * and comes with ABSOLUTELY NO WARRANTY!
 * See LICENSE.txt for details.
 */
#include "mainwindow.h"
#include "processhelp.h"
#include "logging.h"
#include "selftest.h"

#include <QApplication>
#include <QSystemTrayIcon>
#include <QtPlugin>
#include <QMessageBox>
#include <QSettings>
#include <QDebug>
#include <QTranslator>

#ifndef VERSION
#define VERSION "0.0.1"
#endif

#ifndef APPNAME
#define APPNAME "TrustBridge"
#endif

#ifndef ORGANIZATION
#define ORGANIZATION "BSI"
#endif

#ifdef Q_OS_WIN
 Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)
#else
 Q_IMPORT_PLUGIN(QXcbIntegrationPlugin)
#endif

int main(int argc, char **argv)
{
    /* First verify integrity even before calling QApplication*/
    if (!selftest()) {
        syslog_error_printf ("Integrity check failed.");
#ifdef RELEASE_BUILD
        return -1;
#endif
    }

    QApplication app (argc, argv);

    QApplication::setQuitOnLastWindowClosed(false);
    QApplication::setOrganizationName(QString::fromLatin1(ORGANIZATION));
    QApplication::setApplicationName(QString::fromLatin1(APPNAME));
    QApplication::setApplicationVersion(QString::fromLatin1(VERSION));
    QSettings::setDefaultFormat(QSettings::IniFormat);

    QStringList arguments = QApplication::arguments();
    bool trayMode = arguments.contains("--tray");

    QSettings settings;
    settings.beginGroup("settings");
    bool autoStart = settings.value("autostart", true).toBool();
    settings.endGroup();

    if (trayMode && !autoStart) {
        return 0;
    }

    if (ProcessHelp::otherProcessesExist(APPNAME)) {
        qDebug() << "Another " << APPNAME << " process is already running. Exiting.";
        ProcessHelp::activateWindowForProcess(APPNAME);
        return 0;
    }

    QTranslator translator;
    if (QLocale::system().name() == "C") {
        /* Useful for testing / development as the primary target is german */
        translator.load(":/l10n/trustbridge_de_DE");
    } else {
        translator.load(":/l10n/trustbridge_" + QLocale::system().name());
        qDebug() << "Loading translations for: " << "trustbridge_" +
            QLocale::system().name();
    }
    app.installTranslator(&translator);

    if (!QSystemTrayIcon::isSystemTrayAvailable() ||
            !QSystemTrayIcon::supportsMessages()) {
        QMessageBox::critical(0, QString::fromLatin1(APPNAME),
                              QObject::tr("Couldn't detect any system tray "
                                          "on this system. This software can only "
                                          "be used in a desktop environment."));
        return 1;
    }

    MainWindow mainWin(trayMode);

    return app.exec();
}

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