QGCApplication.h 4.76 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
pixhawk's avatar
pixhawk committed
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
36

#include <QApplication>

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;
Don Gagne's avatar
Don Gagne committed
44

pixhawk's avatar
pixhawk committed
45
46
47
48
49
50
51
/**
 * @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
52
class QGCApplication : public QApplication
pixhawk's avatar
pixhawk committed
53
{
54
    Q_OBJECT
Don Gagne's avatar
Don Gagne committed
55
    
pixhawk's avatar
pixhawk committed
56
public:
Don Gagne's avatar
Don Gagne committed
57
    QGCApplication(int &argc, char* argv[], bool unitTesting);
Don Gagne's avatar
Don Gagne committed
58
    ~QGCApplication();
Don Gagne's avatar
Don Gagne committed
59
    
Don Gagne's avatar
Don Gagne committed
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
    /// @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);
Don Gagne's avatar
Don Gagne committed
86

Don Gagne's avatar
Don Gagne committed
87
88
89
    /// @brief Returns truee if unit test are being run
    bool runningUnitTests(void) { return _runningUnitTests; }
    
Don Gagne's avatar
Don Gagne committed
90
91
92
93
94
95
96
97
public:
    /// @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
98
    
Don Gagne's avatar
Don Gagne committed
99
100
101
    /// @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
102
    
Don Gagne's avatar
Don Gagne committed
103
    static QGCApplication*  _app;   ///< Our own singleton. Should be reference directly by qgcApp
Don Gagne's avatar
Don Gagne committed
104
    
pixhawk's avatar
pixhawk committed
105
private:
Don Gagne's avatar
Don Gagne committed
106
    void _createSingletons(void);
Don Gagne's avatar
Don Gagne committed
107
    void _destroySingletons(void);
Don Gagne's avatar
Don Gagne committed
108
109
110
111
112
113
114
115
116
    
    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
    
    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
Don Gagne's avatar
Don Gagne committed
117
    
Don Gagne's avatar
Don Gagne committed
118
    bool _runningUnitTests; ///< true: running unit tests, false: normal app
Don Gagne's avatar
Don Gagne committed
119
120
121
    
    /// Unit Test have access to creating and destroying singletons
    friend class UnitTest;
pixhawk's avatar
pixhawk committed
122
123
};

Don Gagne's avatar
Don Gagne committed
124
125
126
127
/// @brief Returns the QGCApplication object singleton.
QGCApplication* qgcApp(void);

#endif