main.cc 2.83 KB
Newer Older
pixhawk's avatar
pixhawk committed
1
2
/*=====================================================================

pixhawk's avatar
pixhawk committed
3
QGroundControl Open Source Ground Control Station
pixhawk's avatar
pixhawk committed
4

5
(c) 2009 - 2011 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
pixhawk's avatar
pixhawk committed
6

pixhawk's avatar
pixhawk committed
7
This file is part of the QGROUNDCONTROL project
pixhawk's avatar
pixhawk committed
8

pixhawk's avatar
pixhawk committed
9
    QGROUNDCONTROL is free software: you can redistribute it and/or modify
pixhawk's avatar
pixhawk committed
10
11
12
13
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

pixhawk's avatar
pixhawk committed
14
    QGROUNDCONTROL is distributed in the hope that it will be useful,
pixhawk's avatar
pixhawk committed
15
16
17
18
19
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
pixhawk's avatar
pixhawk committed
20
    along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
pixhawk's avatar
pixhawk committed
21
22
23
24
25
26
27
28
29
30
31

======================================================================*/

/**
 * @file
 *   @brief Main executable
 *   @author Lorenz Meier <mavteam@student.ethz.ch>
 *
 */

#include <QtGui/QApplication>
lm's avatar
lm committed
32
#include "QGCCore.h"
pixhawk's avatar
pixhawk committed
33
34
#include "MainWindow.h"
#include "configuration.h"
35
#include "AutoTest.h"
unknown's avatar
unknown committed
36

37
/* SDL does ugly things to main() */
38
#ifdef main
39
#undef main
40
#endif
41

42
43
44
45
46
47
48
49
50
51
52
53
54
55
56

// Install a message handler so you do not need
// the MSFT debug tools installed to se
// qDebug(), qWarning(), qCritical and qAbort
#ifdef Q_OS_WIN
void msgHandler( QtMsgType type, const char* msg )
{
    const char symbols[] = { 'I', 'E', '!', 'X' };
    QString output = QString("[%1] %2").arg( symbols[type] ).arg( msg );
    std::cerr << output.toStdString() << std::endl;
    if( type == QtFatalMsg ) abort();
}

#endif

pixhawk's avatar
pixhawk committed
57
58
59
60
61
62
63
/**
 * @brief Starts the application
 *
 * @param argc Number of commandline arguments
 * @param argv Commandline arguments
 * @return exit code, 0 for normal exit and !=0 for error cases
 */
64

pixhawk's avatar
pixhawk committed
65
66
int main(int argc, char *argv[])
{
67
68
69
70
// install the message handler
#ifdef Q_OS_WIN
    qInstallMsgHandler( msgHandler );
#endif
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
    
#ifdef QT_DEBUG
    if (argc > 1 && QString(argv[1]).compare("--unittest", Qt::CaseInsensitive) == 0) {
        // Strip off extra command line args so QTest doesn't complain
        for (int i=1; i<argc-1; i++)
        {
            argv[i] = argv[i+1];
        }
        
        // Run the test
        int failures = AutoTest::run(argc-1, argv);
        if (failures == 0)
        {
            qDebug() << "ALL TESTS PASSED";
        }
        else
        {
            qDebug() << failures << " TESTS FAILED!";
        }
        return failures;
    }
#endif
93

94
95
96
97
98
99
100
101
102
103
104
105
106
107
    QGCCore* core = NULL;
    int val;
    bool firstStart = true;

    do {
        if (core) {
            delete core;
            firstStart = false;
        }
        core = new QGCCore(firstStart, argc, argv);
        val = core->exec();
    } while (core->getRestartRequested());

    return val;
pixhawk's avatar
pixhawk committed
108
}