QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
SetupPage.qml
Go to the documentation of this file.
1import QtQuick
2import QtQuick.Controls
3import QtQuick.Dialogs
4import QtQuick.Layouts
5
6import QGroundControl
7import QGroundControl.FactControls
8import QGroundControl.Controls
9
10/// Base view control for all Setup pages
11Item {
12 id: setupView
13 enabled: !_disableDueToArmed && !_disableDueToFlying
14
15 property alias pageComponent: pageLoader.sourceComponent
16 property string pageName: vehicleComponent ? vehicleComponent.name : ""
17 property string pageDescription: vehicleComponent ? vehicleComponent.description : ""
18 property real availableWidth: width - pageLoader.x
19 property real availableHeight: height - pageLoader.y
20 property bool showAdvanced: false
21 property alias advanced: advancedCheckBox.checked
22 property string sectionNameFilter: ""
23
24 function sectionVisible(name) {
25 if (pageLoader.item && typeof pageLoader.item.sectionVisible === "function") {
26 return pageLoader.item.sectionVisible(name)
27 }
28 return true
29 }
30
31 onSectionNameFilterChanged: {
32 if (pageLoader.item && typeof pageLoader.item.sectionNameFilter !== "undefined") {
33 pageLoader.item.sectionNameFilter = sectionNameFilter
34 }
35 }
36
37 property bool _vehicleIsRover: globals.activeVehicle ? globals.activeVehicle.rover : false
38 property bool _vehicleArmed: globals.activeVehicle ? globals.activeVehicle.armed : false
39 property bool _vehicleFlying: globals.activeVehicle ? globals.activeVehicle.flying : false
40 property bool _disableDueToArmed: vehicleComponent ? (!vehicleComponent.allowSetupWhileArmed && _vehicleArmed) : false
41 // FIXME: The _vehicleIsRover checkl is a hack to work around https://github.com/PX4/Firmware/issues/10969
42 property bool _disableDueToFlying: vehicleComponent ? (!_vehicleIsRover && !vehicleComponent.allowSetupWhileFlying && _vehicleFlying) : false
43 property string _disableReason: _disableDueToArmed ? qsTr("armed") : qsTr("flying")
44 property real _margins: ScreenTools.defaultFontPixelHeight * 0.5
45
46 Component.onCompleted: {
47 if(pageLoader.item && pageLoader.item.setupPageCompleted) {
48 pageLoader.item.setupPageCompleted()
49 }
50 if (pageLoader.item && typeof pageLoader.item.sectionNameFilter !== "undefined") {
51 pageLoader.item.sectionNameFilter = sectionNameFilter
52 }
53 }
54
55 QGCFlickable {
56 anchors.fill: parent
57 contentWidth: Math.max(availableWidth, pageLoader.x + pageLoader.item.width)
58 contentHeight: Math.max(availableHeight, pageLoader.y + pageLoader.item.height)
59 clip: true
60
61 RowLayout {
62 id: headingRow
63 width: availableWidth
64 spacing: _margins
65 layoutDirection: Qt.RightToLeft
66 visible: showAdvanced || (pageDescription !== "" && !ScreenTools.isShortScreen)
67
68 QGCCheckBox {
69 id: advancedCheckBox
70 text: qsTr("Advanced")
71 visible: showAdvanced
72 }
73
74 ColumnLayout {
75 spacing: _margins
76 Layout.fillWidth: true
77
78 QGCLabel {
79 Layout.fillWidth: true
80 wrapMode: Text.WordWrap
81 text: pageDescription
82 visible: pageDescription !== "" && !ScreenTools.isShortScreen
83 }
84
85 QGCLabel {
86 Layout.fillWidth: true
87 wrapMode: Text.WordWrap
88 text: qsTr("Disabled while the vehicle is %1").arg(_disableReason)
89 color: qgcPal.warningText
90 visible: !setupView.enabled && !ScreenTools.isShortScreen
91 }
92 }
93 }
94
95 Loader {
96 id: pageLoader
97 anchors.topMargin: _margins
98 anchors.top: headingRow.bottom
99 }
100
101 // Overlay to display when vehicle is armed and this setup page needs
102 // to be disabled
103 Rectangle {
104 visible: !setupView.enabled
105 anchors.fill: parent
106 color: "black"
107 opacity: 0.5
108 }
109 }
110}