ParameterEditor.qml 5.78 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
import QtQuick          2.3
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.4
import QtQuick.Dialogs  1.2
import QtQuick.Extras   1.4
import QtQuick.Layouts  1.2

import QGroundControl               1.0
import QGroundControl.ScreenTools   1.0
import QGroundControl.Vehicle       1.0
import QGroundControl.Controls      1.0
import QGroundControl.FactSystem    1.0
import QGroundControl.FactControls  1.0
import QGroundControl.Palette       1.0
import QGroundControl.FlightMap     1.0

ColumnLayout {
    id:root

    property int availableWidth: 300
    property var missionItem: undefined       ///< Mission Item for editor
    property bool checked: true

    property real   _margin: ScreenTools.defaultFontPixelWidth / 2
    property var    _generator: 	  	missionItem.generator
    property var 	_generatorEditor: 	undefined

    width:      availableWidth

    Component.onCompleted: {
        console.assert(missionItem !== undefined, "please set the missionItem property")
        _addGeneratorEditor()
    }

    Component.onDestruction: {
        _destroyGeneratorEditor()
    }

    on_GeneratorChanged: {
        _destroyGeneratorEditor()
        _addGeneratorEditor()
    }



    SectionHeader {
        id:     generalHeader
        Layout.fillWidth: true
        text:           qsTr("General")
    }


    GridLayout {
        id: generalGrid
        Layout.fillWidth: true
        columnSpacing:  _margin
        rowSpacing:     _margin
        columns:        2
        visible:        generalHeader.checked

61 62 63 64 65 66 67 68 69
        QGCLabel {
            text: qsTr("Altitude")
            Layout.fillWidth: true
        }
        FactTextField {
            fact:                   missionItem.altitude
            Layout.fillWidth:       true
        }

70 71 72 73 74 75 76 77 78
        QGCLabel { text: qsTr("Relative Altitude!!!") }

        QGCLabel {
            text: qsTr("Variant")
            Layout.columnSpan: 2
            visible: variantRepeater.len > 0
        }
        GridLayout{
            Layout.columnSpan: 2
79 80
            Layout.fillWidth: true
            Layout.maximumWidth:  parent.width
81 82 83 84

            columnSpacing:  _margin
            rowSpacing:     _margin

85
            ExclusiveGroup{id:variantGroup}
86 87 88 89 90 91 92 93
            Repeater{
                id: variantRepeater

                property var names: missionItem.variantNames
                property int len: missionItem.variantNames.length

                model: len
                delegate: QGCRadioButton {
94
                    checked: index === variant
95 96
                    text:  variantRepeater.names[index] ? variantRepeater.names[index]: ""

97 98 99 100 101 102 103 104
                    property int variant: missionItem.variant.value

                    onVariantChanged: {
                        if (variant === index){
                            checked = true
                        }
                    }

105
                    onCheckedChanged: {
106
                        if (checked && variant !== index){
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
                            missionItem.variant.value = index
                        }
                    }
                }
            } // variant repeater
        } // variant grid
    } // general grid

    // Generator Editor
    SectionHeader {
        id:     generatorHeader
        Layout.fillWidth: true
        text:           qsTr("Generator")
    }

    GridLayout{
        Layout.fillWidth: true
        columnSpacing:  _margin
        rowSpacing:     _margin
        columns:        2
        visible:        generatorHeader.checked

        QGCComboBox {
            property var names: missionItem.generatorNameList
            property int length: names.length

            enabled: root.checked
            anchors.margins:    ScreenTools.defaultFontPixelWidth
            currentIndex:       missionItem.generatorIndex
            Layout.columnSpan:  2
            model:              missionItem.generatorNameList

            onActivated: {
                if (index != -1){
                    missionItem.switchToGenerator(index)
                }
            }
        }
    }

    ColumnLayout{
        id:generatorEditorParent
        Layout.fillWidth: true
        visible:        generatorHeader.checked
    }

153 154 155 156 157 158 159
    QGCButton{
        text:qsTr("Reverse")
        onClicked: missionItem.reverseRoute()
        Layout.columnSpan: 2
        Layout.fillWidth: true
    }

160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
    // bussy indicator
    ColumnLayout{
        Layout.fillWidth: true
        spacing:        _margin

        BusyIndicator{
            id: indicator

            property bool calculating: missionItem.calculating

            running: calculating
            visible: calculating || timer.running

            onCalculatingChanged: {
                if(!calculating){
                    // defer hiding
                    timer.restart()
                }
            }

            Timer{
                id: timer
                interval: 1000
                repeat: false
                running: false
            }
        }
    } // indicator column

    function _addGeneratorEditor(){
190
        if (_generator && _generator.editorQml && !_generatorEditor) {
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212
            var component = Qt.createComponent(_generator.editorQml)
            if (component.status === Component.Error) {
                console.log("Error loading Qml: ",
                            _generator.editorQml, component.errorString())
            } else {
                _generatorEditor =
                        component.createObject(
                            generatorEditorParent, {
                                "generator": root._generator,
                                "availableWidth": generatorEditorParent.width,
                            })
            }
        }
    }

    function _destroyGeneratorEditor(){
        if (_generatorEditor){
            _generatorEditor.destroy()
            _generatorEditor = undefined
        }
    }
}