6import QGroundControl.Controls
7import QGroundControl.FactControls
9// Editor for Simple mission items
11 required property var missionItem
12 required property real availableWidth
16 height: editorColumn.height + (_margin * 2)
17 color: qgcPal.windowShadeDark
21 property bool _specifiesAltitude: missionItem.specifiesAltitude
22 property real _margin: ScreenTools.defaultFontPixelHeight / 2
23 property real _altRectMargin: ScreenTools.defaultFontPixelWidth / 2
24 property var _controllerVehicle: missionItem.masterController.controllerVehicle
25 property int _globalAltFrame: missionItem.masterController.missionController.globalAltitudeFrame
26 property bool _globalAltFrameIsMixed: _globalAltFrame == QGroundControl.AltitudeFrameMixed
27 property real _radius: ScreenTools.defaultFontPixelWidth / 2
28 property real _fieldSpacing: ScreenTools.defaultFontPixelHeight / 2
30 QGCPalette { id: qgcPal; colorGroupEnabled: root.enabled }
34 anchors.margins: _margin
35 anchors.left: parent.left
36 anchors.right: parent.right
37 anchors.top: parent.top
42 anchors.margins: _margin
43 anchors.left: parent.left
44 anchors.right: parent.right
46 visible: missionItem.isTakeoffItem && missionItem.wizardMode // Hack special case for takeoff item
49 text: qsTr("Move '%1' %2 to the %3 location. %4")
50 .arg(_controllerVehicle.vtol ? qsTr("T") : qsTr("T"))
51 .arg(_controllerVehicle.vtol ? qsTr("Transition Direction") : qsTr("Takeoff"))
52 .arg(_controllerVehicle.vtol ? qsTr("desired") : qsTr("climbout"))
53 .arg(_controllerVehicle.vtol ? (qsTr("Ensure distance from launch to transition direction is far enough to complete transition.")) : "")
54 Layout.fillWidth: true
55 wrapMode: Text.WordWrap
56 visible: !initialClickLabel.visible
60 text: qsTr("Ensure clear of obstacles and into the wind.")
61 Layout.fillWidth: true
62 wrapMode: Text.WordWrap
63 visible: !initialClickLabel.visible
68 Layout.fillWidth: true
69 visible: !initialClickLabel.visible
71 missionItem.wizardMode = false
77 text: missionItem.launchTakeoffAtSameLocation ?
78 qsTr("Click in map to set planned Takeoff location.") :
79 qsTr("Click in map to set planned Launch location.")
80 Layout.fillWidth: true
81 wrapMode: Text.WordWrap
82 visible: missionItem.isTakeoffItem && !missionItem.launchCoordinate.isValid
88 spacing: _fieldSpacing
89 visible: !missionItem.wizardMode
93 Layout.fillWidth: true
94 visible: _multipleTabsVisible()
96 property bool showBasicItems: tabBar.visible ? tabBar.currentIndex === 0 : _basicItemsAvailable
97 property bool showCameraItems: tabBar.visible ? tabBar.currentIndex === 1 : _cameraAvailable
98 property bool showAdvancedItems: tabBar.visible ? tabBar.currentIndex === 2 : _advancedItemsAvailable
100 property bool _basicItemsAvailable: _specifiesAltitude || missionItem.speedSection.available || missionItem.comboboxFacts.count > 0 || missionItem.textFieldFacts.count > 0 || missionItem.nanFacts.count > 0
101 property bool _advancedItemsAvailable: missionItem.comboboxFactsAdvanced.count > 0 || missionItem.textFieldFactsAdvanced.count > 0 || missionItem.nanFactsAdvanced.count > 0
102 property bool _cameraAvailable: missionItem.cameraSection.available
104 function _multipleTabsVisible() {
106 if (_basicItemsAvailable) visibleCount++
107 if (_cameraAvailable) visibleCount++
108 if (_advancedItemsAvailable) visibleCount++
109 return visibleCount > 1
112 Component.onCompleted: {
113 if (_basicItemsAvailable) {
114 tabBar.currentIndex = 0
115 } else if (_cameraAvailable) {
116 tabBar.currentIndex = 1
117 } else if (_advancedItemsAvailable) {
118 tabBar.currentIndex = 2
120 tabBar.currentIndex = -1
126 icon.source: "/res/PlanSimpleItemBasic.svg"
127 visible: tabBar._basicItemsAvailable
132 icon.source: "/res/PlanSimpleItemCamera.svg"
133 visible: tabBar._cameraAvailable
138 icon.source: "/res/PlanSimpleItemAdvanced.svg"
139 visible: tabBar._advancedItemsAvailable
144 Layout.fillWidth: true
145 spacing: _fieldSpacing
146 visible: tabBar.showBasicItems
149 Layout.fillWidth: true
150 spacing: _fieldSpacing
151 visible: _specifiesAltitude
154 Layout.fillWidth: true
155 visible: _globalAltFrameIsMixed
158 Layout.fillWidth: true
159 text: qsTr("Alt Frame")
163 altitudeFrame: missionItem.altitudeFrame
164 vehicle: _controllerVehicle
165 onAltitudeFrameChanged: missionItem.altitudeFrame = altitudeFrame
169 FactTextFieldSlider {
171 Layout.fillWidth: true
172 label: qsTr("Altitude%1").arg(_extraLabelText())
173 fact: missionItem.altitude
175 function _extraLabelText() {
176 return qsTr(" (%1)").arg(QGroundControl.altitudeFrameExtraUnits(missionItem.altitudeFrame))
181 font.pointSize: ScreenTools.smallFontPointSize
182 text: qsTr("Actual AMSL alt sent: %1 %2").arg(missionItem.amslAltAboveTerrain.valueString).arg(missionItem.amslAltAboveTerrain.units)
183 visible: missionItem.altitudeFrame === QGroundControl.AltitudeFrameCalcAboveTerrain
188 Layout.fillWidth: true
189 spacing: _fieldSpacing
192 model: missionItem.comboboxFacts
195 Layout.fillWidth: true
199 font.pointSize: ScreenTools.smallFontPointSize
201 visible: object.name !== ""
205 Layout.fillWidth: true
207 model: object.enumStrings
215 model: missionItem.textFieldFacts
217 FactTextFieldSlider {
218 Layout.fillWidth: true
221 enabled: !object.readOnly
222 warnOnUserMinMaxInvalid: false
227 model: missionItem.nanFacts
229 FactTextFieldSlider {
230 Layout.fillWidth: true
233 showEnableCheckbox: true
234 enableCheckBoxChecked: !isNaN(object.rawValue)
235 warnOnUserMinMaxInvalid: false
237 onEnableCheckboxClicked: object.rawValue = enableCheckBoxChecked ? 0 : NaN
241 FactTextFieldSlider {
242 Layout.fillWidth: true
243 label: qsTr("Flight Speed")
244 fact: missionItem.speedSection.flightSpeed
245 showEnableCheckbox: true
246 enableCheckBoxChecked: missionItem.speedSection.specifyFlightSpeed
247 visible: missionItem.speedSection.available
249 onEnableCheckboxClicked: missionItem.speedSection.specifyFlightSpeed = enableCheckBoxChecked
254 Layout.fillWidth: true
255 showSectionHeader: false
256 missionItem: root.missionItem
257 visible: tabBar.showCameraItems
259 Component.onCompleted: checked = missionItem.cameraSection.settingsSpecified
263 Layout.fillWidth: true
264 spacing: _fieldSpacing
265 visible: tabBar.showAdvancedItems
268 Layout.fillWidth: true
269 spacing: _fieldSpacing
272 model: missionItem.comboboxFactsAdvanced
275 Layout.fillWidth: true
279 font.pointSize: ScreenTools.smallFontPointSize
281 visible: object.name !== ""
285 Layout.fillWidth: true
287 model: object.enumStrings
295 model: missionItem.textFieldFactsAdvanced
297 FactTextFieldSlider {
298 Layout.fillWidth: true
301 enabled: !object.readOnly
302 warnOnUserMinMaxInvalid: false
307 model: missionItem.nanFactsAdvanced
309 FactTextFieldSlider {
310 Layout.fillWidth: true
313 showEnableCheckbox: true
314 enableCheckBoxChecked: !isNaN(object.rawValue)
315 warnOnUserMinMaxInvalid: false
317 onEnableCheckboxClicked: object.rawValue = enableCheckBoxChecked ? 0 : NaN