ParameterEditor.qml 6.2 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
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

17 18
GridLayout {
    id:_root
19 20

    property bool checked: true
21 22
    property var missionItem: undefined
    property int availableWidth: 300
23 24 25 26 27

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

28 29 30 31
    width:   availableWidth
    columnSpacing:  _margin
    rowSpacing:     _margin
    columns:        2
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51

    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
52 53
        Layout.columnSpan: parent.columns
        Layout.maximumWidth: parent.width
54 55 56 57 58 59 60
        text:           qsTr("General")
    }


    GridLayout {
        id: generalGrid
        Layout.fillWidth: true
61 62
        Layout.columnSpan: parent.columns
        Layout.maximumWidth: parent.width
63 64 65 66 67
        columnSpacing:  _margin
        rowSpacing:     _margin
        columns:        2
        visible:        generalHeader.checked

68 69 70 71 72 73 74 75 76
        QGCLabel {
            text: qsTr("Altitude")
            Layout.fillWidth: true
        }
        FactTextField {
            fact:                   missionItem.altitude
            Layout.fillWidth:       true
        }

77 78
        QGCLabel {
            text: qsTr("Variant")
79
            Layout.columnSpan: parent.columns
80 81
            visible: variantRepeater.len > 0
        }
82 83 84

        ExclusiveGroup{id:variantGroup}

85
        GridLayout{
86 87
            Layout.columnSpan: parent.columns
            Layout.maximumWidth: parent.width
88 89 90 91 92 93 94 95 96 97 98 99

            columnSpacing:  _margin
            rowSpacing:     _margin

            Repeater{
                id: variantRepeater

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

                model: len
                delegate: QGCRadioButton {
100
                    checked: index === variantIndex
101 102
                    text:  variantRepeater.names[index] ? variantRepeater.names[index]: ""

103
                    property int variantIndex: missionItem.variantIndex.value
104

105 106
                    onVariantIndexChanged: {
                        if (variantIndex === index){
107 108 109 110
                            checked = true
                        }
                    }

111
                    onCheckedChanged: {
112 113
                        if (checked && variantIndex !== index){
                            missionItem.variantIndex.value = index
114 115 116 117 118 119 120 121 122 123 124
                        }
                    }
                }
            } // variant repeater
        } // variant grid
    } // general grid

    // Generator Editor
    SectionHeader {
        id:     generatorHeader
        Layout.fillWidth: true
125
        Layout.columnSpan: parent.columns
126 127 128 129 130 131
        text:           qsTr("Generator")
    }

    GridLayout{
        Layout.fillWidth: true
        columnSpacing:  _margin
132 133
        Layout.maximumWidth: parent.width
        Layout.columnSpan: parent.columns
134 135 136 137 138 139 140 141
        rowSpacing:     _margin
        columns:        2
        visible:        generatorHeader.checked

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

142
            enabled: _root.checked
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
            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
159 160
        Layout.columnSpan: parent.columns
        Layout.maximumWidth: parent.width
161 162 163
        visible:        generatorHeader.checked
    }

164 165 166 167 168 169 170
    QGCButton{
        text:qsTr("Reverse")
        onClicked: missionItem.reverseRoute()
        Layout.columnSpan: 2
        Layout.fillWidth: true
    }

171 172 173 174
    // bussy indicator
    ColumnLayout{
        Layout.fillWidth: true
        spacing:        _margin
175
        Layout.maximumWidth: parent.width
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

        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(){
202
        if (_generator && _generator.editorQml && !_generatorEditor) {
203 204 205 206 207 208 209 210
            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, {
211
                                "generator": _root._generator,
212 213 214 215 216 217 218 219 220 221 222 223 224
                                "availableWidth": generatorEditorParent.width,
                            })
            }
        }
    }

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