ParameterEditor.qml 6.26 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
            columns: 3
89 90 91 92 93 94 95 96 97 98 99 100

            columnSpacing:  _margin
            rowSpacing:     _margin

            Repeater{
                id: variantRepeater

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

                model: len
                delegate: QGCRadioButton {
101
                    checked: index === variantIndex
102
                    text:  variantRepeater.names[index] ? variantRepeater.names[index]: ""
103
                    Layout.fillWidth: true
104

105
                    property int variantIndex: missionItem.variantIndex.value
106

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

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

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

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

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

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

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

173 174 175 176
    // bussy indicator
    ColumnLayout{
        Layout.fillWidth: true
        spacing:        _margin
177
        Layout.maximumWidth: parent.width
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203

        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(){
204
        if (_generator && _generator.editorQml && !_generatorEditor) {
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, {
213
                                "generator": _root._generator,
214 215 216 217 218 219 220 221 222 223 224 225 226
                                "availableWidth": generatorEditorParent.width,
                            })
            }
        }
    }

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