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 + (alwaysShowHelp ? ScreenTools.defaultFontPixelHeight * 0.25 : 0)
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 property bool alwaysShowHelp: false
26
27 property alias wrapMode: text.wrapMode
28 property alias horizontalAlignment: text.horizontalAlignment
29 property alias backgroundColor: backRect.color
30 property alias textColor: text.color
31
32 property bool _showHighlight: enabled && pressed
33 property int _horizontalPadding: ScreenTools.defaultFontPixelWidth * 2
34 property int _verticalPadding: Math.round(ScreenTools.defaultFontPixelHeight * heightFactor)
35 property bool _showHelp: false
36 property bool _activated: false
37
38 QGCPalette { id: qgcPal; colorGroupEnabled: enabled }
39
40 Timer {
41 id: helpTimeout
42 interval: 3000
43 repeat: false
44 onTriggered: control._showHelp = false
45 }
46
47 onActivated: {
48 _activated = true
49 _showHelp = false
50 }
51 onPressed: {
52 _activated = false
53 }
54 onReleased: {
55 _showHelp = !_activated
56 _activated = false
57 if (_showHelp) {
58 helpTimeout.start()
59 } else {
60 helpTimeout.stop()
61 }
62 }
63
64 background: Rectangle {
65 id: backRect
66 radius: backRadius
67 implicitWidth: Math.max(control._showHelp || control.alwaysShowHelp ? helpText.contentWidth : 0, ScreenTools.implicitButtonWidth)
68 implicitHeight: ScreenTools.implicitButtonHeight
69 border.width: showBorder ? 1 : 0
70 border.color: qgcPal.buttonBorder
71 color: control._showHighlight ? qgcPal.buttonHighlight : qgcPal.button
72
73 QGCColoredImage {
74 anchors.topMargin: _sliderIndicatorMargin
75 anchors.bottomMargin: _sliderIndicatorMargin
76 anchors.leftMargin: control.pressed ? (parent.width - width) * control.progress : 0
77 anchors.left: parent.left
78 anchors.top: parent.top
79 anchors.bottom: parent.bottom
80 width: height
81 source: "qrc:/res/chevron-double-right.svg"
82 sourceSize.height: parent.height
83 fillMode: Image.PreserveAspectFit
84 color: control._showHighlight ? qgcPal.buttonHighlightText : qgcPal.buttonText
85 opacity: control._showHighlight ? 0.75 : 0.2
86
87 property real _sliderIndicatorMargin: ScreenTools.defaultFontPixelWidth * 0.5
88 }
89
90 QGCLabel {
91 id: helpText
92 text: qsTr("Hold to Confirm")
93 anchors.bottom: parent.bottom
94 anchors.horizontalCenter: parent.horizontalCenter
95 font.pointSize: ScreenTools.smallFontPointSize
96 color: control.textColor
97 visible: control._showHelp || control.alwaysShowHelp
98 }
99 }
100
101 contentItem: QGCLabel {
102 id: text
103 horizontalAlignment: Text.AlignHCenter
104 text: control.text
105 font.pointSize: control.pointSize
106 font.family: control.font.family
107 font.weight: control.fontWeight
108 color: control._showHighlight ? qgcPal.buttonHighlightText : qgcPal.buttonText
109 }
110}