6import QGroundControl.Controls
7import QGroundControl.FactControls
9/// Fact-bound text field with an optional slider and enable/disable checkbox.
10/// The slider range is determined by (in priority order): explicit sliderMin/Max,
11/// fact.userMin/Max, or fact.min/max when allowUsingMinMax is true.
14 property alias fact: factTextField.fact
15 property alias textFieldPreferredWidth: factTextField.textFieldPreferredWidth
16 property alias textFieldUnitsLabel: factTextField.textFieldUnitsLabel
17 property alias textFieldShowUnits: factTextField.textFieldShowUnits
18 property alias textFieldShowHelp: factTextField.textFieldShowHelp
19 property alias textField: factTextField
20 property alias enableCheckBoxChecked: enableCheckbox.checked
21 property bool warnOnUserMinMaxInvalid: true ///< true: warn if userMin/userMax are invalid, false: no warning
23 property bool showEnableCheckbox: false ///< true: show enable/disable checkbox, false: hide
24 property bool allowUsingMinMax: false ///< true: fall back to fact.min/max when userMin/Max not set
25 property var sliderMin: undefined ///< explicit slider minimum, overrides fact.userMin/min
26 property var sliderMax: undefined ///< explicit slider maximum, overrides fact.userMax/max
27 property color backgroundColor: _ftfsBackgroundColor
29 signal enableCheckboxClicked
32 implicitHeight: mainLayout.implicitHeight
33 color: backgroundColor
34 radius: ScreenTools.defaultBorderRadius
36 property bool _loadComplete: false
37 property bool _showSlider: _sliderMin !== undefined && _sliderMax !== undefined
38 property color _ftfsBackgroundColor: Qt.rgba(qgcPal.windowShadeLight.r, qgcPal.windowShadeLight.g, qgcPal.windowShadeLight.b, 0.2)
39 property var _sliderMin: sliderMin !== undefined ? sliderMin : (fact.userMin !== undefined ? fact.userMin : (allowUsingMinMax ? fact.min : undefined))
40 property var _sliderMax: sliderMax !== undefined ? sliderMax : (fact.userMax !== undefined ? fact.userMax : (allowUsingMinMax ? fact.max : undefined))
42 function updateSliderToClampedValue() {
43 if (_showSlider && sliderLoader.item) {
44 let clampedSliderValue = control.fact.value
45 if (clampedSliderValue > control._sliderMax) {
46 clampedSliderValue = control._sliderMax
47 } else if (clampedSliderValue < control._sliderMin) {
48 clampedSliderValue = control._sliderMin
50 sliderLoader.item.value = clampedSliderValue
54 Component.onCompleted: {
56 if (warnOnUserMinMaxInvalid && !allowUsingMinMax && sliderMin === undefined && sliderMax === undefined && (fact.userMin === undefined || fact.userMax === undefined)) {
57 console.warn("FactTextFieldSlider: userMin/userMax not set for", fact.name)
64 function onValueChanged() {
65 control.updateSliderToClampedValue()
69 QGCPalette { id: qgcPal; colorGroupEnabled: true }
77 spacing: ScreenTools.defaultFontPixelWidth
81 Layout.fillWidth: visible
83 visible: control.showEnableCheckbox
85 onClicked: control.enableCheckboxClicked()
88 LabelledFactTextField {
90 Layout.fillWidth: !control.showEnableCheckbox
91 label: control.showEnableCheckbox ? "" : control.label
93 enabled: !control.showEnableCheckbox || enableCheckbox.checked
99 Layout.fillWidth: true
100 sourceComponent: control._showSlider ? sliderComponent : null
101 enabled: !control.showEnableCheckbox || enableCheckbox.checked
103 onLoaded: control.updateSliderToClampedValue()
111 Layout.fillWidth: true
112 from: control._sliderMin
113 to: control._sliderMax
114 showBoundaryValues: true
117 if (control._loadComplete) {
118 control.fact.value = slider.value