QGCApplication.h 7.91 KB
Newer Older
pixhawk's avatar
pixhawk committed
1
/*=====================================================================
Don Gagne's avatar
Don Gagne committed
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
 
 QGroundControl Open Source Ground Control Station
 
 (c) 2009 - 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 
 This file is part of the QGROUNDCONTROL project
 
 QGROUNDCONTROL is free software: you can redistribute it and/or modify
 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.
 
 QGROUNDCONTROL is distributed in the hope that it will be useful,
 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
 along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
 
 ======================================================================*/
pixhawk's avatar
pixhawk committed
23 24 25

/**
 * @file
26
 *   @brief Definition of main class
pixhawk's avatar
pixhawk committed
27 28 29 30 31
 *
 *   @author Lorenz Meier <mavteam@student.ethz.ch>
 *
 */

Don Gagne's avatar
Don Gagne committed
32 33
#ifndef QGCAPPLICATION_H
#define QGCAPPLICATION_H
pixhawk's avatar
pixhawk committed
34 35

#include <QApplication>
36
#include <QTimer>
pixhawk's avatar
pixhawk committed
37

Don Gagne's avatar
Don Gagne committed
38
#include "LinkConfiguration.h"
39 40 41 42 43 44 45 46 47 48 49
#include "LinkManager.h"
#include "MAVLinkProtocol.h"
#include "FlightMapSettings.h"
#include "HomePositionManager.h"
#include "FirmwarePluginManager.h"
#include "MultiVehicleManager.h"
#include "JoystickManager.h"
#include "GAudioOutput.h"
#include "AutoPilotPluginManager.h"
#include "UASMessageHandler.h"
#include "FactSystem.h"
Don Gagne's avatar
Don Gagne committed
50

51
#ifdef QGC_RTLAB_ENABLED
52 53
#include "OpalLink.h"
#endif
54

55 56 57
// Work around circular header includes
class QGCSingleton;
class MainWindow;
58
class QGCToolbox;
Don Gagne's avatar
Don Gagne committed
59

pixhawk's avatar
pixhawk committed
60 61 62 63 64 65 66
/**
 * @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
67
class QGCApplication : public QApplication
pixhawk's avatar
pixhawk committed
68
{
69
    Q_OBJECT
Don Gagne's avatar
Don Gagne committed
70
    
pixhawk's avatar
pixhawk committed
71
public:
Don Gagne's avatar
Don Gagne committed
72
    QGCApplication(int &argc, char* argv[], bool unitTesting);
Don Gagne's avatar
Don Gagne committed
73
    ~QGCApplication();
74
    
Don Gagne's avatar
Don Gagne committed
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
    /// @brief Sets the persistent flag to delete all settings the next time QGroundControl is started.
    void deleteAllSettingsNextBoot(void);
    
    /// @brief Clears the persistent flag to delete all settings the next time QGroundControl is started.
    void clearDeleteAllSettingsNextBoot(void);
    
    /// @brief Returns the location of user visible saved file associated with QGroundControl
    QString savedFilesLocation(void);
    
    /// @brief Sets the location of user visible saved file associated with QGroundControl
    void setSavedFilesLocation(QString& location);
    
    /// @brief Location to save and load parameter files from.
    QString savedParameterFilesLocation(void);
    
    /// @brief Location to save and load mavlink log files from
    QString mavlinkLogFilesLocation(void);
    
    /// @brief Validates that the specified location will work for the saved files location.
    bool validatePossibleSavedFilesLocation(QString& location);
    
    /// @brief Returns true is all mavlink connections should be logged
    bool promptFlightDataSave(void);
    
    /// @brief Sets the flag to log all mavlink connections
    void setPromptFlightDataSave(bool promptForSave);
101

Don Gagne's avatar
Don Gagne committed
102 103 104
    /// @brief Returns truee if unit test are being run
    bool runningUnitTests(void) { return _runningUnitTests; }
    
105 106 107 108 109 110
    /// @return true: dark ui style, false: light ui style
    bool styleIsDark(void) { return _styleIsDark; }
    
    /// Set the current UI style
    void setStyle(bool styleIsDark);
    
Don Gagne's avatar
Don Gagne committed
111
    /// Used to report a missing Parameter. Warning will be displayed to user. Method may be called
112
    /// multiple times.
Don Gagne's avatar
Don Gagne committed
113
    void reportMissingParameter(int componentId, const QString& name);
114

Don Gagne's avatar
Don Gagne committed
115 116
    /// Show a non-modal message to the user
    void showToolBarMessage(const QString& message);
117 118 119

	/// @return true: Fake ui into showing mobile interface
	bool fakeMobile(void) { return _fakeMobile; }
Don Gagne's avatar
Don Gagne committed
120
    
121 122 123
#ifdef QT_DEBUG
    bool testHighDPI(void) { return _testHighDPI; }
#endif
124 125 126

    // Still working on getting rid of this and using dependency injection instead for everything
    QGCToolbox* toolbox(void) { return _toolbox; }
127
    
128 129 130 131 132 133 134 135 136 137 138 139
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);
    
    /// You can connect to this slot to show a warning message box from a different thread.
    void warningMessageBoxOnMainThread(const QString& title, const QString& msg);
    
    /// You can connect to this slot to show a critical message box from a different thread.
    void criticalMessageBoxOnMainThread(const QString& title, const QString& msg);
    
    /// Save the specified Flight Data Log
    void saveTempFlightDataLogOnMainThread(QString tempLogfile);
140

141
signals:
142 143 144 145
    /// Signals that the style has changed
    ///     @param darkStyle true: dark style, false: light style
    void styleChanged(bool darkStyle);
    
146 147 148 149
    /// This is connected to MAVLinkProtocol::checkForLostLogFiles. We signal this to ourselves to call the slot
    /// on the MAVLinkProtocol thread;
    void checkForLostLogFiles(void);
    
150
public:
151 152
    // Although public, these methods are internal and should only be called by UnitTest code
    
153 154 155 156 157 158 159
    /// @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);
Don Gagne's avatar
Don Gagne committed
160
    
161 162 163
    /// @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
164
    
165
    static QGCApplication*  _app;   ///< Our own singleton. Should be reference directly by qgcApp
Don Gagne's avatar
Don Gagne committed
166
    
Don Gagne's avatar
Don Gagne committed
167
private slots:
Don Gagne's avatar
Don Gagne committed
168
    void _missingParamsDisplay(void);
Don Gagne's avatar
Don Gagne committed
169
    
pixhawk's avatar
pixhawk committed
170
private:
171
    void _loadCurrentStyle(void);
Don Gagne's avatar
Don Gagne committed
172 173 174 175 176
    
    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
    static const char* _savedFilesLocationKey;          ///< Settings key for user visible saved files location
    static const char* _promptFlightDataSave;           ///< Settings key to prompt for saving Flight Data Log for all flights
177
    static const char* _styleKey;                       ///< Settings key for UI style
Don Gagne's avatar
Don Gagne committed
178 179 180 181
    
    static const char* _defaultSavedFileDirectoryName;      ///< Default name for user visible save file directory
    static const char* _savedFileMavlinkLogDirectoryName;   ///< Name of mavlink log subdirectory
    static const char* _savedFileParameterDirectoryName;    ///< Name of parameter subdirectory
182

Don Gagne's avatar
Don Gagne committed
183
    bool _runningUnitTests; ///< true: running unit tests, false: normal app
Don Gagne's avatar
Don Gagne committed
184
    
185 186 187 188
    static const char*  _darkStyleFile;
    static const char*  _lightStyleFile;
    bool                _styleIsDark;      ///< true: dark style, false: light style
    
Don Gagne's avatar
Don Gagne committed
189 190 191
    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
192

193
	bool				_fakeMobile;	///< true: Fake ui into displaying mobile interface
194 195 196 197
    
#ifdef QT_DEBUG
    bool _testHighDPI;  ///< true: double fonts sizes for simulating high dpi devices
#endif
198

199 200
    QGCToolbox* _toolbox;

Don Gagne's avatar
Don Gagne committed
201 202
    /// Unit Test have access to creating and destroying singletons
    friend class UnitTest;
pixhawk's avatar
pixhawk committed
203 204
};

Don Gagne's avatar
Don Gagne committed
205 206 207 208
/// @brief Returns the QGCApplication object singleton.
QGCApplication* qgcApp(void);

#endif