From f11f006b1b3c41a44ea8777413e6b4dd464b9a37 Mon Sep 17 00:00:00 2001 From: Jacob Walser Date: Fri, 4 Aug 2017 16:08:58 -0400 Subject: [PATCH] Rework disabling of setup pages while vehicle is armed This will make setup pages respond accordingly to armed state transitions. This will also allow the settings on a page to at least be visible while they are disabled. --- src/AutoPilotPlugins/APM/APMSafetyComponentSub.qml | 1 + src/AutoPilotPlugins/Common/SetupPage.qml | 44 +++++++++++++++++++++- src/VehicleSetup/FirmwareUpgrade.qml | 5 ++- src/VehicleSetup/SetupView.qml | 42 +++++++-------------- 4 files changed, 61 insertions(+), 31 deletions(-) diff --git a/src/AutoPilotPlugins/APM/APMSafetyComponentSub.qml b/src/AutoPilotPlugins/APM/APMSafetyComponentSub.qml index 592798e..6771871 100644 --- a/src/AutoPilotPlugins/APM/APMSafetyComponentSub.qml +++ b/src/AutoPilotPlugins/APM/APMSafetyComponentSub.qml @@ -22,6 +22,7 @@ import QGroundControl.ScreenTools 1.0 SetupPage { id: safetyPage pageComponent: safetyPageComponent + visibleWhileArmed: true Component { id: safetyPageComponent diff --git a/src/AutoPilotPlugins/Common/SetupPage.qml b/src/AutoPilotPlugins/Common/SetupPage.qml index a781de9..df85917 100644 --- a/src/AutoPilotPlugins/Common/SetupPage.qml +++ b/src/AutoPilotPlugins/Common/SetupPage.qml @@ -32,8 +32,51 @@ QGCView { property real _margins: ScreenTools.defaultFontPixelHeight / 2 + property bool visibleWhileArmed: false + + property bool vehicleArmed: QGroundControl.multiVehicleManager.activeVehicle ? QGroundControl.multiVehicleManager.activeVehicle.armed : false + + onVehicleArmedChanged: { + if (visibleWhileArmed) { + return + } + + if (vehicleArmed) { + disabledWhileArmed.visible = true + setupView.viewPanel.enabled = false + } else { + disabledWhileArmed.visible = false + setupView.viewPanel.enabled = true + } + } + QGCPalette { id: qgcPal; colorGroupEnabled: setupPanel.enabled } + // Overlay to display when vehicle is armed and the setup page needs + // to be disabled + Item { + id: disabledWhileArmed + visible: false + z: 9999 + anchors.fill: parent + Rectangle { + anchors.fill: parent + color: "black" + opacity: 0.5 + } + + QGCLabel { + anchors.margins: _defaultTextWidth * 2 + anchors.fill: parent + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + wrapMode: Text.WordWrap + font.pointSize: ScreenTools.largeFontPointSize + color: "red" + text: "Setup disabled while the vehicle is armed" + } + } + QGCViewPanel { id: setupPanel anchors.fill: parent @@ -68,7 +111,6 @@ QGCView { id: pageLoader anchors.topMargin: _margins anchors.top: headingColumn.bottom - } } } diff --git a/src/VehicleSetup/FirmwareUpgrade.qml b/src/VehicleSetup/FirmwareUpgrade.qml index c4f5e81..05c4f7f 100644 --- a/src/VehicleSetup/FirmwareUpgrade.qml +++ b/src/VehicleSetup/FirmwareUpgrade.qml @@ -21,7 +21,7 @@ import QGroundControl.Palette 1.0 import QGroundControl.Controllers 1.0 import QGroundControl.ScreenTools 1.0 -QGCView { +SetupPage { id: qgcView viewPanel: panel @@ -30,7 +30,8 @@ QGCView { // a better way to hightlight them, or use less hightlights. // User visible strings - readonly property string title: "FIRMWARE" + pageName: "Firmware" + readonly property string highlightPrefix: "" readonly property string highlightSuffix: "" readonly property string welcomeText: qsTr("%1 can upgrade the firmware on Pixhawk devices, SiK Radios and PX4 Flow Smart Cameras.").arg(QGroundControl.appName) diff --git a/src/VehicleSetup/SetupView.qml b/src/VehicleSetup/SetupView.qml index 8a72645..a1bdf64 100644 --- a/src/VehicleSetup/SetupView.qml +++ b/src/VehicleSetup/SetupView.qml @@ -56,23 +56,13 @@ Rectangle { function showFirmwarePanel() { if (!ScreenTools.isMobile) { - if (QGroundControl.multiVehicleManager.activeVehicleAvailable && QGroundControl.multiVehicleManager.activeVehicle.armed) { - _messagePanelText = _armedVehicleText - panelLoader.setSourceComponent(messagePanelComponent) - } else { - panelLoader.setSource("FirmwareUpgrade.qml") - } + panelLoader.setSource("FirmwareUpgrade.qml") } } function showJoystickPanel() { - if (QGroundControl.multiVehicleManager.activeVehicleAvailable && QGroundControl.multiVehicleManager.activeVehicle.armed) { - _messagePanelText = _armedVehicleText - panelLoader.setSourceComponent(messagePanelComponent) - } else { - panelLoader.setSource("JoystickConfig.qml") - } + panelLoader.setSource("JoystickConfig.qml") } function showParametersPanel() @@ -87,24 +77,19 @@ Rectangle { function showVehicleComponentPanel(vehicleComponent) { - if (QGroundControl.multiVehicleManager.activeVehicle.armed && !vehicleComponent.allowSetupWhileArmed) { - _messagePanelText = _armedVehicleText + var autopilotPlugin = QGroundControl.multiVehicleManager.activeVehicle.autopilot + var prereq = autopilotPlugin.prerequisiteSetup(vehicleComponent) + if (prereq !== "") { + //-- TODO: This cannot be translated when built this way. + _messagePanelText = prereq + " setup must be completed prior to " + vehicleComponent.name + " setup." panelLoader.setSourceComponent(messagePanelComponent) } else { - var autopilotPlugin = QGroundControl.multiVehicleManager.activeVehicle.autopilot - var prereq = autopilotPlugin.prerequisiteSetup(vehicleComponent) - if (prereq !== "") { - //-- TODO: This cannot be trasnlated when built this way. - _messagePanelText = prereq + " setup must be completed prior to " + vehicleComponent.name + " setup." - panelLoader.setSourceComponent(messagePanelComponent) - } else { - panelLoader.setSource(vehicleComponent.setupSource, vehicleComponent) - for(var i = 0; i < componentRepeater.count; i++) { - var obj = componentRepeater.itemAt(i); - if (obj.text === vehicleComponent.name) { - obj.checked = true; - break; - } + panelLoader.setSource(vehicleComponent.setupSource, vehicleComponent) + for(var i = 0; i < componentRepeater.count; i++) { + var obj = componentRepeater.itemAt(i); + if (obj.text === vehicleComponent.name) { + obj.checked = true; + break; } } } @@ -170,6 +155,7 @@ Rectangle { } } } + Component { id: missingParametersVehicleSummaryComponent