diff --git a/qgcresources.qrc b/qgcresources.qrc
index 5b6fa54b53d55297f9774605cfbb30482e0a7eb5..ff5c03e4dbebbbdfabfd3a0879844fd8c20c3774 100644
--- a/qgcresources.qrc
+++ b/qgcresources.qrc
@@ -171,6 +171,7 @@
src/FirmwarePlugin/APM/APMBrandImageSub.png
src/FirmwarePlugin/PX4/PX4BrandImage.png
src/FlightMap/Images/sub.png
+ resources/check.svg
resources/action.svg
diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc
index bf57edb25869f8b7509718a723e229ae89b3b8f6..7555cd38f129aada6df5dc73a9db9065dcd5de75 100644
--- a/qgroundcontrol.qrc
+++ b/qgroundcontrol.qrc
@@ -87,6 +87,7 @@
src/QmlControls/ParameterEditorDialog.qml
src/PlanView/PlanToolBar.qml
src/QmlControls/QGCButton.qml
+ src/QmlControls/QGCCheckListItem.qml
src/QmlControls/QGCCheckBox.qml
src/QmlControls/QGCColoredImage.qml
src/QmlControls/QGCComboBox.qml
@@ -192,6 +193,7 @@
src/FlightMap/Widgets/VibrationPageWidget.qml
src/FlightMap/Widgets/VideoPageWidget.qml
src/FlightDisplay/VirtualJoystick.qml
+ src/FlightDisplay/CheckList.qml
src/MissionManager/CameraCalc.FactMetaData.json
diff --git a/resources/check.svg b/resources/check.svg
new file mode 100644
index 0000000000000000000000000000000000000000..f5c4901ebe56008b699828a31f3c22c2cfa42e9e
--- /dev/null
+++ b/resources/check.svg
@@ -0,0 +1,80 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/FlightDisplay/CheckList.qml b/src/FlightDisplay/CheckList.qml
new file mode 100644
index 0000000000000000000000000000000000000000..21c773359c0589bffba9f65573cb4a4d6594fb72
--- /dev/null
+++ b/src/FlightDisplay/CheckList.qml
@@ -0,0 +1,206 @@
+import QtQuick 2.3
+import QtQml.Models 2.1
+
+import QGroundControl 1.0
+import QGroundControl.FlightDisplay 1.0
+import QGroundControl.ScreenTools 1.0
+import QGroundControl.Controls 1.0
+import QGroundControl.Palette 1.0
+import QGroundControl.Vehicle 1.0
+
+// This class stores the data and functions of the check list but NOT the GUI (which is handled somewhere else).
+Item {
+ // Properties
+ property int unhealthySensors: _activeVehicle ? _activeVehicle.sensorsUnhealthyBits : 0
+ property bool gpsLock: _activeVehicle ? _activeVehicle.gps.lock.rawValue>=3 : 0
+ property var batPercentRemaining: _activeVehicle ? _activeVehicle.battery.percentRemaining.value : 0
+ property bool audioMuted: QGroundControl.settingsManager.appSettings.audioMuted.rawValue
+ property ObjectModel checkListItems: _checkListItems
+ property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle
+ property int _checkState: _activeVehicle ? (_activeVehicle.armed ? 1 + (buttonActuators._state + buttonMotors._state + buttonMission._state + buttonSoundOutput._state) / 4 / 4 : 0) : 0 ; // Shows progress of checks inside the checklist - unlocks next check steps in groups
+
+ // Connections
+ onBatPercentRemainingChanged: buttonBattery.updateItem();
+ onGpsLockChanged: buttonSensors.updateItem();
+ onAudioMutedChanged: buttonSoundOutput.updateItem();
+ onUnhealthySensorsChanged: updateVehicleDependentItems();
+
+ Connections {
+ target: QGroundControl.multiVehicleManager
+ onActiveVehicleChanged: onActiveVehicleChanged();
+ }
+ Component.onCompleted: {
+ if(QGroundControl.multiVehicleManager.vehicles.count > 0) {
+ onActiveVehicleChanged();
+ }
+ }
+
+ // Functions
+ function updateVehicleDependentItems() {
+ buttonSensors.updateItem();
+ buttonBattery.updateItem();
+ buttonRC.updateItem();
+ buttonEstimator.updateItem();
+ }
+ function onActiveVehicleChanged() {
+ buttonSoundOutput.updateItem(); // Just updated here for initialization once we connect to a vehicle
+ updateVehicleDependentItems();
+ }
+ function resetNrClicks() {
+ buttonHardware.resetNrClicks();
+ buttonBattery.resetNrClicks();
+ buttonRC.resetNrClicks();
+ buttonActuators.resetNrClicks();
+ buttonMotors.resetNrClicks();
+ buttonMission.resetNrClicks();
+ buttonSoundOutput.resetNrClicks();
+ buttonPayload.resetNrClicks();
+ buttonWeather.resetNrClicks();
+ buttonFlightAreaFree.resetNrClicks();
+ }
+
+ // Check list item data
+ ObjectModel {
+ id: _checkListItems
+
+ // Standard check list items (group 0) - Available from the start
+ QGCCheckListItem {
+ id: buttonHardware
+ name: "Hardware"
+ defaulttext: "Props mounted? Wings secured? Tail secured?"
+ }
+ QGCCheckListItem {
+ id: buttonBattery
+ name: "Battery"
+ pendingtext: "Healthy & charged > 40%. Battery connector firmly plugged?"
+ function updateItem() {
+ if (!_activeVehicle) {
+ _state = 0;
+ } else {
+ if (!(unhealthySensors & Vehicle.SysStatusSensorBattery) && batPercentRemaining>=40.0) _state = 1+3*(_nrClicked>0);
+ else {
+ if(unhealthySensors & Vehicle.SysStatusSensorBattery) failuretext="Not healthy. Check console.";
+ else if(batPercentRemaining<40.0) failuretext="Low (below 40%). Please recharge.";
+ _state = 3;
+ }
+ }
+ }
+ }
+ QGCCheckListItem {
+ id: buttonSensors
+ name: "Sensors"
+ function updateItem() {
+ if (!_activeVehicle) {
+ _state = 0;
+ } else {
+ if(!(unhealthySensors & Vehicle.SysStatusSensor3dMag) &&
+ !(unhealthySensors & Vehicle.SysStatusSensor3dAccel) &&
+ !(unhealthySensors & Vehicle.SysStatusSensor3dGyro) &&
+ !(unhealthySensors & Vehicle.SysStatusSensorAbsolutePressure) &&
+ !(unhealthySensors & Vehicle.SysStatusSensorDifferentialPressure) &&
+ !(unhealthySensors & Vehicle.SysStatusSensorGPS)) {
+ if(!gpsLock) {
+ pendingtext="Pending. Waiting for GPS lock.";
+ _state=1;
+ } else {
+ _state = 4; // All OK
+ }
+ } else {
+ if(unhealthySensors & Vehicle.SysStatusSensor3dMag) failuretext="Failure. Magnetometer issues. Check console.";
+ else if(unhealthySensors & Vehicle.SysStatusSensor3dAccel) failuretext="Failure. Accelerometer issues. Check console.";
+ else if(unhealthySensors & Vehicle.SysStatusSensor3dGyro) failuretext="Failure. Gyroscope issues. Check console.";
+ else if(unhealthySensors & Vehicle.SysStatusSensorAbsolutePressure) failuretext="Failure. Barometer issues. Check console.";
+ else if(unhealthySensors & Vehicle.SysStatusSensorDifferentialPressure) failuretext="Failure. Airspeed sensor issues. Check console.";
+ else if(unhealthySensors & Vehicle.SysStatusSensorGPS) failuretext="Failure. No valid or low quality GPS signal. Check console.";
+ _state = 3;
+ }
+ }
+ }
+ }
+ QGCCheckListItem {
+ id: buttonRC
+ name: "Radio Control"
+ pendingtext: "Receiving signal. Perform range test & confirm."
+ failuretext: "No signal or invalid autopilot-RC config. Check RC and console."
+ function updateItem() {
+ if (!_activeVehicle) {
+ _state = 0;
+ } else {
+ if (unhealthySensors & Vehicle.SysStatusSensorRCReceiver) {_state = 3}
+ else {_state = 1+3*(_nrClicked>0);}
+ }
+ }
+ }
+ QGCCheckListItem {
+ id: buttonEstimator
+ name: "Global position estimate"
+ function updateItem() {
+ if (!_activeVehicle) {
+ _state = 0;
+ } else {
+ if (unhealthySensors & Vehicle.SysStatusSensorAHRS) {_state = 3;}
+ else {_state = 4;}
+ }
+ }
+ }
+
+ // Check list item group 1 - Require arming
+ QGCLabel {text:qsTr("Please arm the vehicle here.") ; opacity: 0.2+0.8*(QGroundControl.multiVehicleManager.vehicles.count > 0) ; anchors.horizontalCenter:buttonHardware.horizontalCenter ; anchors.topMargin:40 ; anchors.bottomMargin:40;}
+ QGCCheckListItem {
+ id: buttonActuators
+ name: "Actuators"
+ group: 1
+ defaulttext: "Move all control surfaces. Did they work properly?"
+ }
+ QGCCheckListItem {
+ id: buttonMotors
+ name: "Motors"
+ group: 1
+ defaulttext: "Propellers free? Then throttle up gently. Working properly?"
+ }
+ QGCCheckListItem {
+ id: buttonMission
+ name: "Mission"
+ group: 1
+ defaulttext: "Please confirm mission is valid (waypoints valid, no terrain collision)."
+ }
+ QGCCheckListItem {
+ id: buttonSoundOutput
+ name: "Sound output"
+ group: 1
+ pendingtext: "QGC audio output enabled. System audio output enabled, too?"
+ failuretext: "Failure, QGC audio output is disabled. Please enable it under application settings->general to hear audio warnings!"
+ function updateItem() {
+ if (!_activeVehicle) {
+ _state = 0;
+ } else {
+ if (audioMuted) {_state = 3 ; _nrClicked=0;}
+ else {_state = 1+3*(_nrClicked>0);}
+ }
+ }
+ }
+
+ // Check list item group 2 - Final checks before launch
+ QGCLabel {text:qsTr("Last preparations before launch") ; opacity : 0.2+0.8*(_checkState >= 2); anchors.horizontalCenter:buttonHardware.horizontalCenter}
+ QGCCheckListItem {
+ id: buttonPayload
+ name: "Payload"
+ group: 2
+ defaulttext: "Configured and started?"
+ pendingtext: "Payload lid closed?"
+ }
+ QGCCheckListItem {
+ id: buttonWeather
+ name: "Wind & weather"
+ group: 2
+ defaulttext: "OK for your platform?"
+ pendingtext: "Launching into the wind?"
+ }
+ QGCCheckListItem {
+ id: buttonFlightAreaFree
+ name: "Flight area"
+ group: 2
+ defaulttext: "Launch area and path free of obstacles/people?"
+ }
+ } // Object Model
+}
diff --git a/src/FlightDisplay/FlightDisplayView.qml b/src/FlightDisplay/FlightDisplayView.qml
index 85a4876103580b9705f19228cbf6537d77fa8344..7cd41be71d6c39ce14c51e86779e4e1d133a55c3 100644
--- a/src/FlightDisplay/FlightDisplayView.qml
+++ b/src/FlightDisplay/FlightDisplayView.qml
@@ -17,6 +17,7 @@ import QtPositioning 5.3
import QtMultimedia 5.5
import QtQuick.Layouts 1.2
import QtQuick.Window 2.2
+import QtQml.Models 2.1
import QGroundControl 1.0
import QGroundControl.FlightDisplay 1.0
@@ -46,13 +47,13 @@ QGCView {
property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle
property bool _mainIsMap: QGroundControl.videoManager.hasVideo ? QGroundControl.loadBoolGlobalSetting(_mainIsMapKey, true) : true
property bool _isPipVisible: QGroundControl.videoManager.hasVideo ? QGroundControl.loadBoolGlobalSetting(_PIPVisibleKey, true) : false
+ property bool _useChecklist: QGroundControl.settingsManager.appSettings.useChecklist.rawValue
property real _savedZoomLevel: 0
property real _margins: ScreenTools.defaultFontPixelWidth / 2
property real _pipSize: flightView.width * 0.2
property alias _guidedController: guidedActionsController
property alias _altitudeSlider: altitudeSlider
-
readonly property var _dynamicCameras: _activeVehicle ? _activeVehicle.dynamicCameras : null
readonly property bool _isCamera: _dynamicCameras ? _dynamicCameras.cameras.count > 0 : false
readonly property bool isBackgroundDark: _mainIsMap ? (_flightMap ? _flightMap.isSatelliteMap : true) : true
@@ -112,6 +113,10 @@ QGCView {
Component.onCompleted: start(true /* flyView */)
}
+ CheckList {
+ id: checklist
+ }
+
Connections {
target: _missionController
onResumeMissionReady: guidedActionsController.confirmAction(guidedActionsController.actionResumeMissionReady)
@@ -504,8 +509,8 @@ QGCView {
z: _panel.z + 4
title: qsTr("Fly")
maxHeight: (_flightVideo.visible ? _flightVideo.y : parent.height) - toolStrip.y
- buttonVisible: [ _guidedController.showTakeoff || !_guidedController.showLand, _guidedController.showLand && !_guidedController.showTakeoff, true, true, true, _guidedController.smartShotsAvailable ]
- buttonEnabled: [ _guidedController.showTakeoff, _guidedController.showLand, _guidedController.showRTL, _guidedController.showPause, _anyActionAvailable, _anySmartShotAvailable ]
+ buttonVisible: [ _useChecklist, _guidedController.showTakeoff || !_guidedController.showLand, _guidedController.showLand && !_guidedController.showTakeoff, true, true, true, _guidedController.smartShotsAvailable ]
+ buttonEnabled: [ _useChecklist, _guidedController.showTakeoff, _guidedController.showLand, _guidedController.showRTL, _guidedController.showPause, _anyActionAvailable, _anySmartShotAvailable ]
property bool _anyActionAvailable: _guidedController.showStartMission || _guidedController.showResumeMission || _guidedController.showChangeAlt || _guidedController.showLandAbort
property bool _anySmartShotAvailable: _guidedController.showOrbit
@@ -551,6 +556,11 @@ QGCView {
]
model: [
+ {
+ name: "Checklist",
+ iconSource: "/qmlimages/check.svg",
+ dropPanelComponent: checklistDropPanel
+ },
{
name: _guidedController.takeoffTitle,
iconSource: "/res/takeoff.svg",
@@ -677,4 +687,61 @@ QGCView {
visible: false
}
}
-}
+
+ //-- Checklist GUI
+ Component {
+ id: checklistDropPanel
+
+ Rectangle {
+ id: checklistRect
+ visible: true
+ width: mainColumn.width + 3*ScreenTools.defaultFontPixelWidth
+ height: mainColumn.height + ScreenTools.defaultFontPixelHeight
+ color: qgcPal.windowShade
+ radius: 3
+ enabled: QGroundControl.multiVehicleManager.vehicles.count > 0;
+
+ Column {
+ id: mainColumn
+ width: 40*ScreenTools.defaultFontPixelWidth
+ spacing: 0.8*ScreenTools.defaultFontPixelWidth
+ anchors.left: parent.left
+ anchors.top: parent.top
+ anchors.topMargin: 0.6*ScreenTools.defaultFontPixelWidth
+ anchors.leftMargin: 1.5*ScreenTools.defaultFontPixelWidth
+
+ // Header/title of checklist
+ Item {
+ width: parent.width
+ height: 1.75*ScreenTools.defaultFontPixelHeight
+
+ QGCLabel {
+ text: _activeVehicle ? qsTr("Pre-flight checklist")+" (MAV ID:"+_activeVehicle.id+")" : qsTr("Pre-flight checklist (no vehicle)")
+ anchors.left: parent.left
+ anchors.verticalCenter: parent.verticalCenter
+ font.pointSize: ScreenTools.mediumFontPointSize
+ }
+ QGCButton {
+ width: 1.2*ScreenTools.defaultFontPixelHeight
+ height: 1.2*ScreenTools.defaultFontPixelHeight
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ opacity : 0.2+0.8*(QGroundControl.multiVehicleManager.vehicles.count > 0)
+ tooltip: "Reset the checklist (e.g. after a vehicle reboot)"
+
+ onClicked: checklist.resetNrClicks()
+
+ Image { source:"/qmlimages/MapSyncBlack.svg" ; anchors.fill: parent }
+ }
+ }
+
+ Rectangle {width:parent.width ; height:1 ; color:qgcPal.text}
+
+ // All check list items
+ Repeater {
+ model: checklist.checkListItems
+ }
+ } // Column
+ } //Rectangle
+ } //Component
+} //QGC View
diff --git a/src/FlightDisplay/qmldir b/src/FlightDisplay/qmldir
index f29069e4677e831ff7a5c8015e8827c712ee2831..bc327b9e3b1b05e075a51ce819f15a63b70d5107 100644
--- a/src/FlightDisplay/qmldir
+++ b/src/FlightDisplay/qmldir
@@ -9,4 +9,5 @@ GuidedActionsController 1.0 GuidedActionsController.qml
GuidedActionList 1.0 GuidedActionList.qml
GuidedAltitudeSlider 1.0 GuidedAltitudeSlider.qml
MultiVehicleList 1.0 MultiVehicleList.qml
+CheckList 1.0 CheckList.qml
diff --git a/src/QmlControls/QGCCheckListItem.qml b/src/QmlControls/QGCCheckListItem.qml
new file mode 100644
index 0000000000000000000000000000000000000000..0d0c113ecc9f5232faef22836e202ebfa03ff353
--- /dev/null
+++ b/src/QmlControls/QGCCheckListItem.qml
@@ -0,0 +1,74 @@
+import QtQuick 2.3
+import QtQuick.Controls 1.2
+import QtQuick.Controls.Styles 1.4
+
+import QGroundControl 1.0
+import QGroundControl.Palette 1.0
+import QGroundControl.ScreenTools 1.0
+
+QGCButton {
+ property string name: ""
+ property int group: 0
+ property string defaulttext: "Not checked yet"
+ property string pendingtext: ""
+ property string failuretext: "Failure. Check console."
+ property int _state: 0
+ property var _color: qgcPal.button
+ property int _nrClicked: 0
+ property string _text: qsTr(name)+ ": " + qsTr(defaulttext)
+
+ enabled : (_activeVehicle==null || _activeVehicle.connectionLost) ? false : checklist._checkState>=group
+ opacity : (_activeVehicle==null || _activeVehicle.connectionLost) ? 0.4 : 0.2+0.8*(checklist._checkState >= group);
+ width: 40*ScreenTools.defaultFontPixelWidth
+ style: ButtonStyle {
+ background: Rectangle {color:_color; border.color: qgcPal.button; radius:3}
+ label: Label {
+ text: _text
+ wrapMode: Text.WordWrap
+ horizontalAlignment: Text.AlignHCenter
+ color: _state>0 ? qgcPal.mapWidgetBorderLight : qgcPal.buttonText
+ }
+ }
+
+ // Connections
+ onPendingtextChanged: { if(_state==1) {getTextFromState(); getColorFromState();} }
+ onFailuretextChanged: { if(_state==3) {getTextFromState(); getColorFromState();} }
+ on_StateChanged: { getTextFromState(); getColorFromState(); }
+ onClicked: {
+ if(_state<2) _nrClicked=_nrClicked+1; //Only allow click-counter to increase when not failed yet
+ updateItem();
+ }
+
+ //Functions
+ function updateItem() {
+ // This is the default updateFunction. It assumes the item is a MANUAL check list item, i.e. one that
+ // only requires user clicks (one click if pendingtext="", two clicks otherwise) for completion.
+
+ if(_nrClicked===0) _state = 0;
+ else if(_nrClicked===1) {
+ if(pendingtext.length === 0) _state = 4;
+ else _state = 1;
+ } else _state = 4;
+
+ getTextFromState();
+ getColorFromState();
+ }
+ function getTextFromState() {
+ if(_state === 0) {_text= qsTr(name) + ": " + qsTr(defaulttext)} // Not checked yet
+ else if(_state === 1) {_text= ""+qsTr(name)+"" +": " + qsTr(pendingtext)} // Pending
+ else if(_state === 2) {_text= ""+qsTr(name)+"" +": " + qsTr("Minor problem")} // Small problem or need further user action to resolve
+ else if(_state === 3) {_text= ""+qsTr(name)+"" +": " + qsTr(failuretext)} // Big problem
+ else {_text= ""+qsTr(name)+"" +": " + qsTr("OK")} // All OK
+ }
+ function getColorFromState() {
+ if(_state === 0) {_color=qgcPal.button} // Not checked yet
+ else if(_state === 1) {_color=Qt.rgba(0.9,0.47,0.2,1)} // Pending
+ else if(_state === 2) {_color=Qt.rgba(1.0,0.6,0.2,1)} // Small problem or need further user action to resolve
+ else if(_state === 3) {_color=Qt.rgba(0.92,0.22,0.22,1)} // Big problem
+ else {_color=Qt.rgba(0.27,0.67,0.42,1)} // All OK
+ }
+ function resetNrClicks() {
+ _nrClicked=0;
+ updateItem();
+ }
+}
diff --git a/src/QmlControls/QGroundControl.Controls.qmldir b/src/QmlControls/QGroundControl.Controls.qmldir
index 6bbe56f224fca0a8747be57936d101dd2d8c8551..22e8f166b9ef3bc29e8157778f170071aaa34dfb 100644
--- a/src/QmlControls/QGroundControl.Controls.qmldir
+++ b/src/QmlControls/QGroundControl.Controls.qmldir
@@ -34,6 +34,7 @@ ParameterEditor 1.0 ParameterEditor.qml
ParameterEditorDialog 1.0 ParameterEditorDialog.qml
PlanToolBar 1.0 PlanToolBar.qml
QGCButton 1.0 QGCButton.qml
+QGCCheckListItem 1.0 QGCCheckListItem.qml
QGCCheckBox 1.0 QGCCheckBox.qml
QGCColoredImage 1.0 QGCColoredImage.qml
QGCComboBox 1.0 QGCComboBox.qml
diff --git a/src/Settings/App.SettingsGroup.json b/src/Settings/App.SettingsGroup.json
index 8e60817654335ff3cd472879bc6a075039e1d178..32d51f2bb4437097208fce78c1eec822d599a445 100644
--- a/src/Settings/App.SettingsGroup.json
+++ b/src/Settings/App.SettingsGroup.json
@@ -117,6 +117,13 @@
"type": "bool",
"defaultValue": false
},
+{
+ "name": "UseChecklist",
+ "shortDescription": "Use preflight checklist",
+ "longDescription": "If this option is enabled the preflight checklist will be used.",
+ "type": "bool",
+ "defaultValue": false
+},
{
"name": "BaseDeviceFontPointSize",
"shortDescription": "Application font size",
diff --git a/src/Settings/AppSettings.cc b/src/Settings/AppSettings.cc
index 56177c3196670e61d4d417281d1809b7675dd4f5..264181c8fd8fea423b9ca33d41ef90cde1aa7174 100644
--- a/src/Settings/AppSettings.cc
+++ b/src/Settings/AppSettings.cc
@@ -33,6 +33,7 @@ const char* AppSettings::indoorPaletteName = "StyleIs
const char* AppSettings::showLargeCompassName = "ShowLargeCompass";
const char* AppSettings::savePathName = "SavePath";
const char* AppSettings::autoLoadMissionsName = "AutoLoadMissions";
+const char* AppSettings::useChecklistName = "UseChecklist";
const char* AppSettings::mapboxTokenName = "MapboxToken";
const char* AppSettings::esriTokenName = "EsriToken";
const char* AppSettings::defaultFirmwareTypeName = "DefaultFirmwareType";
@@ -75,6 +76,7 @@ AppSettings::AppSettings(QObject* parent)
, _showLargeCompassFact (NULL)
, _savePathFact (NULL)
, _autoLoadMissionsFact (NULL)
+ , _useChecklistFact (NULL)
, _mapboxTokenFact (NULL)
, _esriTokenFact (NULL)
, _defaultFirmwareTypeFact (NULL)
@@ -220,6 +222,15 @@ Fact* AppSettings::audioMuted(void)
return _audioMutedFact;
}
+Fact* AppSettings::useChecklist(void)
+{
+ if (!_useChecklistFact) {
+ _useChecklistFact = _createSettingsFact(useChecklistName);
+ }
+
+ return _useChecklistFact;
+}
+
Fact* AppSettings::appFontPointSize(void)
{
if (!_appFontPointSizeFact) {
diff --git a/src/Settings/AppSettings.h b/src/Settings/AppSettings.h
index d1a7e2fbbf38c301f5012d425d9dfb83ee4a819f..3b7b88fa6b1afe6aa24129ab3c462212dc1282a7 100644
--- a/src/Settings/AppSettings.h
+++ b/src/Settings/AppSettings.h
@@ -37,6 +37,7 @@ public:
Q_PROPERTY(Fact* showLargeCompass READ showLargeCompass CONSTANT)
Q_PROPERTY(Fact* savePath READ savePath CONSTANT)
Q_PROPERTY(Fact* autoLoadMissions READ autoLoadMissions CONSTANT)
+ Q_PROPERTY(Fact* useChecklist READ useChecklist CONSTANT)
Q_PROPERTY(Fact* mapboxToken READ mapboxToken CONSTANT)
Q_PROPERTY(Fact* esriToken READ esriToken CONSTANT)
Q_PROPERTY(Fact* defaultFirmwareType READ defaultFirmwareType CONSTANT)
@@ -75,6 +76,7 @@ public:
Fact* showLargeCompass (void);
Fact* savePath (void);
Fact* autoLoadMissions (void);
+ Fact* useChecklist (void);
Fact* mapboxToken (void);
Fact* esriToken (void);
Fact* defaultFirmwareType (void);
@@ -110,6 +112,7 @@ public:
static const char* showLargeCompassName;
static const char* savePathName;
static const char* autoLoadMissionsName;
+ static const char* useChecklistName;
static const char* mapboxTokenName;
static const char* esriTokenName;
static const char* defaultFirmwareTypeName;
@@ -160,6 +163,7 @@ private:
SettingsFact* _showLargeCompassFact;
SettingsFact* _savePathFact;
SettingsFact* _autoLoadMissionsFact;
+ SettingsFact* _useChecklistFact;
SettingsFact* _mapboxTokenFact;
SettingsFact* _esriTokenFact;
SettingsFact* _defaultFirmwareTypeFact;
diff --git a/src/Vehicle/Vehicle.h b/src/Vehicle/Vehicle.h
index 6b22bc5e16257e7dc4714de94f0a74c4b5334d04..1323f6fb2d687255da10da365ce098a99173b6fa 100644
--- a/src/Vehicle/Vehicle.h
+++ b/src/Vehicle/Vehicle.h
@@ -380,7 +380,7 @@ public:
SysStatusSensor3dGyro = MAV_SYS_STATUS_SENSOR_3D_GYRO,
SysStatusSensor3dAccel = MAV_SYS_STATUS_SENSOR_3D_ACCEL,
SysStatusSensor3dMag = MAV_SYS_STATUS_SENSOR_3D_MAG,
- SysStatusSensorAsolutePressure = MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE,
+ SysStatusSensorAbsolutePressure = MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE,
SysStatusSensorDifferentialPressure = MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE,
SysStatusSensorGPS = MAV_SYS_STATUS_SENSOR_GPS,
SysStatusSensorOpticalFlow = MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW,
diff --git a/src/ui/preferences/GeneralSettings.qml b/src/ui/preferences/GeneralSettings.qml
index f302b3439b2a1275992a7a2af617b12078733d02..70aa6cb082c3aa9d0ae5b17cd66a5bac2ae4598d 100644
--- a/src/ui/preferences/GeneralSettings.qml
+++ b/src/ui/preferences/GeneralSettings.qml
@@ -411,6 +411,16 @@ QGCView {
}
}
}
+
+ //-----------------------------------------------------------------
+ //-- Checklist Settings
+ FactCheckBox {
+ text: qsTr("Use preflight checklist")
+ fact: _useChecklist
+ visible: _useChecklist.visible
+
+ property Fact _useChecklist: QGroundControl.settingsManager.appSettings.useChecklist
+ }
}
}