Skip to content
Snippets Groups Projects
QGCApplication.h 8.03 KiB
Newer Older
  • Learn to ignore specific revisions
  • pixhawk's avatar
    pixhawk committed
    /*=====================================================================
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
    Don Gagne's avatar
    Don Gagne committed
     QGroundControl Open Source Ground Control Station
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
    Don Gagne's avatar
    Don Gagne committed
     (c) 2009 - 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
    Don Gagne's avatar
    Don Gagne committed
     This file is part of the QGROUNDCONTROL project
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
    Don Gagne's avatar
    Don Gagne committed
     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.
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
    Don Gagne's avatar
    Don Gagne committed
     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.
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
    Don Gagne's avatar
    Don Gagne committed
     You should have received a copy of the GNU General Public License
     along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
    Don Gagne's avatar
    Don Gagne committed
     ======================================================================*/
    
    pixhawk's avatar
    pixhawk committed
    
    /**
     * @file
    
     *   @brief Definition of main class
    
    pixhawk's avatar
    pixhawk committed
     *
     *   @author Lorenz Meier <mavteam@student.ethz.ch>
     *
     */
    
    
    Don Gagne's avatar
    Don Gagne committed
    #ifndef QGCAPPLICATION_H
    #define QGCAPPLICATION_H
    
    pixhawk's avatar
    pixhawk committed
    
    #include <QApplication>
    
    #include <QTimer>
    
    pixhawk's avatar
    pixhawk committed
    
    
    Don Gagne's avatar
    Don Gagne committed
    #include "LinkConfiguration.h"
    
    #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"
    
    #ifdef QGC_RTLAB_ENABLED
    
    #include "OpalLink.h"
    #endif
    
    // Work around circular header includes
    class QGCSingleton;
    class MainWindow;
    
    class QGCToolbox;
    
    pixhawk's avatar
    pixhawk committed
    /**
     * @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
    class QGCApplication : public
    #ifdef __mobile__
        QGuiApplication // Native Qml based application
    #else
        QApplication    // QtWidget based application
    #endif
    
    pixhawk's avatar
    pixhawk committed
    {
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
    pixhawk's avatar
    pixhawk committed
    public:
    
    Don Gagne's avatar
    Don Gagne committed
        QGCApplication(int &argc, char* argv[], bool unitTesting);
    
    Don Gagne's avatar
    Don Gagne committed
        ~QGCApplication();
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
    Don Gagne's avatar
    Don Gagne committed
        /// @brief Sets the persistent flag to delete all settings the next time QGroundControl is started.
        void deleteAllSettingsNextBoot(void);
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
    Don Gagne's avatar
    Don Gagne committed
        /// @brief Clears the persistent flag to delete all settings the next time QGroundControl is started.
        void clearDeleteAllSettingsNextBoot(void);
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
        /// @return true: Prompt to save log file when vehicle goes away
    
    Don Gagne's avatar
    Don Gagne committed
        bool promptFlightDataSave(void);
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
        /// @return true: Prompt to save log file even if vehicle was not armed
        bool promptFlightDataSaveNotArmed(void);
    
    
    Don Gagne's avatar
    Don Gagne committed
        void setPromptFlightDataSave(bool promptForSave);
    
        void setPromptFlightDataSaveNotArmed(bool promptForSave);
    
    Don Gagne's avatar
    Don Gagne committed
        /// @brief Returns truee if unit test are being run
        bool runningUnitTests(void) { return _runningUnitTests; }
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
        /// @return true: dark ui style, false: light ui style
        bool styleIsDark(void) { return _styleIsDark; }
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
        /// Set the current UI style
        void setStyle(bool styleIsDark);
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
    Don Gagne's avatar
    Don Gagne committed
        /// Used to report a missing Parameter. Warning will be displayed to user. Method may be called
    
        /// multiple times.
    
    Don Gagne's avatar
    Don Gagne committed
        void reportMissingParameter(int componentId, const QString& name);
    
    Don Gagne's avatar
    Don Gagne committed
        /// Show a non-modal message to the user
    
        void showMessage(const QString& message);
    
    dogmaphobic's avatar
    dogmaphobic committed
        /// @return true: Fake ui into showing mobile interface
        bool fakeMobile(void) { return _fakeMobile; }
    
    
    #ifdef QT_DEBUG
        bool testHighDPI(void) { return _testHighDPI; }
    #endif
    
    
        // Still working on getting rid of this and using dependency injection instead for everything
        QGCToolbox* toolbox(void) { return _toolbox; }
    
    dogmaphobic's avatar
    dogmaphobic committed
    
        /// Do we have Bluetooth Support?
        bool isBluetoothAvailable() { return _bluetoothAvailable; }
    
    
    Don Gagne's avatar
    Don Gagne committed
        QGeoCoordinate defaultMapPosition(void) { return _defaultMapPosition; }
        void setDefaultMapPosition(QGeoCoordinate& defaultMapPosition);
    
    
    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
    
    
        /// 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
    
    
        /// 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
    
    
    Don Gagne's avatar
    Don Gagne committed
        void showFlyView(void);
        void showPlanView(void);
        void showSetupView(void);
    
    
        void qmlAttemptWindowClose(void);
    
        /// Save the specified Flight Data Log
        void saveTempFlightDataLogOnMainThread(QString tempLogfile);
    
    signals:
    
        /// Signals that the style has changed
        ///     @param darkStyle true: dark style, false: light style
        void styleChanged(bool darkStyle);
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
        /// 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
    
    
    public:
    
        // Although public, these methods are internal and should only be called by UnitTest code
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
        /// @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
    
    
        /// @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
    
        void _showSetupFirmware(void);
        void _showSetupParameters(void);
        void _showSetupSummary(void);
        void _showSetupVehicleComponent(VehicleComponent* vehicleComponent);
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
        static QGCApplication*  _app;   ///< Our own singleton. Should be reference directly by qgcApp
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
    Don Gagne's avatar
    Don Gagne committed
    private slots:
    
    Don Gagne's avatar
    Don Gagne committed
        void _missingParamsDisplay(void);
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
    pixhawk's avatar
    pixhawk committed
    private:
    
        void _loadCurrentStyle(void);
    
    Don Gagne's avatar
    Don Gagne committed
        QObject* _rootQmlObject(void);
    
    #ifdef __mobile__
        QQmlApplicationEngine* _qmlAppEngine;
    #endif
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
    Don Gagne's avatar
    Don Gagne committed
        bool _runningUnitTests; ///< true: running unit tests, false: normal app
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
        static const char*  _darkStyleFile;
        static const char*  _lightStyleFile;
        bool                _styleIsDark;      ///< true: dark style, false: light style
    
    dogmaphobic's avatar
    dogmaphobic committed
    
    
    Don Gagne's avatar
    Don Gagne committed
        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
    
    dogmaphobic's avatar
    dogmaphobic committed
        bool				_fakeMobile;	///< true: Fake ui into displaying mobile interface
    
    
    #ifdef QT_DEBUG
        bool _testHighDPI;  ///< true: double fonts sizes for simulating high dpi devices
    #endif
    
        QGCToolbox* _toolbox;
    
    
    dogmaphobic's avatar
    dogmaphobic committed
        bool _bluetoothAvailable;
    
    
    Don Gagne's avatar
    Don Gagne committed
        QGeoCoordinate _defaultMapPosition;    ///< Map position when all other sources fail
    
        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* _promptFlightDataSave;           ///< Settings key for promptFlightDataSave
        static const char* _promptFlightDataSaveNotArmed;   ///< Settings key for promptFlightDataSaveNotArmed
        static const char* _styleKey;                       ///< Settings key for UI style
        static const char* _defaultMapPositionLatKey;       ///< Settings key for default map location
        static const char* _defaultMapPositionLonKey;       ///< Settings key for default map location
    
    
    Don Gagne's avatar
    Don Gagne committed
        /// Unit Test have access to creating and destroying singletons
        friend class UnitTest;
    
    pixhawk's avatar
    pixhawk committed
    };
    
    
    Don Gagne's avatar
    Don Gagne committed
    /// @brief Returns the QGCApplication object singleton.
    QGCApplication* qgcApp(void);
    
    #endif