6import QGroundControl.Controls
7import QGroundControl.FactControls
9// Editor for Simple mission items
13 height: editorColumn.height + (_margin * 2)
14 color: qgcPal.windowShadeDark
17 property bool _specifiesAltitude: missionItem.specifiesAltitude
18 property real _margin: ScreenTools.defaultFontPixelHeight / 2
19 property real _altRectMargin: ScreenTools.defaultFontPixelWidth / 2
20 property var _controllerVehicle: missionItem.masterController.controllerVehicle
21 property int _globalAltMode: missionItem.masterController.missionController.globalAltitudeMode
22 property bool _globalAltModeIsMixed: _globalAltMode == QGroundControl.AltitudeModeMixed
23 property real _radius: ScreenTools.defaultFontPixelWidth / 2
24 property real _fieldSpacing: ScreenTools.defaultFontPixelHeight / 2
26 QGCPalette { id: qgcPal; colorGroupEnabled: root.enabled }
30 anchors.margins: _margin
31 anchors.left: parent.left
32 anchors.right: parent.right
33 anchors.top: parent.top
38 anchors.margins: _margin
39 anchors.left: parent.left
40 anchors.right: parent.right
42 visible: missionItem.isTakeoffItem && missionItem.wizardMode // Hack special case for takeoff item
45 text: qsTr("Move '%1' %2 to the %3 location. %4")
46 .arg(_controllerVehicle.vtol ? qsTr("T") : qsTr("T"))
47 .arg(_controllerVehicle.vtol ? qsTr("Transition Direction") : qsTr("Takeoff"))
48 .arg(_controllerVehicle.vtol ? qsTr("desired") : qsTr("climbout"))
49 .arg(_controllerVehicle.vtol ? (qsTr("Ensure distance from launch to transition direction is far enough to complete transition.")) : "")
50 Layout.fillWidth: true
51 wrapMode: Text.WordWrap
52 visible: !initialClickLabel.visible
56 text: qsTr("Ensure clear of obstacles and into the wind.")
57 Layout.fillWidth: true
58 wrapMode: Text.WordWrap
59 visible: !initialClickLabel.visible
64 Layout.fillWidth: true
65 visible: !initialClickLabel.visible
67 missionItem.wizardMode = false
73 text: missionItem.launchTakeoffAtSameLocation ?
74 qsTr("Click in map to set planned Takeoff location.") :
75 qsTr("Click in map to set planned Launch location.")
76 Layout.fillWidth: true
77 wrapMode: Text.WordWrap
78 visible: missionItem.isTakeoffItem && !missionItem.launchCoordinate.isValid
84 spacing: _fieldSpacing
85 visible: !missionItem.wizardMode
89 Layout.fillWidth: true
90 visible: _multipleTabsVisible()
92 property bool _basicItemsAvailable: _specifiesAltitude || missionItem.speedSection.available || missionItem.comboboxFacts.count > 0 || missionItem.textFieldFacts.count > 0 || missionItem.nanFacts.count > 0
93 property bool _advancedItemsAvailable: missionItem.comboboxFactsAdvanced.count > 0 || missionItem.textFieldFactsAdvanced.count > 0 || missionItem.nanFactsAdvanced.count > 0
94 property bool _cameraAvailable: missionItem.cameraSection.available
96 function _multipleTabsVisible() {
98 if (_basicItemsAvailable) visibleCount++
99 if (_cameraAvailable) visibleCount++
100 if (_advancedItemsAvailable) visibleCount++
101 return visibleCount > 1
104 Component.onCompleted: {
105 if (_basicItemsAvailable) {
106 tabBar.currentIndex = 0
107 } else if (_cameraAvailable) {
108 tabBar.currentIndex = 1
109 } else if (_advancedItemsAvailable) {
110 tabBar.currentIndex = 2
112 tabBar.currentIndex = -1
118 icon.source: "/res/PlanSimpleItemBasic.svg"
119 visible: tabBar._basicItemsAvailable
124 icon.source: "/res/PlanSimpleItemCamera.svg"
125 visible: tabBar._cameraAvailable
130 icon.source: "/res/PlanSimpleItemAdvanced.svg"
131 visible: tabBar._advancedItemsAvailable
136 Layout.fillWidth: true
137 spacing: _fieldSpacing
138 visible: tabBar.currentIndex === 0
141 Layout.fillWidth: true
142 spacing: _fieldSpacing
143 visible: _specifiesAltitude
146 Layout.fillWidth: true
147 visible: _globalAltModeIsMixed
150 Layout.fillWidth: true
151 text: qsTr("Altitude Mode")
155 altitudeMode: missionItem.altitudeMode
156 vehicle: _controllerVehicle
157 onAltitudeModeChanged: missionItem.altitudeMode = altitudeMode
161 FactTextFieldSlider {
163 Layout.fillWidth: true
164 label: qsTr("Altitude%1").arg(_extraLabelText())
165 fact: missionItem.altitude
167 function _extraLabelText() {
168 if (!_globalAltModeIsMixed && missionItem.altitudeMode !== QGroundControl.AltitudeModeRelative) {
169 return qsTr(" (%1)").arg(QGroundControl.altitudeModeShortDescription(missionItem.altitudeMode))
177 font.pointSize: ScreenTools.smallFontPointSize
178 text: qsTr("Actual AMSL alt sent: %1 %2").arg(missionItem.amslAltAboveTerrain.valueString).arg(missionItem.amslAltAboveTerrain.units)
179 visible: missionItem.altitudeMode === QGroundControl.AltitudeModeCalcAboveTerrain
184 Layout.fillWidth: true
185 spacing: _fieldSpacing
188 model: missionItem.comboboxFacts
191 Layout.fillWidth: true
195 font.pointSize: ScreenTools.smallFontPointSize
197 visible: object.name !== ""
201 Layout.fillWidth: true
203 model: object.enumStrings
211 model: missionItem.textFieldFacts
213 FactTextFieldSlider {
214 Layout.fillWidth: true
217 enabled: !object.readOnly
222 model: missionItem.nanFacts
224 FactTextFieldSlider {
225 Layout.fillWidth: true
228 showEnableCheckbox: true
229 enableCheckBoxChecked: !isNaN(object.rawValue)
231 onEnableCheckboxClicked: object.rawValue = enableCheckBoxChecked ? 0 : NaN
235 FactTextFieldSlider {
236 Layout.fillWidth: true
237 label: qsTr("Flight Speed")
238 fact: missionItem.speedSection.flightSpeed
239 showEnableCheckbox: true
240 enableCheckBoxChecked: missionItem.speedSection.specifyFlightSpeed
241 visible: missionItem.speedSection.available
243 onEnableCheckboxClicked: missionItem.speedSection.specifyFlightSpeed = enableCheckBoxChecked
248 Layout.fillWidth: true
249 showSectionHeader: false
250 visible: tabBar.currentIndex === 1
252 Component.onCompleted: checked = missionItem.cameraSection.settingsSpecified
256 Layout.fillWidth: true
257 spacing: _fieldSpacing
258 visible: tabBar.currentIndex === 2
261 Layout.fillWidth: true
262 spacing: _fieldSpacing
265 model: missionItem.comboboxFactsAdvanced
268 Layout.fillWidth: true
272 font.pointSize: ScreenTools.smallFontPointSize
274 visible: object.name !== ""
278 Layout.fillWidth: true
280 model: object.enumStrings
288 model: missionItem.textFieldFactsAdvanced
290 FactTextFieldSlider {
291 Layout.fillWidth: true
294 enabled: !object.readOnly
299 model: missionItem.nanFactsAdvanced
301 FactTextFieldSlider {
302 Layout.fillWidth: true
305 showEnableCheckbox: true
306 enableCheckBoxChecked: !isNaN(object.rawValue)
308 onEnableCheckboxClicked: object.rawValue = enableCheckBoxChecked ? 0 : NaN