Skip to content
MissionItemEditor.qml 8.68 KiB
Newer Older
import QtQuick                  2.3
import QtQuick.Controls         1.2
import QtQuick.Controls.Styles  1.4
Don Gagne's avatar
Don Gagne committed
import QtQuick.Dialogs          1.2
import QtQml                    2.2
import QGroundControl               1.0
Don Gagne's avatar
Don Gagne committed
import QGroundControl.ScreenTools   1.0
import QGroundControl.Vehicle       1.0
Don Gagne's avatar
Don Gagne committed
import QGroundControl.Controls      1.0
import QGroundControl.FactControls  1.0
Don Gagne's avatar
Don Gagne committed
import QGroundControl.Palette       1.0

Don Gagne's avatar
Don Gagne committed

/// Mission item edit control
Rectangle {
    id:     _root
Gus Grubba's avatar
Gus Grubba committed
    height: header.height + (editorLoader.visible ? (editorLoader.height + (_margin * 3)) : 0)
    color:  _currentItem ? qgcPal.missionItemEditor : qgcPal.windowShade
    radius: _radius

    property var    map                 ///< Map control
    property var    masterController
    property var    missionItem         ///< MissionItem associated with this editor
    property bool   readOnly            ///< true: read only view, false: full editing view
    property var    rootQgcView
    signal clicked
    signal remove
    signal insertWaypoint
    signal insertComplexItem(string complexItemName)
    property var    _masterController:          masterController
    property var    _missionController:         _masterController.missionController
    property bool   _currentItem:               missionItem.isCurrentItem
    property bool   _noMissionItemsAdded:       ListView.view.model.count === 1
    property real   _sectionSpacer:             ScreenTools.defaultFontPixelWidth / 2  // spacing between section headings
    property bool   _singleComplexItem:         _missionController.complexMissionItemNames.length === 1
    readonly property real  _editFieldWidth:    Math.min(width - _margin * 2, ScreenTools.defaultFontPixelWidth * 12)
Gus Grubba's avatar
Gus Grubba committed
    readonly property real  _margin:            ScreenTools.defaultFontPixelWidth * 0.5
    readonly property real  _radius:            ScreenTools.defaultFontPixelWidth * 0.5
    readonly property real  _hamburgerSize:     header.height * 0.75
    readonly property bool  _waypointsOnlyMode: QGroundControl.corePlugin.options.missionWaypointsOnly
Don Gagne's avatar
Don Gagne committed
    QGCPalette {
        id: qgcPal
        colorGroupEnabled: enabled
    FocusScope {
        id:             currentItemScope
        anchors.fill:   parent
        MouseArea {
            anchors.fill:   parent
            onClicked: {
                currentItemScope.focus = true
                _root.clicked()
            }
        }
Gus Grubba's avatar
Gus Grubba committed
    //-- Dialog
    Component {
        id: editPositionDialog
        EditPositionDialog {
            coordinate: missionItem.coordinate
            onCoordinateChanged: missionItem.coordinate = coordinate
        }
    }
Gus Grubba's avatar
Gus Grubba committed
    //-- Header
    Row {
        id:                     header
        spacing:                ScreenTools.defaultFontPixelWidth
        height:                 ScreenTools.defaultFontPixelHeight * 3
        anchors.verticalCenter: editorLoader.visible ? undefined : parent.verticalCenter
        anchors.left:           parent.left
Gus Grubba's avatar
Gus Grubba committed
        anchors.leftMargin:     ScreenTools.defaultFontPixelWidth
        Item {
            width:              ScreenTools.defaultFontPixelWidth * 3
            height:             parent.height
            QGCColoredImage {
                width:              ScreenTools.defaultFontPixelHeight
                height:             width
                sourceSize.height:  width
                source:             "qrc:/qmlimages/Home.svg"
                visible:            missionItem.homePosition
                color:              qgcPal.text
                anchors.centerIn:   parent
            }
            QGCLabel {
                text:               missionItem.sequenceNumber
                color:              qgcPal.text
                visible:            !missionItem.homePosition
                anchors.centerIn:   parent
            }
        }
        QGCLabel {
            id:                 label
            visible:            !missionItem.isCurrentItem || !missionItem.isSimpleItem || _waypointsOnlyMode
            text:               missionItem.commandName
            color:              qgcPal.text
            anchors.verticalCenter: parent.verticalCenter
        }
        QGCButton {
            id:                  commandPicker
            visible:             !label.visible
            text:                missionItem.commandName
            anchors.verticalCenter: parent.verticalCenter
            Component {
                id: commandDialog
                MissionCommandDialog {
                    missionItem: _root.missionItem
                }
            }
            onClicked: qgcView.showDialog(commandDialog, qsTr("Select Mission Command"), qgcView.showDialogDefaultWidth, StandardButton.Cancel)
        }
Gus Grubba's avatar
Gus Grubba committed
    //-- Hamburger button at the right of header
Gus Grubba's avatar
Gus Grubba committed
    QGCColoredImage {
        id:                     hamburger
        anchors.rightMargin:    ScreenTools.defaultFontPixelWidth
        anchors.right:          parent.right
Gus Grubba's avatar
Gus Grubba committed
        anchors.verticalCenter: header.verticalCenter
        width:                  _hamburgerSize
        height:                 _hamburgerSize
        sourceSize.height:      _hamburgerSize
        source:                 "qrc:/qmlimages/Hamburger.svg"
Gus Grubba's avatar
Gus Grubba committed
        visible:                missionItem.isCurrentItem && missionItem.sequenceNumber !== 0
        color:                  qgcPal.text
Gus Grubba's avatar
Gus Grubba committed
    //-- Hamburger Menu
    QGCMouseArea {
        fillItem:   hamburger
        visible:    hamburger.visible
        onClicked: {
            currentItemScope.focus = true
DonLakeFlyer's avatar
DonLakeFlyer committed
            hamburgerMenu.popup()
Don Gagne's avatar
Don Gagne committed
        Menu {
DonLakeFlyer's avatar
DonLakeFlyer committed
            id: hamburgerMenu
Don Gagne's avatar
Don Gagne committed
            MenuItem {
                text:           qsTr("Insert waypoint")
                onTriggered:    insertWaypoint()
                id:         patternMenu
                title:      qsTr("Insert pattern")
                visible:    !_singleComplexItem
                    model: _missionController.complexMissionItemNames
                    onObjectAdded:      patternMenu.insertItem(index, object)
                    onObjectRemoved:    patternMenu.removeItem(object)
                    MenuItem {
                        text:           modelData
                        onTriggered:    insertComplexItem(modelData)
                    }
                }
            }
                text:           qsTr("Insert ") + _missionController.complexMissionItemNames[0]
                visible:        _singleComplexItem
                onTriggered:    insertComplexItem(_missionController.complexMissionItemNames[0])
            }
            MenuItem {
                text:           qsTr("Delete")
                onTriggered:    remove()
            }
Don Gagne's avatar
Don Gagne committed
            MenuItem {
                text:           qsTr("Change command...")
Don Gagne's avatar
Don Gagne committed
                onTriggered:    commandPicker.clicked()
                visible:        !_waypointsOnlyMode
            MenuItem {
                text:           qsTr("Edit position...")
                visible:        missionItem.specifiesCoordinate
                onTriggered:    qgcView.showDialog(editPositionDialog, qsTr("Edit Position"), qgcView.showDialogDefaultWidth, StandardButton.Cancel)
            }
Don Gagne's avatar
Don Gagne committed
            MenuSeparator {
                visible: missionItem.isSimpleItem && !_waypointsOnlyMode
Don Gagne's avatar
Don Gagne committed
            }
            MenuItem {
Gus Grubba's avatar
Gus Grubba committed
                text:           qsTr("Show all values")
                checkable:      true
                checked:        missionItem.isSimpleItem ? missionItem.rawEdit : false
                visible:        missionItem.isSimpleItem && !_waypointsOnlyMode
                onTriggered: {
Don Gagne's avatar
Don Gagne committed
                    if (missionItem.rawEdit) {
                        if (missionItem.friendlyEditAllowed) {
                            missionItem.rawEdit = false
Don Gagne's avatar
Don Gagne committed
                            qgcView.showMessage(qsTr("Mission Edit"), qsTr("You have made changes to the mission item which cannot be shown in Simple Mode"), StandardButton.Ok)
Don Gagne's avatar
Don Gagne committed
                    } else {
                        missionItem.rawEdit = true
Don Gagne's avatar
Don Gagne committed
                    checked = missionItem.rawEdit
Gus Grubba's avatar
Gus Grubba committed
    //-- Editor Content
    Loader {
        id:                 editorLoader
        anchors.leftMargin: _margin
        anchors.left:       parent.left
Gus Grubba's avatar
Gus Grubba committed
        anchors.top:        header.bottom
        source:             missionItem.editorQml
        visible:            _currentItem
        property var    masterController:   _masterController
        property real   availableWidth:     _root.width - (_margin * 2) ///< How wide the editor should be
        property var    editorRoot:         _root