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
            QGCLabel {
                Layout.fillWidth:   true
                wrapMode:           Text.WordWrap
DonLakeFlyer's avatar
DonLakeFlyer committed
68
                text:               qsTr("Use the Polyline Tools to create the polyline which defines the corridor.")
Don Gagne's avatar
Don Gagne committed
69
            }
70

DoinLakeFlyer's avatar
DoinLakeFlyer committed
71 72
            /*
              Trial of new "done" model so leaving for now in case it comes back
73 74 75
            QGCButton {
                text:               qsTr("Done With Polyline")
                Layout.fillWidth:   true
76
                enabled:            missionItem.corridorPolyline.isValid && !missionItem.corridorPolyline.traceMode
77 78
                onClicked: {
                    missionItem.wizardMode = false
DoinLakeFlyer's avatar
DoinLakeFlyer committed
79 80
                    // Trial of no auto select next item
                    //editorRoot.selectNextNotReadyItem()
81 82
                }
            }
DoinLakeFlyer's avatar
DoinLakeFlyer committed
83
            */
84 85
        }

86
        Column {
Don Gagne's avatar
Don Gagne committed
87 88 89
            anchors.left:   parent.left
            anchors.right:  parent.right
            spacing:        _margin
90
            visible:        !wizardModeColumn.visible
91

Don Gagne's avatar
Don Gagne committed
92 93
            QGCTabBar {
                id:             tabBar
94 95
                anchors.left:   parent.left
                anchors.right:  parent.right
96

Don Gagne's avatar
Don Gagne committed
97
                Component.onCompleted: currentIndex = 0
98

Don Gagne's avatar
Don Gagne committed
99 100
                QGCTabButton { text: qsTr("Grid") }
                QGCTabButton { text: qsTr("Camera") }
101
            }
102

Don Gagne's avatar
Don Gagne committed
103 104 105 106 107 108 109 110 111 112 113 114 115 116
            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
                }
117

Don Gagne's avatar
Don Gagne committed
118 119 120 121 122 123 124

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

Don Gagne's avatar
Don Gagne committed
130
                SectionHeader {
131 132 133 134
                    id:             corridorHeader
                    anchors.left:   parent.left
                    anchors.right:  parent.right
                    text:           qsTr("Corridor")
135 136
                }

Don Gagne's avatar
Don Gagne committed
137 138 139 140 141 142 143 144 145 146 147 148 149
                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
                    }
150

Don Gagne's avatar
Don Gagne committed
151 152 153 154
                    QGCLabel { text: qsTr("Turnaround dist") }
                    FactTextField {
                        fact:                   missionItem.turnAroundDistance
                        Layout.fillWidth:       true
155
                    }
156

Don Gagne's avatar
Don Gagne committed
157 158 159
                    QGCOptionsComboBox {
                        Layout.columnSpan:  2
                        Layout.fillWidth:   true
160

Don Gagne's avatar
Don Gagne committed
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
                        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)
                            }
                        }
                    }
                }
184

Don Gagne's avatar
Don Gagne committed
185 186 187 188
                QGCButton {
                    text:       qsTr("Rotate Entry Point")
                    onClicked:  missionItem.rotateEntryPoint()
                }
189

Don Gagne's avatar
Don Gagne committed
190
                SectionHeader {
191 192 193 194 195
                    id:             terrainHeader
                    anchors.left:   parent.left
                    anchors.right:  parent.right
                    text:           qsTr("Terrain")
                    checked:        missionItem.followTerrain
196 197
                }

Don Gagne's avatar
Don Gagne committed
198 199 200 201 202 203 204 205 206 207 208
                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
209
                    }
210

Don Gagne's avatar
Don Gagne committed
211
                    GridLayout {
212
                        Layout.fillWidth:   true
Don Gagne's avatar
Don Gagne committed
213 214 215 216 217 218 219 220 221 222
                        columnSpacing:      _margin
                        rowSpacing:         _margin
                        columns:            2
                        visible:            followsTerrainCheckBox.checked

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

Don Gagne's avatar
Don Gagne committed
224 225 226 227 228 229 230 231 232 233 234
                        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
                        }
235
                    }
236 237
                }

Don Gagne's avatar
Don Gagne committed
238
                SectionHeader {
239 240 241 242
                    id:             statsHeader
                    anchors.left:   parent.left
                    anchors.right:  parent.right
                    text:           qsTr("Statistics")
Don Gagne's avatar
Don Gagne committed
243
                }
244

Don Gagne's avatar
Don Gagne committed
245 246 247 248 249 250 251 252 253 254
                TransectStyleComplexItemStats { }
            } // Grid Column

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

                CameraCalcCamera {
255
                    cameraCalc: missionItem.cameraCalc
Don Gagne's avatar
Don Gagne committed
256
                }
257
            }
Don Gagne's avatar
Don Gagne committed
258
        }
259
    }
Don Gagne's avatar
Don Gagne committed
260
}