QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
QGCDelayButton.qml
Go to the documentation of this file.
1import QtQuick
2import QtQuick.Controls
3import QtQuick.Layouts
4
5import QGroundControl
6import QGroundControl.Controls
7
8DelayButton {
9 id: control
10 hoverEnabled: !ScreenTools.isMobile
11 topPadding: _verticalPadding
12 bottomPadding: _verticalPadding
13 leftPadding: _horizontalPadding
14 rightPadding: _horizontalPadding
15 focusPolicy: Qt.ClickFocus
16 font.family: ScreenTools.normalFontFamily
17 delay: defaultDelay
18
19 property bool showBorder: qgcPal.globalTheme === QGCPalette.Light
20 property real backRadius: ScreenTools.defaultBorderRadius
21 property real heightFactor: 0.5
22 property real fontWeight: Font.Normal // default for qml Text
23 property real pointSize: ScreenTools.defaultFontPointSize
24 property int defaultDelay: 500
25
26 property alias wrapMode: text.wrapMode
27 property alias horizontalAlignment: text.horizontalAlignment
28 property alias backgroundColor: backRect.color
29 property alias textColor: text.color
30
31 property bool _showHighlight: enabled && pressed
32 property int _horizontalPadding: ScreenTools.defaultFontPixelWidth * 2
33 property int _verticalPadding: Math.round(ScreenTools.defaultFontPixelHeight * heightFactor)
34 property bool _showHelp: false
35 property bool _activated: false
36
37 QGCPalette { id: qgcPal; colorGroupEnabled: enabled }
38
39 Timer {
40 id: helpTimeout
41 interval: 3000
42 repeat: false
43 onTriggered: control._showHelp = false
44 }
45
46 onActivated: {
47 _activated = true
48 _showHelp = false
49 }
50 onPressed: {
51 _activated = false
52 }
53 onReleased: {
54 _showHelp = !_activated
55 _activated = false
56 if (_showHelp) {
57 helpTimeout.start()
58 } else {
59 helpTimeout.stop()
60 }
61 }
62
63 background: Rectangle {
64 id: backRect
65 radius: backRadius
66 implicitWidth: Math.max(control._showHelp ? helpText.contentWidth : 0, ScreenTools.implicitButtonWidth)
67 implicitHeight: ScreenTools.implicitButtonHeight
68 border.width: showBorder ? 1 : 0
69 border.color: qgcPal.buttonBorder
70 color: control._showHighlight ? qgcPal.buttonHighlight : qgcPal.button
71
72 QGCColoredImage {
73 anchors.topMargin: _sliderIndicatorMargin
74 anchors.bottomMargin: _sliderIndicatorMargin
75 anchors.leftMargin: control.pressed ? (parent.width - width) * control.progress : 0
76 anchors.left: parent.left
77 anchors.top: parent.top
78 anchors.bottom: parent.bottom
79 width: height
80 source: "qrc:/res/chevron-double-right.svg"
81 sourceSize.height: parent.height
82 fillMode: Image.PreserveAspectFit
83 color: control._showHighlight ? qgcPal.buttonHighlightText : qgcPal.buttonText
84 opacity: control._showHighlight ? 0.75 : 0.2
85
86 property real _sliderIndicatorMargin: ScreenTools.defaultFontPixelWidth * 0.5
87 }
88
89 QGCLabel {
90 id: helpText
91 text: qsTr("Hold to Confirm")
92 anchors.bottom: parent.bottom
93 anchors.horizontalCenter: parent.horizontalCenter
94 font.pointSize: ScreenTools.smallFontPointSize
95 color: control._showHighlight ? qgcPal.buttonHighlightText : qgcPal.buttonText
96 visible: control._showHelp
97 }
98 }
99
100 contentItem: QGCLabel {
101 id: text
102 horizontalAlignment: Text.AlignHCenter
103 text: control.text
104 font.pointSize: control.pointSize
105 font.family: control.font.family
106 font.weight: control.fontWeight
107 color: control._showHighlight ? qgcPal.buttonHighlightText : qgcPal.buttonText
108 }
109}