SensorsComponent.qml 23.8 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 111
        id:                         controller
        factPanel:                  panel
        statusLog:                  statusTextArea
        progressBar:                progressBar
        compassButton:              compassButton
        gyroButton:                 gyroButton
        accelButton:                accelButton
        airspeedButton:             airspeedButton
        levelButton:                levelButton
        cancelButton:               cancelButton
        orientationCalAreaHelpText: orientationCalAreaHelpText
Don Gagne's avatar
Don Gagne committed
112 113 114

        onResetStatusTextArea: statusLog.text = statusTextAreaDefaultText

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

        onWaitingForCancelChanged: {
            if (controller.waitingForCancel) {
123
                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
124 125 126 127
            } else {
                hideDialog()
            }
        }
128 129 130 131 132 133 134 135 136

    }

    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
137 138
    }

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

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

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

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

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

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

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

Don Gagne's avatar
Don Gagne committed
180 181 182 183 184 185 186 187 188 189 190 191
                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
192 193 194 195 196
                }
            }
        }
    }

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

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

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

Don Gagne's avatar
Don Gagne committed
208 209 210 211 212 213 214
                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
215

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

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

                        FactComboBox {
                            id:     boardRotationCombo
                            width:  rotationColumnWidth;
                            model:  rotations
                            fact:   sens_board_rot
                        }
233
                    }
Don Gagne's avatar
Don Gagne committed
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 254 255 256 257
                    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
258 259
                    }

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

Don Gagne's avatar
Don Gagne committed
265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282
                            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
283
                    }
Don Gagne's avatar
Don Gagne committed
284 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

                    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
312
        } // QGCViewDialog
Don Gagne's avatar
Don Gagne committed
313
    } // Component - setOrientationsDialogComponent
Don Gagne's avatar
Don Gagne committed
314

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

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

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

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

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

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

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

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

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

Don Gagne's avatar
Don Gagne committed
364 365 366 367 368 369 370 371 372 373 374
            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)
375
                }
Don Gagne's avatar
Don Gagne committed
376
            }
377

Don Gagne's avatar
Don Gagne committed
378 379 380 381 382 383 384 385 386 387 388
            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)
389
                }
Don Gagne's avatar
Don Gagne committed
390
            }
Don Gagne's avatar
Don Gagne committed
391

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

Don Gagne's avatar
Don Gagne committed
400 401 402 403 404 405 406 407 408 409 410 411 412
            QGCButton {
                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
413

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

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

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

425 426
                width:  parent.width
                height: parent.height - y
Don Gagne's avatar
Don Gagne committed
427

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

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

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

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

                    Flow {
460 461
                        anchors.topMargin:  ScreenTools.defaultFontPixelWidth
                        anchors.top:        orientationCalAreaHelpText.bottom
Don Gagne's avatar
Don Gagne committed
462 463 464 465 466 467 468
                        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
469 470

                        VehicleRotationCal {
Don Gagne's avatar
Don Gagne committed
471 472
                            width:              parent.indicatorWidth
                            height:             parent.indicatorHeight
473 474 475
                            visible:            controller.orientationCalDownSideVisible
                            calValid:           controller.orientationCalDownSideDone
                            calInProgress:      controller.orientationCalDownSideInProgress
476
                            calInProgressText:  controller.orientationCalDownSideRotate ? qsTr("Rotate") : qsTr("Hold Still")
477
                            imageSource:        controller.orientationCalDownSideRotate ? "qrc:///qmlimages/VehicleDownRotate.png" : "qrc:///qmlimages/VehicleDown.png"
478
                        }
479
                        VehicleRotationCal {
Don Gagne's avatar
Don Gagne committed
480 481
                            width:              parent.indicatorWidth
                            height:             parent.indicatorHeight
482 483 484 485 486 487
                            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"
                        }
488
                        VehicleRotationCal {
Don Gagne's avatar
Don Gagne committed
489 490
                            width:              parent.indicatorWidth
                            height:             parent.indicatorHeight
491 492 493
                            visible:            controller.orientationCalNoseDownSideVisible
                            calValid:           controller.orientationCalNoseDownSideDone
                            calInProgress:      controller.orientationCalNoseDownSideInProgress
494
                            calInProgressText:  controller.orientationCalNoseDownSideRotate ? qsTr("Rotate") : qsTr("Hold Still")
495
                            imageSource:        controller.orientationCalNoseDownSideRotate ? "qrc:///qmlimages/VehicleNoseDownRotate.png" : "qrc:///qmlimages/VehicleNoseDown.png"
496
                        }
497
                        VehicleRotationCal {
Don Gagne's avatar
Don Gagne committed
498 499
                            width:              parent.indicatorWidth
                            height:             parent.indicatorHeight
500 501 502 503 504 505
                            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"
                        }
506
                        VehicleRotationCal {
Don Gagne's avatar
Don Gagne committed
507 508
                            width:              parent.indicatorWidth
                            height:             parent.indicatorHeight
509 510 511
                            visible:            controller.orientationCalLeftSideVisible
                            calValid:           controller.orientationCalLeftSideDone
                            calInProgress:      controller.orientationCalLeftSideInProgress
512
                            calInProgressText:  controller.orientationCalLeftSideRotate ? qsTr("Rotate") : qsTr("Hold Still")
513
                            imageSource:        controller.orientationCalLeftSideRotate ? "qrc:///qmlimages/VehicleLeftRotate.png" : "qrc:///qmlimages/VehicleLeft.png"
514
                        }
515
                        VehicleRotationCal {
Don Gagne's avatar
Don Gagne committed
516 517
                            width:              parent.indicatorWidth
                            height:             parent.indicatorHeight
518 519 520 521 522 523
                            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
524
                    }
525
                }
Don Gagne's avatar
Don Gagne committed
526
            }
527 528 529
        }
    } // QGCViewPanel
} // QGCView