SensorsComponent.qml 23.9 KB
Newer Older
1 2 3 4 5 6 7 8
/****************************************************************************
 *
 *   (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.
 *
 ****************************************************************************/
9 10


Don Gagne's avatar
Don Gagne committed
11 12 13
import QtQuick 2.2
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
Don Gagne's avatar
Don Gagne committed
14
import QtQuick.Dialogs 1.2
Don Gagne's avatar
Don Gagne committed
15 16 17 18 19

import QGroundControl.FactSystem 1.0
import QGroundControl.FactControls 1.0
import QGroundControl.Palette 1.0
import QGroundControl.Controls 1.0
20
import QGroundControl.ScreenTools 1.0
Don Gagne's avatar
Don Gagne committed
21
import QGroundControl.Controllers 1.0
Don Gagne's avatar
Don Gagne committed
22

Don Gagne's avatar
Don Gagne committed
23
QGCView {
24
    id:         qgcView
25
    viewPanel:  panel
Don Gagne's avatar
Don Gagne committed
26

Don Gagne's avatar
Don Gagne committed
27 28 29
    // Help text which is shown both in the status text area prior to pressing a cal button and in the
    // pre-calibration dialog.

30 31
    readonly property string boardRotationText: qsTr("If the orientation is in the direction of flight, select ROTATION_NONE.")
    readonly property string compassRotationText: qsTr("If the orientation is in the direction of flight, select ROTATION_NONE.")
32

Don Gagne's avatar
Don Gagne committed
33
    readonly property string compassHelp:   qsTr("For Compass calibration you will need to rotate your vehicle through a number of positions.")
34 35 36 37
    readonly property string gyroHelp:      qsTr("For Gyroscope calibration you will need to place your vehicle on a surface and leave it still.")
    readonly property string accelHelp:     qsTr("For Accelerometer calibration you will need to place your vehicle on all six sides on a perfectly level surface and hold it still in each orientation for a few seconds.")
    readonly property string levelHelp:     qsTr("To level the horizon you need to place the vehicle in its level flight position and press OK.")
    readonly property string airspeedHelp:  qsTr("For Airspeed calibration you will need to keep your airspeed sensor out of any wind and then blow across the sensor.")
Don Gagne's avatar
Don Gagne committed
38

Don Gagne's avatar
Don Gagne committed
39
    readonly property string statusTextAreaDefaultText: qsTr("Start the individual calibration steps by clicking one of the buttons to the left.")
Don Gagne's avatar
Don Gagne committed
40

Don Gagne's avatar
Don Gagne committed
41 42 43 44 45 46
    // Used to pass what type of calibration is being performed to the preCalibrationDialog
    property string preCalibrationDialogType

    // Used to pass help text to the preCalibrationDialog dialog
    property string preCalibrationDialogHelp

Don Gagne's avatar
Don Gagne committed
47
    readonly property int rotationColumnWidth: ScreenTools.defaultFontPixelWidth * 30
Don Gagne's avatar
Don Gagne committed
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
    readonly property var rotations: [
        "ROTATION_NONE",
        "ROTATION_YAW_45",
        "ROTATION_YAW_90",
        "ROTATION_YAW_135",
        "ROTATION_YAW_180",
        "ROTATION_YAW_225",
        "ROTATION_YAW_270",
        "ROTATION_YAW_315",
        "ROTATION_ROLL_180",
        "ROTATION_ROLL_180_YAW_45",
        "ROTATION_ROLL_180_YAW_90",
        "ROTATION_ROLL_180_YAW_135",
        "ROTATION_PITCH_180",
        "ROTATION_ROLL_180_YAW_225",
        "ROTATION_ROLL_180_YAW_270",
        "ROTATION_ROLL_180_YAW_315",
        "ROTATION_ROLL_90",
        "ROTATION_ROLL_90_YAW_45",
        "ROTATION_ROLL_90_YAW_90",
        "ROTATION_ROLL_90_YAW_135",
        "ROTATION_ROLL_270",
        "ROTATION_ROLL_270_YAW_45",
        "ROTATION_ROLL_270_YAW_90",
        "ROTATION_ROLL_270_YAW_135",
        "ROTATION_PITCH_90",
        "ROTATION_PITCH_270",
Don Gagne's avatar
Don Gagne committed
75
        "ROTATION_ROLL_270_YAW_270",
Don Gagne's avatar
Don Gagne committed
76
        "ROTATION_ROLL_180_PITCH_270",
77 78
        "ROTATION_PITCH_90_YAW_180",
        "ROTATION_ROLL_90_PITCH_90"
Don Gagne's avatar
Don Gagne committed
79 80
    ]

Don Gagne's avatar
Don Gagne committed
81 82 83 84 85 86 87 88 89 90 91 92 93
    property Fact cal_mag0_id:      controller.getParameterFact(-1, "CAL_MAG0_ID")
    property Fact cal_mag1_id:      controller.getParameterFact(-1, "CAL_MAG1_ID")
    property Fact cal_mag2_id:      controller.getParameterFact(-1, "CAL_MAG2_ID")
    property Fact cal_mag0_rot:     controller.getParameterFact(-1, "CAL_MAG0_ROT")
    property Fact cal_mag1_rot:     controller.getParameterFact(-1, "CAL_MAG1_ROT")
    property Fact cal_mag2_rot:     controller.getParameterFact(-1, "CAL_MAG2_ROT")

    property Fact cal_gyro0_id:     controller.getParameterFact(-1, "CAL_GYRO0_ID")
    property Fact cal_acc0_id:      controller.getParameterFact(-1, "CAL_ACC0_ID")

    property Fact sens_board_rot:   controller.getParameterFact(-1, "SENS_BOARD_ROT")
    property Fact sens_board_x_off: controller.getParameterFact(-1, "SENS_BOARD_X_OFF")
    property Fact sens_dpres_off:   controller.getParameterFact(-1, "SENS_DPRES_OFF")
Don Gagne's avatar
Don Gagne committed
94 95 96 97 98 99

    // Id > = signals compass available, rot < 0 signals internal compass
    property bool showCompass0Rot: cal_mag0_id.value > 0 && cal_mag0_rot.value >= 0
    property bool showCompass1Rot: cal_mag1_id.value > 0 && cal_mag1_rot.value >= 0
    property bool showCompass2Rot: cal_mag2_id.value > 0 && cal_mag2_rot.value >= 0

Don Gagne's avatar
Don Gagne committed
100
    SensorsComponentController {
101 102 103 104 105 106 107 108 109 110
        id:                         controller
        factPanel:                  panel
        statusLog:                  statusTextArea
        progressBar:                progressBar
        compassButton:              compassButton
        gyroButton:                 gyroButton
        accelButton:                accelButton
        airspeedButton:             airspeedButton
        levelButton:                levelButton
        cancelButton:               cancelButton
Don Gagne's avatar
Don Gagne committed
111
        setOrientationsButton:      setOrientationsButton
112
        orientationCalAreaHelpText: orientationCalAreaHelpText
Don Gagne's avatar
Don Gagne committed
113 114 115

        onResetStatusTextArea: statusLog.text = statusTextAreaDefaultText

Don Gagne's avatar
Don Gagne committed
116 117
        onSetCompassRotations: {
            if (showCompass0Rot || showCompass1Rot || showCompass2Rot) {
Don Gagne's avatar
Don Gagne committed
118
                showDialog(setOrientationsDialogComponent, qsTr("Set Compass Rotation(s)"), qgcView.showDialogDefaultWidth, StandardButton.Ok)
Don Gagne's avatar
Don Gagne committed
119 120
            }
        }
Don Gagne's avatar
Don Gagne committed
121 122 123

        onWaitingForCancelChanged: {
            if (controller.waitingForCancel) {
124
                showMessage(qsTr("Calibration Cancel"), qsTr("Waiting for Vehicle to response to Cancel. This may take a few seconds."), 0)
Don Gagne's avatar
Don Gagne committed
125 126 127 128
            } else {
                hideDialog()
            }
        }
129 130 131 132 133 134 135 136 137

    }

    Component.onCompleted: {
        var usingUDP = controller.usingUDPLink()
        if (usingUDP) {
            console.log("onUsingUDPLink")
            showMessage("Sensor Calibration", "Performing sensor calibration over a WiFi connection is known to be unreliable. You should disconnect and perform calibration using a direct USB connection instead.", StandardButton.Ok)
        }
Don Gagne's avatar
Don Gagne committed
138 139
    }

140 141
    QGCPalette { id: qgcPal; colorGroupEnabled: panel.enabled }

Don Gagne's avatar
Don Gagne committed
142 143
    Component {
        id: preCalibrationDialogComponent
Don Gagne's avatar
Don Gagne committed
144

Don Gagne's avatar
Don Gagne committed
145 146
        QGCViewDialog {
            id: preCalibrationDialog
Don Gagne's avatar
Don Gagne committed
147

Don Gagne's avatar
Don Gagne committed
148
            function accept() {
Don Gagne's avatar
Don Gagne committed
149 150 151 152
                if (preCalibrationDialogType == "gyro") {
                    controller.calibrateGyro()
                } else if (preCalibrationDialogType == "accel") {
                    controller.calibrateAccel()
153 154
                } else if (preCalibrationDialogType == "level") {
                    controller.calibrateLevel()
Don Gagne's avatar
Don Gagne committed
155 156 157 158 159 160
                } else if (preCalibrationDialogType == "compass") {
                    controller.calibrateCompass()
                } else if (preCalibrationDialogType == "airspeed") {
                    controller.calibrateAirspeed()
                }
                preCalibrationDialog.hideDialog()
Don Gagne's avatar
Don Gagne committed
161
            }
Don Gagne's avatar
Don Gagne committed
162

Don Gagne's avatar
Don Gagne committed
163
            Column {
Don Gagne's avatar
Don Gagne committed
164 165
                anchors.fill:   parent
                spacing:        5
Don Gagne's avatar
Don Gagne committed
166

Don Gagne's avatar
Don Gagne committed
167 168 169 170 171
                QGCLabel {
                    width:      parent.width
                    wrapMode:   Text.WordWrap
                    text:       preCalibrationDialogHelp
                }
Don Gagne's avatar
Don Gagne committed
172

Don Gagne's avatar
Don Gagne committed
173
                QGCLabel {
Don Gagne's avatar
Don Gagne committed
174
                    id:         boardRotationHelp
Don Gagne's avatar
Don Gagne committed
175 176
                    width:      parent.width
                    wrapMode:   Text.WordWrap
177 178
                    visible:    (preCalibrationDialogType != "airspeed") && (preCalibrationDialogType != "gyro")
                    text:       boardRotationText
Don Gagne's avatar
Don Gagne committed
179
                }
Don Gagne's avatar
Don Gagne committed
180

Don Gagne's avatar
Don Gagne committed
181 182 183 184 185 186 187 188 189 190 191 192
                Column {
                    visible:    boardRotationHelp.visible
                    QGCLabel {
                        text: qsTr("Autopilot Orientation:")
                    }

                    FactComboBox {
                        id:     boardRotationCombo
                        width:  rotationColumnWidth;
                        model:  rotations
                        fact:   sens_board_rot
                    }
Don Gagne's avatar
Don Gagne committed
193 194 195 196 197
                }
            }
        }
    }

Don Gagne's avatar
Don Gagne committed
198
    Component {
Don Gagne's avatar
Don Gagne committed
199
        id: setOrientationsDialogComponent
Don Gagne's avatar
Don Gagne committed
200 201

        QGCViewDialog {
Don Gagne's avatar
Don Gagne committed
202
            id: setOrientationsDialog
Don Gagne's avatar
Don Gagne committed
203

Don Gagne's avatar
Don Gagne committed
204 205 206 207
            QGCFlickable {
                anchors.fill:   parent
                contentHeight:  columnLayout.height
                clip:           true
Don Gagne's avatar
Don Gagne committed
208

Don Gagne's avatar
Don Gagne committed
209 210 211 212 213 214 215
                Column {
                    id:                 columnLayout
                    anchors.margins:    ScreenTools.defaultFontPixelWidth
                    anchors.left:       parent.left
                    anchors.right:      parent.right
                    anchors.top:        parent.top
                    spacing:            ScreenTools.defaultFontPixelHeight
Don Gagne's avatar
Don Gagne committed
216

Lorenz Meier's avatar
Lorenz Meier committed
217
                    QGCLabel {
Don Gagne's avatar
Don Gagne committed
218 219 220
                        width:      parent.width
                        wrapMode:   Text.WordWrap
                        text:       boardRotationText
221
                    }
Lorenz Meier's avatar
Lorenz Meier committed
222

Don Gagne's avatar
Don Gagne committed
223 224 225 226 227 228 229 230 231 232 233
                    Column {
                        QGCLabel {
                            text: qsTr("Autopilot Orientation:")
                        }

                        FactComboBox {
                            id:     boardRotationCombo
                            width:  rotationColumnWidth;
                            model:  rotations
                            fact:   sens_board_rot
                        }
234
                    }
Don Gagne's avatar
Don Gagne committed
235

Don Gagne's avatar
Don Gagne committed
236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258
                    Column {
                        // Compass 0 rotation
                        Component {
                            id: compass0ComponentLabel2

                            QGCLabel {
                                text: qsTr("External Compass Orientation:")
                            }
                        }

                        Component {
                            id: compass0ComponentCombo2

                            FactComboBox {
                                id:     compass0RotationCombo
                                width:  rotationColumnWidth
                                model:  rotations
                                fact:   cal_mag0_rot
                            }
                        }

                        Loader { sourceComponent: showCompass0Rot ? compass0ComponentLabel2 : null }
                        Loader { sourceComponent: showCompass0Rot ? compass0ComponentCombo2 : null }
Don Gagne's avatar
Don Gagne committed
259 260
                    }

Don Gagne's avatar
Don Gagne committed
261 262 263 264
                    Column {
                        // Compass 1 rotation
                        Component {
                            id: compass1ComponentLabel2
Don Gagne's avatar
Don Gagne committed
265

Don Gagne's avatar
Don Gagne committed
266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283
                            QGCLabel {
                                text: qsTr("External Compass 1 Orientation:")
                            }
                        }

                        Component {
                            id: compass1ComponentCombo2

                            FactComboBox {
                                id:     compass1RotationCombo
                                width:  rotationColumnWidth
                                model:  rotations
                                fact:   cal_mag1_rot
                            }
                        }

                        Loader { sourceComponent: showCompass1Rot ? compass1ComponentLabel2 : null }
                        Loader { sourceComponent: showCompass1Rot ? compass1ComponentCombo2 : null }
Don Gagne's avatar
Don Gagne committed
284
                    }
Don Gagne's avatar
Don Gagne committed
285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312

                    Column {
                        spacing: ScreenTools.defaultFontPixelWidth

                        // Compass 2 rotation
                        Component {
                            id: compass2ComponentLabel2

                            QGCLabel {
                                text: qsTr("Compass 2 Orientation")
                            }
                        }

                        Component {
                            id: compass2ComponentCombo2

                            FactComboBox {
                                id:     compass1RotationCombo
                                width:  rotationColumnWidth
                                model:  rotations
                                fact:   cal_mag2_rot
                            }
                        }
                        Loader { sourceComponent: showCompass2Rot ? compass2ComponentLabel2 : null }
                        Loader { sourceComponent: showCompass2Rot ? compass2ComponentCombo2 : null }
                    }
                } // Column
            } // QGCFlickable
Don Gagne's avatar
Don Gagne committed
313
        } // QGCViewDialog
Don Gagne's avatar
Don Gagne committed
314
    } // Component - setOrientationsDialogComponent
Don Gagne's avatar
Don Gagne committed
315

316 317 318
    QGCViewPanel {
        id:             panel
        anchors.fill:   parent
Don Gagne's avatar
Don Gagne committed
319

320
        Column {
Don Gagne's avatar
Don Gagne committed
321 322
            id:         buttonColumn
            spacing:    ScreenTools.defaultFontPixelHeight / 2
Don Gagne's avatar
Don Gagne committed
323

Don Gagne's avatar
Don Gagne committed
324
            readonly property int buttonWidth: ScreenTools.defaultFontPixelWidth * 15
325

Don Gagne's avatar
Don Gagne committed
326 327 328 329 330
            IndicatorButton {
                id:             compassButton
                width:          parent.buttonWidth
                text:           qsTr("Compass")
                indicatorGreen: cal_mag0_id.value != 0
331

Don Gagne's avatar
Don Gagne committed
332 333 334 335
                onClicked: {
                    preCalibrationDialogType = "compass"
                    preCalibrationDialogHelp = compassHelp
                    showDialog(preCalibrationDialogComponent, qsTr("Calibrate Compass"), qgcView.showDialogDefaultWidth, StandardButton.Cancel | StandardButton.Ok)
336
                }
Don Gagne's avatar
Don Gagne committed
337
            }
Don Gagne's avatar
Don Gagne committed
338

Don Gagne's avatar
Don Gagne committed
339 340 341 342 343
            IndicatorButton {
                id:             gyroButton
                width:          parent.buttonWidth
                text:           qsTr("Gyroscope")
                indicatorGreen: cal_gyro0_id.value != 0
Don Gagne's avatar
Don Gagne committed
344

Don Gagne's avatar
Don Gagne committed
345 346 347 348
                onClicked: {
                    preCalibrationDialogType = "gyro"
                    preCalibrationDialogHelp = gyroHelp
                    showDialog(preCalibrationDialogComponent, qsTr("Calibrate Gyro"), qgcView.showDialogDefaultWidth, StandardButton.Cancel | StandardButton.Ok)
349
                }
Don Gagne's avatar
Don Gagne committed
350
            }
Don Gagne's avatar
Don Gagne committed
351

Don Gagne's avatar
Don Gagne committed
352 353 354 355 356
            IndicatorButton {
                id:             accelButton
                width:          parent.buttonWidth
                text:           qsTr("Accelerometer")
                indicatorGreen: cal_acc0_id.value != 0
357

Don Gagne's avatar
Don Gagne committed
358 359 360 361
                onClicked: {
                    preCalibrationDialogType = "accel"
                    preCalibrationDialogHelp = accelHelp
                    showDialog(preCalibrationDialogComponent, qsTr("Calibrate Accelerometer"), qgcView.showDialogDefaultWidth, StandardButton.Cancel | StandardButton.Ok)
362
                }
Don Gagne's avatar
Don Gagne committed
363
            }
Don Gagne's avatar
Don Gagne committed
364

Don Gagne's avatar
Don Gagne committed
365 366 367 368 369 370 371 372 373 374 375
            IndicatorButton {
                id:             levelButton
                width:          parent.buttonWidth
                text:           qsTr("Level Horizon")
                indicatorGreen: sens_board_x_off.value != 0
                enabled:        cal_acc0_id.value != 0 && cal_gyro0_id.value != 0

                onClicked: {
                    preCalibrationDialogType = "level"
                    preCalibrationDialogHelp = levelHelp
                    showDialog(preCalibrationDialogComponent, qsTr("Level Horizon"), qgcView.showDialogDefaultWidth, StandardButton.Cancel | StandardButton.Ok)
376
                }
Don Gagne's avatar
Don Gagne committed
377
            }
378

Don Gagne's avatar
Don Gagne committed
379 380 381 382 383 384 385 386 387 388 389
            IndicatorButton {
                id:             airspeedButton
                width:          parent.buttonWidth
                text:           qsTr("Airspeed")
                visible:        (controller.vehicle.fixedWing || controller.vehicle.vtol) && controller.getParameterFact(-1, "CBRK_AIRSPD_CHK").value != 162128
                indicatorGreen: sens_dpres_off.value != 0

                onClicked: {
                    preCalibrationDialogType = "airspeed"
                    preCalibrationDialogHelp = airspeedHelp
                    showDialog(preCalibrationDialogComponent, qsTr("Calibrate Airspeed"), qgcView.showDialogDefaultWidth, StandardButton.Cancel | StandardButton.Ok)
390
                }
Don Gagne's avatar
Don Gagne committed
391
            }
Don Gagne's avatar
Don Gagne committed
392

Don Gagne's avatar
Don Gagne committed
393 394 395 396 397 398
            QGCButton {
                id:         cancelButton
                width:      parent.buttonWidth
                text:       qsTr("Cancel")
                enabled:    false
                onClicked:  controller.cancelCalibration()
399
            }
Don Gagne's avatar
Don Gagne committed
400

Don Gagne's avatar
Don Gagne committed
401
            QGCButton {
Don Gagne's avatar
Don Gagne committed
402
                id:         setOrientationsButton
Don Gagne's avatar
Don Gagne committed
403 404 405 406 407 408 409 410 411 412 413 414
                width:      parent.buttonWidth
                text:       qsTr("Set Orientations")
                onClicked: showDialog(setOrientationsDialogComponent, qsTr("Set Orientations"), qgcView.showDialogDefaultWidth, StandardButton.Ok)
            }
        } // Column - Buttons

        Column {
            anchors.leftMargin: ScreenTools.defaultFontPixelWidth / 2
            anchors.left:       buttonColumn.right
            anchors.right:      parent.right
            anchors.top:        parent.top
            anchors.bottom:     parent.bottom
Don Gagne's avatar
Don Gagne committed
415

416
            ProgressBar {
Don Gagne's avatar
Don Gagne committed
417 418 419
                id:             progressBar
                anchors.left:   parent.left
                anchors.right:  parent.right
420
            }
Don Gagne's avatar
Don Gagne committed
421

422
            Item { height: ScreenTools.defaultFontPixelHeight; width: 10 } // spacer
Don Gagne's avatar
Don Gagne committed
423

424
            Item {
Don Gagne's avatar
Don Gagne committed
425
                property int calDisplayAreaWidth: parent.width
Don Gagne's avatar
Don Gagne committed
426

427 428
                width:  parent.width
                height: parent.height - y
Don Gagne's avatar
Don Gagne committed
429

430 431 432 433 434 435 436
                TextArea {
                    id:             statusTextArea
                    width:          parent.calDisplayAreaWidth
                    height:         parent.height
                    readOnly:       true
                    frameVisible:   false
                    text:           statusTextAreaDefaultText
Don Gagne's avatar
Don Gagne committed
437

438 439 440 441 442 443 444 445 446 447 448 449 450 451
                    style: TextAreaStyle {
                        textColor: qgcPal.text
                        backgroundColor: qgcPal.windowShade
                    }
                }

                Rectangle {
                    id:         orientationCalArea
                    width:      parent.calDisplayAreaWidth
                    height:     parent.height
                    visible:    controller.showOrientationCalArea
                    color:      qgcPal.windowShade

                    QGCLabel {
452 453 454 455 456 457
                        id:                 orientationCalAreaHelpText
                        anchors.margins:    ScreenTools.defaultFontPixelWidth
                        anchors.top:        orientationCalArea.top
                        anchors.left:       orientationCalArea.left
                        width:              parent.width
                        wrapMode:           Text.WordWrap
458
                        font.pointSize:     ScreenTools.mediumFontPointSize
459 460 461
                    }

                    Flow {
462 463
                        anchors.topMargin:  ScreenTools.defaultFontPixelWidth
                        anchors.top:        orientationCalAreaHelpText.bottom
Don Gagne's avatar
Don Gagne committed
464 465 466 467 468 469 470
                        anchors.bottom:     parent.bottom
                        anchors.left:       parent.left
                        anchors.right:      parent.right
                        spacing:            ScreenTools.defaultFontPixelWidth / 2

                        property real indicatorWidth:   (width / 3) - (spacing * 2)
                        property real indicatorHeight:  (height / 2) - spacing
471 472

                        VehicleRotationCal {
Don Gagne's avatar
Don Gagne committed
473 474
                            width:              parent.indicatorWidth
                            height:             parent.indicatorHeight
475 476 477
                            visible:            controller.orientationCalDownSideVisible
                            calValid:           controller.orientationCalDownSideDone
                            calInProgress:      controller.orientationCalDownSideInProgress
478
                            calInProgressText:  controller.orientationCalDownSideRotate ? qsTr("Rotate") : qsTr("Hold Still")
479
                            imageSource:        controller.orientationCalDownSideRotate ? "qrc:///qmlimages/VehicleDownRotate.png" : "qrc:///qmlimages/VehicleDown.png"
480
                        }
481
                        VehicleRotationCal {
Don Gagne's avatar
Don Gagne committed
482 483
                            width:              parent.indicatorWidth
                            height:             parent.indicatorHeight
484 485 486 487 488 489
                            visible:            controller.orientationCalUpsideDownSideVisible
                            calValid:           controller.orientationCalUpsideDownSideDone
                            calInProgress:      controller.orientationCalUpsideDownSideInProgress
                            calInProgressText:  controller.orientationCalUpsideDownSideRotate ? qsTr("Rotate") : qsTr("Hold Still")
                            imageSource:        controller.orientationCalUpsideDownSideRotate ? "qrc:///qmlimages/VehicleUpsideDownRotate.png" : "qrc:///qmlimages/VehicleUpsideDown.png"
                        }
490
                        VehicleRotationCal {
Don Gagne's avatar
Don Gagne committed
491 492
                            width:              parent.indicatorWidth
                            height:             parent.indicatorHeight
493 494 495
                            visible:            controller.orientationCalNoseDownSideVisible
                            calValid:           controller.orientationCalNoseDownSideDone
                            calInProgress:      controller.orientationCalNoseDownSideInProgress
496
                            calInProgressText:  controller.orientationCalNoseDownSideRotate ? qsTr("Rotate") : qsTr("Hold Still")
497
                            imageSource:        controller.orientationCalNoseDownSideRotate ? "qrc:///qmlimages/VehicleNoseDownRotate.png" : "qrc:///qmlimages/VehicleNoseDown.png"
498
                        }
499
                        VehicleRotationCal {
Don Gagne's avatar
Don Gagne committed
500 501
                            width:              parent.indicatorWidth
                            height:             parent.indicatorHeight
502 503 504 505 506 507
                            visible:            controller.orientationCalTailDownSideVisible
                            calValid:           controller.orientationCalTailDownSideDone
                            calInProgress:      controller.orientationCalTailDownSideInProgress
                            calInProgressText:  controller.orientationCalTailDownSideRotate ? qsTr("Rotate") : qsTr("Hold Still")
                            imageSource:        controller.orientationCalTailDownSideRotate ? "qrc:///qmlimages/VehicleTailDownRotate.png" : "qrc:///qmlimages/VehicleTailDown.png"
                        }
508
                        VehicleRotationCal {
Don Gagne's avatar
Don Gagne committed
509 510
                            width:              parent.indicatorWidth
                            height:             parent.indicatorHeight
511 512 513
                            visible:            controller.orientationCalLeftSideVisible
                            calValid:           controller.orientationCalLeftSideDone
                            calInProgress:      controller.orientationCalLeftSideInProgress
514
                            calInProgressText:  controller.orientationCalLeftSideRotate ? qsTr("Rotate") : qsTr("Hold Still")
515
                            imageSource:        controller.orientationCalLeftSideRotate ? "qrc:///qmlimages/VehicleLeftRotate.png" : "qrc:///qmlimages/VehicleLeft.png"
516
                        }
517
                        VehicleRotationCal {
Don Gagne's avatar
Don Gagne committed
518 519
                            width:              parent.indicatorWidth
                            height:             parent.indicatorHeight
520 521 522 523 524 525
                            visible:            controller.orientationCalRightSideVisible
                            calValid:           controller.orientationCalRightSideDone
                            calInProgress:      controller.orientationCalRightSideInProgress
                            calInProgressText:  controller.orientationCalRightSideRotate ? qsTr("Rotate") : qsTr("Hold Still")
                            imageSource:        controller.orientationCalRightSideRotate ? "qrc:///qmlimages/VehicleRightRotate.png" : "qrc:///qmlimages/VehicleRight.png"
                        }
Don Gagne's avatar
Don Gagne committed
526
                    }
527
                }
Don Gagne's avatar
Don Gagne committed
528
            }
529 530 531
        }
    } // QGCViewPanel
} // QGCView