diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc index 3bee5c348f3cec6b888306255137248a832023a6..a87759717d864aa53495ac29c8dd88c19add6fb6 100644 --- a/qgroundcontrol.qrc +++ b/qgroundcontrol.qrc @@ -81,6 +81,7 @@ src/QmlControls/QGCViewPanel.qml src/QmlControls/RoundButton.qml src/ui/toolbar/SignalStrength.qml + src/QmlControls/SliderSwitch.qml src/QmlControls/SubMenuButton.qml src/QmlControls/VehicleRotationCal.qml src/QmlControls/VehicleSummaryRow.qml diff --git a/src/FlightDisplay/FlightDisplayViewWidgets.qml b/src/FlightDisplay/FlightDisplayViewWidgets.qml index 77a92f818e2e33afc404054d99b73a4c914c57a7..bc9722211c6c9b363fbae728b0e5414a67e9bd15 100644 --- a/src/FlightDisplay/FlightDisplayViewWidgets.qml +++ b/src/FlightDisplay/FlightDisplayViewWidgets.qml @@ -271,8 +271,8 @@ Item { anchors.margins: _margins anchors.bottom: parent.bottom anchors.horizontalCenter: parent.horizontalCenter - width: (guidedModeButtons.visible ? guidedModeButtons.width : guidedModeConfirm.width) + (_margins * 2) - height: (guidedModeButtons.visible ? guidedModeButtons.height : guidedModeConfirm.height) + (_margins * 2) + width: guidedModeButtons.width + (_margins * 2) + height: guidedModeButtons.height + (_margins * 2) color: qgcPal.window visible: _activeVehicle opacity: 0.9 @@ -289,7 +289,6 @@ Item { readonly property int confirmRetask: 9 property int confirmActionCode - property string confirmText function actionConfirmed() { switch (confirmActionCode) { @@ -335,35 +334,35 @@ Item { confirmActionCode = actionCode switch (confirmActionCode) { case confirmArm: - _guidedModeBar.confirmText = "arm" + guidedModeConfirm.confirmText = "arm" break; case confirmDisarm: - _guidedModeBar.confirmText = "disarm" + guidedModeConfirm.confirmText = "disarm" break; case confirmEmergencyStop: - _guidedModeBar.confirmText = "emergency stop" + guidedModeConfirm.confirmText = "STOP ALL MOTORS!" break; case confirmTakeoff: altitudeSlider.visible = true altitudeSlider.setInitialValueMeters(10) - _guidedModeBar.confirmText = "takeoff" + guidedModeConfirm.confirmText = "takeoff" break; case confirmLand: - _guidedModeBar.confirmText = "land" + guidedModeConfirm.confirmText = "land" break; case confirmChangeAlt: altitudeSlider.visible = true altitudeSlider.setInitialValueAppSettingsDistanceUnits(_activeVehicle.altitudeAMSL.value) - _guidedModeBar.confirmText = "altitude change" + guidedModeConfirm.confirmText = "change altitude" break; case confirmGoTo: - _guidedModeBar.confirmText = "move" + guidedModeConfirm.confirmText = "move vehicle" break; case confirmRetask: _guidedModeBar.confirmText = "active waypoint change" break; } - guidedModeButtons.visible = false + guidedModeBar.visible = false guidedModeConfirm.visible = true } @@ -404,6 +403,7 @@ Item { } } + /* Row { id: guidedModeConfirm anchors.margins: _margins @@ -436,8 +436,32 @@ Item { _flightMap._gotoHereCoordinate = QtPositioning.coordinate() } } + }*/ + } // Rectangle - Guided mode buttons + + // Action confirmation control + SliderSwitch { + id: guidedModeConfirm + anchors.top: _guidedModeBar.top + anchors.bottom: _guidedModeBar.bottom + anchors.horizontalCenter: parent.horizontalCenter + visible: false + z: QGroundControl.zOrderWidgets + + onAccept: { + guidedModeConfirm.visible = false + guidedModeBar.visible = true + _guidedModeBar.actionConfirmed() + altitudeSlider.visible = false } - } // Column - Vertical tool buttons + + onReject: { + guidedModeConfirm.visible = false + guidedModeBar.visible = true + altitudeSlider.visible = false + _flightMap._gotoHereCoordinate = QtPositioning.coordinate() + } + } //-- Altitude slider Rectangle { diff --git a/src/QmlControls/QGroundControl.Controls.qmldir b/src/QmlControls/QGroundControl.Controls.qmldir index 9cb83400b831127628bfa276c90e0ffdee5908c3..fe2a7457db0c7c105b3c115e2321bd89ab5b5afc 100644 --- a/src/QmlControls/QGroundControl.Controls.qmldir +++ b/src/QmlControls/QGroundControl.Controls.qmldir @@ -32,6 +32,7 @@ QGCViewMessage 1.0 QGCViewMessage.qml QGCViewPanel 1.0 QGCViewPanel.qml RoundButton 1.0 RoundButton.qml SignalStrength 1.0 SignalStrength.qml +SliderSwitch 1.0 SliderSwitch.qml SubMenuButton 1.0 SubMenuButton.qml VehicleRotationCal 1.0 VehicleRotationCal.qml VehicleSummaryRow 1.0 VehicleSummaryRow.qml diff --git a/src/QmlControls/SliderSwitch.qml b/src/QmlControls/SliderSwitch.qml new file mode 100644 index 0000000000000000000000000000000000000000..6f15ffaba5f58ff50a5e2217a3ffa6e5ee667a31 --- /dev/null +++ b/src/QmlControls/SliderSwitch.qml @@ -0,0 +1,81 @@ +import QtQuick 2.5 +import QtQuick.Controls 1.4 + +import QGroundControl.ScreenTools 1.0 +import QGroundControl.Palette 1.0 + +/// The SliderSwitch control implements a sliding switch control similar to the power off +/// control on an iPhone. +Rectangle { + id: _root + width: label.contentWidth + (_diameter * 2) + (_border * 4) + radius: height /2 + color: qgcPal.window + + signal accept ///< Action confirmed + signal reject ///< Action rejected + + property string confirmText ///< Text for slider + + property real _border: 4 + property real _diameter: height - (_border * 2) + + QGCPalette { id: qgcPal; colorGroupEnabled: true } + + QGCLabel { + id: label + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + text: "Slide to " + confirmText + } + + Rectangle { + id: slider + x: _border + y: _border + height: _diameter + width: _diameter + radius: _diameter / 2 + color: qgcPal.windowShade + opacity: 0.8 + + MouseArea { + id: sliderDragArea + anchors.fill: parent + onClicked: _root.accept() + drag.target: slider + drag.axis: Drag.XAxis + drag.minimumX: _border + drag.maximumX: _maxXDrag + + property real _maxXDrag: _root.width - ((_diameter + _border) * 2) + property bool dragActive: drag.active + + onDragActiveChanged: { + if (!sliderDragArea.drag.active) { + if (slider.x > _maxXDrag - _border) { + _root.accept() + } + slider.x = _border + } + } + } + } + + Rectangle { + id: cancel + anchors.rightMargin: _border + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + height: _diameter + width: _diameter + radius: _diameter / 2 + color: qgcPal.windowShade + opacity: 0.8 + + MouseArea { + anchors.fill: parent + onClicked: _root.reject() + } + } +}