QGCApplication.h 6.7 KB
Newer Older
1
2
3
4
5
6
7
8
/****************************************************************************
 *
 *   (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/
dogmaphobic's avatar
dogmaphobic committed
9

pixhawk's avatar
pixhawk committed
10
11
12

/**
 * @file
pixhawk's avatar
pixhawk committed
13
 *   @brief Definition of main class
pixhawk's avatar
pixhawk committed
14
15
16
17
18
 *
 *   @author Lorenz Meier <mavteam@student.ethz.ch>
 *
 */

Don Gagne's avatar
Don Gagne committed
19
20
#ifndef QGCAPPLICATION_H
#define QGCAPPLICATION_H
pixhawk's avatar
pixhawk committed
21
22

#include <QApplication>
23
#include <QTimer>
Don Gagne's avatar
Don Gagne committed
24
#include <QQmlApplicationEngine>
pixhawk's avatar
pixhawk committed
25

Don Gagne's avatar
Don Gagne committed
26
#include "LinkConfiguration.h"
27
28
29
30
31
32
33
34
35
#include "LinkManager.h"
#include "MAVLinkProtocol.h"
#include "FlightMapSettings.h"
#include "FirmwarePluginManager.h"
#include "MultiVehicleManager.h"
#include "JoystickManager.h"
#include "GAudioOutput.h"
#include "UASMessageHandler.h"
#include "FactSystem.h"
Don Gagne's avatar
Don Gagne committed
36

37
#ifdef QGC_RTLAB_ENABLED
38
39
#include "OpalLink.h"
#endif
Don Gagne's avatar
Don Gagne committed
40

Don Gagne's avatar
Don Gagne committed
41
42
43
// Work around circular header includes
class QGCSingleton;
class MainWindow;
44
class QGCToolbox;
Don Gagne's avatar
Don Gagne committed
45

pixhawk's avatar
pixhawk committed
46
47
48
49
50
51
52
/**
 * @brief The main application and management class.
 *
 * This class is started by the main method and provides
 * the central management unit of the groundstation application.
 *
 **/
Don Gagne's avatar
Don Gagne committed
53
54
55
56
57
58
class QGCApplication : public
#ifdef __mobile__
    QGuiApplication // Native Qml based application
#else
    QApplication    // QtWidget based application
#endif
pixhawk's avatar
pixhawk committed
59
{
60
    Q_OBJECT
dogmaphobic's avatar
dogmaphobic committed
61

pixhawk's avatar
pixhawk committed
62
public:
Don Gagne's avatar
Don Gagne committed
63
    QGCApplication(int &argc, char* argv[], bool unitTesting);
Don Gagne's avatar
Don Gagne committed
64
    ~QGCApplication();
dogmaphobic's avatar
dogmaphobic committed
65

Don Gagne's avatar
Don Gagne committed
66
67
    static const char* parameterFileExtension;
    static const char* missionFileExtension;
Don Gagne's avatar
Don Gagne committed
68
    static const char* fenceFileExtension;
69
    static const char* rallyPointFileExtension;
Don Gagne's avatar
Don Gagne committed
70
71
    static const char* telemetryFileExtension;

Don Gagne's avatar
Don Gagne committed
72
73
    /// @brief Sets the persistent flag to delete all settings the next time QGroundControl is started.
    void deleteAllSettingsNextBoot(void);
dogmaphobic's avatar
dogmaphobic committed
74

Don Gagne's avatar
Don Gagne committed
75
76
    /// @brief Clears the persistent flag to delete all settings the next time QGroundControl is started.
    void clearDeleteAllSettingsNextBoot(void);
dogmaphobic's avatar
dogmaphobic committed
77

Don Gagne's avatar
Don Gagne committed
78
79
    /// @brief Returns truee if unit test are being run
    bool runningUnitTests(void) { return _runningUnitTests; }
dogmaphobic's avatar
dogmaphobic committed
80

Don Gagne's avatar
Don Gagne committed
81
    /// Used to report a missing Parameter. Warning will be displayed to user. Method may be called
82
    /// multiple times.
Don Gagne's avatar
Don Gagne committed
83
    void reportMissingParameter(int componentId, const QString& name);
84

Don Gagne's avatar
Don Gagne committed
85
    /// Show a non-modal message to the user
86
    void showMessage(const QString& message);
Don Gagne's avatar
Don Gagne committed
87

dogmaphobic's avatar
dogmaphobic committed
88
89
90
    /// @return true: Fake ui into showing mobile interface
    bool fakeMobile(void) { return _fakeMobile; }

91
92
93
#ifdef QT_DEBUG
    bool testHighDPI(void) { return _testHighDPI; }
#endif
94
95
96

    // Still working on getting rid of this and using dependency injection instead for everything
    QGCToolbox* toolbox(void) { return _toolbox; }
dogmaphobic's avatar
dogmaphobic committed
97
98
99
100

    /// Do we have Bluetooth Support?
    bool isBluetoothAvailable() { return _bluetoothAvailable; }

Don Gagne's avatar
Don Gagne committed
101
102
    QGeoCoordinate lastKnownHomePosition(void) { return _lastKnownHomePosition; }
    void setLastKnownHomePosition(QGeoCoordinate& lastKnownHomePosition);
Don Gagne's avatar
Don Gagne committed
103

104
105
106
public slots:
    /// You can connect to this slot to show an information message box from a different thread.
    void informationMessageBoxOnMainThread(const QString& title, const QString& msg);
dogmaphobic's avatar
dogmaphobic committed
107

108
109
    /// You can connect to this slot to show a warning message box from a different thread.
    void warningMessageBoxOnMainThread(const QString& title, const QString& msg);
dogmaphobic's avatar
dogmaphobic committed
110

111
112
    /// You can connect to this slot to show a critical message box from a different thread.
    void criticalMessageBoxOnMainThread(const QString& title, const QString& msg);
dogmaphobic's avatar
dogmaphobic committed
113

Don Gagne's avatar
Don Gagne committed
114
115
    void showSetupView(void);

116
    void qmlAttemptWindowClose(void);
Don Gagne's avatar
Don Gagne committed
117

118
#ifndef __mobile__
119
120
    /// Save the specified Flight Data Log
    void saveTempFlightDataLogOnMainThread(QString tempLogfile);
121
#endif
122

123
124
125
126
signals:
    /// This is connected to MAVLinkProtocol::checkForLostLogFiles. We signal this to ourselves to call the slot
    /// on the MAVLinkProtocol thread;
    void checkForLostLogFiles(void);
dogmaphobic's avatar
dogmaphobic committed
127

Don Gagne's avatar
Don Gagne committed
128
public:
129
    // Although public, these methods are internal and should only be called by UnitTest code
dogmaphobic's avatar
dogmaphobic committed
130

Don Gagne's avatar
Don Gagne committed
131
132
133
134
135
136
137
    /// @brief Perform initialize which is common to both normal application running and unit tests.
    ///         Although public should only be called by main.
    void _initCommon(void);

    /// @brief Intialize the application for normal application boot. Or in other words we are not going to run
    ///         unit tests. Although public should only be called by main.
    bool _initForNormalAppBoot(void);
dogmaphobic's avatar
dogmaphobic committed
138

Don Gagne's avatar
Don Gagne committed
139
140
141
    /// @brief Intialize the application for normal application boot. Or in other words we are not going to run
    ///         unit tests. Although public should only be called by main.
    bool _initForUnitTests(void);
Don Gagne's avatar
Don Gagne committed
142

143
144
    void _loadCurrentStyleSheet(void);

Don Gagne's avatar
Don Gagne committed
145
    static QGCApplication*  _app;   ///< Our own singleton. Should be reference directly by qgcApp
dogmaphobic's avatar
dogmaphobic committed
146

Don Gagne's avatar
Don Gagne committed
147
148
149
150
151
152
public:
    // Although public, these methods are internal and should only be called by UnitTest code

    /// Shutdown the application object
    void _shutdown(void);

Don Gagne's avatar
Don Gagne committed
153
private slots:
Don Gagne's avatar
Don Gagne committed
154
    void _missingParamsDisplay(void);
dogmaphobic's avatar
dogmaphobic committed
155

pixhawk's avatar
pixhawk committed
156
private:
157
    QObject* _rootQmlObject(void);
Don Gagne's avatar
Don Gagne committed
158
159
160
161

#ifdef __mobile__
    QQmlApplicationEngine* _qmlAppEngine;
#endif
dogmaphobic's avatar
dogmaphobic committed
162

Don Gagne's avatar
Don Gagne committed
163
    bool _runningUnitTests; ///< true: running unit tests, false: normal app
dogmaphobic's avatar
dogmaphobic committed
164

165
166
    static const char*  _darkStyleFile;
    static const char*  _lightStyleFile;
167
168
169
170
171
    static const int    _missingParamsDelayedDisplayTimerTimeout = 1000;    ///< Timeout to wait for next missing fact to come in before display
    QTimer              _missingParamsDelayedDisplayTimer;                  ///< Timer use to delay missing fact display
    QStringList         _missingParams;                                     ///< List of missing facts to be displayed
    bool				_fakeMobile;                                        ///< true: Fake ui into displaying mobile interface
    bool                _settingsUpgraded;                                  ///< true: Settings format has been upgrade to new version
dogmaphobic's avatar
dogmaphobic committed
172

173
174
175
#ifdef QT_DEBUG
    bool _testHighDPI;  ///< true: double fonts sizes for simulating high dpi devices
#endif
176

177
178
    QGCToolbox* _toolbox;

dogmaphobic's avatar
dogmaphobic committed
179
180
    bool _bluetoothAvailable;

Don Gagne's avatar
Don Gagne committed
181
    QGeoCoordinate _lastKnownHomePosition;    ///< Map position when all other sources fail
Don Gagne's avatar
Don Gagne committed
182
183
184

    static const char* _settingsVersionKey;             ///< Settings key which hold settings version
    static const char* _deleteAllSettingsKey;           ///< If this settings key is set on boot, all settings will be deleted
Don Gagne's avatar
Don Gagne committed
185
186
187
    static const char* _lastKnownHomePositionLatKey;
    static const char* _lastKnownHomePositionLonKey;
    static const char* _lastKnownHomePositionAltKey;
Don Gagne's avatar
Don Gagne committed
188

Don Gagne's avatar
Don Gagne committed
189
190
    /// Unit Test have access to creating and destroying singletons
    friend class UnitTest;
Gus Grubba's avatar
Gus Grubba committed
191

pixhawk's avatar
pixhawk committed
192
193
};

Don Gagne's avatar
Don Gagne committed
194
195
196
197
/// @brief Returns the QGCApplication object singleton.
QGCApplication* qgcApp(void);

#endif