Skip to content
SimpleItemEditor.qml 10.5 KiB
Newer Older
import QtQuick                      2.11
import QtQuick.Controls             2.4
import QtQuick.Controls.Styles      1.4
import QtQuick.Layouts              1.11
import QGroundControl               1.0
import QGroundControl.ScreenTools   1.0
import QGroundControl.Vehicle       1.0
import QGroundControl.Controls      1.0
import QGroundControl.FactControls  1.0
import QGroundControl.Palette       1.0

// Editor for Simple mission items
Rectangle {
    width:  availableWidth
Don Gagne's avatar
Don Gagne committed
    height: valuesColumn.height + (_margin * 2)
    color:  qgcPal.windowShadeDark
    radius: _radius

Don Gagne's avatar
 
Don Gagne committed
    property bool _specifiesAltitude:       missionItem.specifiesAltitude
    property real _margin:                  ScreenTools.defaultFontPixelHeight / 2
    property bool _supportsTerrainFrame:    missionItem

Don Gagne's avatar
 
Don Gagne committed
    property string _altModeRelativeHelpText:       qsTr("Altitude relative to home altitude")
    property string _altModeAbsoluteHelpText:       qsTr("Altitude above mean sea level")
    property string _altModeAboveTerrainHelpText:   qsTr("Altitude above terrain\nActual AMSL altitude: %1 %2").arg(missionItem.amslAltAboveTerrain.valueString).arg(missionItem.amslAltAboveTerrain.units)
Don Gagne's avatar
 
Don Gagne committed
    property string _altModeTerrainFrameHelpText:   qsTr("Using terrain reference frame")

    function updateAltitudeModeText() {
Don Gagne's avatar
 
Don Gagne committed
        if (missionItem.altitudeMode === QGroundControl.AltitudeModeRelative) {
Don Gagne's avatar
 
Don Gagne committed
            altModeLabel.text = qsTr("Altitude")
            altModeHelp.text = _altModeRelativeHelpText
Don Gagne's avatar
 
Don Gagne committed
        } else if (missionItem.altitudeMode === QGroundControl.AltitudeModeAbsolute) {
Don Gagne's avatar
 
Don Gagne committed
            altModeLabel.text = qsTr("Above Mean Sea Level")
            altModeHelp.text = _altModeAbsoluteHelpText
Don Gagne's avatar
 
Don Gagne committed
        } else if (missionItem.altitudeMode === QGroundControl.AltitudeModeAboveTerrain) {
Don Gagne's avatar
 
Don Gagne committed
            altModeLabel.text = qsTr("Above Terrain")
            altModeHelp.text = Qt.binding(function() { return _altModeAboveTerrainHelpText })
Don Gagne's avatar
 
Don Gagne committed
        } else if (missionItem.altitudeMode === QGroundControl.AltitudeModeTerrainFrame) {
Don Gagne's avatar
 
Don Gagne committed
            altModeLabel.text = qsTr("Terrain Frame")
            altModeHelp.text = _altModeTerrainFrameHelpText
        } else {
            altModeLabel.text = qsTr("Internal Error")
            altModeHelp.text = ""
DonLakeFlyer's avatar
DonLakeFlyer committed
        }
Don Gagne's avatar
 
Don Gagne committed
    Component.onCompleted: updateAltitudeModeText()

    Connections {
        target:                 missionItem
        onAltitudeModeChanged:  updateAltitudeModeText()
    }

    Column {
        id:                 valuesColumn
        anchors.margins:    _margin
        anchors.left:       parent.left
        anchors.right:      parent.right
        anchors.top:        parent.top
        spacing:            _margin

        QGCLabel {
            width:          parent.width
            wrapMode:       Text.WordWrap
            font.pointSize: ScreenTools.smallFontPointSize
            text:           missionItem.rawEdit ?
                                qsTr("Provides advanced access to all commands/parameters. Be very careful!") :
                                missionItem.commandDescription
        }

        GridLayout {
            anchors.left:   parent.left
            anchors.right:  parent.right
            columns:        2

            Repeater {
                model: missionItem.comboboxFacts

                QGCLabel {
                    text:           object.name
                    visible:        object.name !== ""
                    Layout.column:  0
                    Layout.row:     index
                }
            }

            Repeater {
                model: missionItem.comboboxFacts

                FactComboBox {
                    indexModel:         false
                    model:              object.enumStrings
                    fact:               object
                    font.pointSize:     ScreenTools.smallFontPointSize
                    Layout.column:      1
                    Layout.row:         index
                    Layout.fillWidth:   true
                }
            }
        }

DonLakeFlyer's avatar
DonLakeFlyer committed
            anchors.left:   parent.left
            anchors.right:  parent.right
            height:         altColumn.y + altColumn.height + _margin
            color:          qgcPal.windowShade
            visible:        _specifiesAltitude

            Column {
                id:                 altColumn
                anchors.margins:    _margin
                anchors.top:        parent.top
                anchors.left:       parent.left
                anchors.right:      parent.right
                spacing:            _margin

Don Gagne's avatar
 
Don Gagne committed
                Item {
                    width:  altHamburger.x + altHamburger.width
                    height: altModeLabel.height

                    QGCLabel { id: altModeLabel }

                    QGCColoredImage {
                        id:                     altHamburger
                        anchors.leftMargin:     ScreenTools.defaultFontPixelWidth / 4
                        anchors.left:           altModeLabel.right
Don Gagne's avatar
 
Don Gagne committed
                        anchors.verticalCenter: altModeLabel.verticalCenter
                        width:                  ScreenTools.defaultFontPixelHeight / 2
                        height:                 width
Don Gagne's avatar
 
Don Gagne committed
                        sourceSize.height:      height
Don Gagne's avatar
 
Don Gagne committed
                        source:                 "/res/DropArrow.svg"
Don Gagne's avatar
 
Don Gagne committed
                        color:                  qgcPal.text
Don Gagne's avatar
 
Don Gagne committed
                    QGCMouseArea {
                        anchors.fill:   parent
                        onClicked:      altHamburgerMenu.popup()
Don Gagne's avatar
 
Don Gagne committed

                    QGCMenu {
Don Gagne's avatar
 
Don Gagne committed
                        id: altHamburgerMenu

                        QGCMenuItem {
Don Gagne's avatar
 
Don Gagne committed
                            text:           qsTr("Altitude Relative To Home")
Don Gagne's avatar
 
Don Gagne committed
                            checkable:      true
Don Gagne's avatar
 
Don Gagne committed
                            checked:        missionItem.altitudeMode === QGroundControl.AltitudeModeRelative
                            onTriggered:    missionItem.altitudeMode = QGroundControl.AltitudeModeRelative
Don Gagne's avatar
 
Don Gagne committed
                        }

                        QGCMenuItem {
Don Gagne's avatar
 
Don Gagne committed
                            text:           qsTr("Altitude Above Mean Sea Level")
                            checkable:      true
Don Gagne's avatar
 
Don Gagne committed
                            checked:        missionItem.altitudeMode === QGroundControl.AltitudeModeAbsolute
Don Gagne's avatar
 
Don Gagne committed
                            visible:        QGroundControl.corePlugin.options.showMissionAbsoluteAltitude
Don Gagne's avatar
 
Don Gagne committed
                            onTriggered:    missionItem.altitudeMode = QGroundControl.AltitudeModeAbsolute
Don Gagne's avatar
 
Don Gagne committed
                        }

                        QGCMenuItem {
Don Gagne's avatar
 
Don Gagne committed
                            text:           qsTr("Altitude Above Terrain")
                            checkable:      true
Don Gagne's avatar
 
Don Gagne committed
                            checked:        missionItem.altitudeMode === QGroundControl.AltitudeModeAboveTerrain
                            onTriggered:    missionItem.altitudeMode = QGroundControl.AltitudeModeAboveTerrain
Don Gagne's avatar
 
Don Gagne committed
                            visible:        missionItem.specifiesCoordinate
Don Gagne's avatar
 
Don Gagne committed
                        }

                        QGCMenuItem {
Don Gagne's avatar
 
Don Gagne committed
                            text:           qsTr("Terrain Frame")
Don Gagne's avatar
 
Don Gagne committed
                            checkable:      true
Don Gagne's avatar
 
Don Gagne committed
                            checked:        missionItem.altitudeMode === QGroundControl.AltitudeModeTerrainFrame
                            visible:        missionItem.altitudeMode === QGroundControl.AltitudeModeTerrainFrame
                            onTriggered:    missionItem.altitudeMode = QGroundControl.AltitudeModeTerrainFrame
Don Gagne's avatar
 
Don Gagne committed
                        }
Don Gagne's avatar
 
Don Gagne committed
                AltitudeFactTextField {
Don Gagne's avatar
 
Don Gagne committed
                    id:                 altField
                    fact:               missionItem.altitude
Don Gagne's avatar
 
Don Gagne committed
                    altitudeMode:       missionItem.altitudeMode
Don Gagne's avatar
 
Don Gagne committed
                    anchors.left:       parent.left
                    anchors.right:      parent.right
Don Gagne's avatar
 
Don Gagne committed
                    id:                 altModeHelp
                    wrapMode:           Text.WordWrap
                    font.pointSize:     ScreenTools.smallFontPointSize
                    anchors.left:       parent.left
                    anchors.right:      parent.right
        GridLayout {
            anchors.left:   parent.left
            anchors.right:  parent.right
            flow:           GridLayout.TopToBottom
            rows:           missionItem.textFieldFacts.count +
                            missionItem.nanFacts.count +
                            (missionItem.speedSection.available ? 1 : 0)
            columns:        2

            Repeater {
                model: missionItem.textFieldFacts

                QGCLabel { text: object.name }
            }

            Repeater {
                model: missionItem.nanFacts

                QGCCheckBox {
                    text:           object.name
                    checked:        !isNaN(object.rawValue)
                    onClicked:      object.rawValue = checked ? 0 : NaN
                }
            }

            QGCCheckBox {
                id:         flightSpeedCheckbox
                text:       qsTr("Flight Speed")
                checked:    missionItem.speedSection.specifyFlightSpeed
                onClicked:  missionItem.speedSection.specifyFlightSpeed = checked
                visible:    missionItem.speedSection.available
            }

            Repeater {
                model: missionItem.textFieldFacts

                FactTextField {
                    showUnits:          true
                    fact:               object
                    Layout.fillWidth:   true
                    enabled:            !object.readOnly
                }
            }

            Repeater {
                model: missionItem.nanFacts

                FactTextField {
                    showUnits:          true
                    fact:               object
                    Layout.fillWidth:   true
                    enabled:            !isNaN(object.rawValue)
                }
            }

            FactTextField {
                fact:               missionItem.speedSection.flightSpeed
                Layout.fillWidth:   true
                enabled:            flightSpeedCheckbox.checked
                visible:            missionItem.speedSection.available
            }
        }

        CameraSection {
            checked:    missionItem.cameraSection.settingsSpecified
            visible:    missionItem.cameraSection.available
        }
    } // Column
} // Rectangle