SensorsComponent.qml 24.2 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) {
118
                setOrientationsDialogShowBoardOrientation = false
Don Gagne's avatar
Don Gagne committed
119
                showDialog(setOrientationsDialogComponent, qsTr("Set Compass Rotation(s)"), qgcView.showDialogDefaultWidth, StandardButton.Ok)
Don Gagne's avatar
Don Gagne committed
120 121
            }
        }
Don Gagne's avatar
Don Gagne committed
122 123 124

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

    }

    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
139 140
    }

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

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

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

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

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

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

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

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

199 200
    property bool setOrientationsDialogShowBoardOrientation: true

Don Gagne's avatar
Don Gagne committed
201
    Component {
Don Gagne's avatar
Don Gagne committed
202
        id: setOrientationsDialogComponent
Don Gagne's avatar
Don Gagne committed
203 204

        QGCViewDialog {
Don Gagne's avatar
Don Gagne committed
205
            id: setOrientationsDialog
Don Gagne's avatar
Don Gagne committed
206

Don Gagne's avatar
Don Gagne committed
207 208 209 210
            QGCFlickable {
                anchors.fill:   parent
                contentHeight:  columnLayout.height
                clip:           true
Don Gagne's avatar
Don Gagne committed
211

Don Gagne's avatar
Don Gagne committed
212 213 214 215 216 217 218
                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
219

Lorenz Meier's avatar
Lorenz Meier committed
220
                    QGCLabel {
Don Gagne's avatar
Don Gagne committed
221 222 223
                        width:      parent.width
                        wrapMode:   Text.WordWrap
                        text:       boardRotationText
224
                    }
Lorenz Meier's avatar
Lorenz Meier committed
225

Don Gagne's avatar
Don Gagne committed
226
                    Column {
227 228
                        visible: setOrientationsDialogShowBoardOrientation

Don Gagne's avatar
Don Gagne committed
229 230 231 232 233 234 235 236 237 238
                        QGCLabel {
                            text: qsTr("Autopilot Orientation:")
                        }

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

Don Gagne's avatar
Don Gagne committed
241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263
                    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
264 265
                    }

Don Gagne's avatar
Don Gagne committed
266 267 268 269
                    Column {
                        // Compass 1 rotation
                        Component {
                            id: compass1ComponentLabel2
Don Gagne's avatar
Don Gagne committed
270

Don Gagne's avatar
Don Gagne committed
271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288
                            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
289
                    }
Don Gagne's avatar
Don Gagne committed
290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317

                    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
318
        } // QGCViewDialog
Don Gagne's avatar
Don Gagne committed
319
    } // Component - setOrientationsDialogComponent
Don Gagne's avatar
Don Gagne committed
320

321 322 323
    QGCViewPanel {
        id:             panel
        anchors.fill:   parent
Don Gagne's avatar
Don Gagne committed
324

325
        Column {
Don Gagne's avatar
Don Gagne committed
326 327
            id:         buttonColumn
            spacing:    ScreenTools.defaultFontPixelHeight / 2
Don Gagne's avatar
Don Gagne committed
328

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

Don Gagne's avatar
Don Gagne committed
331 332 333 334 335
            IndicatorButton {
                id:             compassButton
                width:          parent.buttonWidth
                text:           qsTr("Compass")
                indicatorGreen: cal_mag0_id.value != 0
336

Don Gagne's avatar
Don Gagne committed
337 338 339 340
                onClicked: {
                    preCalibrationDialogType = "compass"
                    preCalibrationDialogHelp = compassHelp
                    showDialog(preCalibrationDialogComponent, qsTr("Calibrate Compass"), qgcView.showDialogDefaultWidth, StandardButton.Cancel | StandardButton.Ok)
341
                }
Don Gagne's avatar
Don Gagne committed
342
            }
Don Gagne's avatar
Don Gagne committed
343

Don Gagne's avatar
Don Gagne committed
344 345 346 347 348
            IndicatorButton {
                id:             gyroButton
                width:          parent.buttonWidth
                text:           qsTr("Gyroscope")
                indicatorGreen: cal_gyro0_id.value != 0
Don Gagne's avatar
Don Gagne committed
349

Don Gagne's avatar
Don Gagne committed
350 351 352 353
                onClicked: {
                    preCalibrationDialogType = "gyro"
                    preCalibrationDialogHelp = gyroHelp
                    showDialog(preCalibrationDialogComponent, qsTr("Calibrate Gyro"), qgcView.showDialogDefaultWidth, StandardButton.Cancel | StandardButton.Ok)
354
                }
Don Gagne's avatar
Don Gagne committed
355
            }
Don Gagne's avatar
Don Gagne committed
356

Don Gagne's avatar
Don Gagne committed
357 358 359 360 361
            IndicatorButton {
                id:             accelButton
                width:          parent.buttonWidth
                text:           qsTr("Accelerometer")
                indicatorGreen: cal_acc0_id.value != 0
362

Don Gagne's avatar
Don Gagne committed
363 364 365 366
                onClicked: {
                    preCalibrationDialogType = "accel"
                    preCalibrationDialogHelp = accelHelp
                    showDialog(preCalibrationDialogComponent, qsTr("Calibrate Accelerometer"), qgcView.showDialogDefaultWidth, StandardButton.Cancel | StandardButton.Ok)
367
                }
Don Gagne's avatar
Don Gagne committed
368
            }
Don Gagne's avatar
Don Gagne committed
369

Don Gagne's avatar
Don Gagne committed
370 371 372 373 374 375 376 377 378 379 380
            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)
381
                }
Don Gagne's avatar
Don Gagne committed
382
            }
383

Don Gagne's avatar
Don Gagne committed
384 385 386 387 388 389 390 391 392 393 394
            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)
395
                }
Don Gagne's avatar
Don Gagne committed
396
            }
Don Gagne's avatar
Don Gagne committed
397

Don Gagne's avatar
Don Gagne committed
398 399 400 401 402 403
            QGCButton {
                id:         cancelButton
                width:      parent.buttonWidth
                text:       qsTr("Cancel")
                enabled:    false
                onClicked:  controller.cancelCalibration()
404
            }
Don Gagne's avatar
Don Gagne committed
405

Don Gagne's avatar
Don Gagne committed
406
            QGCButton {
Don Gagne's avatar
Don Gagne committed
407
                id:         setOrientationsButton
Don Gagne's avatar
Don Gagne committed
408 409
                width:      parent.buttonWidth
                text:       qsTr("Set Orientations")
410 411 412 413
                onClicked:  {
                    setOrientationsDialogShowBoardOrientation = true
                    showDialog(setOrientationsDialogComponent, qsTr("Set Orientations"), qgcView.showDialogDefaultWidth, StandardButton.Ok)
                }
Don Gagne's avatar
Don Gagne committed
414 415 416 417 418 419 420 421 422
            }
        } // 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
423

424
            ProgressBar {
Don Gagne's avatar
Don Gagne committed
425 426 427
                id:             progressBar
                anchors.left:   parent.left
                anchors.right:  parent.right
428
            }
Don Gagne's avatar
Don Gagne committed
429

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

432
            Item {
Don Gagne's avatar
Don Gagne committed
433
                property int calDisplayAreaWidth: parent.width
Don Gagne's avatar
Don Gagne committed
434

435 436
                width:  parent.width
                height: parent.height - y
Don Gagne's avatar
Don Gagne committed
437

438 439 440 441 442 443 444
                TextArea {
                    id:             statusTextArea
                    width:          parent.calDisplayAreaWidth
                    height:         parent.height
                    readOnly:       true
                    frameVisible:   false
                    text:           statusTextAreaDefaultText
Don Gagne's avatar
Don Gagne committed
445

446 447 448 449 450 451 452 453 454 455 456 457 458 459
                    style: TextAreaStyle {
                        textColor: qgcPal.text
                        backgroundColor: qgcPal.windowShade
                    }
                }

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

                    QGCLabel {
460 461 462 463 464 465
                        id:                 orientationCalAreaHelpText
                        anchors.margins:    ScreenTools.defaultFontPixelWidth
                        anchors.top:        orientationCalArea.top
                        anchors.left:       orientationCalArea.left
                        width:              parent.width
                        wrapMode:           Text.WordWrap
466
                        font.pointSize:     ScreenTools.mediumFontPointSize
467 468 469
                    }

                    Flow {
470 471
                        anchors.topMargin:  ScreenTools.defaultFontPixelWidth
                        anchors.top:        orientationCalAreaHelpText.bottom
Don Gagne's avatar
Don Gagne committed
472 473 474 475 476 477 478
                        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
479 480

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