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

10
#pragma once
11

12
#include "QGCToolbox.h"
dogmaphobic's avatar
dogmaphobic committed
13
#include "QGCApplication.h"
14
#include "SettingsFact.h"
Jimmy Johnson's avatar
Jimmy Johnson committed
15
#include "SimulatedPosition.h"
16
#include "QGCLoggingCategory.h"
17
#include "AppSettings.h"
18
#include "AirspaceManager.h"
19
#include "ADSBVehicleManager.h"
20
#include "QGCPalette.h"
Remek Zajac's avatar
Remek Zajac committed
21
#include "QmlUnitsConversion.h"
Gus Grubba's avatar
Gus Grubba committed
22 23 24
#if defined(QGC_ENABLE_PAIRING)
#include "PairingManager.h"
#endif
25 26 27 28 29
#if defined(QGC_GST_TAISYNC_ENABLED)
#include "TaisyncManager.h"
#else
class TaisyncManager;
#endif
30 31 32 33 34
#if defined(QGC_GST_MICROHARD_ENABLED)
#include "MicrohardManager.h"
#else
class MicrohardManager;
#endif
35

36 37 38 39
#ifdef QT_DEBUG
#include "MockLink.h"
#endif

40
class QGCToolbox;
41
class LinkManager;
42

43
class QGroundControlQmlGlobal : public QGCTool
44 45 46 47
{
    Q_OBJECT

public:
48
    QGroundControlQmlGlobal(QGCApplication* app, QGCToolbox* toolbox);
49 50
    ~QGroundControlQmlGlobal();

51 52 53 54 55 56 57 58 59
    enum AltitudeMode {
        AltitudeModeNone,           // Being used as distance value unrelated to ground (for example distance to structure)
        AltitudeModeRelative,       // MAV_FRAME_GLOBAL_RELATIVE_ALT
        AltitudeModeAbsolute,       // MAV_FRAME_GLOBAL
        AltitudeModeAboveTerrain,   // Absolute altitude above terrain calculated from terrain data
        AltitudeModeTerrainFrame    // MAV_FRAME_GLOBAL_TERRAIN_ALT
    };
    Q_ENUM(AltitudeMode)

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 86 87 88 89 90 91 92 93 94
    Q_PROPERTY(QString              appName                 READ    appName                 CONSTANT)
    Q_PROPERTY(LinkManager*         linkManager             READ    linkManager             CONSTANT)
    Q_PROPERTY(MultiVehicleManager* multiVehicleManager     READ    multiVehicleManager     CONSTANT)
    Q_PROPERTY(QGCMapEngineManager* mapEngineManager        READ    mapEngineManager        CONSTANT)
    Q_PROPERTY(QGCPositionManager*  qgcPositionManger       READ    qgcPositionManger       CONSTANT)
    Q_PROPERTY(VideoManager*        videoManager            READ    videoManager            CONSTANT)
    Q_PROPERTY(MAVLinkLogManager*   mavlinkLogManager       READ    mavlinkLogManager       CONSTANT)
    Q_PROPERTY(SettingsManager*     settingsManager         READ    settingsManager         CONSTANT)
    Q_PROPERTY(AirspaceManager*     airspaceManager         READ    airspaceManager         CONSTANT)
    Q_PROPERTY(ADSBVehicleManager*  adsbVehicleManager      READ    adsbVehicleManager      CONSTANT)
    Q_PROPERTY(QGCCorePlugin*       corePlugin              READ    corePlugin              CONSTANT)
    Q_PROPERTY(MissionCommandTree*  missionCommandTree      READ    missionCommandTree      CONSTANT)
    Q_PROPERTY(FactGroup*           gpsRtk                  READ    gpsRtkFactGroup         CONSTANT)
    Q_PROPERTY(bool                 airmapSupported         READ    airmapSupported         CONSTANT)
    Q_PROPERTY(TaisyncManager*      taisyncManager          READ    taisyncManager          CONSTANT)
    Q_PROPERTY(bool                 taisyncSupported        READ    taisyncSupported        CONSTANT)
    Q_PROPERTY(MicrohardManager*    microhardManager        READ    microhardManager        CONSTANT)
    Q_PROPERTY(bool                 microhardSupported      READ    microhardSupported      CONSTANT)
    Q_PROPERTY(bool                 supportsPairing         READ    supportsPairing         CONSTANT)
    Q_PROPERTY(QGCPalette*          globalPalette           MEMBER  _globalPalette          CONSTANT)   ///< This palette will always return enabled colors
    Q_PROPERTY(QmlUnitsConversion*  unitsConversion         READ    unitsConversion         CONSTANT)
    Q_PROPERTY(bool                 singleFirmwareSupport   READ    singleFirmwareSupport   CONSTANT)
    Q_PROPERTY(bool                 singleVehicleSupport    READ    singleVehicleSupport    CONSTANT)
    Q_PROPERTY(bool                 px4ProFirmwareSupported READ    px4ProFirmwareSupported CONSTANT)
    Q_PROPERTY(int                  apmFirmwareSupported    READ    apmFirmwareSupported    CONSTANT)
    Q_PROPERTY(QGeoCoordinate       flightMapPosition       READ    flightMapPosition       WRITE setFlightMapPosition  NOTIFY flightMapPositionChanged)
    Q_PROPERTY(double               flightMapZoom           READ    flightMapZoom           WRITE setFlightMapZoom      NOTIFY flightMapZoomChanged)
    Q_PROPERTY(double               flightMapInitialZoom    MEMBER  _flightMapInitialZoom   CONSTANT)   ///< Zoom level to use when either gcs or vehicle shows up for first time

    Q_PROPERTY(QString  parameterFileExtension  READ parameterFileExtension CONSTANT)
    Q_PROPERTY(QString  missionFileExtension    READ missionFileExtension   CONSTANT)
    Q_PROPERTY(QString  telemetryFileExtension  READ telemetryFileExtension CONSTANT)

    Q_PROPERTY(QString qgcVersion       READ qgcVersion         CONSTANT)
    Q_PROPERTY(bool    skipSetupPage    READ skipSetupPage      WRITE setSkipSetupPage NOTIFY skipSetupPageChanged)
Gus Grubba's avatar
Gus Grubba committed
95

DonLakeFlyer's avatar
DonLakeFlyer committed
96 97 98 99 100 101 102
    Q_PROPERTY(qreal zOrderTopMost              READ zOrderTopMost              CONSTANT) ///< z order for top most items, toolbar, main window sub view
    Q_PROPERTY(qreal zOrderWidgets              READ zOrderWidgets              CONSTANT) ///< z order value to widgets, for example: zoom controls, hud widgetss
    Q_PROPERTY(qreal zOrderMapItems             READ zOrderMapItems             CONSTANT)
    Q_PROPERTY(qreal zOrderVehicles             READ zOrderVehicles             CONSTANT)
    Q_PROPERTY(qreal zOrderWaypointIndicators   READ zOrderWaypointIndicators   CONSTANT)
    Q_PROPERTY(qreal zOrderTrajectoryLines      READ zOrderTrajectoryLines      CONSTANT)
    Q_PROPERTY(qreal zOrderWaypointLines        READ zOrderWaypointLines        CONSTANT)
Gus Grubba's avatar
Gus Grubba committed
103
    //-------------------------------------------------------------------------
104
    // MavLink Protocol
Don Gagne's avatar
Don Gagne committed
105
    Q_PROPERTY(bool     isVersionCheckEnabled   READ isVersionCheckEnabled      WRITE setIsVersionCheckEnabled      NOTIFY isVersionCheckEnabledChanged)
106
    Q_PROPERTY(int      mavlinkSystemID         READ mavlinkSystemID            WRITE setMavlinkSystemID            NOTIFY mavlinkSystemIDChanged)
107
    Q_PROPERTY(bool     hasAPMSupport           READ hasAPMSupport              CONSTANT)
108
    Q_PROPERTY(bool     hasMAVLinkInspector     READ hasMAVLinkInspector        CONSTANT)
dogmaphobic's avatar
dogmaphobic committed
109

Don Gagne's avatar
Don Gagne committed
110

111 112 113
#if defined(QGC_ENABLE_PAIRING)
    Q_PROPERTY(PairingManager*      pairingManager          READ pairingManager         CONSTANT)
#endif
114

115 116 117 118 119
    Q_INVOKABLE void    saveGlobalSetting       (const QString& key, const QString& value);
    Q_INVOKABLE QString loadGlobalSetting       (const QString& key, const QString& defaultValue);
    Q_INVOKABLE void    saveBoolGlobalSetting   (const QString& key, bool value);
    Q_INVOKABLE bool    loadBoolGlobalSetting   (const QString& key, bool defaultValue);

120 121
    Q_INVOKABLE void    deleteAllSettingsNextBoot       () { _app->deleteAllSettingsNextBoot(); }
    Q_INVOKABLE void    clearDeleteAllSettingsNextBoot  () { _app->clearDeleteAllSettingsNextBoot(); }
122

123 124 125 126
    Q_INVOKABLE void    startPX4MockLink            (bool sendStatusText);
    Q_INVOKABLE void    startGenericMockLink        (bool sendStatusText);
    Q_INVOKABLE void    startAPMArduCopterMockLink  (bool sendStatusText);
    Q_INVOKABLE void    startAPMArduPlaneMockLink   (bool sendStatusText);
127
    Q_INVOKABLE void    startAPMArduSubMockLink     (bool sendStatusText);
128
    Q_INVOKABLE void    startAPMArduRoverMockLink   (bool sendStatusText);
Don Gagne's avatar
Don Gagne committed
129
    Q_INVOKABLE void    stopOneMockLink             (void);
130

131 132 133 134
    /// Returns the list of available logging category names.
    Q_INVOKABLE QStringList loggingCategories(void) const { return QGCLoggingCategoryRegister::instance()->registeredCategories(); }

    /// Turns on/off logging for the specified category. State is saved in app settings.
Don Gagne's avatar
Don Gagne committed
135
    Q_INVOKABLE void setCategoryLoggingOn(const QString& category, bool enable) { QGCLoggingCategoryRegister::instance()->setCategoryLoggingOn(category, enable); }
136 137

    /// Returns true if logging is turned on for the specified category.
Don Gagne's avatar
Don Gagne committed
138
    Q_INVOKABLE bool categoryLoggingOn(const QString& category) { return QGCLoggingCategoryRegister::instance()->categoryLoggingOn(category); }
139 140 141 142

    /// Updates the logging filter rules after settings have changed
    Q_INVOKABLE void updateLoggingFilterRules(void) { QGCLoggingCategoryRegister::instance()->setFilterRulesFromSettings(QString()); }

143 144
    Q_INVOKABLE bool linesIntersect(QPointF xLine1, QPointF yLine1, QPointF xLine2, QPointF yLine2);

145 146 147
    Q_INVOKABLE QString altitudeModeExtraUnits(AltitudeMode altMode);       ///< String shown in the FactTextField.extraUnits ui
    Q_INVOKABLE QString altitudeModeShortDescription(AltitudeMode altMode); ///< String shown when a user needs to select an altitude mode

148
    // Property accesors
Gus Grubba's avatar
Gus Grubba committed
149

150
    QString                 appName             ()  { return qgcApp()->applicationName(); }
151 152 153 154 155 156 157 158 159
    LinkManager*            linkManager         ()  { return _linkManager; }
    MultiVehicleManager*    multiVehicleManager ()  { return _multiVehicleManager; }
    QGCMapEngineManager*    mapEngineManager    ()  { return _mapEngineManager; }
    QGCPositionManager*     qgcPositionManger   ()  { return _qgcPositionManager; }
    MissionCommandTree*     missionCommandTree  ()  { return _missionCommandTree; }
    VideoManager*           videoManager        ()  { return _videoManager; }
    MAVLinkLogManager*      mavlinkLogManager   ()  { return _mavlinkLogManager; }
    QGCCorePlugin*          corePlugin          ()  { return _corePlugin; }
    SettingsManager*        settingsManager     ()  { return _settingsManager; }
160
    FactGroup*              gpsRtkFactGroup     ()  { return _gpsRtkFactGroup; }
161
    AirspaceManager*        airspaceManager     ()  { return _airspaceManager; }
162
    ADSBVehicleManager*     adsbVehicleManager  ()  { return _adsbVehicleManager; }
Remek Zajac's avatar
Remek Zajac committed
163
    QmlUnitsConversion*     unitsConversion     ()  { return &_unitsConversion; }
Gus Grubba's avatar
Gus Grubba committed
164
#if defined(QGC_ENABLE_PAIRING)
165
    bool                    supportsPairing     ()  { return true; }
Gus Grubba's avatar
Gus Grubba committed
166
    PairingManager*         pairingManager      ()  { return _pairingManager; }
167 168
#else
    bool                    supportsPairing     ()  { return false; }
Gus Grubba's avatar
Gus Grubba committed
169
#endif
170 171
    static QGeoCoordinate   flightMapPosition   ()  { return _coord; }
    static double           flightMapZoom       ()  { return _zoom; }
172

173 174
    TaisyncManager*         taisyncManager      ()  { return _taisyncManager; }
#if defined(QGC_GST_TAISYNC_ENABLED)
175
    bool                    taisyncSupported    ()  { return true; }
176 177 178 179
#else
    bool                    taisyncSupported    () { return false; }
#endif

180
    MicrohardManager*       microhardManager    () { return _microhardManager; }
181 182 183 184 185 186
#if defined(QGC_GST_TAISYNC_ENABLED)
    bool                    microhardSupported  () { return true; }
#else
    bool                    microhardSupported  () { return false; }
#endif

DonLakeFlyer's avatar
DonLakeFlyer committed
187 188 189 190 191 192 193
    qreal zOrderTopMost             () { return 1000; }
    qreal zOrderWidgets             () { return 100; }
    qreal zOrderMapItems            () { return 50; }
    qreal zOrderWaypointIndicators  () { return 50; }
    qreal zOrderVehicles            () { return 49; }
    qreal zOrderTrajectoryLines     () { return 48; }
    qreal zOrderWaypointLines       () { return 47; }
Gus Grubba's avatar
Gus Grubba committed
194

Don Gagne's avatar
Don Gagne committed
195
    bool    isVersionCheckEnabled   () { return _toolbox->mavlinkProtocol()->versionCheckEnabled(); }
196
    int     mavlinkSystemID         () { return _toolbox->mavlinkProtocol()->getSystemId(); }
197 198 199 200 201
#if defined(NO_ARDUPILOT_DIALECT)
    bool    hasAPMSupport           () { return false; }
#else
    bool    hasAPMSupport           () { return true; }
#endif
202

203 204 205 206 207 208
#if defined(QGC_ENABLE_MAVLINK_INSPECTOR)
    bool    hasMAVLinkInspector     () { return true; }
#else
    bool    hasMAVLinkInspector     () { return false; }
#endif

209 210
    bool    singleFirmwareSupport   ();
    bool    singleVehicleSupport    ();
211 212
    bool    px4ProFirmwareSupported ();
    bool    apmFirmwareSupported    ();
213 214
    bool    skipSetupPage           () { return _skipSetupPage; }
    void    setSkipSetupPage        (bool skip);
Gus Grubba's avatar
Gus Grubba committed
215

Don Gagne's avatar
Don Gagne committed
216
    void    setIsVersionCheckEnabled    (bool enable);
217
    void    setMavlinkSystemID          (int  id);
218 219
    void    setFlightMapPosition        (QGeoCoordinate& coordinate);
    void    setFlightMapZoom            (double zoom);
dogmaphobic's avatar
dogmaphobic committed
220

221 222 223
    QString parameterFileExtension  (void) const  { return AppSettings::parameterFileExtension; }
    QString missionFileExtension    (void) const    { return AppSettings::missionFileExtension; }
    QString telemetryFileExtension  (void) const  { return AppSettings::telemetryFileExtension; }
Don Gagne's avatar
Don Gagne committed
224

225
    QString qgcVersion              (void) const;
226

227 228 229 230 231
#if defined(QGC_AIRMAP_ENABLED)
    bool    airmapSupported() { return true; }
#else
    bool    airmapSupported() { return false; }
#endif
232

233 234 235
    // Overrides from QGCTool
    virtual void setToolbox(QGCToolbox* toolbox);

dogmaphobic's avatar
dogmaphobic committed
236 237
signals:
    void isMultiplexingEnabledChanged   (bool enabled);
Don Gagne's avatar
Don Gagne committed
238
    void isVersionCheckEnabledChanged   (bool enabled);
239
    void mavlinkSystemIDChanged         (int id);
240
    void flightMapPositionChanged       (QGeoCoordinate flightMapPosition);
241
    void flightMapZoomChanged           (double flightMapZoom);
242
    void skipSetupPageChanged           ();
dogmaphobic's avatar
dogmaphobic committed
243

244
private:
245 246 247 248 249 250 251 252 253 254 255 256 257 258
    double                  _flightMapInitialZoom   = 17.0;
    LinkManager*            _linkManager            = nullptr;
    MultiVehicleManager*    _multiVehicleManager    = nullptr;
    QGCMapEngineManager*    _mapEngineManager       = nullptr;
    QGCPositionManager*     _qgcPositionManager     = nullptr;
    MissionCommandTree*     _missionCommandTree     = nullptr;
    VideoManager*           _videoManager           = nullptr;
    MAVLinkLogManager*      _mavlinkLogManager      = nullptr;
    QGCCorePlugin*          _corePlugin             = nullptr;
    FirmwarePluginManager*  _firmwarePluginManager  = nullptr;
    SettingsManager*        _settingsManager        = nullptr;
    FactGroup*              _gpsRtkFactGroup        = nullptr;
    AirspaceManager*        _airspaceManager        = nullptr;
    TaisyncManager*         _taisyncManager         = nullptr;
259
    MicrohardManager*       _microhardManager       = nullptr;
260
    ADSBVehicleManager*     _adsbVehicleManager     = nullptr;
261
    QGCPalette*             _globalPalette          = nullptr;
Remek Zajac's avatar
Remek Zajac committed
262
    QmlUnitsConversion      _unitsConversion;
Gus Grubba's avatar
Gus Grubba committed
263 264 265
#if defined(QGC_ENABLE_PAIRING)
    PairingManager*         _pairingManager         = nullptr;
#endif
266 267

    bool                    _skipSetupPage          = false;
268
    QStringList             _altitudeModeEnumString;
269 270 271 272 273

    static const char* _flightMapPositionSettingsGroup;
    static const char* _flightMapPositionLatitudeSettingsKey;
    static const char* _flightMapPositionLongitudeSettingsKey;
    static const char* _flightMapZoomSettingsKey;
274 275 276

    static QGeoCoordinate   _coord;
    static double           _zoom;
277
};