ParameterEditor.qml 5.29 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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 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 153 154 155 156 157 158 159 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 190
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

        QGCLabel { text: qsTr("Altitude!!!") }
        QGCLabel { text: qsTr("Relative Altitude!!!") }

        QGCLabel {
            text: qsTr("Variant")
            Layout.columnSpan: 2
            visible: variantRepeater.len > 0
        }
        GridLayout{
            Layout.columnSpan: 2

            columnSpacing:  _margin
            rowSpacing:     _margin
            columns:        6

            Repeater{
                id: variantRepeater

                property var fact: missionItem.variant
                property int variant: fact.value
                property var names: missionItem.variantNames
                property int len: missionItem.variantNames.length

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

                    onCheckedChanged: {
                        if (checked){
                            missionItem.variant.value = index
                        }
                        checked = Qt.binding(function(){ return index === variantRepeater.variant})
                    }
                }
            } // 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
    }

    // 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(){
        if (_generator.editorQml && !_generatorEditor) {
            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
        }
    }
}