CircularSurveyItemEditor.qml 10.1 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

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

    property real   _margin:                    ScreenTools.defaultFontPixelWidth / 2
    property real   _fieldWidth:                ScreenTools.defaultFontPixelWidth * 10.5
    property var    _vehicle:                   QGroundControl.multiVehicleManager.activeVehicle ? QGroundControl.multiVehicleManager.activeVehicle : QGroundControl.multiVehicleManager.offlineEditingVehicle
    property real   _cameraMinTriggerInterval:  missionItem.cameraCalc.minTriggerInterval.rawValue

    function polygonCaptureStarted() {
        missionItem.clearPolygon()
    }

    function polygonCaptureFinished(coordinates) {
        for (var i=0; i<coordinates.length; i++) {
            missionItem.addPolygonCoordinate(coordinates[i])
        }
    }

    function polygonAdjustVertex(vertexIndex, vertexCoordinate) {
        missionItem.adjustPolygonCoordinate(vertexIndex, vertexCoordinate)
    }

    function polygonAdjustStarted() { }
    function polygonAdjustFinished() { }

    QGCPalette { id: qgcPal; colorGroupEnabled: true }

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

        SectionHeader {
61 62
            id:     generalHeader
            text:   qsTr("General")
63 64
        }

65

66
        GridLayout {
67
            id: generalGrid
68 69 70 71 72
            anchors.left:   parent.left
            anchors.right:  parent.right
            columnSpacing:  _margin
            rowSpacing:     _margin
            columns:        2
73
            visible:        generalHeader.checked
74

Valentin Platzgummer's avatar
Valentin Platzgummer committed
75 76 77 78
            QGCLabel { text: qsTr("Altitude") }
            FactTextField {
                fact:                   missionItem.cameraCalc.distanceToSurface
                Layout.fillWidth:       true
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
            }

            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 {
                text: qsTr("Type")
                Layout.columnSpan: 2
            }

            Repeater{
103 104 105 106 107
                id: typeRepeater
                property var typeFact: missionItem.type
                property int type: typeFact.value
                property var names: ["Circular", "Linear"]

108 109
                model: missionItem.typeCount
                QGCRadioButton {
110 111
                    checked: index === typeRepeater.type
                    text: qsTr(typeRepeater.names[index])
112 113 114 115 116

                    onCheckedChanged: {
                        if (checked){
                            missionItem.type.value = index
                        }
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
                        checked = Qt.binding(function(){ return index === typeRepeater.type})
                    }
                }
            }


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

            GridLayout{
                Layout.columnSpan: 2

                columnSpacing:  _margin
                rowSpacing:     _margin
133
                columns:        6
134 135 136 137 138 139 140 141 142 143

                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
144
                    delegate: QGCRadioButton {
145
                        checked: index === variantRepeater.variant
146
                        text:  variantRepeater.names[index]
147 148 149 150 151 152 153

                        onCheckedChanged: {
                            if (checked){
                                missionItem.variant.value = index
                            }
                            checked = Qt.binding(function(){ return index === variantRepeater.variant})
                        }
154 155
                    }
                }
Valentin Platzgummer's avatar
Valentin Platzgummer committed
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 191 192 193 194


            QGCLabel {
                text: qsTr("Runs")
            }
            FactTextField {
                fact:                   missionItem.numRuns
            }

            GridLayout{
                Layout.columnSpan: 2

                columnSpacing:  _margin
                rowSpacing:     _margin
                columns:        6

                Repeater{
                    id: runRepeater

                    property var fact: missionItem.run
                    property int run: fact.value
                    property var names: missionItem.runNames
                    property int len: missionItem.runNames.length

                    model: len > 1 ? len : 0
                    QGCRadioButton {
                        checked: index === runRepeater.run
                        text:  runRepeater.names[index]

                        onCheckedChanged: {
                            if (checked){
                                missionItem.run.value = index
                            }
                            checked = Qt.binding(function(){ return index === runRepeater.run})
                        }
                    }
                }
            }
195 196 197 198 199 200 201 202 203 204 205 206 207 208 209
        }

        SectionHeader {
            id:     transectsHeader
            text:   qsTr("Transects")
        }

        GridLayout {
            anchors.left:   parent.left
            anchors.right:  parent.right
            columnSpacing:  _margin
            rowSpacing:     _margin
            columns:        2
            visible:        transectsHeader.checked

210
            QGCLabel { text: qsTr("Distance") }
Valentin Platzgummer's avatar
Valentin Platzgummer committed
211
            FactTextField {
212 213
                fact:                   missionItem.transectDistance
                Layout.fillWidth:       true
Valentin Platzgummer's avatar
Valentin Platzgummer committed
214
            }
215 216 217

            /*QGCSlider {
                id:                     rSlider
Valentin Platzgummer's avatar
Valentin Platzgummer committed
218 219
                minimumValue:           0.3
                maximumValue:           20
220 221 222 223 224 225
                stepSize:               0.1
                tickmarksEnabled:       false
                Layout.fillWidth:       true
                Layout.columnSpan:      2
                Layout.preferredHeight: ScreenTools.defaultFontPixelHeight * 1.5
                onValueChanged:         missionItem.deltaR.value = value
Valentin Platzgummer's avatar
Valentin Platzgummer committed
226
                Component.onCompleted:  value = missionItem.deltaR.defaultValue
227 228 229
                updateValueWhileDragging: true
            }*/

230
            QGCLabel { text: qsTr("Alpha") }
231
            FactTextField {
232
                fact:                   missionItem.alpha
233 234
                Layout.fillWidth:       true
            }
235 236 237

            QGCLabel { text: qsTr("Min. Length") }
            FactTextField {
238
                fact:                   missionItem.minLength
239 240
                Layout.fillWidth:       true
            }
241 242
        }

243
        GridLayout {
244 245
            anchors.left:   parent.left
            anchors.right:  parent.right
246 247 248
            columnSpacing:  _margin
            rowSpacing:     _margin
            columns:        2
249 250
            visible:        transectsHeader.checked

251 252 253 254 255 256 257 258 259 260 261 262
            QGCButton {
                text:               qsTr("Reverse")
                onClicked:          missionItem.reverse();
                Layout.fillWidth:  true
            }

            QGCButton {
                text:               qsTr("Reset Ref.")
                onClicked:          missionItem.resetReference();
                Layout.fillWidth:  true
            }

263

264
        }
265

266
        Column{
267 268 269 270
            anchors.left:   parent.left
            anchors.right:  parent.right
            spacing:        _margin

271 272 273
            BusyIndicator{
                id: indicator
                anchors.horizontalCenter: parent.horizontalCenter
274 275
                property bool calculating: missionItem.calculating
                running: calculating
276

277 278
                onCalculatingChanged: {
                    if(calculating){
279 280 281 282
                        visible = true
                    } else {
                       timer.restart()
                    }
283 284
                }

285 286 287 288 289 290
                Component.onCompleted: {
                    if (calculating){
                        visible = true
                    }
                }

291 292
                Timer{
                   id: timer
293
                   interval: 1000
294
                   repeat: false
295

296
                   onTriggered: {
297
                       if (indicator.calculating == false){
298 299 300
                            indicator.visible = false
                       }
                   }
301 302
                }
            }
303
        }
304 305
    } // Column
} // Rectangle