7import QGroundControl.Controls
8import QGroundControl.FactControls
12 title: fact.componentId > 0 ? fact.name : qsTr("Value Editor")
14 buttons: Dialog.Save | (validate ? 0 : Dialog.Cancel)
17 property bool showRCToParam: false
18 property bool validate: false
19 property string validateValue
20 property bool setFocus: true ///< true: focus is set to text field on display, false: focus not set (works around strange virtual keyboard bug with FactValueSlider
22 property real _editFieldWidth: ScreenTools.defaultFontPixelWidth * 20
23 property bool _longDescriptionAvailable: fact.longDescription != ""
24 property bool _editingParameter: fact.componentId != 0
25 property bool _allowForceSave: QGroundControl.corePlugin.showAdvancedUI && _editingParameter
26 property bool _allowDefaultReset: fact.defaultValueAvailable
27 property bool _showCombo: fact.enumStrings.length !== 0 && fact.bitmaskStrings.length === 0 && !validate
29 ParameterEditorController { id: controller; }
31 QGCPalette { id: qgcPal; colorGroupEnabled: true }
34 if (bitmaskColumn.visible && !manualEntry.checked) {
35 fact.value = bitmaskValue();
36 fact.valueChanged(fact.value)
37 } else if (factCombo.visible && !manualEntry.checked) {
38 fact.enumIndex = factCombo.currentIndex
40 var errorString = fact.validate(valueField.text, forceSave.checked)
41 if (errorString === "") {
42 fact.value = valueField.text
43 fact.valueChanged(fact.value)
45 validationError.text = errorString
46 if (_allowForceSave) {
47 forceSave.visible = true
54 function bitmaskValue() {
56 for (var i = 0; i < fact.bitmaskValues.length; ++i) {
57 var checkbox = bitmaskRepeater.itemAt(i)
58 if (checkbox.checked) {
59 value |= fact.bitmaskValues[i];
65 Component.onCompleted: {
67 valueField.text = validateValue
68 validationError.text = fact.validate(validateValue, false /* convertOnly */)
69 if (_allowForceSave) {
70 forceSave.visible = true
73 valueField.text = fact.valueString
78 width: Math.min(mainWindow.width * .75, Math.max(ScreenTools.defaultFontPixelWidth * 60, editRow.width))
79 spacing: globals.defaultTextHeight
83 Layout.fillWidth: true
84 wrapMode: Text.WordWrap
85 color: qgcPal.warningText
91 spacing: ScreenTools.defaultFontPixelWidth
95 width: _editFieldWidth
96 unitsLabel: fact.units
97 showUnits: fact.units != ""
98 focus: setFocus && visible
99 inputMethodHints: (fact.typeIsString || ScreenTools.isiOS) ? // iOS numeric keyboard has no done button, we can't use it
101 Qt.ImhFormattedNumbersOnly // Forces use of virtual numeric keyboard
102 visible: !_showCombo || validate || manualEntry.checked
107 width: _editFieldWidth
108 model: fact.enumStrings
111 focus: setFocus && visible
113 Component.onCompleted: {
114 // We can't bind directly to fact.enumIndex since that would add an unknown value
115 // if there are no enum strings.
117 currentIndex = fact.enumIndex
121 onCurrentIndexChanged: {
122 if (currentIndex >=0 && currentIndex < model.length) {
123 valueField.text = fact.enumValues[currentIndex]
129 visible: _allowDefaultReset
130 text: qsTr("Reset To Default")
133 fact.value = fact.defaultValue
134 fact.valueChanged(fact.value)
142 spacing: ScreenTools.defaultFontPixelHeight / 2
143 visible: fact.bitmaskStrings.length > 0
147 model: fact.bitmaskStrings
149 delegate : QGCCheckBox {
151 checked : fact.value & fact.bitmaskValues[index]
154 valueField.text = bitmaskValue()
161 Layout.fillWidth: true
162 wrapMode: Text.WordWrap
163 visible: !longDescriptionLabel.visible
164 text: fact.shortDescription
168 id: longDescriptionLabel
169 Layout.fillWidth: true
170 wrapMode: Text.WordWrap
171 visible: fact.longDescription != ""
172 text: fact.longDescription
176 spacing: ScreenTools.defaultFontPixelWidth
180 text: qsTr("Min: ") + fact.minString
181 visible: !fact.minIsDefaultForType
185 text: qsTr("Max: ") + fact.maxString
186 visible: !fact.maxIsDefaultForType
190 text: qsTr("Default: ") + fact.defaultValueString
191 visible: _allowDefaultReset
196 visible: fact.vehicleRebootRequired
197 text: qsTr("Vehicle reboot required after change")
201 visible: fact.qgcRebootRequired
202 text: qsTr("Application restart required after change")
206 Layout.fillWidth: true
207 wrapMode: Text.WordWrap
208 text: qsTr("Warning: Modifying values while vehicle is in flight can lead to vehicle instability and possible vehicle loss. ") +
209 qsTr("Make sure you know what you are doing and double-check your values before Save!")
210 visible: fact.componentId != -1
216 text: qsTr("Force save (dangerous!)")
221 text: qsTr("Advanced settings")
222 visible: showRCToParam || factCombo.visible || bitmaskColumn.visible
225 // Checkbox to allow manual entry of enumerated or bitmask parameters
228 visible: _advanced.checked && (factCombo.visible || bitmaskColumn.visible)
229 text: qsTr("Manual Entry")
232 valueField.text = fact.valueString
237 text: qsTr("Set RC to Param")
238 visible: _advanced.checked && !validate && showRCToParam
239 onClicked: rcToParamDialogFactory.open()
243 QGCPopupDialogFactory {
244 id: rcToParamDialogFactory
246 dialogComponent: rcToParamDialog