SensorsComponent.qml 26.3 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/*=====================================================================

 QGroundControl Open Source Ground Control Station

 (c) 2009 - 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>

 This file is part of the QGROUNDCONTROL project

 QGROUNDCONTROL is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 QGROUNDCONTROL is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.

 ======================================================================*/

Don Gagne's avatar
Don Gagne committed
24 25 26
import QtQuick 2.2
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
Don Gagne's avatar
Don Gagne committed
27
import QtQuick.Dialogs 1.2
Don Gagne's avatar
Don Gagne committed
28 29 30 31 32

import QGroundControl.FactSystem 1.0
import QGroundControl.FactControls 1.0
import QGroundControl.Palette 1.0
import QGroundControl.Controls 1.0
33
import QGroundControl.ScreenTools 1.0
Don Gagne's avatar
Don Gagne committed
34
import QGroundControl.Controllers 1.0
Don Gagne's avatar
Don Gagne committed
35

Don Gagne's avatar
Don Gagne committed
36 37 38
QGCView {
    id:             rootQGCView
    viewComponent:  view
Don Gagne's avatar
Don Gagne committed
39

Don Gagne's avatar
Don Gagne committed
40 41 42 43 44 45 46 47 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 75 76 77 78 79 80 81 82 83 84 85 86 87
    // Help text which is shown both in the status text area prior to pressing a cal button and in the
    // pre-calibration dialog.

    readonly property string compassHelp:   "For Compass calibration you will need to rotate your vehicle through a number of positions. For this calibration is is best " +
                                                "to be connected to your vehicle via radio instead of USB since the USB cable will likely get in the way."
    readonly property string gyroHelp:      "For Gyroscope calibration you will need to place your vehicle right side up on solid surface and leave it still."
    readonly property string accelHelp:     "For Accelerometer calibration you will need to place your vehicle on all six sides and hold it still there for a few seconds."
    readonly property string airspeedHelp:  "For Airspeed calibration you will need to keep your airspeed sensor out of any wind and then blow across the sensor."

    property var controller

    // 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

    readonly property int rotationColumnWidth: 200
    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",
        "ROTATION_ROLL_270_YAW_270"
    ]

Don Gagne's avatar
Don Gagne committed
88 89
    Component {
        id: preCalibrationDialogComponent
Don Gagne's avatar
Don Gagne committed
90

Don Gagne's avatar
Don Gagne committed
91 92
        QGCViewDialog {
            id: preCalibrationDialog
Don Gagne's avatar
Don Gagne committed
93

Don Gagne's avatar
Don Gagne committed
94
            function accept() {
Don Gagne's avatar
Don Gagne committed
95 96 97 98 99 100 101 102 103 104
                if (preCalibrationDialogType == "gyro") {
                    controller.calibrateGyro()
                } else if (preCalibrationDialogType == "accel") {
                    controller.calibrateAccel()
                } else if (preCalibrationDialogType == "compass") {
                    controller.calibrateCompass()
                } else if (preCalibrationDialogType == "airspeed") {
                    controller.calibrateAirspeed()
                }
                preCalibrationDialog.hideDialog()
Don Gagne's avatar
Don Gagne committed
105
            }
Don Gagne's avatar
Don Gagne committed
106

Don Gagne's avatar
Don Gagne committed
107 108 109
            Column {
                anchors.fill: parent
                spacing:                10
Don Gagne's avatar
Don Gagne committed
110

Don Gagne's avatar
Don Gagne committed
111 112 113 114 115
                QGCLabel {
                    width:      parent.width
                    wrapMode:   Text.WordWrap
                    text:       preCalibrationDialogHelp
                }
Don Gagne's avatar
Don Gagne committed
116

Don Gagne's avatar
Don Gagne committed
117 118 119 120 121 122
                QGCLabel {
                    width:      parent.width
                    wrapMode:   Text.WordWrap
                    visible:    preCalibrationDialogType != "airspeed"
                    text:       "Please check and/or update board rotation before calibrating"
                }
Don Gagne's avatar
Don Gagne committed
123

Don Gagne's avatar
Don Gagne committed
124 125 126 127 128
                FactComboBox {
                    width:      rotationColumnWidth
                    model:      rotations
                    visible:    preCalibrationDialogType != "airspeed"
                    fact:       Fact { name: "SENS_BOARD_ROT"; onFactMissing: showMissingFactOverlay(name) }
Don Gagne's avatar
Don Gagne committed
129 130 131 132 133
                }
            }
        }
    }

Don Gagne's avatar
Don Gagne committed
134 135 136 137
    Component {
        id: view

        QGCViewPanel {
Don Gagne's avatar
Don Gagne committed
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
            id:             viewPanel

            Connections {
                target: rootQGCView

                onCompleted: {
                    rootQGCView.controller = viewPanel.controller
                }
            }

            SensorsComponentController {
                id:                         controller
                factPanel:                  viewPanel
                statusLog:                  statusTextArea
                progressBar:                progressBar
                compassButton:              compassButton
                gyroButton:                 gyroButton
                accelButton:                accelButton
                airspeedButton:             airspeedButton
                cancelButton:               cancelButton
                orientationCalAreaHelpText: orientationCalAreaHelpText

                onResetStatusTextArea: statusTextArea.text = statusTextAreaDefaultText

                onSetCompassRotations: showCompassRotationOverlay()

                onWaitingForCancelChanged: {
                    if (controller.waitingForCancel) {
                        showMessage(
                    } else {
                        hideDialog()
                    }
                }
            }
Don Gagne's avatar
Don Gagne committed
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203

            QGCPalette { id: qgcPal; colorGroupEnabled: enabled }


            readonly property string statusTextAreaDefaultText: "For Compass calibration you will need to rotate your vehicle through a number of positions. For this calibration is is best " +
                                                                    "to be connected to your vehicle via radio instead of USB since the USB cable will likely get in the way.\n\n" +
                                                                    "For Gyroscope calibration you will need to place your vehicle right side up on solid surface and leave it still.\n\n" +
                                                                    "For Accelerometer calibration you will need to place your vehicle on all six sides and hold it still there for a few seconds.\n\n" +
                                                                    "For Airspeed calibration you will need to keep your airspeed sensor out of any wind and then blow across the sensor.\n\n"

            Fact { id: cal_mag0_id; name: "CAL_MAG0_ID" }
            Fact { id: cal_mag1_id; name: "CAL_MAG1_ID" }
            Fact { id: cal_mag2_id; name: "CAL_MAG2_ID" }
            Fact { id: cal_mag0_rot; name: "CAL_MAG0_ROT" }
            Fact { id: cal_mag1_rot; name: "CAL_MAG1_ROT" }
            Fact { id: cal_mag2_rot; name: "CAL_MAG2_ROT" }

            // 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

            color: qgcPal.window

            Rectangle {
                id:             overlay
                anchors.fill:   parent
                color:          qgcPal.window
                opacity:        0.75
                z:              100
                visible:        false
            }
Don Gagne's avatar
Don Gagne committed
204

Don Gagne's avatar
Don Gagne committed
205 206 207 208 209 210 211 212 213 214 215 216 217
            Rectangle {
                width:                      300
                height:                     100
                anchors.verticalCenter:     parent.verticalCenter
                anchors.horizontalCenter:   parent.horizontalCenter
                color:                      qgcPal.window
                border.width:               1
                border.color:               qgcPal.text
                visible:                    controller.waitingForCancel
                z:                          overlay.z + 1

                onVisibleChanged: {
                    overlay.visible = visible
Don Gagne's avatar
Don Gagne committed
218 219
                }

Don Gagne's avatar
Don Gagne committed
220 221 222 223 224
                QGCLabel {
                    anchors.fill:           parent
                    verticalAlignment:      Text.AlignVCenter
                    horizontalAlignment:    Text.AlignHCenter
                    text:                   "Waiting for Cancel (may take a few seconds)"
Don Gagne's avatar
Don Gagne committed
225 226 227 228
                }
            }


Don Gagne's avatar
Don Gagne committed
229 230 231 232
            function showBoardRotationOverlay(calibrationType) {
                boardRotationOverlay.calibrationType = calibrationType
                boardRotationOverlay.visible = true
                overlay.visible = true
Don Gagne's avatar
Don Gagne committed
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 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 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 312 313 314 315 316 317 318 319 320 321 322 323
            Rectangle {
                id:                         compassRotationOverlay
                width:                      300
                height:                     compassRotationOverlayColumn.height + 11
                anchors.verticalCenter:     parent.verticalCenter
                anchors.horizontalCenter:   parent.horizontalCenter
                color:                      qgcPal.window
                border.width:               1
                border.color:               qgcPal.text
                visible:                    false
                z:                          overlay.z + 1

                Column {
                    id:                 compassRotationOverlayColumn
                    anchors.topMargin:  10
                    anchors.top:        parent.top
                    width:              parent.width
                    spacing:            10

                    Column {
                        anchors.leftMargin:     10
                        anchors.rightMargin:    10
                        anchors.left:           parent.left
                        anchors.right:          parent.right
                        spacing:                10

                        QGCLabel {
                            width:      parent.width
                            wrapMode:   Text.WordWrap
                            text:       "Please check and/or update compass rotation(s)"
                        }

                        // Compass 0 rotation
                        Component {
                            id: compass0ComponentLabel

                            QGCLabel { text: "Compass Orientation" }
                        }
                        Component {
                            id: compass0ComponentCombo

                            FactComboBox {
                                id:     compass0RotationCombo
                                width:  rotationColumnWidth
                                model:  rotations
                                fact:   Fact { name: "CAL_MAG0_ROT" }
                            }
                        }
                        Loader { sourceComponent: showCompass0Rot ? compass0ComponentLabel : null }
                        Loader { sourceComponent: showCompass0Rot ? compass0ComponentCombo : null }

                        // Compass 1 rotation
                        Component {
                            id: compass1ComponentLabel

                            QGCLabel { text: "Compass 1 Orientation" }
                        }
                        Component {
                            id: compass1ComponentCombo

                            FactComboBox {
                                id:     compass1RotationCombo
                                width:  rotationColumnWidth
                                model:  rotations
                                fact:   Fact { name: "CAL_MAG1_ROT" }
                            }
                        }
                        Loader { sourceComponent: showCompass1Rot ? compass1ComponentLabel : null }
                        Loader { sourceComponent: showCompass1Rot ? compass1ComponentCombo : null }

                        // Compass 2 rotation
                        Component {
                            id: compass2ComponentLabel

                            QGCLabel { text: "Compass 2 Orientation" }
                        }
                        Component {
                            id: compass2ComponentCombo

                            FactComboBox {
                                id:     compass1RotationCombo
                                width:  rotationColumnWidth
                                model:  rotations
                                fact:   Fact { name: "CAL_MAG2_ROT" }
                            }
                        }
                        Loader { sourceComponent: showCompass2Rot ? compass2ComponentLabel : null }
                        Loader { sourceComponent: showCompass2Rot ? compass2ComponentCombo : null }
                    }
324

Don Gagne's avatar
Don Gagne committed
325 326 327 328 329
                    QGCButton {
                        x:          1
                        width:      parent.width - 2
                        primary:    true
                        text:       "OK"
Don Gagne's avatar
Don Gagne committed
330

Don Gagne's avatar
Don Gagne committed
331 332 333 334 335 336
                        onClicked: {
                            compassRotationOverlay.visible = false
                            overlay.visible = false
                       }
                    }
                }
337 338
            }

Don Gagne's avatar
Don Gagne committed
339 340 341 342 343
            function showCompassRotationOverlay() {
                if (showCompass0Rot || showCompass1Rot || showCompass2Rot) {
                    compassRotationOverlay.visible = true
                    overlay.visible = true
                }
344 345
            }

Don Gagne's avatar
Don Gagne committed
346 347
            Column {
                anchors.fill: parent
Don Gagne's avatar
Don Gagne committed
348

Don Gagne's avatar
Don Gagne committed
349 350 351 352
                QGCLabel {
                    text: "SENSORS CONFIG"
                    font.pointSize: ScreenTools.fontPointFactor * (20);
                }
353

Don Gagne's avatar
Don Gagne committed
354
                Item { height: 20; width: 10 } // spacer
355

Don Gagne's avatar
Don Gagne committed
356 357
                Row {
                    readonly property int buttonWidth: 120
Don Gagne's avatar
Don Gagne committed
358

Don Gagne's avatar
Don Gagne committed
359
                    spacing: 20
360

Don Gagne's avatar
Don Gagne committed
361
                    QGCLabel { text: "Calibrate:"; anchors.baseline: compassButton.baseline }
362

Don Gagne's avatar
Don Gagne committed
363 364
                    IndicatorButton {
                        property Fact fact: Fact { name: "CAL_MAG0_ID" }
365

Don Gagne's avatar
Don Gagne committed
366 367 368 369
                        id:             compassButton
                        width:          parent.buttonWidth
                        text:           "Compass"
                        indicatorGreen: fact.value != 0
370

Don Gagne's avatar
Don Gagne committed
371 372 373 374 375
                        onClicked: {
                            preCalibrationDialogType = "compass"
                            preCalibrationDialogHelp = compassHelp
                            showDialog(preCalibrationDialogComponent, "Calibrate Compass", 50, StandardButton.Cancel | StandardButton.Ok)
                        }
Don Gagne's avatar
Don Gagne committed
376
                    }
Don Gagne's avatar
Don Gagne committed
377

Don Gagne's avatar
Don Gagne committed
378 379
                    IndicatorButton {
                        property Fact fact: Fact { name: "CAL_GYRO0_ID" }
Don Gagne's avatar
Don Gagne committed
380

Don Gagne's avatar
Don Gagne committed
381 382 383 384
                        id:             gyroButton
                        width:          parent.buttonWidth
                        text:           "Gyroscope"
                        indicatorGreen: fact.value != 0
Don Gagne's avatar
Don Gagne committed
385

Don Gagne's avatar
Don Gagne committed
386 387 388 389 390
                        onClicked: {
                            preCalibrationDialogType = "gyro"
                            preCalibrationDialogHelp = gyroHelp
                            showDialog(preCalibrationDialogComponent, "Calibrate Gyro", 50, StandardButton.Cancel | StandardButton.Ok)
                        }
Don Gagne's avatar
Don Gagne committed
391
                    }
Don Gagne's avatar
Don Gagne committed
392

Don Gagne's avatar
Don Gagne committed
393 394
                    IndicatorButton {
                        property Fact fact: Fact { name: "CAL_ACC0_ID" }
395

Don Gagne's avatar
Don Gagne committed
396 397 398 399
                        id:             accelButton
                        width:          parent.buttonWidth
                        text:           "Accelerometer"
                        indicatorGreen: fact.value != 0
400

Don Gagne's avatar
Don Gagne committed
401 402 403 404 405
                        onClicked: {
                            preCalibrationDialogType = "accel"
                            preCalibrationDialogHelp = accelHelp
                            showDialog(preCalibrationDialogComponent, "Calibrate Accelerometer", 50, StandardButton.Cancel | StandardButton.Ok)
                        }
406
                    }
Don Gagne's avatar
Don Gagne committed
407 408 409 410 411 412 413 414 415

                    IndicatorButton {
                        property Fact fact: Fact { name: "SENS_DPRES_OFF" }

                        id:             airspeedButton
                        width:          parent.buttonWidth
                        text:           "Airspeed"
                        visible:        controller.fixedWing
                        indicatorGreen: fact.value != 0
Don Gagne's avatar
Don Gagne committed
416 417 418 419 420 421

                        onClicked: {
                            preCalibrationDialogType = "airspeed"
                            preCalibrationDialogHelp = airspeedHelp
                            showDialog(preCalibrationDialogComponent, "Calibrate Airspeed", 50, StandardButton.Cancel | StandardButton.Ok)
                        }
422
                    }
Don Gagne's avatar
Don Gagne committed
423 424 425 426 427 428

                    QGCButton {
                        id:         cancelButton
                        text:       "Cancel"
                        enabled:    false
                        onClicked:  controller.cancelCalibration()
429 430
                    }
                }
Don Gagne's avatar
Don Gagne committed
431

Don Gagne's avatar
Don Gagne committed
432
                Item { height: 20; width: 10 } // spacer
Don Gagne's avatar
Don Gagne committed
433

Don Gagne's avatar
Don Gagne committed
434 435 436
                ProgressBar {
                    id: progressBar
                    width: parent.width - rotationColumnWidth
Don Gagne's avatar
Don Gagne committed
437 438
                }

Don Gagne's avatar
Don Gagne committed
439
                Item { height: 10; width: 10 } // spacer
Don Gagne's avatar
Don Gagne committed
440

Don Gagne's avatar
Don Gagne committed
441 442 443
                Item {
                    readonly property int calibrationAreaHeight: 300
                    property int calDisplayAreaWidth: parent.width - rotationColumnWidth
Don Gagne's avatar
Don Gagne committed
444

Don Gagne's avatar
Don Gagne committed
445 446
                    width:  parent.width
                    height: parent.height - y
Don Gagne's avatar
Don Gagne committed
447

Don Gagne's avatar
Don Gagne committed
448 449 450 451 452 453 454 455 456 457 458 459
                    TextArea {
                        id:             statusTextArea
                        width:          parent.calDisplayAreaWidth
                        height:         parent.height
                        readOnly:       true
                        frameVisible:   false
                        text:           statusTextAreaDefaultText

                        style: TextAreaStyle {
                            textColor: qgcPal.text
                            backgroundColor: qgcPal.windowShade
                        }
Don Gagne's avatar
Don Gagne committed
460 461
                    }

Don Gagne's avatar
Don Gagne committed
462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525
                    Rectangle {
                        id:         orientationCalArea
                        width:      parent.calDisplayAreaWidth
                        height:     parent.height
                        visible:    controller.showOrientationCalArea
                        color:      qgcPal.windowShade

                        QGCLabel {
                            id:             orientationCalAreaHelpText
                            width:          parent.width
                            wrapMode:       Text.WordWrap
                            font.pointSize: ScreenTools.fontPointFactor * (17);
                        }

                        Flow {
                            y:          orientationCalAreaHelpText.height
                            width:      parent.width
                            height:     parent.height - orientationCalAreaHelpText.implicitHeight
                            spacing:    5

                            VehicleRotationCal {
                                visible:            controller.orientationCalDownSideVisible
                                calValid:           controller.orientationCalDownSideDone
                                calInProgress:      controller.orientationCalDownSideInProgress
                                calInProgressText:  controller.orientationCalDownSideRotate ? "Rotate" : "Hold Still"
                                imageSource:        controller.orientationCalDownSideRotate ? "qrc:///qml/VehicleDownRotate.png" : "qrc:///qml/VehicleDown.png"
                            }
                            VehicleRotationCal {
                                visible:            controller.orientationCalUpsideDownSideVisible
                                calValid:           controller.orientationCalUpsideDownSideDone
                                calInProgress:      controller.orientationCalUpsideDownSideInProgress
                                calInProgressText:  "Hold Still"
                                imageSource:        "qrc:///qml/VehicleUpsideDown.png"
                            }
                            VehicleRotationCal {
                                visible:            controller.orientationCalNoseDownSideVisible
                                calValid:           controller.orientationCalNoseDownSideDone
                                calInProgress:      controller.orientationCalNoseDownSideInProgress
                                calInProgressText:  controller.orientationCalNoseDownSideRotate ? "Rotate" : "Hold Still"
                                imageSource:        controller.orientationCalNoseDownSideRotate ? "qrc:///qml/VehicleNoseDownRotate.png" : "qrc:///qml/VehicleNoseDown.png"
                            }
                            VehicleRotationCal {
                                visible:            controller.orientationCalTailDownSideVisible
                                calValid:           controller.orientationCalTailDownSideDone
                                calInProgress:      controller.orientationCalTailDownSideInProgress
                                calInProgressText:  "Hold Still"
                                imageSource:        "qrc:///qml/VehicleTailDown.png"
                            }
                            VehicleRotationCal {
                                visible:            controller.orientationCalLeftSideVisible
                                calValid:           controller.orientationCalLeftSideDone
                                calInProgress:      controller.orientationCalLeftSideInProgress
                                calInProgressText:  controller.orientationCalLeftSideRotate ? "Rotate" : "Hold Still"
                                imageSource:        controller.orientationCalLeftSideRotate ? "qrc:///qml/VehicleLeftRotate.png" : "qrc:///qml/VehicleLeft.png"
                            }
                            VehicleRotationCal {
                                visible:            controller.orientationCalRightSideVisible
                                calValid:           controller.orientationCalRightSideDone
                                calInProgress:      controller.orientationCalRightSideInProgress
                                calInProgressText:  "Hold Still"
                                imageSource:        "qrc:///qml/VehicleRight.png"
                            }
                        }
                    }
Don Gagne's avatar
Don Gagne committed
526

Don Gagne's avatar
Don Gagne committed
527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594
                    Column {
                        x: parent.width - rotationColumnWidth

                        QGCLabel { text: "Autpilot Orientation" }

                        FactComboBox {
                            id:     boardRotationCombo
                            width:  rotationColumnWidth;
                            model:  rotations
                            fact:   Fact { name: "SENS_BOARD_ROT" }
                        }

                        // Compass 0 rotation
                        Component {
                            id: compass0ComponentLabel2

                            QGCLabel { text: "Compass Orientation" }
                        }
                        Component {
                            id: compass0ComponentCombo2

                            FactComboBox {
                                id:     compass0RotationCombo
                                width:  rotationColumnWidth
                                model:  rotations
                                fact:   Fact { name: "CAL_MAG0_ROT" }
                            }
                        }
                        Loader { sourceComponent: showCompass0Rot ? compass0ComponentLabel2 : null }
                        Loader { sourceComponent: showCompass0Rot ? compass0ComponentCombo2 : null }

                        // Compass 1 rotation
                        Component {
                            id: compass1ComponentLabel2

                            QGCLabel { text: "Compass 1 Orientation" }
                        }
                        Component {
                            id: compass1ComponentCombo2

                            FactComboBox {
                                id:     compass1RotationCombo
                                width:  rotationColumnWidth
                                model:  rotations
                                fact:   Fact { name: "CAL_MAG1_ROT" }
                            }
                        }
                        Loader { sourceComponent: showCompass1Rot ? compass1ComponentLabel2 : null }
                        Loader { sourceComponent: showCompass1Rot ? compass1ComponentCombo2 : null }

                        // Compass 2 rotation
                        Component {
                            id: compass2ComponentLabel2

                            QGCLabel { text: "Compass 2 Orientation" }
                        }
                        Component {
                            id: compass2ComponentCombo2

                            FactComboBox {
                                id:     compass1RotationCombo
                                width:  rotationColumnWidth
                                model:  rotations
                                fact:   Fact { name: "CAL_MAG2_ROT" }
                            }
                        }
                        Loader { sourceComponent: showCompass2Rot ? compass2ComponentLabel2 : null }
                        Loader { sourceComponent: showCompass2Rot ? compass2ComponentCombo2 : null }
Don Gagne's avatar
Don Gagne committed
595 596 597
                    }
                }
            }
Don Gagne's avatar
Don Gagne committed
598 599
        } // Rectangle
    } // Component - view
Don Gagne's avatar
Don Gagne committed
600
}