MissionItemStatus.qml 9.64 KB
Newer Older
1 2 3 4 5 6 7 8
/****************************************************************************
 *
 *   (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/
9 10 11 12


import QtQuick          2.5
import QtQuick.Controls 1.3
13
import QtQuick.Layouts  1.2
14 15 16 17

import QGroundControl.ScreenTools   1.0
import QGroundControl.Controls      1.0
import QGroundControl.Palette       1.0
18
import QGroundControl               1.0
19 20
import QGroundControl.FactSystem    1.0
import QGroundControl.FactControls  1.0
21 22

Rectangle {
23 24
    readonly property var       _activeVehicle:     QGroundControl.multiVehicleManager.activeVehicle

25 26 27 28
    property Fact   _offlineEditingVehicleType:     QGroundControl.offlineEditingVehicleType
    property Fact   _offlineEditingCruiseSpeed:     QGroundControl.offlineEditingCruiseSpeed
    property Fact   _offlineEditingHoverSpeed:      QGroundControl.offlineEditingHoverSpeed

29 30 31
    property var    currentMissionItem          ///< Mission item to display status for
    property var    missionItems                ///< List of all available mission items
    property real   expandedWidth               ///< Width of control when expanded
32 33 34 35
    property real   missionDistance
    property real   missionMaxTelemetry
    property real   cruiseDistance
    property real   hoverDistance
36 37

    width:      _expanded ? expandedWidth : _collapsedWidth
38
    height:     Math.max(valueGrid.height, valueMissionGrid.height) + (_margins * 2)
39
    radius:     ScreenTools.defaultFontPixelWidth * 0.5
40 41 42 43 44 45
    color:      qgcPal.window
    opacity:    0.80
    clip:       true

    readonly property real margins: ScreenTools.defaultFontPixelWidth

Don Gagne's avatar
Don Gagne committed
46
    property real   _collapsedWidth:    valueGrid.width + (margins * 2)
47
    property bool   _expanded:          true
48

Don Gagne's avatar
Don Gagne committed
49 50
    property real   _distance:          _statusValid ? _currentMissionItem.distance : 0
    property real   _altDifference:     _statusValid ? _currentMissionItem.altDifference : 0
51
    property real   _gradient:          _statusValid && _currentMissionItem.distance > 0 ? Math.atan(_currentMissionItem.altDifference / _currentMissionItem.distance) : 0
Don Gagne's avatar
Don Gagne committed
52 53
    property real   _gradientPercent:   isNaN(_gradient) ? 0 : _gradient * 100
    property real   _azimuth:           _statusValid ? _currentMissionItem.azimuth : -1
54 55 56 57 58 59 60
    property real   _missionDistance:   _missionValid ? missionDistance : 0
    property real   _missionMaxTelemetry: _missionValid ? missionMaxTelemetry : 0
    property real   _missionTime:       _missionValid && _missionSpeed > 0 ?  (_isVTOL ? _hoverTime + _cruiseTime : _missionDistance / _missionSpeed) : 0
    property real   _hoverDistance:    _missionValid ? hoverDistance : 0
    property real   _cruiseDistance:    _missionValid ? cruiseDistance : 0
    property real   _hoverTime:         _missionValid && _offlineEditingHoverSpeed.value > 0 ? _hoverDistance / _offlineEditingHoverSpeed.value : 0
    property real   _cruiseTime:        _missionValid && _offlineEditingCruiseSpeed.value > 0 ? _cruiseDistance / _offlineEditingCruiseSpeed.value : 0
61

Don Gagne's avatar
Don Gagne committed
62
    property bool   _statusValid:       currentMissionItem != undefined
63 64
    property bool   _vehicleValid:      _activeVehicle != undefined
    property bool   _missionValid:      missionItems != undefined
65 66 67
    property bool   _currentSurvey:     _statusValid ? _currentMissionItem.commandName == "Survey" : false
    property bool   _isVTOL:            _vehicleValid ? _activeVehicle.vtol : _offlineEditingVehicleType.enumStringValue == "VTOL" //hardcoded
    property real   _missionSpeed:      _offlineEditingVehicleType.enumStringValue == "Fixedwing" ? _offlineEditingCruiseSpeed.value : _offlineEditingHoverSpeed.value
68

69 70 71 72
    property string _distanceText:      _statusValid ? QGroundControl.metersToAppSettingsDistanceUnits(_distance).toFixed(2) + " " + QGroundControl.appSettingsDistanceUnitsString : " "
    property string _altText:           _statusValid ? QGroundControl.metersToAppSettingsDistanceUnits(_altDifference).toFixed(2) + " " + QGroundControl.appSettingsDistanceUnitsString : " "
    property string _gradientText:      _statusValid ? _gradientPercent.toFixed(0) + "%" : " "
    property string _azimuthText:       _statusValid ? Math.round(_azimuth) : " "
73
    property string _missionDistanceText: _missionValid ? QGroundControl.metersToAppSettingsDistanceUnits(_missionDistance).toFixed(2) + " " + QGroundControl.appSettingsDistanceUnitsString : " "
Don Gagne's avatar
Don Gagne committed
74
    property string _missionTimeText:     _missionValid ? Number(_missionTime / 60).toFixed(1) + " min" : " "
75 76 77 78 79
    property string _missionMaxTelemetryText:  _missionValid ? QGroundControl.metersToAppSettingsDistanceUnits(_missionMaxTelemetry).toFixed(2) + " " + QGroundControl.appSettingsDistanceUnitsString : " "
    property string _hoverDistanceText: _missionValid ? QGroundControl.metersToAppSettingsDistanceUnits(_hoverDistance).toFixed(2) + " " + QGroundControl.appSettingsDistanceUnitsString : " "
    property string _cruiseDistanceText: _missionValid ? QGroundControl.metersToAppSettingsDistanceUnits(_cruiseDistance).toFixed(2) + " " + QGroundControl.appSettingsDistanceUnitsString : " "
    property string _hoverTimeText:     _missionValid ? _hoverTime.toFixed(0) + "s" : " "
    property string _cruiseTimeText:    _missionValid ? _cruiseTime.toFixed(0) + "s" : " "
80 81 82 83 84 85 86 87

    readonly property real _margins:    ScreenTools.defaultFontPixelWidth

    MouseArea {
        anchors.fill:   parent
        onClicked:      _expanded = !_expanded
    }

88 89
    Row {
        anchors.fill:       parent
90
        anchors.margins:    _margins
91
        spacing:            _margins
92

93 94 95 96 97
        GridLayout {
            id:                     valueGrid
            columns:                2
            rowSpacing:             0
            columnSpacing:          _margins
98
            anchors.verticalCenter: parent.verticalCenter
99

100
            QGCLabel { text: qsTr("Selected waypoint"); Layout.columnSpan: 2 }
101

102 103
            QGCLabel { text: qsTr("Distance:") }
            QGCLabel { text: _distanceText }
Don Gagne's avatar
Don Gagne committed
104

105 106
            QGCLabel { text: qsTr("Alt diff:") }
            QGCLabel { text: _altText }
107

108 109
            QGCLabel { text: qsTr("Gradient:") }
            QGCLabel { text: _gradientText }
110

111 112 113
            QGCLabel { text: qsTr("Azimuth:") }
            QGCLabel { text: _azimuthText }
        }
114

Don Gagne's avatar
Don Gagne committed
115
        QGCListView {
116 117
            id:                     statusListView
            model:                  missionItems
118
            highlightMoveDuration:  250
119 120 121 122
            anchors.leftMargin:     _margins
            anchors.rightMargin:    _margins
            anchors.top:            parent.top
            anchors.bottom:         parent.bottom
123
            orientation:            ListView.Horizontal
124
            spacing:                0
125
            visible:                _expanded
126
            width:                  parent.width - valueGrid.width - valueMissionGrid.width - (_margins * 2)
127
            clip:                   true
128
            currentIndex:           _currentMissionIndex
129

130 131
            delegate: Item {
                height:     statusListView.height
132 133
                width:      display ? (indicator.width + spacing)  : 0
                visible:    display
134 135 136

                property real availableHeight:  height - indicator.height
                property bool graphAbsolute:    true
137 138
                readonly property bool display: object.specifiesCoordinate && !object.isStandaloneCoordinate
                readonly property real spacing: ScreenTools.defaultFontPixelWidth * ScreenTools.smallFontPointRatio
139 140 141 142 143 144

                MissionItemIndexLabel {
                    id:                         indicator
                    anchors.horizontalCenter:   parent.horizontalCenter
                    y:                          availableHeight - (availableHeight * object.altPercent)
                    small:                      true
145
                    checked:                    object.isCurrentItem
146 147 148
                    label:                      object.abbreviation
                    visible:                    object.relativeAltitude ? true : (object.homePosition || graphAbsolute)
                }
149 150
            }
        }
151 152 153 154 155 156 157

        Grid {
            id:                 valueMissionGrid
            columns:            2
            columnSpacing:      _margins
            anchors.verticalCenter: parent.verticalCenter

158
            QGCLabel { text: qsTr("Total mission") }
159 160 161
            QGCLabel { text: qsTr(" ") }

            QGCLabel { text: qsTr("Distance:") }
162
            QGCLabel { text: _missionDistanceText }
163 164

            QGCLabel { text: qsTr("Time:") }
165
            QGCLabel { text: _missionTimeText }
166 167

            QGCLabel { text: qsTr("Max telem dist:") }
168
            QGCLabel { text: _missionMaxTelemetryText }
169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205

            QGCLabel {
                text: qsTr("Hover distance:")
                visible: _isVTOL
            }
            QGCLabel {
                text: _hoverDistanceText
                visible: _isVTOL
            }

            QGCLabel {
                text: qsTr("Cruise distance:")
                visible: _isVTOL
            }
            QGCLabel {
                text: _cruiseDistanceText
                visible: _isVTOL
            }

            QGCLabel {
                text: qsTr("Hover time:")
                visible: _isVTOL
            }
            QGCLabel {
                text: _hoverTimeText
                visible: _isVTOL
            }

            QGCLabel {
                text: qsTr("Cruise time:")
                visible: _isVTOL
            }
            QGCLabel {
                text: _cruiseTimeText
                visible: _isVTOL
            }
        }
206 207
    }
}