QGCOptions.h 11.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13
/****************************************************************************
 *
 *   (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.
 *
 ****************************************************************************/

#pragma once

#include <QObject>
#include <QString>
14
#include <QUrl>
15
#include <QColor>
16 17 18 19 20

/// @file
///     @brief Core Plugin Interface for QGroundControl - Application Options
///     @author Gus Grubba <mavlink@grubba.com>

21
class CustomInstrumentWidget;
22 23 24 25
class QGCOptions : public QObject
{
    Q_OBJECT
public:
26
    QGCOptions(QObject* parent = nullptr);
27

28 29 30 31
    Q_PROPERTY(bool                     combineSettingsAndSetup         READ combineSettingsAndSetup        CONSTANT)
    Q_PROPERTY(double                   toolbarHeightMultiplier         READ toolbarHeightMultiplier        CONSTANT)
    Q_PROPERTY(bool                     enablePlanViewSelector          READ enablePlanViewSelector         CONSTANT)
    Q_PROPERTY(CustomInstrumentWidget*  instrumentWidget                READ instrumentWidget               CONSTANT)
32
    Q_PROPERTY(QUrl                     flyViewOverlay                  READ flyViewOverlay                 CONSTANT)
33
    Q_PROPERTY(QUrl                     preFlightChecklistUrl           READ preFlightChecklistUrl          CONSTANT)
34 35 36 37 38 39

    Q_PROPERTY(QUrl                     mainToolbarUrl                  READ mainToolbarUrl                 CONSTANT)
    Q_PROPERTY(QUrl                     planToolbarUrl                  READ planToolbarUrl                 CONSTANT)
    Q_PROPERTY(QColor                   toolbarBackgroundLight          READ toolbarBackgroundLight         CONSTANT)
    Q_PROPERTY(QColor                   toolbarBackgroundDark           READ toolbarBackgroundDark          CONSTANT)

Gus Grubba's avatar
Gus Grubba committed
40
    Q_PROPERTY(QUrl                     planToolbarIndicatorsUrl        READ planToolbarIndicatorsUrl       CONSTANT)
41 42 43 44 45
    Q_PROPERTY(bool                     showSensorCalibrationCompass    READ showSensorCalibrationCompass   NOTIFY showSensorCalibrationCompassChanged)
    Q_PROPERTY(bool                     showSensorCalibrationGyro       READ showSensorCalibrationGyro      NOTIFY showSensorCalibrationGyroChanged)
    Q_PROPERTY(bool                     showSensorCalibrationAccel      READ showSensorCalibrationAccel     NOTIFY showSensorCalibrationAccelChanged)
    Q_PROPERTY(bool                     showSensorCalibrationLevel      READ showSensorCalibrationLevel     NOTIFY showSensorCalibrationLevelChanged)
    Q_PROPERTY(bool                     showSensorCalibrationAirspeed   READ showSensorCalibrationAirspeed  NOTIFY showSensorCalibrationAirspeedChanged)
46 47
    Q_PROPERTY(bool                     sensorsHaveFixedOrientation     READ sensorsHaveFixedOrientation    CONSTANT)
    Q_PROPERTY(bool                     wifiReliableForCalibration      READ wifiReliableForCalibration     CONSTANT)
48
    Q_PROPERTY(bool                     showFirmwareUpgrade             READ showFirmwareUpgrade            NOTIFY showFirmwareUpgradeChanged)
49
    Q_PROPERTY(QString                  firmwareUpgradeSingleURL        READ firmwareUpgradeSingleURL       CONSTANT)
50 51
    Q_PROPERTY(bool                     guidedBarShowEmergencyStop      READ guidedBarShowEmergencyStop     NOTIFY guidedBarShowEmergencyStopChanged)
    Q_PROPERTY(bool                     guidedBarShowOrbit              READ guidedBarShowOrbit             NOTIFY guidedBarShowOrbitChanged)
Gus Grubba's avatar
Gus Grubba committed
52
    Q_PROPERTY(bool                     guidedBarShowROI                READ guidedBarShowROI               NOTIFY guidedBarShowROIChanged)
53
    Q_PROPERTY(bool                     missionWaypointsOnly            READ missionWaypointsOnly           NOTIFY missionWaypointsOnlyChanged)
54
    Q_PROPERTY(bool                     multiVehicleEnabled             READ multiVehicleEnabled            NOTIFY multiVehicleEnabledChanged)
55 56
    Q_PROPERTY(bool                     showOfflineMapExport            READ showOfflineMapExport           NOTIFY showOfflineMapExportChanged)
    Q_PROPERTY(bool                     showOfflineMapImport            READ showOfflineMapImport           NOTIFY showOfflineMapImportChanged)
57
    Q_PROPERTY(bool                     useMobileFileDialog             READ useMobileFileDialog            CONSTANT)
58
    Q_PROPERTY(bool                     showMissionStatus               READ showMissionStatus              CONSTANT)
59
    Q_PROPERTY(bool                     guidedActionsRequireRCRSSI      READ guidedActionsRequireRCRSSI     CONSTANT)
60
    Q_PROPERTY(bool                     showMissionAbsoluteAltitude     READ showMissionAbsoluteAltitude    NOTIFY showMissionAbsoluteAltitudeChanged)
61
    Q_PROPERTY(bool                     showSimpleMissionStart          READ showSimpleMissionStart         NOTIFY showSimpleMissionStartChanged)
62
    Q_PROPERTY(bool                     disableVehicleConnection        READ disableVehicleConnection       CONSTANT)
63 64
    Q_PROPERTY(float                    devicePixelRatio                READ devicePixelRatio               NOTIFY devicePixelRatioChanged)
    Q_PROPERTY(float                    devicePixelDensity              READ devicePixelDensity             NOTIFY devicePixelDensityChanged)
65
    Q_PROPERTY(bool                     checkFirmwareVersion            READ checkFirmwareVersion           CONSTANT)
66
    Q_PROPERTY(bool                     showMavlinkLogOptions           READ showMavlinkLogOptions          CONSTANT)
67
    Q_PROPERTY(bool                     enableMultiVehicleList          READ enableMultiVehicleList         CONSTANT)
68
    Q_PROPERTY(bool                     enableMapScale                  READ enableMapScale                 CONSTANT)
69

Don Gagne's avatar
Don Gagne committed
70 71
    /// Should QGC hide its settings menu and colapse it into one single menu (Settings and Vehicle Setup)?
    /// @return true if QGC should consolidate both menus into one.
72
    virtual bool        combineSettingsAndSetup     () { return false; }
Don Gagne's avatar
Don Gagne committed
73 74 75

    /// Main ToolBar Multiplier.
    /// @return Factor to use when computing toolbar height
76
    virtual double      toolbarHeightMultiplier     () { return 1.0; }
Don Gagne's avatar
Don Gagne committed
77 78 79

    /// Enable Plan View Selector (Mission, Fence or Rally)
    /// @return True or false
80
    virtual bool        enablePlanViewSelector      () { return true; }
Don Gagne's avatar
Don Gagne committed
81 82 83

    /// Provides an alternate instrument widget for the Fly View
    /// @return An alternate widget (see QGCInstrumentWidget.qml, the default widget)
84
    virtual CustomInstrumentWidget* instrumentWidget();
Don Gagne's avatar
Don Gagne committed
85

86 87
    /// Should the mission status indicator (Plan View) be shown?
    /// @return Yes or no
88
    virtual bool    showMissionStatus               () { return true; }
89

90 91
    /// Allows access to the full fly view window
    virtual QUrl    flyViewOverlay                  () const { return QUrl(); }
92 93 94 95

    /// Provides an optional preflight checklist
    virtual QUrl    preFlightChecklistUrl           () const { return QUrl(); }

96 97 98 99 100
    /// Allows replacing the toolbar
    virtual QUrl    mainToolbarUrl                  () const;
    virtual QUrl    planToolbarUrl                  () const;
    virtual QColor  toolbarBackgroundLight          () const;
    virtual QColor  toolbarBackgroundDark           () const;
Gus Grubba's avatar
Gus Grubba committed
101 102
    /// Allows replacing the Plan View toolbar container
    virtual QUrl    planToolbarIndicatorsUrl        () const;
103
    /// By returning false you can hide the following sensor calibration pages
104 105 106 107 108
    virtual bool    showSensorCalibrationCompass    () const { return true; }
    virtual bool    showSensorCalibrationGyro       () const { return true; }
    virtual bool    showSensorCalibrationAccel      () const { return true; }
    virtual bool    showSensorCalibrationLevel      () const { return true; }
    virtual bool    showSensorCalibrationAirspeed   () const { return true; }
109 110
    virtual bool    wifiReliableForCalibration      () const { return false; }
    virtual bool    sensorsHaveFixedOrientation     () const { return false; }
111
    virtual bool    showFirmwareUpgrade             () const { return true; }
112 113
    virtual bool    guidedBarShowEmergencyStop      () const { return true; }
    virtual bool    guidedBarShowOrbit              () const { return true; }
Gus Grubba's avatar
Gus Grubba committed
114
    virtual bool    guidedBarShowROI                () const { return true; }
115
    virtual bool    missionWaypointsOnly            () const { return false; }  ///< true: Only allow waypoints and complex items in Plan
116
    virtual bool    multiVehicleEnabled             () const { return true; }   ///< false: multi vehicle support is disabled
117
    virtual bool    guidedActionsRequireRCRSSI      () const { return false; }  ///< true: Guided actions will be disabled is there is no RC RSSI
118 119
    virtual bool    showOfflineMapExport            () const { return true; }
    virtual bool    showOfflineMapImport            () const { return true; }
120
    virtual bool    showMissionAbsoluteAltitude     () const { return true; }
121
    virtual bool    showSimpleMissionStart          () const { return false; }
122
    virtual bool    disableVehicleConnection        () const { return false; }  ///< true: vehicle connection is disabled
123
    virtual bool    checkFirmwareVersion            () const { return true; }
124
    virtual bool    showMavlinkLogOptions           () const { return true; }
125 126
    virtual bool    enableMultiVehicleList          () const { return true; }
    virtual bool    enableMapScale                  () const { return true; }
127

128
#if defined(__mobile__)
129
    virtual bool    useMobileFileDialog             () const { return true;}
130
#else
131
    virtual bool    useMobileFileDialog             () const { return false;}
132 133
#endif

134 135 136 137
    /// If returned QString in non-empty it means that firmware upgrade will run in a mode which only
    /// supports downloading a single firmware file from the URL. It also supports custom install through
    /// the Advanced options.
    virtual QString firmwareUpgradeSingleURL        () const { return QString(); }
138

139 140 141 142
    /// Device specific pixel ratio/density (for when Qt doesn't properly read it from the hardware)
    virtual float   devicePixelRatio                () const { return 0.0f; }
    virtual float   devicePixelDensity              () const { return 0.0f; }

143 144 145 146 147 148
signals:
    void showSensorCalibrationCompassChanged    (bool show);
    void showSensorCalibrationGyroChanged       (bool show);
    void showSensorCalibrationAccelChanged      (bool show);
    void showSensorCalibrationLevelChanged      (bool show);
    void showSensorCalibrationAirspeedChanged   (bool show);
149
    void showFirmwareUpgradeChanged             (bool show);
150
    void guidedBarShowEmergencyStopChanged      (bool show);
151
    void guidedBarShowOrbitChanged              (bool show);
Gus Grubba's avatar
Gus Grubba committed
152
    void guidedBarShowROIChanged                (bool show);
153
    void missionWaypointsOnlyChanged            (bool missionWaypointsOnly);
154
    void multiVehicleEnabledChanged             (bool multiVehicleEnabled);
155 156
    void showOfflineMapExportChanged            ();
    void showOfflineMapImportChanged            ();
157
    void showMissionAbsoluteAltitudeChanged     ();
158
    void showSimpleMissionStartChanged          ();
159 160
    void devicePixelRatioChanged                ();
    void devicePixelDensityChanged              ();
161

162 163 164 165 166 167 168 169 170 171 172
private:
    CustomInstrumentWidget* _defaultInstrumentWidget;
};

//-----------------------------------------------------------------------------
class CustomInstrumentWidget : public QObject
{
    Q_OBJECT
public:
    //-- Widget Position
    enum Pos {
Gus Grubba's avatar
Gus Grubba committed
173 174 175 176 177 178
        POS_TOP_RIGHT,
        POS_CENTER_RIGHT,
        POS_BOTTOM_RIGHT,
        POS_TOP_LEFT,
        POS_CENTER_LEFT,
        POS_BOTTOM_LEFT
179
    };
180
    Q_ENUM(Pos)
181
    CustomInstrumentWidget(QObject* parent = nullptr);
182 183 184
    Q_PROPERTY(QUrl     source  READ source CONSTANT)
    Q_PROPERTY(Pos      widgetPosition              READ widgetPosition             NOTIFY widgetPositionChanged)
    virtual QUrl        source                      () { return QUrl(); }
Gus Grubba's avatar
Gus Grubba committed
185
    virtual Pos         widgetPosition              () { return POS_TOP_RIGHT; }
186 187
signals:
    void widgetPositionChanged  ();
188
};