7import QGroundControl.Controls
8import QGroundControl.FactControls
11 required property var planMasterController
14 implicitWidth: mainLayout.implicitWidth + (_margins * 2)
15 implicitHeight: mainLayout.implicitHeight + (_margins * 2)
16 color: Qt.rgba(_windowColor.r, _windowColor.g, _windowColor.b, 0.8)
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
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
28 property bool _currentMissionItemValid: _currentMissionItem && _currentMissionItem !== undefined && _currentMissionItem !== null
29 property bool _currentItemIsVTOLTakeoff: _currentMissionItemValid && _currentMissionItem.command == 84
30 property bool _missionValid: missionItems !== undefined
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)))
53 property string _distanceText: _distanceString()
54 property string _altDifferenceText: _altDifferenceString()
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
63 readonly property real _margins: ScreenTools.defaultFontPixelWidth
65 function _distanceString() {
66 return isNaN(_distance) ? "-.-" : QGroundControl.unitsConversion.metersToAppSettingsHorizontalDistanceUnitsString(_distance)
69 function _altDifferenceString() {
70 return isNaN(_altDifference) ? "-.-" : QGroundControl.unitsConversion.metersToAppSettingsVerticalDistanceUnitsString(_altDifference)
73 function getMissionTime() {
74 var totalSeconds = Number(_missionTime)
79 var hours = Math.floor(totalSeconds / 3600)
80 var minutes = Math.floor((totalSeconds % 3600) / 60)
81 var seconds = Math.floor(totalSeconds % 60)
83 var hoursText = hours < 10 ? "0" + hours : String(hours)
84 var minutesText = minutes < 10 ? "0" + minutes : String(minutes)
85 var secondsText = seconds < 10 ? "0" + seconds : String(seconds)
87 return hoursText + ":" + minutesText + ":" + secondsText
91 anchors.margins: _margins
93 flickableDirection: Flickable.HorizontalFlick
94 contentWidth: mainLayout.implicitWidth
98 spacing: ScreenTools.defaultFontPixelWidth * 2
102 rowSpacing: _rowSpacing
103 columnSpacing: _labelToValueSpacing
106 text: qsTr("Selected Waypoint")
108 font.pointSize: ScreenTools.smallFontPointSize
111 QGCLabel { text: qsTr("Alt diff:"); font.pointSize: _dataFontSize; }
113 text: _altDifferenceText
114 font.pointSize: _dataFontSize
115 Layout.minimumWidth: _mediumValueWidth
118 Item { width: 1; height: 1 }
120 QGCLabel { text: qsTr("Azimuth:"); font.pointSize: _dataFontSize; }
123 font.pointSize: _dataFontSize
124 Layout.minimumWidth: _smallValueWidth
127 Item { width: 1; height: 1 }
129 QGCLabel { text: qsTr("Dist prev WP:"); font.pointSize: _dataFontSize; }
132 font.pointSize: _dataFontSize
133 Layout.minimumWidth: _largeValueWidth
136 QGCLabel { text: qsTr("Gradient:"); font.pointSize: _dataFontSize; }
139 font.pointSize: _dataFontSize
140 Layout.minimumWidth: _mediumValueWidth
143 Item { width: 1; height: 1 }
145 QGCLabel { text: qsTr("Heading:"); font.pointSize: _dataFontSize; }
148 font.pointSize: _dataFontSize
149 Layout.minimumWidth: _smallValueWidth
155 rowSpacing: _rowSpacing
156 columnSpacing: _labelToValueSpacing
159 text: qsTr("Total Mission")
161 font.pointSize: ScreenTools.smallFontPointSize
164 QGCLabel { text: qsTr("Distance:"); font.pointSize: _dataFontSize; }
166 text: _missionPlannedDistanceText
167 font.pointSize: _dataFontSize
168 Layout.minimumWidth: _largeValueWidth
171 Item { width: 1; height: 1 }
173 QGCLabel { text: qsTr("Max telem dist:"); font.pointSize: _dataFontSize; }
175 text: _missionMaxTelemetryText
176 font.pointSize: _dataFontSize
177 Layout.minimumWidth: _largeValueWidth
180 QGCLabel { text: qsTr("Time:"); font.pointSize: _dataFontSize; }
182 text: getMissionTime()
183 font.pointSize: _dataFontSize
184 Layout.minimumWidth: _largeValueWidth
190 rowSpacing: _rowSpacing
191 columnSpacing: _labelToValueSpacing
192 visible: _batteryInfoAvailable
195 text: qsTr("Battery")
197 font.pointSize: ScreenTools.smallFontPointSize
200 QGCLabel { text: qsTr("Batteries required:"); font.pointSize: _dataFontSize; }
202 text: _batteriesRequiredText
203 font.pointSize: _dataFontSize
204 Layout.minimumWidth: _mediumValueWidth
211 target: QGroundControl.unitsConversion
213 function onUnitsChanged() {
214 _distanceText = Qt.binding(_distanceString)
215 _altDifferenceText = Qt.binding(_altDifferenceString)