CorridorScanEditor.qml 10.5 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
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.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

27 28 29 30
    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
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

    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

Don Gagne's avatar
Don Gagne committed
58
        ColumnLayout {
59
            id:             wizardModeColumn
60 61
            anchors.left:   parent.left
            anchors.right:  parent.right
Don Gagne's avatar
Don Gagne committed
62
            spacing:        _margin
63
            visible:        !missionItem.corridorPolyline.isValid || missionItem.wizardMode
64

Don Gagne's avatar
Don Gagne committed
65 66 67 68 69
            QGCLabel {
                Layout.fillWidth:   true
                wrapMode:           Text.WordWrap
                text:               qsTr("Use the Corridor Tools to create the polyline which defines the corridor.")
            }
70 71 72 73 74 75 76 77 78 79

            QGCButton {
                text:               qsTr("Done With Polyline")
                Layout.fillWidth:   true
                enabled:            missionItem.corridorPolyline.isValid
                onClicked: {
                    missionItem.wizardMode = false
                    editorRoot.selectNextNotReadyItem()
                }
            }
80 81
        }

82
        Column {
Don Gagne's avatar
Don Gagne committed
83 84 85
            anchors.left:   parent.left
            anchors.right:  parent.right
            spacing:        _margin
86
            visible:        !wizardModeColumn.visible
87

Don Gagne's avatar
Don Gagne committed
88 89
            QGCTabBar {
                id:             tabBar
90 91
                anchors.left:   parent.left
                anchors.right:  parent.right
92

Don Gagne's avatar
Don Gagne committed
93
                Component.onCompleted: currentIndex = 0
94

Don Gagne's avatar
Don Gagne committed
95 96
                QGCTabButton { text: qsTr("Grid") }
                QGCTabButton { text: qsTr("Camera") }
97
            }
98

Don Gagne's avatar
Don Gagne committed
99 100 101 102 103 104 105 106 107 108 109 110 111 112
            Column {
                anchors.left:       parent.left
                anchors.right:      parent.right
                spacing:            _margin
                visible:            tabBar.currentIndex == 0

                QGCLabel {
                    anchors.left:   parent.left
                    anchors.right:  parent.right
                    text:           qsTr("WARNING: Photo interval is below minimum interval (%1 secs) supported by camera.").arg(_cameraMinTriggerInterval.toFixed(1))
                    wrapMode:       Text.WordWrap
                    color:          qgcPal.warningText
                    visible:        missionItem.cameraShots > 0 && _cameraMinTriggerInterval !== 0 && _cameraMinTriggerInterval > missionItem.timeBetweenShots
                }
113

Don Gagne's avatar
Don Gagne committed
114 115 116 117 118 119 120 121 122 123

                CameraCalcGrid {
                    cameraCalc:                     missionItem.cameraCalc
                    vehicleFlightIsFrontal:         true
                    distanceToSurfaceLabel:         qsTr("Altitude")
                    distanceToSurfaceAltitudeMode:  missionItem.followTerrain ?
                                                        QGroundControl.AltitudeModeAboveTerrain :
                                                        missionItem.cameraCalc.distanceToSurfaceRelative
                    frontalDistanceLabel:           qsTr("Trigger Dist")
                    sideDistanceLabel:              qsTr("Spacing")
124
                }
Don Gagne's avatar
Don Gagne committed
125

Don Gagne's avatar
Don Gagne committed
126 127 128
                SectionHeader {
                    id:     corridorHeader
                    text:   qsTr("Corridor")
129 130
                }

Don Gagne's avatar
Don Gagne committed
131 132 133 134 135 136 137 138 139 140 141 142 143
                GridLayout {
                    anchors.left:   parent.left
                    anchors.right:  parent.right
                    columnSpacing:  _margin
                    rowSpacing:     _margin
                    columns:        2
                    visible:        corridorHeader.checked

                    QGCLabel { text: qsTr("Width") }
                    FactTextField {
                        fact:                   missionItem.corridorWidth
                        Layout.fillWidth:       true
                    }
144

Don Gagne's avatar
Don Gagne committed
145 146 147 148
                    QGCLabel { text: qsTr("Turnaround dist") }
                    FactTextField {
                        fact:                   missionItem.turnAroundDistance
                        Layout.fillWidth:       true
149
                    }
150

Don Gagne's avatar
Don Gagne committed
151 152 153
                    QGCOptionsComboBox {
                        Layout.columnSpan:  2
                        Layout.fillWidth:   true
154

Don Gagne's avatar
Don Gagne committed
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
                        model: [
                            {
                                text:       qsTr("Images in turnarounds"),
                                fact:       missionItem.cameraTriggerInTurnAround,
                                enabled:    missionItem.hoverAndCaptureAllowed ? !missionItem.hoverAndCapture.rawValue : true,
                                visible:    true
                            },
                            {
                                text:       qsTr("Relative altitude"),
                                enabled:    missionItem.cameraCalc.isManualCamera && !missionItem.followTerrain,
                                visible:    QGroundControl.corePlugin.options.showMissionAbsoluteAltitude || (!missionItem.cameraCalc.distanceToSurfaceRelative && !missionItem.followTerrain),
                                checked:    missionItem.cameraCalc.distanceToSurfaceRelative
                            }
                        ]

                        onItemClicked: {
                            if (index == 1) {
                                missionItem.cameraCalc.distanceToSurfaceRelative = !missionItem.cameraCalc.distanceToSurfaceRelative
                                console.log(missionItem.cameraCalc.distanceToSurfaceRelative)
                            }
                        }
                    }
                }
178

Don Gagne's avatar
Don Gagne committed
179 180 181 182
                QGCButton {
                    text:       qsTr("Rotate Entry Point")
                    onClicked:  missionItem.rotateEntryPoint()
                }
183

Don Gagne's avatar
Don Gagne committed
184 185 186
                SectionHeader {
                    id:         terrainHeader
                    text:       qsTr("Terrain")
187
                    checked:    missionItem.followTerrain
188 189
                }

Don Gagne's avatar
Don Gagne committed
190 191 192 193 194 195 196 197 198 199 200
                ColumnLayout {
                    anchors.left:   parent.left
                    anchors.right:  parent.right
                    spacing:        _margin
                    visible:        terrainHeader.checked

                    QGCCheckBox {
                        id:         followsTerrainCheckBox
                        text:       qsTr("Vehicle follows terrain")
                        checked:    missionItem.followTerrain
                        onClicked:  missionItem.followTerrain = checked
201
                    }
202

Don Gagne's avatar
Don Gagne committed
203
                    GridLayout {
204
                        Layout.fillWidth:   true
Don Gagne's avatar
Don Gagne committed
205 206 207 208 209 210 211 212 213 214
                        columnSpacing:      _margin
                        rowSpacing:         _margin
                        columns:            2
                        visible:            followsTerrainCheckBox.checked

                        QGCLabel { text: qsTr("Tolerance") }
                        FactTextField {
                            fact:               missionItem.terrainAdjustTolerance
                            Layout.fillWidth:   true
                        }
215

Don Gagne's avatar
Don Gagne committed
216 217 218 219 220 221 222 223 224 225 226
                        QGCLabel { text: qsTr("Max Climb Rate") }
                        FactTextField {
                            fact:               missionItem.terrainAdjustMaxClimbRate
                            Layout.fillWidth:   true
                        }

                        QGCLabel { text: qsTr("Max Descent Rate") }
                        FactTextField {
                            fact:               missionItem.terrainAdjustMaxDescentRate
                            Layout.fillWidth:   true
                        }
227
                    }
228 229
                }

Don Gagne's avatar
Don Gagne committed
230 231 232 233
                SectionHeader {
                    id:     statsHeader
                    text:   qsTr("Statistics")
                }
234

Don Gagne's avatar
Don Gagne committed
235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253
                TransectStyleComplexItemStats { }
            } // Grid Column

            Column {
                anchors.left:       parent.left
                anchors.right:      parent.right
                spacing:            _margin
                visible:            tabBar.currentIndex == 1

                CameraCalcCamera {
                    cameraCalc:                     missionItem.cameraCalc
                    vehicleFlightIsFrontal:         true
                    distanceToSurfaceLabel:         qsTr("Altitude")
                    distanceToSurfaceAltitudeMode:  missionItem.followTerrain ?
                                                        QGroundControl.AltitudeModeAboveTerrain :
                                                        missionItem.cameraCalc.distanceToSurfaceRelative
                    frontalDistanceLabel:           qsTr("Trigger Dist")
                    sideDistanceLabel:              qsTr("Spacing")
                }
254
            }
Don Gagne's avatar
Don Gagne committed
255
        }
256
    }
Don Gagne's avatar
Don Gagne committed
257
}