6import QGroundControl.Controls
7import QGroundControl.FactControls
11 Layout.preferredWidth: mainLayout.width
13 property bool showIndicator: true
14 property bool waitForParameters: true // UI won't show until parameters are ready
16 property real fontPointSize: ScreenTools.largeFontPointSize
17 property var activeVehicle: QGroundControl.multiVehicleManager.activeVehicle
18 property bool allowEditMode: true
19 property bool editMode: false
21 property bool _isVTOL: activeVehicle ? activeVehicle.vtol : false
22 property bool _vtolInFWDFlight: activeVehicle ? activeVehicle.vtolInFwdFlight : false
23 property var _vehicleInAir: activeVehicle ? activeVehicle.flying || activeVehicle.landing : false
25 QGCPalette { id: qgcPal }
29 anchors.verticalCenter: parent.verticalCenter
30 spacing: ScreenTools.defaultFontPixelWidth / 2
34 Layout.preferredWidth: ScreenTools.defaultFontPixelWidth * 3
35 Layout.preferredHeight: ScreenTools.defaultFontPixelHeight
36 fillMode: Image.PreserveAspectFit
38 color: qgcPal.windowTransparentText
39 source: "/qmlimages/FlightModesComponentIcon.png"
44 text: activeVehicle ? activeVehicle.flightMode : qsTr("N/A", "No data to display")
45 color: qgcPal.windowTransparentText
46 font.pointSize: fontPointSize
52 Layout.alignment: Qt.AlignVCenter
53 horizontalAlignment: Text.AlignHCenter
54 text: _vtolInFWDFlight ? qsTr("FW\nVTOL") : qsTr("MR\nVTOL")
55 font.pointSize: ScreenTools.smallFontPointSize
56 wrapMode: Text.WordWrap
62 anchors.fill: mainLayout
63 onClicked: mainWindow.showIndicatorDrawer(drawerComponent, control)
71 waitForParameters: control.waitForParameters
73 contentComponent: flightModeContentComponent
74 expandedComponent: flightModeExpandedComponent
85 id: flightModeContentComponent
89 spacing: ScreenTools.defaultFontPixelWidth / 2
91 property var activeVehicle: QGroundControl.multiVehicleManager.activeVehicle
92 property var flightModeSettings: QGroundControl.settingsManager.flightModeSettings
93 property var hiddenFlightModesFact: null
94 property var hiddenFlightModesList: []
96 Component.onCompleted: {
97 // Hidden flight modes are classified by firmware and vehicle class
98 var hiddenFlightModesPropPrefix
99 if (activeVehicle.px4Firmware) {
100 hiddenFlightModesPropPrefix = "px4HiddenFlightModes"
101 } else if (activeVehicle.apmFirmware) {
102 hiddenFlightModesPropPrefix = "apmHiddenFlightModes"
104 control.allowEditMode = false
106 if (control.allowEditMode) {
107 var hiddenFlightModesProp = hiddenFlightModesPropPrefix + activeVehicle.vehicleClassInternalName()
108 if (flightModeSettings.hasOwnProperty(hiddenFlightModesProp)) {
109 hiddenFlightModesFact = flightModeSettings[hiddenFlightModesProp]
110 // Split string into list of flight modes
111 if (hiddenFlightModesFact && hiddenFlightModesFact.value !== "") {
112 hiddenFlightModesList = hiddenFlightModesFact.value.split(",")
115 control.allowEditMode = false
118 hiddenModesLabel.calcVisible()
123 function onEditModeChanged() {
125 for (var i=0; i<modeRepeater.count; i++) {
126 var button = modeRepeater.itemAt(i).children[0]
127 var checkBox = modeRepeater.itemAt(i).children[1]
129 checkBox.checked = !hiddenFlightModesList.find(item => { return item === button.text } )
136 id: vtolTransitionButton
137 Layout.fillWidth: true
138 text: _vtolInFWDFlight ? qsTr("Transition to Multi-Rotor") : qsTr("Transition to Fixed Wing")
139 visible: _isVTOL && _vehicleInAir
142 _activeVehicle.vtolInFwdFlight = !_vtolInFWDFlight
143 mainWindow.closeIndicatorDrawer()
149 model: activeVehicle ? activeVehicle.flightModes : []
152 spacing: ScreenTools.defaultFontPixelWidth
153 visible: editMode || !hiddenFlightModesList.find(item => { return item === modelData } )
158 delay: flightModeSettings.requireModeChangeConfirmation.rawValue ? defaultDelay : 0
159 Layout.fillWidth: true
163 parent.children[1].toggle()
164 parent.children[1].clicked()
166 //var controller = globals.guidedControllerFlyView
167 //controller.confirmAction(controller.actionSetFlightMode, modelData)
168 activeVehicle.flightMode = modelData
169 mainWindow.closeIndicatorDrawer()
178 hiddenFlightModesList = []
179 for (var i=0; i<modeRepeater.count; i++) {
180 var checkBox = modeRepeater.itemAt(i).children[1]
181 if (!checkBox.checked) {
182 hiddenFlightModesList.push(modeRepeater.model[i])
185 hiddenFlightModesFact.value = hiddenFlightModesList.join(",")
186 hiddenModesLabel.calcVisible()
194 text: qsTr("Some Modes Hidden")
195 Layout.fillWidth: true
196 font.pointSize: ScreenTools.smallFontPointSize
197 horizontalAlignment: Text.AlignHCenter
200 function calcVisible() {
201 hiddenModesLabel.visible = hiddenFlightModesList.length > 0
208 id: flightModeExpandedComponent
211 Layout.preferredWidth: ScreenTools.defaultFontPixelWidth * 60
214 property var qgcPal: QGroundControl.globalPalette
215 property real margins: ScreenTools.defaultFontPixelHeight
216 property var flightModeSettings: QGroundControl.settingsManager.flightModeSettings
219 Layout.fillWidth: true
220 source: _activeVehicle.expandedToolbarIndicatorSource("FlightMode")
223 SettingsGroupLayout {
224 Layout.fillWidth: true
227 Layout.fillWidth: true
228 text: qsTr("Click and Hold to Confirm Mode Change")
229 fact: flightModeSettings.requireModeChangeConfirmation
233 Layout.fillWidth: true
234 enabled: control.allowEditMode
237 Layout.fillWidth: true
238 text: qsTr("Edit Displayed Flight Modes")
242 onClicked: control.editMode = checked
247 Layout.fillWidth: true
248 label: qsTr("Flight Modes")
249 buttonText: qsTr("Configure")
250 visible: _activeVehicle.autopilotPlugin.knownVehicleComponentAvailable(AutoPilotPlugin.KnownFlightModesVehicleComponent) &&
251 QGroundControl.corePlugin.showAdvancedUI
254 mainWindow.showKnownVehicleComponentConfigPage(AutoPilotPlugin.KnownFlightModesVehicleComponent)
255 mainWindow.closeIndicatorDrawer()