CircularSurveyItemEditor.qml 8.9 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 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
                        checked = Qt.binding(function(){ return index === typeRepeater.type})
                    }
                }
            }


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

            GridLayout{
                Layout.columnSpan: 2

                columnSpacing:  _margin
                rowSpacing:     _margin
                columns:        4

                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
                    QGCRadioButton {
                        checked: index === variantRepeater.variant
                        text: variantRepeater.names[index]

                        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
        }

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

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

172
            QGCLabel { text: qsTr("Distance") }
Valentin Platzgummer's avatar
Valentin Platzgummer committed
173
            FactTextField {
174
               fact:                   missionItem.transectDistance
Valentin Platzgummer's avatar
Valentin Platzgummer committed
175 176
               Layout.fillWidth:       true
            }
177 178 179

            /*QGCSlider {
                id:                     rSlider
Valentin Platzgummer's avatar
Valentin Platzgummer committed
180 181
                minimumValue:           0.3
                maximumValue:           20
182 183 184 185 186 187
                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
188
                Component.onCompleted:  value = missionItem.deltaR.defaultValue
189 190 191
                updateValueWhileDragging: true
            }*/

192
            QGCLabel { text: qsTr("Alpha") }
193
            FactTextField {
194
                fact:                   missionItem.alpha
195 196
                Layout.fillWidth:       true
            }
197 198 199

            QGCLabel { text: qsTr("Min. Length") }
            FactTextField {
200
                fact:                   missionItem.minLength
201 202
                Layout.fillWidth:       true
            }
203 204
        }

205
        GridLayout {
206 207
            anchors.left:   parent.left
            anchors.right:  parent.right
208 209 210
            columnSpacing:  _margin
            rowSpacing:     _margin
            columns:        2
211 212
            visible:        transectsHeader.checked

213 214 215 216 217 218 219 220 221 222 223 224
            QGCButton {
                text:               qsTr("Reverse")
                onClicked:          missionItem.reverse();
                Layout.fillWidth:  true
            }

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

225

226
        }
227

228
        Column{
229 230 231 232
            anchors.left:   parent.left
            anchors.right:  parent.right
            spacing:        _margin

233 234 235
            BusyIndicator{
                id: indicator
                anchors.horizontalCenter: parent.horizontalCenter
236 237
                property bool calculating: missionItem.calculating
                running: calculating
238

239 240
                onCalculatingChanged: {
                    if(calculating){
241 242 243 244
                        visible = true
                    } else {
                       timer.restart()
                    }
245 246
                }

247 248 249 250 251 252
                Component.onCompleted: {
                    if (calculating){
                        visible = true
                    }
                }

253 254
                Timer{
                   id: timer
255
                   interval: 1000
256
                   repeat: false
257

258
                   onTriggered: {
259
                       if (indicator.calculating == false){
260 261 262
                            indicator.visible = false
                       }
                   }
263 264
                }
            }
265
        }
266 267
    } // Column
} // Rectangle