MeasurementItemEditor.qml 6.71 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
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

Rectangle {
    id:         _root
    height:     visible ? (editorColumn.height + (_margin * 2)) : 0
    width:      availableWidth
    color:      qgcPal.windowShadeDark
    radius:     _radius

    // The following properties must be available up the hierarchy chain
    //property real   availableWidth    ///< Width for control
    //property var    missionItem       ///< Mission Item for editor

28
    property real   _margin:            ScreenTools.defaultFontPixelWidth / 2
29

30 31
    property var    _generator: 	  	missionItem.generator
    property var 	_generatorEditor: 	undefined
32

33
    QGCPalette { id: qgcPal; colorGroupEnabled: true }
34

35 36
    Component.onCompleted: {
        _addGeneratorEditor()
37
    }
38 39
    Component.onDestruction: {
        _destroyGeneratorEditor()
40 41
    }

42 43 44 45
    on_GeneratorChanged: {
        _destroyGeneratorEditor()
        _addGeneratorEditor()
    }
46 47 48 49 50 51 52 53 54 55

    Column {
        id:                 editorColumn
        anchors.margins:    _margin
        anchors.top:        parent.top
        anchors.left:       parent.left
        anchors.right:      parent.right
        spacing:            _margin

        SectionHeader {
56 57
            id:     generalHeader
            text:   qsTr("General")
58 59
        }

60

61
        GridLayout {
62
            id: generalGrid
63 64 65 66 67
            anchors.left:   parent.left
            anchors.right:  parent.right
            columnSpacing:  _margin
            rowSpacing:     _margin
            columns:        2
68
            visible:        generalHeader.checked
69

Valentin Platzgummer's avatar
Valentin Platzgummer committed
70 71 72 73
            QGCLabel { text: qsTr("Altitude") }
            FactTextField {
                fact:                   missionItem.cameraCalc.distanceToSurface
                Layout.fillWidth:       true
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
            }

            QGCCheckBox {
                id:                 relAlt
                text:               qsTr("Relative altitude")
                checked:            missionItem.cameraCalc.distanceToSurfaceRelative
                enabled:            missionItem.cameraCalc.isManualCamera && !missionItem.followTerrain
                visible:            QGroundControl.corePlugin.options.showMissionAbsoluteAltitude || (!missionItem.cameraCalc.distanceToSurfaceRelative && !missionItem.followTerrain)
                onClicked:          missionItem.cameraCalc.distanceToSurfaceRelative = checked
                Layout.fillWidth:   true
                Layout.columnSpan:  2

                Connections {
                    target: missionItem.cameraCalc
                    onDistanceToSurfaceRelativeChanged: relAlt.checked = missionItem.cameraCalc.distanceToSurfaceRelative
                }
            }

            QGCLabel {
93
                text: qsTr("Generator Type")
94 95 96
                Layout.columnSpan: 2
            }

97 98 99
            QGCComboBox {
                property var names: missionItem.generatorNameList
                property int length: names.length
100

101 102 103 104
                anchors.margins:    ScreenTools.defaultFontPixelWidth
                currentIndex:       missionItem.generatorIndex
                Layout.columnSpan:  2
                model:              missionItem.generatorNameList
105

106 107
                onActivated: {
                    missionItem.switchToGenerator(index)
108 109 110 111 112 113 114 115 116 117 118 119 120
                }
            }

            QGCLabel {
                text: qsTr("Variant")
                Layout.columnSpan: 2
            }

            GridLayout{
                Layout.columnSpan: 2

                columnSpacing:  _margin
                rowSpacing:     _margin
121
                columns:        6
122 123 124 125 126 127 128 129 130 131

                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
132
                    delegate: QGCRadioButton {
133
                        checked: index === variantRepeater.variant
134
                        text:  variantRepeater.names[index] ? variantRepeater.names[index]: ""
135 136 137 138 139 140 141

                        onCheckedChanged: {
                            if (checked){
                                missionItem.variant.value = index
                            }
                            checked = Qt.binding(function(){ return index === variantRepeater.variant})
                        }
142 143
                    }
                }
Valentin Platzgummer's avatar
Valentin Platzgummer committed
144
            }
145 146
        }

147
        // Generator Editor
148 149
        SectionHeader {
            id:     transectsHeader
150
            text:   qsTr("Generator")
151
        }
152

153 154 155 156
        Column{
            id:generatorEditorParent
            visible: transectsHeader.checked
        }
157

158
        Column{
159 160 161 162
            anchors.left:   parent.left
            anchors.right:  parent.right
            spacing:        _margin

163 164 165
            BusyIndicator{
                id: indicator
                anchors.horizontalCenter: parent.horizontalCenter
166 167
                property bool calculating: missionItem.calculating
                running: calculating
168
                visible: calculating || timer.running
169

170
                onCalculatingChanged: {
171
                    if(!calculating){
172
                       // defer hiding
173 174
                       timer.restart()
                    }
175 176
                }

177 178
                Timer{
                   id: timer
179
                   interval: 1000
180
                   repeat: false
181
                   running: false
182 183
                }
            }
184
        }
185
    } // Column
186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208

    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,
                            })
            }
        }
    }

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