QGroundControlQmlGlobal.h 15.4 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.
 *
 ****************************************************************************/
Gus Grubba's avatar
Gus Grubba committed
9

10 11 12 13 14 15 16

/// @file
///     @author Don Gagne <don@thegagnes.com>

#ifndef QGroundControlQmlGlobal_H
#define QGroundControlQmlGlobal_H

17
#include "QGCToolbox.h"
dogmaphobic's avatar
dogmaphobic committed
18
#include "QGCApplication.h"
Don Gagne's avatar
Don Gagne committed
19
#include "LinkManager.h"
20
#include "HomePositionManager.h"
21
#include "FlightMapSettings.h"
22
#include "SettingsFact.h"
23
#include "FactMetaData.h"
Jimmy Johnson's avatar
Jimmy Johnson committed
24
#include "SimulatedPosition.h"
25
#include "QGCLoggingCategory.h"
26

27 28 29 30
#ifdef QT_DEBUG
#include "MockLink.h"
#endif

31 32
class QGCToolbox;

33
class QGroundControlQmlGlobal : public QGCTool
34 35 36 37
{
    Q_OBJECT

public:
38 39 40
    QGroundControlQmlGlobal(QGCApplication* app);
    ~QGroundControlQmlGlobal();

41 42 43 44 45
    enum DistanceUnits {
        DistanceUnitsFeet = 0,
        DistanceUnitsMeters
    };

46 47 48 49 50 51 52 53 54
    enum AreaUnits {
        AreaUnitsSquareFeet = 0,
        AreaUnitsSquareMeters,
        AreaUnitsSquareKilometers,
        AreaUnitsHectares,
        AreaUnitsAcres,
        AreaUnitsSquareMiles,
    };

55 56 57 58 59 60 61 62 63
    enum SpeedUnits {
        SpeedUnitsFeetPerSecond = 0,
        SpeedUnitsMetersPerSecond,
        SpeedUnitsMilesPerHour,
        SpeedUnitsKilometersPerHour,
        SpeedUnitsKnots,
    };

    Q_ENUMS(DistanceUnits)
64
    Q_ENUMS(AreaUnits)
65
    Q_ENUMS(SpeedUnits)
Gus Grubba's avatar
Gus Grubba committed
66

Don Gagne's avatar
Don Gagne committed
67 68
    Q_PROPERTY(FlightMapSettings*   flightMapSettings   READ flightMapSettings      CONSTANT)
    Q_PROPERTY(HomePositionManager* homePositionManager READ homePositionManager    CONSTANT)
Don Gagne's avatar
Don Gagne committed
69 70
    Q_PROPERTY(LinkManager*         linkManager         READ linkManager            CONSTANT)
    Q_PROPERTY(MultiVehicleManager* multiVehicleManager READ multiVehicleManager    CONSTANT)
Don Gagne's avatar
Don Gagne committed
71
    Q_PROPERTY(QGCMapEngineManager* mapEngineManager    READ mapEngineManager       CONSTANT)
Jimmy Johnson's avatar
Jimmy Johnson committed
72
    Q_PROPERTY(QGCPositionManager*  qgcPositionManger   READ qgcPositionManger      CONSTANT)
73
    Q_PROPERTY(MissionCommandTree*  missionCommandTree  READ missionCommandTree     CONSTANT)
74
    Q_PROPERTY(VideoManager*        videoManager        READ videoManager           CONSTANT)
Gus Grubba's avatar
Gus Grubba committed
75
    Q_PROPERTY(MAVLinkLogManager*   mavlinkLogManager   READ mavlinkLogManager      CONSTANT)
Gus Grubba's avatar
Gus Grubba committed
76 77 78 79 80

    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) ///< z order value for map items, for example: mission item indicators

81 82 83 84 85
    // Various QGC settings exposed to Qml
    Q_PROPERTY(bool     isDarkStyle             READ isDarkStyle                WRITE setIsDarkStyle                NOTIFY isDarkStyleChanged)              // TODO: Should be in ScreenTools?
    Q_PROPERTY(bool     isAudioMuted            READ isAudioMuted               WRITE setIsAudioMuted               NOTIFY isAudioMutedChanged)
    Q_PROPERTY(bool     isSaveLogPrompt         READ isSaveLogPrompt            WRITE setIsSaveLogPrompt            NOTIFY isSaveLogPromptChanged)
    Q_PROPERTY(bool     isSaveLogPromptNotArmed READ isSaveLogPromptNotArmed    WRITE setIsSaveLogPromptNotArmed    NOTIFY isSaveLogPromptNotArmedChanged)
86
    Q_PROPERTY(bool     virtualTabletJoystick   READ virtualTabletJoystick      WRITE setVirtualTabletJoystick      NOTIFY virtualTabletJoystickChanged)
87
    Q_PROPERTY(qreal    baseFontPointSize       READ baseFontPointSize          WRITE setBaseFontPointSize          NOTIFY baseFontPointSizeChanged)
88

Gus Grubba's avatar
Gus Grubba committed
89 90 91 92 93 94 95 96 97 98 99 100 101 102
    //-------------------------------------------------------------------------
    //-- Options that can be set by plugins
    Q_PROPERTY(bool     colapseSettings                 READ colapseSettings            CONSTANT)
    Q_PROPERTY(bool     mainViewIsMap                   READ mainViewIsMap              CONSTANT)
    Q_PROPERTY(bool     enableVirtualJoystick           READ enableVirtualJoystick      CONSTANT)
    Q_PROPERTY(bool     enableAutoConnectOptions        READ enableAutoConnectOptions   CONSTANT)
    Q_PROPERTY(bool     enableVideoSourceOptions        READ enableVideoSourceOptions   CONSTANT)

    Q_PROPERTY(bool     hasCustomSettings               READ hasCustomSettings          CONSTANT)
    Q_PROPERTY(QString  customSettingsURL               READ customSettingsURL          CONSTANT)
    Q_PROPERTY(QString  customSettingsTitle             READ customSettingsTitle        CONSTANT)
    Q_PROPERTY(QString  customSettingsLogoUrl           READ customSettingsLogoUrl      CONSTANT)

    //-------------------------------------------------------------------------
103
    // MavLink Protocol
Don Gagne's avatar
Don Gagne committed
104
    Q_PROPERTY(bool     isVersionCheckEnabled   READ isVersionCheckEnabled      WRITE setIsVersionCheckEnabled      NOTIFY isVersionCheckEnabledChanged)
105
    Q_PROPERTY(int      mavlinkSystemID         READ mavlinkSystemID            WRITE setMavlinkSystemID            NOTIFY mavlinkSystemIDChanged)
dogmaphobic's avatar
dogmaphobic committed
106

107 108 109 110 111 112 113 114
    Q_PROPERTY(Fact*    offlineEditingFirmwareType      READ offlineEditingFirmwareType         CONSTANT)
    Q_PROPERTY(Fact*    offlineEditingVehicleType       READ offlineEditingVehicleType          CONSTANT)
    Q_PROPERTY(Fact*    offlineEditingCruiseSpeed       READ offlineEditingCruiseSpeed          CONSTANT)
    Q_PROPERTY(Fact*    offlineEditingHoverSpeed        READ offlineEditingHoverSpeed           CONSTANT)
    Q_PROPERTY(Fact*    distanceUnits                   READ distanceUnits                      CONSTANT)
    Q_PROPERTY(Fact*    areaUnits                       READ areaUnits                          CONSTANT)
    Q_PROPERTY(Fact*    speedUnits                      READ speedUnits                         CONSTANT)
    Q_PROPERTY(Fact*    batteryPercentRemainingAnnounce READ batteryPercentRemainingAnnounce    CONSTANT)
115

116 117
    Q_PROPERTY(QGeoCoordinate lastKnownHomePosition READ lastKnownHomePosition  CONSTANT)
    Q_PROPERTY(QGeoCoordinate flightMapPosition     MEMBER _flightMapPosition   NOTIFY flightMapPositionChanged)
118
    Q_PROPERTY(double         flightMapZoom         MEMBER _flightMapZoom       NOTIFY flightMapZoomChanged)
Don Gagne's avatar
Don Gagne committed
119

Don Gagne's avatar
Don Gagne committed
120 121 122 123
    Q_PROPERTY(QString  parameterFileExtension  READ parameterFileExtension CONSTANT)
    Q_PROPERTY(QString  missionFileExtension    READ missionFileExtension   CONSTANT)
    Q_PROPERTY(QString  telemetryFileExtension  READ telemetryFileExtension CONSTANT)

124 125
    /// Returns the string for distance units which has configued by user
    Q_PROPERTY(QString appSettingsDistanceUnitsString READ appSettingsDistanceUnitsString CONSTANT)
126
    Q_PROPERTY(QString appSettingsAreaUnitsString READ appSettingsAreaUnitsString CONSTANT)
127

128 129
    Q_PROPERTY(QString qgcVersion READ qgcVersion CONSTANT)

130 131 132 133 134
    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);

135 136
    Q_INVOKABLE void    deleteAllSettingsNextBoot       () { _app->deleteAllSettingsNextBoot(); }
    Q_INVOKABLE void    clearDeleteAllSettingsNextBoot  () { _app->clearDeleteAllSettingsNextBoot(); }
137

138 139 140 141
    Q_INVOKABLE void    startPX4MockLink            (bool sendStatusText);
    Q_INVOKABLE void    startGenericMockLink        (bool sendStatusText);
    Q_INVOKABLE void    startAPMArduCopterMockLink  (bool sendStatusText);
    Q_INVOKABLE void    startAPMArduPlaneMockLink   (bool sendStatusText);
142
    Q_INVOKABLE void    startAPMArduSubMockLink     (bool sendStatusText);
143 144
    Q_INVOKABLE void    stopAllMockLinks            (void);

145 146 147 148 149 150 151 152
    /// Converts from meters to the user specified distance unit
    Q_INVOKABLE QVariant metersToAppSettingsDistanceUnits(const QVariant& meters) const { return FactMetaData::metersToAppSettingsDistanceUnits(meters); }

    /// Converts from user specified distance unit to meters
    Q_INVOKABLE QVariant appSettingsDistanceUnitsToMeters(const QVariant& distance) const { return FactMetaData::appSettingsDistanceUnitsToMeters(distance); }

    QString appSettingsDistanceUnitsString(void) const { return FactMetaData::appSettingsDistanceUnitsString(); }

153 154 155 156 157 158 159 160
    /// Converts from square meters to the user specified area unit
    Q_INVOKABLE QVariant squareMetersToAppSettingsAreaUnits(const QVariant& meters) const { return FactMetaData::squareMetersToAppSettingsAreaUnits(meters); }

    /// Converts from user specified area unit to square meters
    Q_INVOKABLE QVariant appSettingsAreaUnitsToSquareMeters(const QVariant& area) const { return FactMetaData::appSettingsAreaUnitsToSquareMeters(area); }

    QString appSettingsAreaUnitsString(void) const { return FactMetaData::appSettingsAreaUnitsString(); }

161 162 163 164 165 166 167 168 169 170 171 172
    /// 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.
    Q_INVOKABLE void setCategoryLoggingOn(const QString& category, bool enable) { QGCLoggingCategoryRegister::instance()->setCategoryLoggingOn(category, enable); };

    /// Returns true if logging is turned on for the specified category.
    Q_INVOKABLE bool categoryLoggingOn(const QString& category) { return QGCLoggingCategoryRegister::instance()->categoryLoggingOn(category); };

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

173 174
    Q_INVOKABLE bool linesIntersect(QPointF xLine1, QPointF yLine1, QPointF xLine2, QPointF yLine2);

175
    // Property accesors
Gus Grubba's avatar
Gus Grubba committed
176

Don Gagne's avatar
Don Gagne committed
177 178
    FlightMapSettings*      flightMapSettings   ()      { return _flightMapSettings; }
    HomePositionManager*    homePositionManager ()      { return _homePositionManager; }
dogmaphobic's avatar
dogmaphobic committed
179
    LinkManager*            linkManager         ()      { return _linkManager; }
Don Gagne's avatar
Don Gagne committed
180
    MultiVehicleManager*    multiVehicleManager ()      { return _multiVehicleManager; }
Jimmy Johnson's avatar
Jimmy Johnson committed
181 182
    QGCMapEngineManager*    mapEngineManager    ()      { return _mapEngineManager; }
    QGCPositionManager*     qgcPositionManger   ()      { return _qgcPositionManager; }
183
    MissionCommandTree*     missionCommandTree  ()      { return _missionCommandTree; }
184
    VideoManager*           videoManager        ()      { return _videoManager; }
Gus Grubba's avatar
Gus Grubba committed
185
    MAVLinkLogManager*      mavlinkLogManager   ()      { return _mavlinkLogManager; }
Gus Grubba's avatar
Gus Grubba committed
186 187 188 189 190

    qreal                   zOrderTopMost       ()      { return 1000; }
    qreal                   zOrderWidgets       ()      { return 100; }
    qreal                   zOrderMapItems      ()      { return 50; }

191 192 193 194
    bool    isDarkStyle             () { return _app->styleIsDark(); }
    bool    isAudioMuted            () { return _toolbox->audioOutput()->isMuted(); }
    bool    isSaveLogPrompt         () { return _app->promptFlightDataSave(); }
    bool    isSaveLogPromptNotArmed () { return _app->promptFlightDataSaveNotArmed(); }
195
    bool    virtualTabletJoystick   () { return _virtualTabletJoystick; }
196
    qreal   baseFontPointSize       () { return _baseFontPointSize; }
197

Don Gagne's avatar
Don Gagne committed
198
    bool    isVersionCheckEnabled   () { return _toolbox->mavlinkProtocol()->versionCheckEnabled(); }
199 200
    int     mavlinkSystemID         () { return _toolbox->mavlinkProtocol()->getSystemId(); }

Gus Grubba's avatar
Gus Grubba committed
201 202 203 204 205 206 207 208 209 210
    bool    colapseSettings         ();
    bool    mainViewIsMap           ();
    bool    enableVirtualJoystick   ();
    bool    enableAutoConnectOptions();
    bool    enableVideoSourceOptions();
    bool    hasCustomSettings       ();
    QString customSettingsTitle     ();
    QString customSettingsURL       ();
    QString customSettingsLogoUrl   ();

211
    QGeoCoordinate lastKnownHomePosition() { return qgcApp()->lastKnownHomePosition(); }
Don Gagne's avatar
Don Gagne committed
212

213 214 215 216 217 218 219 220
    static Fact* offlineEditingFirmwareType     (void);
    static Fact* offlineEditingVehicleType      (void);
    static Fact* offlineEditingCruiseSpeed      (void);
    static Fact* offlineEditingHoverSpeed       (void);
    static Fact* distanceUnits                  (void);
    static Fact* areaUnits                      (void);
    static Fact* speedUnits                     (void);
    static Fact* batteryPercentRemainingAnnounce(void);
dogmaphobic's avatar
dogmaphobic committed
221

222 223 224 225
    void    setIsDarkStyle              (bool dark);
    void    setIsAudioMuted             (bool muted);
    void    setIsSaveLogPrompt          (bool prompt);
    void    setIsSaveLogPromptNotArmed  (bool prompt);
226
    void    setVirtualTabletJoystick    (bool enabled);
227
    void    setBaseFontPointSize        (qreal size);
228

Don Gagne's avatar
Don Gagne committed
229
    void    setIsVersionCheckEnabled    (bool enable);
230
    void    setMavlinkSystemID          (int  id);
dogmaphobic's avatar
dogmaphobic committed
231

Don Gagne's avatar
Don Gagne committed
232 233 234 235
    QString parameterFileExtension(void) const  { return QGCApplication::parameterFileExtension; }
    QString missionFileExtension(void) const    { return QGCApplication::missionFileExtension; }
    QString telemetryFileExtension(void) const  { return QGCApplication::telemetryFileExtension; }

236 237
    QString qgcVersion(void) const { return qgcApp()->applicationVersion(); }

238 239 240
    // Overrides from QGCTool
    virtual void setToolbox(QGCToolbox* toolbox);

dogmaphobic's avatar
dogmaphobic committed
241 242 243 244
signals:
    void isDarkStyleChanged             (bool dark);
    void isAudioMutedChanged            (bool muted);
    void isSaveLogPromptChanged         (bool prompt);
245
    void isSaveLogPromptNotArmedChanged (bool prompt);
246
    void virtualTabletJoystickChanged   (bool enabled);
247
    void baseFontPointSizeChanged       (qreal size);
dogmaphobic's avatar
dogmaphobic committed
248
    void isMultiplexingEnabledChanged   (bool enabled);
Don Gagne's avatar
Don Gagne committed
249
    void isVersionCheckEnabledChanged   (bool enabled);
250
    void mavlinkSystemIDChanged         (int id);
251
    void flightMapPositionChanged       (QGeoCoordinate flightMapPosition);
252
    void flightMapZoomChanged           (double flightMapZoom);
dogmaphobic's avatar
dogmaphobic committed
253

254
private:
255 256 257
    static SettingsFact* _createSettingsFact(const QString& name);
    static QMap<QString, FactMetaData*>& nameToMetaDataMap(void);

258
    FlightMapSettings*      _flightMapSettings;
Don Gagne's avatar
Don Gagne committed
259 260 261
    HomePositionManager*    _homePositionManager;
    LinkManager*            _linkManager;
    MultiVehicleManager*    _multiVehicleManager;
262
    QGCMapEngineManager*    _mapEngineManager;
Jimmy Johnson's avatar
Jimmy Johnson committed
263
    QGCPositionManager*     _qgcPositionManager;
264
    MissionCommandTree*     _missionCommandTree;
265
    VideoManager*           _videoManager;
Gus Grubba's avatar
Gus Grubba committed
266
    MAVLinkLogManager*      _mavlinkLogManager;
267

268 269 270 271
    bool                    _virtualTabletJoystick;
    qreal                   _baseFontPointSize;
    QGeoCoordinate          _flightMapPosition;
    double                  _flightMapZoom;
272 273 274

    // These are static so they are available to C++ code as well as Qml
    static SettingsFact*    _offlineEditingFirmwareTypeFact;
275 276 277
    static SettingsFact*    _offlineEditingVehicleTypeFact;
    static SettingsFact*    _offlineEditingCruiseSpeedFact;
    static SettingsFact*    _offlineEditingHoverSpeedFact;
278 279
    static SettingsFact*    _distanceUnitsFact;
    static FactMetaData*    _distanceUnitsMetaData;
280 281
    static SettingsFact*    _areaUnitsFact;
    static FactMetaData*    _areaUnitsMetaData;
282 283
    static SettingsFact*    _speedUnitsFact;
    static FactMetaData*    _speedUnitsMetaData;
284
    static SettingsFact*    _batteryPercentRemainingAnnounceFact;
285

286
    static const char*  _virtualTabletJoystickKey;
287
    static const char*  _baseFontPointSizeKey;
288 289 290
};

#endif