diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc
index 50ba35c..7555cd3 100644
--- a/qgroundcontrol.qrc
+++ b/qgroundcontrol.qrc
@@ -193,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/src/FlightDisplay/CheckList.qml b/src/FlightDisplay/CheckList.qml
new file mode 100644
index 0000000..21c7733
--- /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 e9cdd56..4f143fe 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: [ QGroundControl.settingsManager.appSettings.useChecklist.rawValue, _guidedController.showTakeoff || !_guidedController.showLand, _guidedController.showLand && !_guidedController.showTakeoff, true, true, true, _guidedController.smartShotsAvailable ]
- buttonEnabled: [ QGroundControl.settingsManager.appSettings.useChecklist.rawValue, _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
@@ -683,291 +688,58 @@ QGCView {
}
}
+ //-- Checklist GUI
Component {
id: checklistDropPanel
Rectangle {
- id: checklist
- width: mainColumn.width + (ScreenTools.defaultFontPixelWidth * 4)
- height: (headerColumn.height+mainColumn.height) * 1.07
- color: qgcPal.windowShade
- radius: 20
- enabled: QGroundControl.multiVehicleManager.vehicles.count > 0;
-
- onBatPercentRemainingChanged: {if(_initialized) buttonBattery.updateItem();}
- onGpsLockChanged: {buttonSensors.updateItem();}
-
- // Connections
- Connections {
- target: _activeVehicle
- onUnhealthySensorsChanged: checklist.onUnhealthySensorsChanged();
- }
- Connections {
- target: QGroundControl.multiVehicleManager
- onActiveVehicleChanged: checklist.onActiveVehicleChanged();
- onActiveVehicleAvailableChanged: {}
- }
- Connections {
- target: QGroundControl.settingsManager.appSettings.audioMuted
- onValueChanged: buttonSoundOutput.updateItem(); //TODO(philippoe): We are binding to a signal which is explicitly marked as "only for QT internal use" here.
- }
- Component.onCompleted: {
- if(QGroundControl.multiVehicleManager.vehicles.count > 0) {
- onActiveVehicleChanged();
- _initialized=true;
- }
- }
-
- 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
- onUnhealthySensorsChanged(); // The health states could all have changed - need to update them.
- }
- function onUnhealthySensorsChanged() {
- var unhealthySensorsStr = _activeVehicle.unhealthySensors;
-
- // Set to healthy per default
- for(var i=0;i<32;i++) _healthFlags[i]=true;
-
- for(i=0;i 0;
Column {
- id: headerColumn
- x: 2*ScreenTools.defaultFontPixelWidth
- y: 2*ScreenTools.defaultFontPixelWidth
- width: 320
- spacing: 8
+ id: mainColumn
+ x: 1.5*ScreenTools.defaultFontPixelWidth
+ y: 0.4*ScreenTools.defaultFontPixelWidth
+ width: 40*ScreenTools.defaultFontPixelWidth
+ spacing: 0.8*ScreenTools.defaultFontPixelWidth
// Header/title of checklist
- QGCLabel {anchors.horizontalCenter: parent.horizontalCenter ; font.pointSize: ScreenTools.mediumFontPointSize ; text: _activeVehicle ? qsTr("Pre-flight checklist")+" (MAV ID:"+_activeVehicle.id+")" : qsTr("Pre-flight checklist (awaiting vehicle...)");}
- Rectangle {anchors.left:parent.left ; anchors.right:parent.right ; height:1 ; color:qgcPal.text}
- }
+ Item {
+ width: parent.width
+ height: 1.75*ScreenTools.defaultFontPixelHeight
- Column {
- id: mainColumn
- x: 2*ScreenTools.defaultFontPixelWidth
- anchors.top:headerColumn.bottom
- anchors.topMargin:ScreenTools.defaultFontPixelWidth
- width: 320
- spacing: 6
- enabled : QGroundControl.multiVehicleManager.vehicles.count > 0;
- opacity : 0.2+0.8*(QGroundControl.multiVehicleManager.vehicles.count > 0);
-
- // Checklist items: Standard
- QGCCheckListItem {
- id: buttonHardware
- name: "Hardware"
- defaulttext: "Props mounted? Wings secured? Tail secured?"
- }
+ 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)"
- QGCCheckListItem {
- id: buttonBattery
- name: "Battery"
- pendingtext: "Healthy & charged > 40%. Battery connector firmly plugged?"
- function updateItem() {
- if (!_activeVehicle) {
- _state = 0;
- } else {
- if (checklist._healthFlags[25] && batPercentRemaining>=40.0) _state = 1+3*(_nrClicked>0);
- else {
- if(!checklist._healthFlags[25]) buttonBattery.failuretext="Not healthy. Check console.";
- else if(batPercentRemaining<40.0) buttonBattery.failuretext="Low (below 40%). Please recharge.";
- buttonBattery._state = 3;
- }
- }
- }
- }
+ onClicked: checklist.resetNrClicks()
- QGCCheckListItem {
- id: buttonSensors
- name: "Sensors"
- function updateItem() {
- if (!_activeVehicle) {
- _state = 0;
- } else {
- if(checklist._healthFlags[0] &&
- checklist._healthFlags[1] &&
- checklist._healthFlags[2] &&
- checklist._healthFlags[3] &&
- checklist._healthFlags[4] &&
- checklist._healthFlags[5]) {
- if(!gpsLock) {
- buttonSensors.pendingtext="Pending. Waiting for GPS lock.";
- buttonSensors._state=1;
- } else {
- _state = 4; // All OK
- }
- } else {
- if(!checklist._healthFlags[0]) failuretext="Failure. Gyroscope issues. Check console.";
- else if(!checklist._healthFlags[1]) failuretext="Failure. Accelerometer issues. Check console.";
- else if(!checklist._healthFlags[2]) failuretext="Failure. Magnetometer issues. Check console.";
- else if(!checklist._healthFlags[3]) failuretext="Failure. Barometer issues. Check console.";
- else if(!checklist._healthFlags[4]) failuretext="Failure. Airspeed sensor issues. Check console.";
- else if(!checklist._healthFlags[5]) 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 (_healthFlags[16]) {_state = 1+3*(_nrClicked>0);}
- else {_state = 3;}
- }
- }
- }
-
- QGCCheckListItem {
- id: buttonEstimator
- name: "Global position estimate"
- function updateItem() {
- if (!_activeVehicle) {
- _state = 0;
- } else {
- if (_healthFlags[21]) {_state = 4;}
- else {_state = 3;}
- }
+ Image { source:"/qmlimages/MapSyncBlack.svg" ; anchors.fill: parent }
}
- }
-
- // Arming header
- //Rectangle {anchors.left:parent.left ; anchors.right:parent.right ; height:1 ; color:qgcPal.text}
- QGCLabel {anchors.horizontalCenter:parent.horizontalCenter ; text:qsTr("Please arm the vehicle here.")}
- //Rectangle {anchors.left:parent.left ; anchors.right:parent.right ; height:1 ; color:qgcPal.text}
-
- 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 (QGroundControl.settingsManager.appSettings.audioMuted.rawValue) {_state = 3;_nrClicked=0;}
- else {_state = 1+3*(_nrClicked>0);}
- }
- }
- }
-
- // Directly before launch header
- //Rectangle {anchors.left:parent.left ; anchors.right:parent.right ; height:1 ; color:qgcPal.text}
- QGCLabel {anchors.horizontalCenter:parent.horizontalCenter ; text:qsTr("Last preparations before launch") ; opacity : 0.2+0.8*(_checkState >= 2);}
- //Rectangle {anchors.left:parent.left ; anchors.right:parent.right ; height:1 ; color:qgcPal.text}
-
- 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?"
- }
+ }
- } // Column
+ Rectangle {width:parent.width ; height:1 ; color:qgcPal.text}
- property bool _initialized:false
- property var _healthFlags: []
- 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
- property bool gpsLock: _activeVehicle ? _activeVehicle.gps.lock.rawValue>=3 : 0
- property var batPercentRemaining: _activeVehicle ? _activeVehicle.battery.getFact("percentRemaining").value : 0
-
- // TODO: Having access to MAVLINK enums (or at least QML consts) would be much cleaner than the code below
- property int subsystem_type_gyro : 1
- property int subsystem_type_acc : 2
- property int subsystem_type_mag : 4
- property int subsystem_type_abspressure : 8
- property int subsystem_type_diffpressure : 16
- property int subsystem_type_gps : 32
- property int subsystem_type_positioncontrol : 16384
- property int subsystem_type_motorcontrol : 32768
- property int subsystem_type_rcreceiver : 65536
- property int subsystem_type_ahrs : 2097152
- property int subsystem_type_terrain : 4194304
- property int subsystem_type_reversemotor : 8388608
- property int subsystem_type_logging : 16777216
- property int subsystem_type_sensorbattery : 33554432
- property int subsystem_type_rangefinder : 67108864
+ // All check list items
+ Repeater {
+ model: checklist.checkListItems
+ }
+ } // Column
} //Rectangle
} //Component
} //QGC View
diff --git a/src/FlightDisplay/qmldir b/src/FlightDisplay/qmldir
index f29069e..bc327b9 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/DropPanel.qml b/src/QmlControls/DropPanel.qml
index 1de3e1c..91fe3dc 100644
--- a/src/QmlControls/DropPanel.qml
+++ b/src/QmlControls/DropPanel.qml
@@ -64,7 +64,7 @@ Item {
}
if (visible) {
visible = false
- //_dropDownComponent = undefined //TODO (philippoe) such that drop down component state is not deleted - check with don gagne whether this is necessary
+ _dropDownComponent = undefined
toolStrip.uncheckAll()
}
}
diff --git a/src/QmlControls/QGCCheckListItem.qml b/src/QmlControls/QGCCheckListItem.qml
index cd1e82c..0d0c113 100644
--- a/src/QmlControls/QGCCheckListItem.qml
+++ b/src/QmlControls/QGCCheckListItem.qml
@@ -7,20 +7,19 @@ import QGroundControl.Palette 1.0
import QGroundControl.ScreenTools 1.0
QGCButton {
- property string name: ""
- property int _state: 0
- property var _color: qgcPal.button;//qgcPal.windowShade;//qgcPal.windowShadeDark;//Qt.rgba(0.5,0.5,0.5,1) //qgcPal.window;//
- property int _nrClicked: 0
- property int group: 0
- property string defaulttext: "Not checked yet"
- property string pendingtext: ""
- property string failuretext: "Failure. Check console."
- property string _text: qsTr(name)+ ": " + qsTr(defaulttext)
+ 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 : _checkState>=group
- opacity : (_activeVehicle==null || _activeVehicle.connectionLost) ? 0.4 : 0.2+0.8*(_checkState >= group);
-
- width: parent.width
+ 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 {
@@ -31,46 +30,45 @@ QGCButton {
}
}
+ // 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();
}
- onPendingtextChanged: { if(_state==1) {getTextFromState(); getColorFromState();} }
- onFailuretextChanged: { if(_state==3) {getTextFromState(); getColorFromState();} }
- on_StateChanged: { getTextFromState(); getColorFromState(); }
-// onEnabledChanged: { //Dont do this for now, because if we only accidentially lose connection, we don't want to delete the checklist state. Instead, we'd need to detect a re-connect, maybe based on the timesincesystemstart (i.e. when it decreases)?
-// if(enabled==false && group > 0) {
-// // Reset all check list items of group > 0 if it is disabled again (which e.g. happens after a vehicle reboot or disarm).
-// _nrClicked = 0;
-// _state = 0;
-// }
-// }
+ //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 = 4;
- if(_nrClicked===1) {
+ if(_nrClicked===0) _state = 0;
+ else if(_nrClicked===1) {
if(pendingtext.length === 0) _state = 4;
else _state = 1;
- } else if(_nrClicked>1) _state = 4;
+ } 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
+ 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
+ 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/Vehicle/Vehicle.h b/src/Vehicle/Vehicle.h
index 6b22bc5..1323f6f 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,