FWLandingPatternEditor.qml 12 KB
Newer Older
1
2
3
4
5
6
7
8
9
/****************************************************************************
 *
 *   (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/

10
11
import QtQuick          2.3
import QtQuick.Controls 1.2
12
import QtQuick.Dialogs  1.2
13
import QtQuick.Layouts  1.2
14
15
16
17
18

import QGroundControl               1.0
import QGroundControl.ScreenTools   1.0
import QGroundControl.Vehicle       1.0
import QGroundControl.Controls      1.0
Don Gagne's avatar
   
Don Gagne committed
19
import QGroundControl.FactSystem    1.0
20
21
22
23
24
25
import QGroundControl.FactControls  1.0
import QGroundControl.Palette       1.0

// Editor for Fixed Wing Landing Pattern complex mission item
Rectangle {
    id:         _root
Don Gagne's avatar
Don Gagne committed
26
    height:     visible ? ((editorColumn.visible ? editorColumn.height : editorColumnNeedLandingPoint.height) + (_margin * 2)) : 0
27
28
29
30
31
32
33
34
    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

Don Gagne's avatar
   
Don Gagne committed
35
36
37
    property var    _masterControler:               masterController
    property var    _missionController:             _masterControler.missionController
    property var    _missionVehicle:                _masterControler.controllerVehicle
38
39
40
41
    property real   _margin:                    ScreenTools.defaultFontPixelWidth / 2
    property real   _spacer:                    ScreenTools.defaultFontPixelWidth / 2
    property string _setToVehicleHeadingStr:    qsTr("Set to vehicle heading")
    property string _setToVehicleLocationStr:   qsTr("Set to vehicle location")
Don Gagne's avatar
   
Don Gagne committed
42
    property bool   _showCameraSection:         !_missionVehicle.apmFirmware
Don Gagne's avatar
   
Don Gagne committed
43
    property int    _altitudeMode:              missionItem.altitudesAreRelative ? QGroundControl.AltitudeModeRelative : QGroundControl.AltitudeModeAbsolute
44

45
46

    Column {
47
48
49
50
        id:                 editorColumn
        anchors.margins:    _margin
        anchors.left:       parent.left
        anchors.right:      parent.right
51
        spacing:            _margin
DonLakeFlyer's avatar
   
DonLakeFlyer committed
52
        visible:            !editorColumnNeedLandingPoint.visible
53

DonLakeFlyer's avatar
DonLakeFlyer committed
54
        SectionHeader {
DonLakeFlyer's avatar
   
DonLakeFlyer committed
55
56
57
58
            id:             loiterPointSection
            anchors.left:   parent.left
            anchors.right:  parent.right
            text:           qsTr("Loiter point")
DonLakeFlyer's avatar
DonLakeFlyer committed
59
        }
Don Gagne's avatar
Don Gagne committed
60

61
62
63
64
65
        Column {
            anchors.left:       parent.left
            anchors.right:      parent.right
            spacing:            _margin
            visible:            loiterPointSection.checked
Don Gagne's avatar
Don Gagne committed
66

67
            Item { width: 1; height: _spacer }
Don Gagne's avatar
Don Gagne committed
68

Don Gagne's avatar
   
Don Gagne committed
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
            GridLayout {
                anchors.left:    parent.left
                anchors.right:   parent.right
                columns:         2

                QGCLabel { text: qsTr("Altitude") }

                AltitudeFactTextField {
                    Layout.fillWidth:   true
                    fact:               missionItem.loiterAltitude
                    altitudeMode:       _altitudeMode
                }

                QGCLabel { text: qsTr("Radius") }

                FactTextField {
                    Layout.fillWidth:   true
                    fact:               missionItem.loiterRadius
                }
88
            }
Don Gagne's avatar
Don Gagne committed
89

90
91
92
93
94
95
96
97
98
99
            Item { width: 1; height: _spacer }

            QGCCheckBox {
                text:           qsTr("Loiter clockwise")
                checked:        missionItem.loiterClockwise
                onClicked:      missionItem.loiterClockwise = checked
            }

            QGCButton {
                text:       _setToVehicleHeadingStr
100
101
                visible:    activeVehicle
                onClicked:  missionItem.landingHeading.rawValue = activeVehicle.heading.rawValue
102
            }
Don Gagne's avatar
Don Gagne committed
103
104
        }

105
        SectionHeader {
DonLakeFlyer's avatar
   
DonLakeFlyer committed
106
107
108
109
            id:             landingPointSection
            anchors.left:   parent.left
            anchors.right:  parent.right
            text:           qsTr("Landing point")
110
        }
Don Gagne's avatar
Don Gagne committed
111

112
113
114
115
116
117
118
        Column {
            anchors.left:       parent.left
            anchors.right:      parent.right
            spacing:            _margin
            visible:            landingPointSection.checked

            Item { width: 1; height: _spacer }
119

120
121
122
123
            GridLayout {
                anchors.left:    parent.left
                anchors.right:   parent.right
                columns:         2
124

125
                QGCLabel { text: qsTr("Heading") }
DonLakeFlyer's avatar
DonLakeFlyer committed
126
127
128
129
130
131

                FactTextField {
                    Layout.fillWidth:   true
                    fact:               missionItem.landingHeading
                }

132
                QGCLabel { text: qsTr("Altitude") }
DonLakeFlyer's avatar
DonLakeFlyer committed
133

Don Gagne's avatar
   
Don Gagne committed
134
                AltitudeFactTextField {
DonLakeFlyer's avatar
DonLakeFlyer committed
135
136
                    Layout.fillWidth:   true
                    fact:               missionItem.landingAltitude
Don Gagne's avatar
   
Don Gagne committed
137
                    altitudeMode:       _altitudeMode
DonLakeFlyer's avatar
DonLakeFlyer committed
138
139
                }

140
141
142
                QGCRadioButton {
                    id:                 specifyLandingDistance
                    text:               qsTr("Landing Dist")
Don Gagne's avatar
   
Don Gagne committed
143
144
                    checked:            missionItem.valueSetIsDistance.rawValue
                    onClicked:          missionItem.valueSetIsDistance.rawValue = checked
145
146
                    Layout.fillWidth:   true
                }
147

148
149
150
151
152
                FactTextField {
                    fact:               missionItem.landingDistance
                    enabled:            specifyLandingDistance.checked
                    Layout.fillWidth:   true
                }
153

154
155
156
                QGCRadioButton {
                    id:                 specifyGlideSlope
                    text:               qsTr("Glide Slope")
Don Gagne's avatar
   
Don Gagne committed
157
158
                    checked:            !missionItem.valueSetIsDistance.rawValue
                    onClicked:          missionItem.valueSetIsDistance.rawValue = !checked
159
160
161
162
163
164
165
166
                    Layout.fillWidth:   true
                }

                FactTextField {
                    fact:               missionItem.glideSlope
                    enabled:            specifyGlideSlope.checked
                    Layout.fillWidth:   true
                }
167

168
169
                QGCButton {
                    text:               _setToVehicleLocationStr
170
                    visible:            activeVehicle
171
                    Layout.columnSpan:  2
172
                    onClicked:          missionItem.landingCoordinate = activeVehicle.coordinate
173
                }
174
            }
175
176
        }

Don Gagne's avatar
Don Gagne committed
177
178
179
180
        Item { width: 1; height: _spacer }

        QGCCheckBox {
            anchors.right:  parent.right
DonLakeFlyer's avatar
   
DonLakeFlyer committed
181
            text:           qsTr("Altitudes relative to launch")
Don Gagne's avatar
Don Gagne committed
182
            checked:        missionItem.altitudesAreRelative
183
            visible:        QGroundControl.corePlugin.options.showMissionAbsoluteAltitude || !missionItem.altitudesAreRelative
Don Gagne's avatar
Don Gagne committed
184
            onClicked:      missionItem.altitudesAreRelative = checked
185
        }
Don Gagne's avatar
   
Don Gagne committed
186
187

        SectionHeader {
DonLakeFlyer's avatar
   
DonLakeFlyer committed
188
189
190
191
192
            id:             cameraSection
            anchors.left:   parent.left
            anchors.right:  parent.right
            text:           qsTr("Camera")
            visible:        _showCameraSection
Don Gagne's avatar
   
Don Gagne committed
193
194
195
196
197
198
        }

        Column {
            anchors.left:       parent.left
            anchors.right:      parent.right
            spacing:            _margin
Don Gagne's avatar
   
Don Gagne committed
199
            visible:            _showCameraSection && cameraSection.checked
Don Gagne's avatar
   
Don Gagne committed
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216

            Item { width: 1; height: _spacer }

            FactCheckBox {
                text:       _stopTakingPhotos.shortDescription
                fact:       _stopTakingPhotos

                property Fact _stopTakingPhotos: missionItem.stopTakingPhotos
            }

            FactCheckBox {
                text:       _stopTakingVideo.shortDescription
                fact:       _stopTakingVideo

                property Fact _stopTakingVideo: missionItem.stopTakingVideo
            }
        }
DonLakeFlyer's avatar
   
DonLakeFlyer committed
217

DonLakeFlyer's avatar
   
DonLakeFlyer committed
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
        Column {
            anchors.left:       parent.left
            anchors.right:      parent.right
            spacing:            0

            QGCLabel {
                anchors.left:           parent.left
                anchors.right:          parent.right
                wrapMode:               Text.WordWrap
                color:                  qgcPal.warningText
                font.pointSize:         ScreenTools.smallFontPointSize
                text:                   qsTr("* Approximate glide slope altitudes.")
            }

            QGCLabel {
                anchors.left:           parent.left
                anchors.right:          parent.right
                wrapMode:               Text.WordWrap
                color:                  qgcPal.warningText
                font.pointSize:         ScreenTools.smallFontPointSize
                text:                   qsTr("* Actual flight path will vary.")
            }

            QGCLabel {
                anchors.left:           parent.left
                anchors.right:          parent.right
                wrapMode:               Text.WordWrap
                color:                  qgcPal.warningText
                font.pointSize:         ScreenTools.smallFontPointSize
                text:                   qsTr("* Avoid tailwind on landing.")
            }
DonLakeFlyer's avatar
   
DonLakeFlyer committed
249
        }
250
    }
Don Gagne's avatar
Don Gagne committed
251
252
253
254

    Column {
        id:                 editorColumnNeedLandingPoint
        anchors.margins:    _margin
255
        anchors.top:        parent.top
Don Gagne's avatar
Don Gagne committed
256
257
        anchors.left:       parent.left
        anchors.right:      parent.right
DonLakeFlyer's avatar
   
DonLakeFlyer committed
258
        visible:            !missionItem.landingCoordSet || missionItem.wizardMode
Don Gagne's avatar
Don Gagne committed
259
        spacing:            ScreenTools.defaultFontPixelHeight
Don Gagne's avatar
Don Gagne committed
260

DonLakeFlyer's avatar
   
DonLakeFlyer committed
261
262
263
264
265
266
267
268
269
270
271
272
273
274
        Column {
            id:             landingCoordColumn
            anchors.left:   parent.left
            anchors.right:  parent.right
            spacing:        ScreenTools.defaultFontPixelHeight
            visible:        !missionItem.landingCoordSet

            QGCLabel {
                anchors.left:           parent.left
                anchors.right:          parent.right
                wrapMode:               Text.WordWrap
                horizontalAlignment:    Text.AlignHCenter
                text:                   qsTr("Click in map to set landing point.")
            }
275

DonLakeFlyer's avatar
   
DonLakeFlyer committed
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
            QGCLabel {
                anchors.left:           parent.left
                anchors.right:          parent.right
                horizontalAlignment:    Text.AlignHCenter
                text:                   qsTr("- or -")
                visible:                activeVehicle
            }

            QGCButton {
                anchors.horizontalCenter:   parent.horizontalCenter
                text:                       _setToVehicleLocationStr
                visible:                    activeVehicle

                onClicked: {
                    missionItem.landingCoordinate = activeVehicle.coordinate
                    missionItem.landingHeading.rawValue = activeVehicle.heading.rawValue
                }
            }
294
295
        }

DonLakeFlyer's avatar
   
DonLakeFlyer committed
296
297
298
299
300
301
302
303
304
305
306
        ColumnLayout {
            anchors.left:   parent.left
            anchors.right:  parent.right
            spacing:        ScreenTools.defaultFontPixelHeight
            visible:        !landingCoordColumn.visible

            onVisibleChanged: {
                if (visible) {
                    console.log(missionItem.landingDistance.rawValue)
                }
            }
307

DonLakeFlyer's avatar
   
DonLakeFlyer committed
308
309
310
311
312
313
314
315
316
317
318
319
320
321
            QGCLabel {
                Layout.fillWidth:   true
                wrapMode:           Text.WordWrap
                text:               qsTr("Drag the loiter point to adjust landing direction for wind and obstacles.")
            }

            QGCButton {
                text:               qsTr("Done Adjusting")
                Layout.fillWidth:   true
                onClicked: {
                    missionItem.wizardMode = false
                    missionItem.landingDragAngleOnly = false
                    editorRoot.selectNextNotReadyItem()
                }
322
            }
Don Gagne's avatar
Don Gagne committed
323
        }
Don Gagne's avatar
Don Gagne committed
324
    }
325
}