QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
FactTextFieldSlider.qml
Go to the documentation of this file.
1import QtQuick
2import QtQuick.Controls
3import QtQuick.Layouts
4
5import QGroundControl
6import QGroundControl.Controls
7import QGroundControl.FactControls
8
9Rectangle {
10 property string label
11 property alias fact: factTextField.fact
12 property alias textFieldPreferredWidth: factTextField.textFieldPreferredWidth
13 property alias textFieldUnitsLabel: factTextField.textFieldUnitsLabel
14 property alias textFieldShowUnits: factTextField.textFieldShowUnits
15 property alias textFieldShowHelp: factTextField.textFieldShowHelp
16 property alias textField: factTextField
17 property alias enableCheckBoxChecked: enableCheckbox.checked
18
19 property bool showEnableCheckbox: false ///< true: show enable/disable checkbox, false: hide
20 property color backgroundColor: _ftfsBackgroundColor
21
22 signal enableCheckboxClicked
23
24 id: control
25 implicitHeight: mainLayout.implicitHeight
26 color: backgroundColor
27 radius: ScreenTools.defaultBorderRadius
28
29 property bool _loadComplete: false
30 property bool _showSlider: fact.userMin !== undefined && fact.userMax !== undefined
31 property color _ftfsBackgroundColor: Qt.rgba(qgcPal.windowShadeLight.r, qgcPal.windowShadeLight.g, qgcPal.windowShadeLight.b, 0.2)
32
33 function updateSliderToClampedValue() {
34 if (_showSlider && sliderLoader.item) {
35 let clampedSliderValue = control.fact.value
36 if (clampedSliderValue > control.fact.userMax) {
37 clampedSliderValue = control.fact.userMax
38 } else if (clampedSliderValue < control.fact.userMin) {
39 clampedSliderValue = control.fact.userMin
40 }
41 sliderLoader.item.value = clampedSliderValue
42 }
43 }
44
45 Component.onCompleted: {
46 _loadComplete = true
47 }
48
49 Connections {
50 target: control.fact
51
52 function onValueChanged() {
53 control.updateSliderToClampedValue()
54 }
55 }
56
57 QGCPalette { id: qgcPal; colorGroupEnabled: true }
58
59 ColumnLayout {
60 id: mainLayout
61 width: parent.width
62 spacing: 0
63
64 RowLayout {
65 spacing: ScreenTools.defaultFontPixelWidth
66
67 QGCCheckBox {
68 id: enableCheckbox
69 Layout.fillWidth: visible
70 text: control.label
71 visible: control.showEnableCheckbox
72
73 onClicked: control.enableCheckboxClicked()
74 }
75
76 LabelledFactTextField {
77 id: factTextField
78 Layout.fillWidth: !control.showEnableCheckbox
79 label: control.showEnableCheckbox ? "" : control.label
80 fact: control.fact
81 enabled: !control.showEnableCheckbox || enableCheckbox.checked
82 }
83 }
84
85 Loader {
86 id: sliderLoader
87 Layout.fillWidth: true
88 sourceComponent: control._showSlider ? sliderComponent : null
89 enabled: !control.showEnableCheckbox || enableCheckbox.checked
90
91 onLoaded: control.updateSliderToClampedValue()
92 }
93
94 Component {
95 id: sliderComponent
96
97 QGCSlider {
98 id: slider
99 Layout.fillWidth: true
100 from: control.fact.userMin
101 to: control.fact.userMax
102 showBoundaryValues: true
103
104 onMoved: {
105 if (control._loadComplete) {
106 control.fact.value = slider.value
107 }
108 }
109 }
110 }
111 }
112}