From 4ad2c5162bd9ffc275f8b770110771ff8e3ecd38 Mon Sep 17 00:00:00 2001 From: DoinLakeFlyer Date: Sat, 2 May 2020 19:14:08 -0700 Subject: [PATCH] Fly View: Move business logic inside controls --- qgroundcontrol.qrc | 1 + src/FlightDisplay/FlightDisplayView.qml | 181 ++++-------------- src/FlightDisplay/FlyViewToolStrip.qml | 107 +++++++++++ src/FlightDisplay/GuidedActionConfirm.qml | 1 - src/FlightDisplay/GuidedActionList.qml | 1 - src/FlightDisplay/GuidedActionsController.qml | 17 ++ .../QGroundControl/FlightDisplay/qmldir | 1 + 7 files changed, 158 insertions(+), 151 deletions(-) create mode 100644 src/FlightDisplay/FlyViewToolStrip.qml diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc index a8e2452a8..079b5a43a 100644 --- a/qgroundcontrol.qrc +++ b/qgroundcontrol.qrc @@ -194,6 +194,7 @@ src/FlightDisplay/FlightDisplayViewMap.qml src/FlightDisplay/FlightDisplayViewVideo.qml src/FlightDisplay/FlightDisplayViewWidgets.qml + src/FlightDisplay/FlyViewToolStrip.qml src/FlightDisplay/GuidedActionConfirm.qml src/FlightDisplay/GuidedActionList.qml src/FlightDisplay/GuidedActionsController.qml diff --git a/src/FlightDisplay/FlightDisplayView.qml b/src/FlightDisplay/FlightDisplayView.qml index 19cdf9f0f..5fe943593 100644 --- a/src/FlightDisplay/FlightDisplayView.qml +++ b/src/FlightDisplay/FlightDisplayView.qml @@ -39,7 +39,6 @@ Item { } } - property alias guidedController: guidedActionsController property bool activeVehicleJoystickEnabled: activeVehicle ? activeVehicle.joystickEnabled : false property bool mainIsMap: QGroundControl.videoManager.hasVideo ? QGroundControl.loadBoolGlobalSetting(_mainIsMapKey, true) : true property bool isBackgroundDark: mainIsMap ? (mainWindow.flightDisplayMap ? mainWindow.flightDisplayMap.isSatelliteMap : true) : true @@ -54,17 +53,12 @@ Item { property real _margins: ScreenTools.defaultFontPixelWidth / 2 property real _pipSize: mainWindow.width * 0.2 property alias _guidedController: guidedActionsController - property alias _altitudeSlider: altitudeSlider + property alias _guidedConfirm: guidedActionConfirm + property alias _guidedList: guidedActionList + property alias _guidedSlider: altitudeSlider + property real _guidedZOrder: _flightVideoPipControl.z + 1 property real _toolsMargin: ScreenTools.defaultFontPixelWidth * 0.75 - readonly property var _dynamicCameras: activeVehicle ? activeVehicle.dynamicCameras : null - readonly property bool _isCamera: _dynamicCameras ? _dynamicCameras.cameras.count > 0 : false - readonly property real _defaultRoll: 0 - readonly property real _defaultPitch: 0 - readonly property real _defaultHeading: 0 - readonly property real _defaultAltitudeAMSL: 0 - readonly property real _defaultGroundSpeed: 0 - readonly property real _defaultAirSpeed: 0 readonly property string _mapName: "FlightDisplayView" readonly property string _showMapBackgroundKey: "/showMapBackground" readonly property string _mainIsMapKey: "MainFlyWindowIsMap" @@ -129,16 +123,16 @@ Item { Connections { target: mainWindow - onArmVehicle: guidedController.confirmAction(guidedController.actionArm) + onArmVehicle: _guidedController.confirmAction(_guidedController.actionArm) onDisarmVehicle: { - if (guidedController.showEmergenyStop) { - guidedController.confirmAction(guidedController.actionEmergencyStop) + if (_guidedController.showEmergenyStop) { + _guidedController.confirmAction(_guidedController.actionEmergencyStop) } else { - guidedController.confirmAction(guidedController.actionDisarm) + _guidedController.confirmAction(_guidedController.actionDisarm) } } - onVtolTransitionToFwdFlight: guidedController.confirmAction(guidedController.actionVtolTransitionToFwdFlight) - onVtolTransitionToMRFlight: guidedController.confirmAction(guidedController.actionVtolTransitionToMRFlight) + onVtolTransitionToFwdFlight: _guidedController.confirmAction(_guidedController.actionVtolTransitionToFwdFlight) + onVtolTransitionToMRFlight: _guidedController.confirmAction(_guidedController.actionVtolTransitionToMRFlight) onFlightDisplayMapChanged: setStates() } @@ -241,7 +235,7 @@ Item { text: qsTr("Resume Mission From Waypoint %1").arg(_guidedController._resumeMissionIndex) onClicked: { - guidedController.executeAction(_guidedController.actionResumeMission, null, null) + _guidedController.executeAction(_guidedController.actionResumeMission, null, null) hideDialog() } } @@ -559,141 +553,28 @@ Item { property Fact _virtualJoystickCentralized: QGroundControl.settingsManager.appSettings.virtualJoystickCentralized } - ToolStrip { - visible: (activeVehicle ? activeVehicle.guidedModeSupported : true) && !QGroundControl.videoManager.fullScreen - id: toolStrip - - anchors.leftMargin: isInstrumentRight() ? _toolsMargin : undefined - anchors.left: isInstrumentRight() ? _mapAndVideo.left : undefined - anchors.rightMargin:isInstrumentRight() ? undefined : ScreenTools.defaultFontPixelWidth - anchors.right: isInstrumentRight() ? undefined : _mapAndVideo.right - anchors.topMargin: _toolsMargin - anchors.top: parent.top - z: _mapAndVideo.z + 4 - maxHeight: parent.height - toolStrip.y + (_flightVideo.visible ? (_flightVideo.y - parent.height) : 0) - title: qsTr("Fly") - - property bool _anyActionAvailable: _guidedController.showStartMission || _guidedController.showResumeMission || _guidedController.showChangeAlt || _guidedController.showLandAbort - property var _actionModel: [ - { - title: _guidedController.startMissionTitle, - text: _guidedController.startMissionMessage, - action: _guidedController.actionStartMission, - visible: _guidedController.showStartMission - }, - { - title: _guidedController.continueMissionTitle, - text: _guidedController.continueMissionMessage, - action: _guidedController.actionContinueMission, - visible: _guidedController.showContinueMission - }, - { - title: _guidedController.changeAltTitle, - text: _guidedController.changeAltMessage, - action: _guidedController.actionChangeAlt, - visible: _guidedController.showChangeAlt - }, - { - title: _guidedController.landAbortTitle, - text: _guidedController.landAbortMessage, - action: _guidedController.actionLandAbort, - visible: _guidedController.showLandAbort - } - ] - - model: [ - { - name: "Checklist", - iconSource: "/qmlimages/check.svg", - buttonVisible: _useChecklist, - buttonEnabled: _useChecklist && activeVehicle && !activeVehicle.armed, - }, - { - name: _guidedController.takeoffTitle, - iconSource: "/res/takeoff.svg", - buttonVisible: _guidedController.showTakeoff || !_guidedController.showLand, - buttonEnabled: _guidedController.showTakeoff, - action: _guidedController.actionTakeoff - }, - { - name: _guidedController.landTitle, - iconSource: "/res/land.svg", - buttonVisible: _guidedController.showLand && !_guidedController.showTakeoff, - buttonEnabled: _guidedController.showLand, - action: _guidedController.actionLand - }, - { - name: _guidedController.rtlTitle, - iconSource: "/res/rtl.svg", - buttonVisible: true, - buttonEnabled: _guidedController.showRTL, - action: _guidedController.actionRTL - }, - { - name: _guidedController.pauseTitle, - iconSource: "/res/pause-mission.svg", - buttonVisible: _guidedController.showPause, - buttonEnabled: _guidedController.showPause, - action: _guidedController.actionPause - }, - { - name: qsTr("Action"), - iconSource: "/res/action.svg", - buttonVisible: _anyActionAvailable, - buttonEnabled: true, - action: -1 - } - ] - - onClicked: { - if(index === 0) { - checklistDropPanel.open() - } else { - guidedActionsController.closeAll() - var action = model[index].action - if (action === -1) { - guidedActionList.model = _actionModel - guidedActionList.visible = true - } else { - _guidedController.confirmAction(action) - } - } - - } + FlyViewToolStrip { + id: toolStrip + anchors.leftMargin: isInstrumentRight() ? _toolsMargin : undefined + anchors.left: isInstrumentRight() ? _mapAndVideo.left : undefined + anchors.rightMargin: isInstrumentRight() ? undefined : ScreenTools.defaultFontPixelWidth + anchors.right: isInstrumentRight() ? undefined : _mapAndVideo.right + anchors.topMargin: _toolsMargin + anchors.top: parent.top + z: _mapAndVideo.z + 4 + maxHeight: parent.height - toolStrip.y + (_flightVideo.visible ? (_flightVideo.y - parent.height) : 0) + guidedActionsController: _guidedController + guidedActionList: _guidedList + preFlightCheckList: checklistDropPanel + visible: (activeVehicle ? activeVehicle.guidedModeSupported : true) && !QGroundControl.videoManager.fullScreen } GuidedActionsController { id: guidedActionsController missionController: _missionController - confirmDialog: guidedActionConfirm - actionList: guidedActionList - altitudeSlider: _altitudeSlider - z: _flightVideoPipControl.z + 1 - - onShowStartMissionChanged: { - if (showStartMission) { - confirmAction(actionStartMission) - } - } - - onShowContinueMissionChanged: { - if (showContinueMission) { - confirmAction(actionContinueMission) - } - } - - onShowLandAbortChanged: { - if (showLandAbort) { - confirmAction(actionLandAbort) - } - } - - /// Close all dialogs - function closeAll() { - guidedActionConfirm.visible = false - guidedActionList.visible = false - altitudeSlider.visible = false - } + confirmDialog: _guidedConfirm + actionList: _guidedList + altitudeSlider: _guidedSlider } GuidedActionConfirm { @@ -701,8 +582,9 @@ Item { anchors.margins: _margins anchors.bottom: parent.bottom anchors.horizontalCenter: parent.horizontalCenter + z: _guidedZOrder guidedController: _guidedController - altitudeSlider: _altitudeSlider + altitudeSlider: _guidedSlider } GuidedActionList { @@ -710,6 +592,7 @@ Item { anchors.margins: _margins anchors.bottom: parent.bottom anchors.horizontalCenter: parent.horizontalCenter + z: _guidedZOrder guidedController: _guidedController } @@ -721,7 +604,7 @@ Item { anchors.topMargin: ScreenTools.toolbarHeight + _margins anchors.top: parent.top anchors.bottom: parent.bottom - z: _guidedController.z + z: _guidedZOrder radius: ScreenTools.defaultFontPixelWidth / 2 width: ScreenTools.defaultFontPixelWidth * 10 color: qgcPal.window diff --git a/src/FlightDisplay/FlyViewToolStrip.qml b/src/FlightDisplay/FlyViewToolStrip.qml new file mode 100644 index 000000000..f1c0b2152 --- /dev/null +++ b/src/FlightDisplay/FlyViewToolStrip.qml @@ -0,0 +1,107 @@ +/**************************************************************************** + * + * (c) 2009-2020 QGROUNDCONTROL PROJECT + * + * QGroundControl is licensed according to the terms in the file + * COPYING.md in the root of the source code directory. + * + ****************************************************************************/ + +import QGroundControl 1.0 +import QGroundControl.Controls 1.0 + +ToolStrip { + title: qsTr("Fly") + + property var guidedActionsController + property var guidedActionList + property var preFlightCheckList + + property bool _anyActionAvailable: guidedActionsController.showStartMission || guidedActionsController.showResumeMission || guidedActionsController.showChangeAlt || guidedActionsController.showLandAbort + property var _actionModel: [ + { + title: guidedActionsController.startMissionTitle, + text: guidedActionsController.startMissionMessage, + action: guidedActionsController.actionStartMission, + visible: guidedActionsController.showStartMission + }, + { + title: guidedActionsController.continueMissionTitle, + text: guidedActionsController.continueMissionMessage, + action: guidedActionsController.actionContinueMission, + visible: guidedActionsController.showContinueMission + }, + { + title: guidedActionsController.changeAltTitle, + text: guidedActionsController.changeAltMessage, + action: guidedActionsController.actionChangeAlt, + visible: guidedActionsController.showChangeAlt + }, + { + title: guidedActionsController.landAbortTitle, + text: guidedActionsController.landAbortMessage, + action: guidedActionsController.actionLandAbort, + visible: guidedActionsController.showLandAbort + } + ] + + model: [ + { + name: "Checklist", + iconSource: "/qmlimages/check.svg", + buttonVisible: _useChecklist, + buttonEnabled: _useChecklist && activeVehicle && !activeVehicle.armed, + }, + { + name: guidedActionsController.takeoffTitle, + iconSource: "/res/takeoff.svg", + buttonVisible: guidedActionsController.showTakeoff || !guidedActionsController.showLand, + buttonEnabled: guidedActionsController.showTakeoff, + action: guidedActionsController.actionTakeoff + }, + { + name: guidedActionsController.landTitle, + iconSource: "/res/land.svg", + buttonVisible: guidedActionsController.showLand && !guidedActionsController.showTakeoff, + buttonEnabled: guidedActionsController.showLand, + action: guidedActionsController.actionLand + }, + { + name: guidedActionsController.rtlTitle, + iconSource: "/res/rtl.svg", + buttonVisible: true, + buttonEnabled: guidedActionsController.showRTL, + action: guidedActionsController.actionRTL + }, + { + name: guidedActionsController.pauseTitle, + iconSource: "/res/pause-mission.svg", + buttonVisible: guidedActionsController.showPause, + buttonEnabled: guidedActionsController.showPause, + action: guidedActionsController.actionPause + }, + { + name: qsTr("Action"), + iconSource: "/res/action.svg", + buttonVisible: _anyActionAvailable, + buttonEnabled: true, + action: -1 + } + ] + + onClicked: { + if(index === 0) { + preFlightCheckList.open() + } else { + guidedActionsController.closeAll() + var action = model[index].action + if (action === -1) { + guidedActionList.model = _actionModel + guidedActionList.visible = true + } else { + guidedActionsController.confirmAction(action) + } + } + + } +} diff --git a/src/FlightDisplay/GuidedActionConfirm.qml b/src/FlightDisplay/GuidedActionConfirm.qml index 40745c9f2..edbe01488 100644 --- a/src/FlightDisplay/GuidedActionConfirm.qml +++ b/src/FlightDisplay/GuidedActionConfirm.qml @@ -24,7 +24,6 @@ Rectangle { color: qgcPal.window border.color: _emergencyAction ? "red" : qgcPal.windowShade border.width: _emergencyAction ? 4 : 1 - z: guidedController.z visible: false property var guidedController diff --git a/src/FlightDisplay/GuidedActionList.qml b/src/FlightDisplay/GuidedActionList.qml index 3bd16e9d8..c4a43e734 100644 --- a/src/FlightDisplay/GuidedActionList.qml +++ b/src/FlightDisplay/GuidedActionList.qml @@ -24,7 +24,6 @@ Rectangle { radius: _margins / 2 color: qgcPal.window opacity: 0.9 - z: guidedController.z visible: false property var guidedController diff --git a/src/FlightDisplay/GuidedActionsController.qml b/src/FlightDisplay/GuidedActionsController.qml index 1507646aa..5e8e46b3c 100644 --- a/src/FlightDisplay/GuidedActionsController.qml +++ b/src/FlightDisplay/GuidedActionsController.qml @@ -190,12 +190,18 @@ Item { console.log("showStartMission", showStartMission) } _outputState() + if (showStartMission) { + confirmAction(actionStartMission) + } } onShowContinueMissionChanged: { if (_corePlugin.guidedActionsControllerLogging()) { console.log("showContinueMission", showContinueMission) } _outputState() + if (showContinueMission) { + confirmAction(actionContinueMission) + } } onShowRTLChanged: { if (_corePlugin.guidedActionsControllerLogging()) { @@ -209,6 +215,11 @@ Item { } _outputState() } + onShowLandAbortChanged: { + if (showLandAbort) { + confirmAction(actionLandAbort) + } + } on_VehicleFlyingChanged: { _outputState() @@ -228,6 +239,12 @@ Item { _vehicleInMissionMode = activeVehicle ? _flightMode === activeVehicle.missionFlightMode : false // Must be last to get correct signalling for showStartMission popups } + function closeAll() { + confirmDialog.visible = false + actionList.visible = false + altitudeSlider.visible = false + } + // Called when an action is about to be executed in order to confirm function confirmAction(actionCode, actionData, mapIndicator) { var showImmediate = true diff --git a/src/QmlControls/QGroundControl/FlightDisplay/qmldir b/src/QmlControls/QGroundControl/FlightDisplay/qmldir index fbb1c6060..d52aaeadf 100644 --- a/src/QmlControls/QGroundControl/FlightDisplay/qmldir +++ b/src/QmlControls/QGroundControl/FlightDisplay/qmldir @@ -4,6 +4,7 @@ FlightDisplayView 1.0 FlightDisplayView.qml FlightDisplayViewMap 1.0 FlightDisplayViewMap.qml FlightDisplayViewVideo 1.0 FlightDisplayViewVideo.qml FlightDisplayViewWidgets 1.0 FlightDisplayViewWidgets.qml +FlyViewToolStrip 1.0 FlyViewToolStrip.qml GuidedActionConfirm 1.0 GuidedActionConfirm.qml GuidedActionList 1.0 GuidedActionList.qml GuidedActionsController 1.0 GuidedActionsController.qml -- 2.22.0