CircularSurveyItemEditor.qml 7.75 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 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
            }

            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
            }

            property var typeFact: missionItem.type
            property int type: typeFact.value
            property var names: ["Circular", "Linear"]

            ExclusiveGroup{id: typeGroup}

            Repeater{
                model: missionItem.typeCount
                QGCRadioButton {
                    checked: index === generalGrid.type
                    text: qsTr(generalGrid.names[index])

                    onCheckedChanged: {
                        if (checked){
                            missionItem.type.value = index
                        }
                        checked = Qt.binding(function(){ return index === generalGrid.type})
                    }
                }
Valentin Platzgummer's avatar
Valentin Platzgummer committed
121
            }
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
        }

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

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

137
            QGCLabel { text: qsTr("Distance") }
Valentin Platzgummer's avatar
Valentin Platzgummer committed
138
            FactTextField {
139
               fact:                   missionItem.transectDistance
Valentin Platzgummer's avatar
Valentin Platzgummer committed
140 141
               Layout.fillWidth:       true
            }
142 143 144

            /*QGCSlider {
                id:                     rSlider
Valentin Platzgummer's avatar
Valentin Platzgummer committed
145 146
                minimumValue:           0.3
                maximumValue:           20
147 148 149 150 151 152
                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
153
                Component.onCompleted:  value = missionItem.deltaR.defaultValue
154 155 156
                updateValueWhileDragging: true
            }*/

157
            QGCLabel { text: qsTr("Alpha") }
158
            FactTextField {
159
                fact:                   missionItem.alpha
160 161
                Layout.fillWidth:       true
            }
162 163 164

            QGCLabel { text: qsTr("Min. Length") }
            FactTextField {
165
                fact:                   missionItem.minLength
166 167
                Layout.fillWidth:       true
            }
168 169
        }

170
        GridLayout {
171 172
            anchors.left:   parent.left
            anchors.right:  parent.right
173 174 175
            columnSpacing:  _margin
            rowSpacing:     _margin
            columns:        2
176 177
            visible:        transectsHeader.checked

178 179 180 181 182 183 184 185 186 187 188 189
            QGCButton {
                text:               qsTr("Reverse")
                onClicked:          missionItem.reverse();
                Layout.fillWidth:  true
            }

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

190

191
        }
192

193
        Column{
194 195 196 197
            anchors.left:   parent.left
            anchors.right:  parent.right
            spacing:        _margin

198 199 200
            BusyIndicator{
                id: indicator
                anchors.horizontalCenter: parent.horizontalCenter
201 202
                property bool calculating: missionItem.calculating
                running: calculating
203

204 205
                onCalculatingChanged: {
                    if(calculating){
206 207 208 209
                        visible = true
                    } else {
                       timer.restart()
                    }
210 211
                }

212 213 214 215 216 217
                Component.onCompleted: {
                    if (calculating){
                        visible = true
                    }
                }

218 219
                Timer{
                   id: timer
220
                   interval: 1000
221
                   repeat: false
222

223
                   onTriggered: {
224
                       if (indicator.calculating == false){
225 226 227
                            indicator.visible = false
                       }
                   }
228 229
                }
            }
230
        }
231 232
    } // Column
} // Rectangle