SensorsComponent.qml 24.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

33 34 35 36 37
    readonly property string compassHelp:   qsTr("For Compass calibration you will need to rotate your vehicle through a number of positions. Most users prefer to do this wirelessly with the telemetry link.")
    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

39
    readonly property string statusTextAreaDefaultText: qsTr("Start the individual calibration steps by clicking one of the buttons above.")
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

Lorenz Meier's avatar
Lorenz Meier committed
47
    readonly property int rotationColumnWidth: 250
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) {
117
                showDialog(compassRotationDialogComponent, 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 163
            Column {
                anchors.fill: parent
164
                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 173 174
                QGCLabel {
                    width:      parent.width
                    wrapMode:   Text.WordWrap
175 176
                    visible:    (preCalibrationDialogType != "airspeed") && (preCalibrationDialogType != "gyro")
                    text:       boardRotationText
Don Gagne's avatar
Don Gagne committed
177
                }
Don Gagne's avatar
Don Gagne committed
178

Don Gagne's avatar
Don Gagne committed
179 180 181
                FactComboBox {
                    width:      rotationColumnWidth
                    model:      rotations
182
                    visible:    preCalibrationDialogType != "airspeed" && (preCalibrationDialogType != "gyro")
Don Gagne's avatar
Don Gagne committed
183
                    fact:       sens_board_rot
Don Gagne's avatar
Don Gagne committed
184 185 186 187 188
                }
            }
        }
    }

Don Gagne's avatar
Don Gagne committed
189 190 191 192 193 194 195 196
    Component {
        id: compassRotationDialogComponent

        QGCViewDialog {
            id: compassRotationDialog

            Column {
                anchors.fill: parent
197
                spacing:      ScreenTools.defaultFontPixelHeight
Don Gagne's avatar
Don Gagne committed
198

Lorenz Meier's avatar
Lorenz Meier committed
199 200 201 202 203
                QGCLabel {
                    width:      parent.width
                    wrapMode:   Text.WordWrap
                    text:       compassRotationText
                }
Don Gagne's avatar
Don Gagne committed
204

Lorenz Meier's avatar
Lorenz Meier committed
205 206 207
                // Compass 0 rotation
                Component {
                    id: compass0ComponentLabel
Don Gagne's avatar
Don Gagne committed
208

Lorenz Meier's avatar
Lorenz Meier committed
209
                    QGCLabel {
210
                        text: qsTr("External Compass Orientation")
211
                    }
Lorenz Meier's avatar
Lorenz Meier committed
212 213 214 215 216 217 218 219 220

                }
                Component {
                    id: compass0ComponentCombo

                    FactComboBox {
                        id:     compass0RotationCombo
                        width:  rotationColumnWidth
                        model:  rotations
Don Gagne's avatar
Don Gagne committed
221
                        fact:   cal_mag0_rot
222 223
                    }
                }
Lorenz Meier's avatar
Lorenz Meier committed
224 225
                Loader { sourceComponent: showCompass0Rot ? compass0ComponentLabel : null }
                Loader { sourceComponent: showCompass0Rot ? compass0ComponentCombo : null }
Don Gagne's avatar
Don Gagne committed
226 227 228 229
                // Compass 1 rotation
                Component {
                    id: compass1ComponentLabel

230
                    QGCLabel { text: qsTr("Compass 1 Orientation") }
Don Gagne's avatar
Don Gagne committed
231 232 233 234 235 236 237 238
                }
                Component {
                    id: compass1ComponentCombo

                    FactComboBox {
                        id:     compass1RotationCombo
                        width:  rotationColumnWidth
                        model:  rotations
Don Gagne's avatar
Don Gagne committed
239
                        fact:   cal_mag1_rot
Don Gagne's avatar
Don Gagne committed
240 241 242 243 244 245 246 247 248
                    }
                }
                Loader { sourceComponent: showCompass1Rot ? compass1ComponentLabel : null }
                Loader { sourceComponent: showCompass1Rot ? compass1ComponentCombo : null }

                // Compass 2 rotation
                Component {
                    id: compass2ComponentLabel

249
                    QGCLabel { text: qsTr("Compass 2 Orientation") }
Don Gagne's avatar
Don Gagne committed
250 251 252 253 254 255 256 257
                }
                Component {
                    id: compass2ComponentCombo

                    FactComboBox {
                        id:     compass1RotationCombo
                        width:  rotationColumnWidth
                        model:  rotations
Don Gagne's avatar
Don Gagne committed
258
                        fact:   cal_mag2_rot
Don Gagne's avatar
Don Gagne committed
259 260 261 262 263 264 265 266
                    }
                }
                Loader { sourceComponent: showCompass2Rot ? compass2ComponentLabel : null }
                Loader { sourceComponent: showCompass2Rot ? compass2ComponentCombo : null }
            } // Column
        } // QGCViewDialog
    } // Component - compassRotationDialogComponent

267 268 269
    QGCViewPanel {
        id:             panel
        anchors.fill:   parent
Don Gagne's avatar
Don Gagne committed
270

271 272
        Column {
            anchors.fill: parent
Don Gagne's avatar
Don Gagne committed
273

274
            Row {
275
                readonly property int buttonWidth: ScreenTools.defaultFontPixelWidth * 15
Don Gagne's avatar
Don Gagne committed
276

277
                spacing: ScreenTools.defaultFontPixelWidth
278

279
                QGCLabel { text: qsTr("Calibrate:"); anchors.baseline: compassButton.baseline }
280

281 282 283
                IndicatorButton {
                    id:             compassButton
                    width:          parent.buttonWidth
284
                    text:           qsTr("Compass")
285
                    indicatorGreen: cal_mag0_id.value != 0
286

287 288 289
                    onClicked: {
                        preCalibrationDialogType = "compass"
                        preCalibrationDialogHelp = compassHelp
290
                        showDialog(preCalibrationDialogComponent, qsTr("Calibrate Compass"), qgcView.showDialogDefaultWidth, StandardButton.Cancel | StandardButton.Ok)
Don Gagne's avatar
Don Gagne committed
291
                    }
292
                }
Don Gagne's avatar
Don Gagne committed
293

294 295 296
                IndicatorButton {
                    id:             gyroButton
                    width:          parent.buttonWidth
297
                    text:           qsTr("Gyroscope")
298
                    indicatorGreen: cal_gyro0_id.value != 0
Don Gagne's avatar
Don Gagne committed
299

300 301 302
                    onClicked: {
                        preCalibrationDialogType = "gyro"
                        preCalibrationDialogHelp = gyroHelp
303
                        showDialog(preCalibrationDialogComponent, qsTr("Calibrate Gyro"), qgcView.showDialogDefaultWidth, StandardButton.Cancel | StandardButton.Ok)
Don Gagne's avatar
Don Gagne committed
304
                    }
305
                }
Don Gagne's avatar
Don Gagne committed
306

307 308 309
                IndicatorButton {
                    id:             accelButton
                    width:          parent.buttonWidth
310
                    text:           qsTr("Accelerometer")
311
                    indicatorGreen: cal_acc0_id.value != 0
312

313 314 315
                    onClicked: {
                        preCalibrationDialogType = "accel"
                        preCalibrationDialogHelp = accelHelp
316
                        showDialog(preCalibrationDialogComponent, qsTr("Calibrate Accelerometer"), qgcView.showDialogDefaultWidth, StandardButton.Cancel | StandardButton.Ok)
317
                    }
318
                }
Don Gagne's avatar
Don Gagne committed
319

320 321 322
                IndicatorButton {
                    id:             levelButton
                    width:          parent.buttonWidth
323
                    text:           qsTr("Level Horizon")
324 325 326 327 328 329
                    indicatorGreen: sens_board_x_off.value != 0
                    enabled:        cal_acc0_id.value != 0 && cal_gyro0_id.value != 0

                    onClicked: {
                        preCalibrationDialogType = "level"
                        preCalibrationDialogHelp = levelHelp
330
                        showDialog(preCalibrationDialogComponent, qsTr("Level Horizon"), qgcView.showDialogDefaultWidth, StandardButton.Cancel | StandardButton.Ok)
331
                    }
332
                }
333

334 335 336
                IndicatorButton {
                    id:             airspeedButton
                    width:          parent.buttonWidth
337
                    text:           qsTr("Airspeed")
Don Gagne's avatar
Don Gagne committed
338
                    visible:        (controller.vehicle.fixedWing || controller.vehicle.vtol) && controller.getParameterFact(-1, "CBRK_AIRSPD_CHK").value != 162128
339 340 341 342 343
                    indicatorGreen: sens_dpres_off.value != 0

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

348 349
                QGCButton {
                    id:         cancelButton
350
                    text:       qsTr("Cancel")
351 352
                    enabled:    false
                    onClicked:  controller.cancelCalibration()
353
                }
354
            }
Don Gagne's avatar
Don Gagne committed
355

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

358 359 360 361
            ProgressBar {
                id: progressBar
                width: parent.width - rotationColumnWidth
            }
Don Gagne's avatar
Don Gagne committed
362

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

365 366
            Item {
                property int calDisplayAreaWidth: parent.width - rotationColumnWidth
Don Gagne's avatar
Don Gagne committed
367

368 369
                width:  parent.width
                height: parent.height - y
Don Gagne's avatar
Don Gagne committed
370

371 372 373 374 375 376 377
                TextArea {
                    id:             statusTextArea
                    width:          parent.calDisplayAreaWidth
                    height:         parent.height
                    readOnly:       true
                    frameVisible:   false
                    text:           statusTextAreaDefaultText
Don Gagne's avatar
Don Gagne committed
378

379 380 381 382 383 384 385 386 387 388 389 390 391 392
                    style: TextAreaStyle {
                        textColor: qgcPal.text
                        backgroundColor: qgcPal.windowShade
                    }
                }

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

                    QGCLabel {
393 394 395 396 397 398
                        id:                 orientationCalAreaHelpText
                        anchors.margins:    ScreenTools.defaultFontPixelWidth
                        anchors.top:        orientationCalArea.top
                        anchors.left:       orientationCalArea.left
                        width:              parent.width
                        wrapMode:           Text.WordWrap
399
                        font.pointSize:     ScreenTools.mediumFontPointSize
400 401 402
                    }

                    Flow {
403 404 405 406 407 408
                        anchors.topMargin:  ScreenTools.defaultFontPixelWidth
                        anchors.top:        orientationCalAreaHelpText.bottom
                        anchors.left:       orientationCalAreaHelpText.left
                        width:              parent.width
                        height:             parent.height - orientationCalAreaHelpText.implicitHeight
                        spacing:            ScreenTools.defaultFontPixelWidth
409 410 411 412 413

                        VehicleRotationCal {
                            visible:            controller.orientationCalDownSideVisible
                            calValid:           controller.orientationCalDownSideDone
                            calInProgress:      controller.orientationCalDownSideInProgress
414
                            calInProgressText:  controller.orientationCalDownSideRotate ? qsTr("Rotate") : qsTr("Hold Still")
415
                            imageSource:        controller.orientationCalDownSideRotate ? "qrc:///qmlimages/VehicleDownRotate.png" : "qrc:///qmlimages/VehicleDown.png"
416
                        }
417 418 419 420 421 422 423
                        VehicleRotationCal {
                            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"
                        }
424 425 426 427
                        VehicleRotationCal {
                            visible:            controller.orientationCalNoseDownSideVisible
                            calValid:           controller.orientationCalNoseDownSideDone
                            calInProgress:      controller.orientationCalNoseDownSideInProgress
428
                            calInProgressText:  controller.orientationCalNoseDownSideRotate ? qsTr("Rotate") : qsTr("Hold Still")
429
                            imageSource:        controller.orientationCalNoseDownSideRotate ? "qrc:///qmlimages/VehicleNoseDownRotate.png" : "qrc:///qmlimages/VehicleNoseDown.png"
430
                        }
431 432 433 434 435 436 437
                        VehicleRotationCal {
                            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"
                        }
438 439 440 441
                        VehicleRotationCal {
                            visible:            controller.orientationCalLeftSideVisible
                            calValid:           controller.orientationCalLeftSideDone
                            calInProgress:      controller.orientationCalLeftSideInProgress
442
                            calInProgressText:  controller.orientationCalLeftSideRotate ? qsTr("Rotate") : qsTr("Hold Still")
443
                            imageSource:        controller.orientationCalLeftSideRotate ? "qrc:///qmlimages/VehicleLeftRotate.png" : "qrc:///qmlimages/VehicleLeft.png"
444
                        }
445 446 447 448 449 450 451
                        VehicleRotationCal {
                            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
452
                    }
453 454 455
                }

                Column {
456 457 458
                    anchors.leftMargin: ScreenTools.defaultFontPixelWidth
                    anchors.left:       orientationCalArea.right
                    x:                  parent.width - rotationColumnWidth
459
                    spacing:            ScreenTools.defaultFontPixelHeight
Don Gagne's avatar
Don Gagne committed
460

461 462 463 464
                    QGCLabel {
                        font.pointSize: ScreenTools.mediumFontPointSize
                        text:           qsTr("Set Orientations")
                    }
Don Gagne's avatar
Don Gagne committed
465

466 467 468 469 470
                    QGCLabel {
                        width:      parent.width
                        wrapMode:   Text.WordWrap
                        text:       boardRotationText
                    }
Don Gagne's avatar
Don Gagne committed
471

472
                    Column {
473
                        QGCLabel {
474
                            text: qsTr("Autpilot Orientation:")
475 476 477 478 479 480 481
                        }

                        FactComboBox {
                            id:     boardRotationCombo
                            width:  rotationColumnWidth;
                            model:  rotations
                            fact:   sens_board_rot
Don Gagne's avatar
Don Gagne committed
482 483
                        }
                    }
Don Gagne's avatar
Don Gagne committed
484

Don Gagne's avatar
Don Gagne committed
485
                    Column {
486 487 488
                        // Compass 0 rotation
                        Component {
                            id: compass0ComponentLabel2
Don Gagne's avatar
Don Gagne committed
489

490
                            QGCLabel {
491
                                text: qsTr("External Compass Orientation:")
492
                            }
493
                        }
494

495 496
                        Component {
                            id: compass0ComponentCombo2
Don Gagne's avatar
Don Gagne committed
497 498

                            FactComboBox {
499 500
                                id:     compass0RotationCombo
                                width:  rotationColumnWidth
Don Gagne's avatar
Don Gagne committed
501
                                model:  rotations
502
                                fact:   cal_mag0_rot
Don Gagne's avatar
Don Gagne committed
503 504
                            }
                        }
505

506 507 508
                        Loader { sourceComponent: showCompass0Rot ? compass0ComponentLabel2 : null }
                        Loader { sourceComponent: showCompass0Rot ? compass0ComponentCombo2 : null }
                    }
Don Gagne's avatar
Don Gagne committed
509

510 511 512 513
                    Column {
                        // Compass 1 rotation
                        Component {
                            id: compass1ComponentLabel2
Don Gagne's avatar
Don Gagne committed
514

515
                            QGCLabel {
516
                                text: qsTr("External Compass 1 Orientation:")
517
                            }
Don Gagne's avatar
Don Gagne committed
518
                        }
519

520 521
                        Component {
                            id: compass1ComponentCombo2
Don Gagne's avatar
Don Gagne committed
522

523 524 525 526 527
                            FactComboBox {
                                id:     compass1RotationCombo
                                width:  rotationColumnWidth
                                model:  rotations
                                fact:   cal_mag1_rot
528
                            }
Don Gagne's avatar
Don Gagne committed
529
                        }
530

531 532 533
                        Loader { sourceComponent: showCompass1Rot ? compass1ComponentLabel2 : null }
                        Loader { sourceComponent: showCompass1Rot ? compass1ComponentCombo2 : null }
                    }
Don Gagne's avatar
Don Gagne committed
534

535
                    Column {
536 537
                        spacing: ScreenTools.defaultFontPixelWidth

538 539 540
                        // Compass 2 rotation
                        Component {
                            id: compass2ComponentLabel2
541

542
                            QGCLabel {
543
                                text: qsTr("Compass 2 Orientation")
544
                            }
545
                        }
546

547 548 549 550 551 552 553 554
                        Component {
                            id: compass2ComponentCombo2

                            FactComboBox {
                                id:     compass1RotationCombo
                                width:  rotationColumnWidth
                                model:  rotations
                                fact:   cal_mag2_rot
Don Gagne's avatar
Don Gagne committed
555 556
                            }
                        }
557 558
                        Loader { sourceComponent: showCompass2Rot ? compass2ComponentLabel2 : null }
                        Loader { sourceComponent: showCompass2Rot ? compass2ComponentCombo2 : null }
Don Gagne's avatar
Don Gagne committed
559 560 561
                    }
                }
            }
562 563 564
        }
    } // QGCViewPanel
} // QGCView