6import QGroundControl.Controls
7import QGroundControl.FactControls
12 required property var planMasterController
13 required property var missionController
14 required property var editorMap
16 property var _controllerVehicle: planMasterController.controllerVehicle
17 property var _visualItems: missionController.visualItems
18 property bool _noMissionItemsAdded: _visualItems ? _visualItems.count <= 1 : true
19 property var _settingsItem: _visualItems && _visualItems.count > 0 ? _visualItems.get(0) : null
20 property bool _multipleFirmware: !QGroundControl.singleFirmwareSupport && QGroundControl.settingsManager.appSettings.preferredFirmwareClass.rawValue === 0
21 property bool _multipleVehicleTypes: !QGroundControl.singleVehicleSupport && QGroundControl.settingsManager.appSettings.preferredVehicleClass.rawValue === 0
22 property bool _allowFWVehicleTypeSelection: _noMissionItemsAdded && !globals.activeVehicle
23 property bool _waypointsOnlyMode: QGroundControl.corePlugin.options.missionWaypointsOnly
24 property real _fieldWidth: ScreenTools.defaultFontPixelWidth * 16
26 width: parent ? parent.width : 0
27 height: mainColumn.height + ScreenTools.defaultFontPixelHeight
28 color: qgcPal.windowShadeDark
30 QGCPalette { id: qgcPal; colorGroupEnabled: _root.enabled }
34 anchors.left: parent.left
35 anchors.right: parent.right
36 anchors.verticalCenter: parent.verticalCenter
37 anchors.margins: ScreenTools.defaultFontPixelWidth
38 spacing: ScreenTools.defaultFontPixelHeight * 0.25
41 Layout.fillWidth: true
45 text: qsTr("Plan File")
50 placeholderText: qsTr("Untitled")
51 Layout.fillWidth: true
53 Component.onCompleted: text = _root.planMasterController.currentPlanFileName
56 target: _root.planMasterController
57 function onCurrentPlanFileNameChanged() {
58 if (!planNameField.activeFocus) {
59 planNameField.text = _root.planMasterController.currentPlanFileName
64 onEditingFinished: _root.planMasterController.currentPlanFileName = text
70 id: vehicleInfoSectionHeader
71 Layout.fillWidth: true
72 text: qsTr("Vehicle Info")
73 visible: !_root._waypointsOnlyMode && (_root._multipleFirmware || _root._multipleVehicleTypes)
77 Layout.fillWidth: true
78 spacing: ScreenTools.defaultFontPixelWidth
79 visible: vehicleInfoSectionHeader.visible && vehicleInfoSectionHeader.checked
82 fact: QGroundControl.settingsManager.appSettings.offlineEditingFirmwareClass
84 Layout.fillWidth: true
85 visible: _root._multipleFirmware && _root._allowFWVehicleTypeSelection
88 text: _root._controllerVehicle ? _root._controllerVehicle.firmwareTypeString : ""
89 Layout.fillWidth: true
90 visible: _root._multipleFirmware && !_root._allowFWVehicleTypeSelection
94 fact: QGroundControl.settingsManager.appSettings.offlineEditingVehicleClass
96 Layout.fillWidth: true
97 visible: _root._multipleVehicleTypes && _root._allowFWVehicleTypeSelection
100 text: _root._controllerVehicle ? _root._controllerVehicle.vehicleTypeString : ""
101 Layout.fillWidth: true
102 visible: _root._multipleVehicleTypes && !_root._allowFWVehicleTypeSelection
106 // ── Expected Home Position ──
108 id: plannedHomePositionSection
109 Layout.fillWidth: true
110 text: qsTr("Expected Home Position")
113 // Prompt to click map to set/move home position
115 Layout.fillWidth: true
116 Layout.topMargin: ScreenTools.defaultFontPixelWidth / 2
117 spacing: ScreenTools.defaultFontPixelWidth / 2
118 visible: plannedHomePositionSection.checked && _root.planMasterController.showCreateFromTemplate
121 source: "qrc:///qmlimages/MapHome.svg"
122 Layout.alignment: Qt.AlignHCenter
123 Layout.preferredWidth: ScreenTools.defaultFontPixelHeight * 2
124 Layout.preferredHeight: Layout.preferredWidth
125 fillMode: Image.PreserveAspectFit
129 Layout.fillWidth: true
130 wrapMode: Text.WordWrap
131 horizontalAlignment: Text.AlignHCenter
132 text: qsTr("Click in map to set position")
133 visible: !_root.missionController.homePositionSet
137 Layout.fillWidth: true
138 wrapMode: Text.WordWrap
139 horizontalAlignment: Text.AlignHCenter
140 text: qsTr("Drag to move home position. Click to set new position.")
141 visible: _root.missionController.homePositionSet
145 // Normal home position controls (shown only when home is set)
147 Layout.fillWidth: true
148 columnSpacing: ScreenTools.defaultFontPixelWidth
150 visible: plannedHomePositionSection.checked && _root.missionController.homePositionSet
153 text: qsTr("Altitude (AMSL)")
154 font.pointSize: ScreenTools.smallFontPointSize
157 fact: _root._settingsItem ? _root._settingsItem.plannedHomePositionAltitude : null
158 Layout.fillWidth: true
159 font.pointSize: ScreenTools.smallFontPointSize
160 visible: _root._settingsItem && _root._settingsItem.terrainQueryFailed
163 text: _root._settingsItem ? _root._settingsItem.plannedHomePositionAltitude.valueString + " " + _root._settingsItem.plannedHomePositionAltitude.units : ""
164 Layout.fillWidth: true
165 font.pointSize: ScreenTools.smallFontPointSize
166 visible: !_root._settingsItem || !_root._settingsItem.terrainQueryFailed
171 Layout.fillWidth: true
172 wrapMode: Text.WordWrap
173 font.pointSize: ScreenTools.smallFontPointSize
174 text: qsTr("Actual position/alt set by vehicle at flight time.")
175 horizontalAlignment: Text.AlignHCenter
176 visible: plannedHomePositionSection.checked && _root.missionController.homePositionSet
179 // ── Plan Templates ──
181 id: planTemplateSectionHeader
182 Layout.fillWidth: true
183 text: qsTr("Plan Templates")
184 visible: _root.planMasterController.showCreateFromTemplate
188 Layout.fillWidth: true
189 spacing: ScreenTools.defaultFontPixelHeight / 2
190 visible: planTemplateSectionHeader.visible && planTemplateSectionHeader.checked
191 enabled: _root.missionController.homePositionSet
192 opacity: enabled ? 1.0 : 0.5
195 model: _root.planMasterController.planCreators
198 Layout.fillWidth: true
201 if (object.blankPlan) {
202 _root.planMasterController.userSelectedManualCreation = true
204 object.createPlan(_root.editorMap.center)