CircularSurveyItemEditor.qml 8.66 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] ? 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
        }

        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 175
                fact:                   missionItem.transectDistance
                Layout.fillWidth:       true
Valentin Platzgummer's avatar
Valentin Platzgummer committed
176
            }
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
                visible: calculating || timer.running
239

240
                onCalculatingChanged: {
241 242
                    if(!calculating){
                       // defer hideing
243 244
                       timer.restart()
                    }
245 246
                }

247 248
                Timer{
                   id: timer
249
                   interval: 1000
250
                   repeat: false
251
                   running: false
252 253
                }
            }
254
        }
255 256
    } // Column
} // Rectangle