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/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() + } + } +}