QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
MissionStats.qml
Go to the documentation of this file.
1import QtQuick
2import QtQuick.Controls
3import QtQuick.Layouts
4import QtQuick.Dialogs
5
6import QGroundControl
7import QGroundControl.Controls
8import QGroundControl.FactControls
9
10Rectangle {
11 required property var planMasterController
12
13 id: missionStats
14 implicitWidth: mainLayout.implicitWidth + (_margins * 2)
15 implicitHeight: mainLayout.implicitHeight + (_margins * 2)
16 color: Qt.rgba(_windowColor.r, _windowColor.g, _windowColor.b, 0.8)
17
18 property var _planMasterController: planMasterController
19 property color _windowColor: QGroundControl.globalPalette.window
20 property var _currentMissionItem: _planMasterController.missionController.currentPlanViewItem ///< Mission item to display status for
21
22 property var missionItems: _controllerValid ? _planMasterController.missionController.visualItems : undefined
23 property real missionPlannedDistance: _controllerValid ? _planMasterController.missionController.missionPlannedDistance : NaN
24 property real missionTime: _controllerValid ? _planMasterController.missionController.missionTime : 0
25 property real missionMaxTelemetry: _controllerValid ? _planMasterController.missionController.missionMaxTelemetry : NaN
26 property bool _controllerValid: _planMasterController !== undefined && _planMasterController !== null
27
28 property bool _currentMissionItemValid: _currentMissionItem && _currentMissionItem !== undefined && _currentMissionItem !== null
29 property bool _currentItemIsVTOLTakeoff: _currentMissionItemValid && _currentMissionItem.command == 84
30 property bool _missionValid: missionItems !== undefined
31
32 property real _dataFontSize: ScreenTools.defaultFontPointSize
33 property real _largeValueWidth: ScreenTools.defaultFontPixelWidth * 8
34 property real _mediumValueWidth: ScreenTools.defaultFontPixelWidth * 4
35 property real _smallValueWidth: ScreenTools.defaultFontPixelWidth * 3
36 property real _labelToValueSpacing: ScreenTools.defaultFontPixelWidth
37 property real _rowSpacing: ScreenTools.isMobile ? 1 : 0
38 property real _distance: _currentMissionItemValid ? _currentMissionItem.distance : NaN
39 property real _altDifference: _currentMissionItemValid ? _currentMissionItem.altDifference : NaN
40 property real _azimuth: _currentMissionItemValid ? _currentMissionItem.azimuth : NaN
41 property real _heading: _currentMissionItemValid ? _currentMissionItem.missionVehicleYaw : NaN
42 property real _missionPlannedDistance: _missionValid ? missionPlannedDistance : NaN
43 property real _missionMaxTelemetry: _missionValid ? missionMaxTelemetry : NaN
44 property real _missionTime: _missionValid ? missionTime : 0
45 property int _batteryChangePoint: _controllerValid ? _planMasterController.missionController.batteryChangePoint : -1
46 property int _batteriesRequired: _controllerValid ? _planMasterController.missionController.batteriesRequired : -1
47 property bool _batteryInfoAvailable: _batteryChangePoint >= 0 || _batteriesRequired >= 0
48 property real _gradient: _currentMissionItemValid && _currentMissionItem.distance > 0 ?
49 (_currentItemIsVTOLTakeoff ?
50 0 : (Math.atan(_currentMissionItem.altDifference / _currentMissionItem.distance) * (180.0/Math.PI)))
51 : NaN
52
53 property string _distanceText: isNaN(_distance) ? "-.-" : QGroundControl.unitsConversion.metersToAppSettingsHorizontalDistanceUnits(_distance).toFixed(1) + " " + QGroundControl.unitsConversion.appSettingsHorizontalDistanceUnitsString
54 property string _altDifferenceText: isNaN(_altDifference) ? "-.-" : QGroundControl.unitsConversion.metersToAppSettingsVerticalDistanceUnits(_altDifference).toFixed(1) + " " + QGroundControl.unitsConversion.appSettingsVerticalDistanceUnitsString
55 property string _gradientText: isNaN(_gradient) ? "-.-" : _gradient.toFixed(0) + qsTr(" deg")
56 property string _azimuthText: isNaN(_azimuth) ? "-.-" : Math.round(_azimuth) % 360
57 property string _headingText: isNaN(_azimuth) ? "-.-" : Math.round(_heading) % 360
58 property string _missionPlannedDistanceText: isNaN(_missionPlannedDistance) ? "-.-" : QGroundControl.unitsConversion.metersToAppSettingsHorizontalDistanceUnits(_missionPlannedDistance).toFixed(0) + " " + QGroundControl.unitsConversion.appSettingsHorizontalDistanceUnitsString
59 property string _missionMaxTelemetryText: isNaN(_missionMaxTelemetry) ? "-.-" : QGroundControl.unitsConversion.metersToAppSettingsHorizontalDistanceUnits(_missionMaxTelemetry).toFixed(0) + " " + QGroundControl.unitsConversion.appSettingsHorizontalDistanceUnitsString
60 property string _batteryChangePointText: _batteryChangePoint < 0 ? qsTr("N/A") : _batteryChangePoint
61 property string _batteriesRequiredText: _batteriesRequired < 0 ? qsTr("N/A") : _batteriesRequired
62
63 readonly property real _margins: ScreenTools.defaultFontPixelWidth
64
65 function getMissionTime() {
66 var totalSeconds = Number(_missionTime)
67 if (!totalSeconds) {
68 return "00:00:00"
69 }
70
71 var hours = Math.floor(totalSeconds / 3600)
72 var minutes = Math.floor((totalSeconds % 3600) / 60)
73 var seconds = Math.floor(totalSeconds % 60)
74
75 var hoursText = hours < 10 ? "0" + hours : String(hours)
76 var minutesText = minutes < 10 ? "0" + minutes : String(minutes)
77 var secondsText = seconds < 10 ? "0" + seconds : String(seconds)
78
79 return hoursText + ":" + minutesText + ":" + secondsText
80 }
81
82 QGCFlickable {
83 anchors.margins: _margins
84 anchors.fill: parent
85 flickableDirection: Flickable.HorizontalFlick
86 contentWidth: mainLayout.implicitWidth
87
88 RowLayout {
89 id: mainLayout
90 spacing: ScreenTools.defaultFontPixelWidth * 2
91
92 GridLayout {
93 columns: 8
94 rowSpacing: _rowSpacing
95 columnSpacing: _labelToValueSpacing
96
97 QGCLabel {
98 text: qsTr("Selected Waypoint")
99 Layout.columnSpan: 8
100 font.pointSize: ScreenTools.smallFontPointSize
101 }
102
103 QGCLabel { text: qsTr("Alt diff:"); font.pointSize: _dataFontSize; }
104 QGCLabel {
105 text: _altDifferenceText
106 font.pointSize: _dataFontSize
107 Layout.minimumWidth: _mediumValueWidth
108 }
109
110 Item { width: 1; height: 1 }
111
112 QGCLabel { text: qsTr("Azimuth:"); font.pointSize: _dataFontSize; }
113 QGCLabel {
114 text: _azimuthText
115 font.pointSize: _dataFontSize
116 Layout.minimumWidth: _smallValueWidth
117 }
118
119 Item { width: 1; height: 1 }
120
121 QGCLabel { text: qsTr("Dist prev WP:"); font.pointSize: _dataFontSize; }
122 QGCLabel {
123 text: _distanceText
124 font.pointSize: _dataFontSize
125 Layout.minimumWidth: _largeValueWidth
126 }
127
128 QGCLabel { text: qsTr("Gradient:"); font.pointSize: _dataFontSize; }
129 QGCLabel {
130 text: _gradientText
131 font.pointSize: _dataFontSize
132 Layout.minimumWidth: _mediumValueWidth
133 }
134
135 Item { width: 1; height: 1 }
136
137 QGCLabel { text: qsTr("Heading:"); font.pointSize: _dataFontSize; }
138 QGCLabel {
139 text: _headingText
140 font.pointSize: _dataFontSize
141 Layout.minimumWidth: _smallValueWidth
142 }
143 }
144
145 GridLayout {
146 columns: 5
147 rowSpacing: _rowSpacing
148 columnSpacing: _labelToValueSpacing
149
150 QGCLabel {
151 text: qsTr("Total Mission")
152 Layout.columnSpan: 5
153 font.pointSize: ScreenTools.smallFontPointSize
154 }
155
156 QGCLabel { text: qsTr("Distance:"); font.pointSize: _dataFontSize; }
157 QGCLabel {
158 text: _missionPlannedDistanceText
159 font.pointSize: _dataFontSize
160 Layout.minimumWidth: _largeValueWidth
161 }
162
163 Item { width: 1; height: 1 }
164
165 QGCLabel { text: qsTr("Max telem dist:"); font.pointSize: _dataFontSize; }
166 QGCLabel {
167 text: _missionMaxTelemetryText
168 font.pointSize: _dataFontSize
169 Layout.minimumWidth: _largeValueWidth
170 }
171
172 QGCLabel { text: qsTr("Time:"); font.pointSize: _dataFontSize; }
173 QGCLabel {
174 text: getMissionTime()
175 font.pointSize: _dataFontSize
176 Layout.minimumWidth: _largeValueWidth
177 }
178 }
179
180 GridLayout {
181 columns: 3
182 rowSpacing: _rowSpacing
183 columnSpacing: _labelToValueSpacing
184 visible: _batteryInfoAvailable
185
186 QGCLabel {
187 text: qsTr("Battery")
188 Layout.columnSpan: 3
189 font.pointSize: ScreenTools.smallFontPointSize
190 }
191
192 QGCLabel { text: qsTr("Batteries required:"); font.pointSize: _dataFontSize; }
193 QGCLabel {
194 text: _batteriesRequiredText
195 font.pointSize: _dataFontSize
196 Layout.minimumWidth: _mediumValueWidth
197 }
198 }
199 }
200 }
201}