Skip to content
PlanToolBar.qml 7.81 KiB
Newer Older
import QtQuick          2.3
import QtQuick.Controls 1.2
import QtQuick.Layouts  1.2
import QtQuick.Dialogs  1.2

import QGroundControl                   1.0
import QGroundControl.ScreenTools       1.0
import QGroundControl.Controls          1.0
import QGroundControl.FactControls      1.0
import QGroundControl.Palette           1.0

// Toolbar for Plan View
Rectangle {
    id:                 _root
    height:             ScreenTools.toolbarHeight
    anchors.left:       parent.left
    anchors.right:      parent.right
    anchors.top:        parent.top
    z:                  toolBar.z + 1
    color:              qgcPal.window
    visible:            false

    signal showFlyView

    property var    missionController
    property var    currentMissionItem          ///< Mission item to display status for

    property var    missionItems:               missionController.visualItems
    property real   missionDistance:            missionController.missionDistance
    property real   missionTime:                missionController.missionTime
    property real   missionMaxTelemetry:        missionController.missionMaxTelemetry

    property var    _activeVehicle:             QGroundControl.multiVehicleManager.activeVehicle

    property bool   _statusValid:               currentMissionItem != undefined
    property bool   _missionValid:              missionItems != undefined

    property real   _distance:                  _statusValid ? currentMissionItem.distance : NaN
    property real   _altDifference:             _statusValid ? currentMissionItem.altDifference : NaN
    property real   _gradient:                  _statusValid && currentMissionItem.distance > 0 ? Math.atan(currentMissionItem.altDifference / currentMissionItem.distance) : NaN
    property real   _gradientPercent:           isNaN(_gradient) ? NaN : _gradient * 100
    property real   _azimuth:                   _statusValid ? currentMissionItem.azimuth : NaN
    property real   _missionDistance:           _missionValid ? missionDistance : NaN
    property real   _missionMaxTelemetry:       _missionValid ? missionMaxTelemetry : NaN
    property real   _missionTime:               _missionValid ? missionTime : NaN

    property string _distanceText:              isNaN(_distance) ? "-.-" : QGroundControl.metersToAppSettingsDistanceUnits(_distance).toFixed(1) + " " + QGroundControl.appSettingsDistanceUnitsString
    property string _altDifferenceText:         isNaN(_altDifference) ? "-.-" : QGroundControl.metersToAppSettingsDistanceUnits(_altDifference).toFixed(1) + " " + QGroundControl.appSettingsDistanceUnitsString
    property string _gradientText:              isNaN(_gradient) ? "-.-" : _gradientPercent.toFixed(0) + "%"
    property string _azimuthText:               isNaN(_azimuth) ? "-.-" : Math.round(_azimuth)
    property string _missionDistanceText:       isNaN(_missionDistance) ? "-.-" : QGroundControl.metersToAppSettingsDistanceUnits(_missionDistance).toFixed(1) + " " + QGroundControl.appSettingsDistanceUnitsString
    property string _missionTimeText:           isNaN(_missionTime) ? "-.-" : Number(_missionTime / 60).toFixed(1) + " min"
    property string _missionMaxTelemetryText:   isNaN(_missionMaxTelemetry) ? "-.-" : QGroundControl.metersToAppSettingsDistanceUnits(_missionMaxTelemetry).toFixed(1) + " " + QGroundControl.appSettingsDistanceUnitsString

Donald Gagne's avatar
Donald Gagne committed
    readonly property real _margins: ScreenTools.defaultFontPixelWidth

    QGCPalette { id: qgcPal }

    Row {
        anchors.top:    parent.top
        anchors.bottom: parent.bottom
        spacing:        ScreenTools.defaultFontPixelWidth * 2

        QGCToolBarButton {
            id:                 settingsButton
            anchors.top:        parent.top
            anchors.bottom:     parent.bottom
            source:             "/qmlimages/PaperPlane.svg"
            logo:               true
            checked:            false

            onClicked: {
                checked = false
                if (missionController.dirty) {
                    uploadPrompt.visible = true
                } else {
                    showFlyView()
                }
            }

            MessageDialog {
                id:                 uploadPrompt
                title:              _activeVehicle ? qsTr("Unsent changes") : qsTr("Unsaved changes")
                text:               qsTr("You have %1 changes to your mission. Are you sure you want to leave before you %2?").arg(_activeVehicle ? qsTr("unsent") : qsTr("unsaved")).arg(_activeVehicle ? qsTr("send the missoin to the vehicle") : qsTr("save the mission to a file"))
                standardButtons:    StandardButton.Yes | StandardButton.No

                onNo: visible = false

                onYes: {
                    visible = false
                    showFlyView()
                }
            }
        }

        GridLayout {
Donald Gagne's avatar
Donald Gagne committed
            anchors.top:    parent.top
            anchors.bottom: parent.bottom
            columns:        5
            rowSpacing:     0
            columnSpacing:  _margins / 4
Donald Gagne's avatar
Donald Gagne committed
                text:               qsTr("Selected waypoint")
                Layout.columnSpan:  5
                font.pointSize:     ScreenTools.smallFontPointSize
            }

            QGCLabel { text: qsTr("Distance:") }
            QGCLabel { text: _distanceText }

Donald Gagne's avatar
Donald Gagne committed
            Item { width: 1; height: 1 }

            QGCLabel { text: qsTr("Gradient:") }
            QGCLabel { text: _gradientText }

            QGCLabel { text: qsTr("Alt diff:") }
            QGCLabel { text: _altDifferenceText }

Donald Gagne's avatar
Donald Gagne committed
            Item { width: 1; height: 1 }

            QGCLabel { text: qsTr("Azimuth:") }
            QGCLabel { text: _azimuthText }
        }

        GridLayout {
Donald Gagne's avatar
Donald Gagne committed
            anchors.top:    parent.top
            anchors.bottom: parent.bottom
            columns:        5
            rowSpacing:     0
            columnSpacing:  _margins / 4
Donald Gagne's avatar
Donald Gagne committed
                text:               qsTr("Total mission")
                Layout.columnSpan:  5
                font.pointSize:     ScreenTools.smallFontPointSize
            }

            QGCLabel { text: qsTr("Distance:") }
            QGCLabel { text: _missionDistanceText }

Donald Gagne's avatar
Donald Gagne committed
            Item { width: 1; height: 1 }

            QGCLabel { text: qsTr("Max telem dist:") }
            QGCLabel { text: _missionMaxTelemetryText }

            QGCLabel { text: qsTr("Time:") }
            QGCLabel { text: _missionTimeText }
        }
Donald Gagne's avatar
Donald Gagne committed

        GridLayout {
            anchors.top:    parent.top
            anchors.bottom: parent.bottom
            columns:        3
            rowSpacing:     0
            columnSpacing:  _margins / 4

            QGCLabel {
                text:               qsTr("Battery")
                Layout.columnSpan:  3
                font.pointSize:     ScreenTools.smallFontPointSize
            }

            QGCLabel { text: qsTr("Batteries required:") }
            QGCLabel { text: "--.--" }

            Item { width: 1; height: 1 }

            QGCLabel { text: qsTr("Swap waypoint:") }
            QGCLabel { text: "--" }
        }
    }

    QGCButton {
        anchors.rightMargin:    _margins
        anchors.right:          parent.right
        anchors.verticalCenter: parent.verticalCenter
        text:                   _activeVehicle ? qsTr("Upload") : qsTr("Save")
        visible:                missionController.dirty
        primary:                true

        onClicked: {
            if (_activeVehicle) {
                missionController.sendToVehicle()
            } else {
                missionController.saveToSelectedFile()
            }
        }

        NumberAnimation on opacity {
            id:         opacityAnimation
            running:    missionController.dirty
            from:       0.5
            to:         1.0
            loops:      Animation.Infinite
            duration:   2000
        }
    }
}