SensorsComponent.qml 23.4 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
    // Help text which is shown both in the status text area prior to pressing a cal button and in the
    // pre-calibration dialog.

Don Gagne's avatar
Don Gagne committed
43 44
    readonly property string compassHelp:   "For Compass calibration you will need to rotate your vehicle through a number of positions. For this calibration it is best " +
                                                "to be connected to your vehicle via radio instead of USB, since the USB cable will likely get in the way."
Don Gagne's avatar
Don Gagne committed
45
    readonly property string gyroHelp:      "For Gyroscope calibration you will need to place your vehicle right side up on solid surface and leave it still."
46 47
    readonly property string accelHelp:     "For Accelerometer calibration you will need to place your vehicle on all six sides on a level surface and hold it still in each orientation for a few seconds."
    readonly property string levelHelp:     "To level the horizon you need to place the vehicle in its level flight position."
Don Gagne's avatar
Don Gagne committed
48 49
    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."

Don Gagne's avatar
Don Gagne committed
50 51
    readonly property string statusTextAreaDefaultText: compassHelp + "\n\n" + gyroHelp + "\n\n" + accelHelp + "\n\n" + airspeedHelp + "\n\n"

Don Gagne's avatar
Don Gagne committed
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 88
    // 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
89 90 91 92 93 94 95 96 97 98 99 100
    Fact { id: cal_mag0_id; name: "CAL_MAG0_ID"; onFactMissing: showMissingFactOverlay(name) }
    Fact { id: cal_mag1_id; name: "CAL_MAG1_ID"; onFactMissing: showMissingFactOverlay(name) }
    Fact { id: cal_mag2_id; name: "CAL_MAG2_ID"; onFactMissing: showMissingFactOverlay(name) }
    Fact { id: cal_mag0_rot; name: "CAL_MAG0_ROT"; onFactMissing: showMissingFactOverlay(name) }
    Fact { id: cal_mag1_rot; name: "CAL_MAG1_ROT"; onFactMissing: showMissingFactOverlay(name) }
    Fact { id: cal_mag2_rot; name: "CAL_MAG2_ROT"; onFactMissing: showMissingFactOverlay(name) }

    // 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
101
    SensorsComponentController {
Don Gagne's avatar
Don Gagne committed
102
        id: controller
Don Gagne's avatar
Don Gagne committed
103 104 105

        onResetStatusTextArea: statusLog.text = statusTextAreaDefaultText

Don Gagne's avatar
Don Gagne committed
106 107 108 109 110
        onSetCompassRotations: {
            if (showCompass0Rot || showCompass1Rot || showCompass2Rot) {
            showDialog(compassRotationDialogComponent, "Set Compass Rotation(s)", 50, StandardButton.Ok)
            }
        }
Don Gagne's avatar
Don Gagne committed
111 112 113 114 115 116 117 118 119 120

        onWaitingForCancelChanged: {
            if (controller.waitingForCancel) {
                showMessage("Calibration Cancel", "Waiting for Vehicle to response to Cancel. This may take a few seconds.", 0)
            } else {
                hideDialog()
            }
        }
    }

Don Gagne's avatar
Don Gagne committed
121 122
    Component {
        id: preCalibrationDialogComponent
Don Gagne's avatar
Don Gagne committed
123

Don Gagne's avatar
Don Gagne committed
124 125
        QGCViewDialog {
            id: preCalibrationDialog
Don Gagne's avatar
Don Gagne committed
126

Don Gagne's avatar
Don Gagne committed
127
            function accept() {
Don Gagne's avatar
Don Gagne committed
128 129 130 131
                if (preCalibrationDialogType == "gyro") {
                    controller.calibrateGyro()
                } else if (preCalibrationDialogType == "accel") {
                    controller.calibrateAccel()
132 133
                } else if (preCalibrationDialogType == "level") {
                    controller.calibrateLevel()
Don Gagne's avatar
Don Gagne committed
134 135 136 137 138 139
                } else if (preCalibrationDialogType == "compass") {
                    controller.calibrateCompass()
                } else if (preCalibrationDialogType == "airspeed") {
                    controller.calibrateAirspeed()
                }
                preCalibrationDialog.hideDialog()
Don Gagne's avatar
Don Gagne committed
140
            }
Don Gagne's avatar
Don Gagne committed
141

Don Gagne's avatar
Don Gagne committed
142 143 144
            Column {
                anchors.fill: parent
                spacing:                10
Don Gagne's avatar
Don Gagne committed
145

Don Gagne's avatar
Don Gagne committed
146 147 148 149 150
                QGCLabel {
                    width:      parent.width
                    wrapMode:   Text.WordWrap
                    text:       preCalibrationDialogHelp
                }
Don Gagne's avatar
Don Gagne committed
151

Don Gagne's avatar
Don Gagne committed
152 153 154 155
                QGCLabel {
                    width:      parent.width
                    wrapMode:   Text.WordWrap
                    visible:    preCalibrationDialogType != "airspeed"
Don Gagne's avatar
Don Gagne committed
156
                    text:       "Please check and/or update board rotation before calibrating."
Don Gagne's avatar
Don Gagne committed
157
                }
Don Gagne's avatar
Don Gagne committed
158

Don Gagne's avatar
Don Gagne committed
159 160 161 162 163
                FactComboBox {
                    width:      rotationColumnWidth
                    model:      rotations
                    visible:    preCalibrationDialogType != "airspeed"
                    fact:       Fact { name: "SENS_BOARD_ROT"; onFactMissing: showMissingFactOverlay(name) }
Don Gagne's avatar
Don Gagne committed
164 165 166 167 168
                }
            }
        }
    }

Don Gagne's avatar
Don Gagne committed
169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
    Component {
        id: compassRotationDialogComponent

        QGCViewDialog {
            id: compassRotationDialog

            Column {
                anchors.fill: parent
                spacing:                10

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

                // Compass 0 rotation
                Component {
                    id: compass0ComponentLabel

Don Gagne's avatar
Don Gagne committed
189
                    QGCLabel { text: "External Compass Orientation" }
Don Gagne's avatar
Don Gagne committed
190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244
                }
                Component {
                    id: compass0ComponentCombo

                    FactComboBox {
                        id:     compass0RotationCombo
                        width:  rotationColumnWidth
                        model:  rotations
                        fact:   Fact { name: "CAL_MAG0_ROT"; onFactMissing: showMissingFactOverlay(name) }
                    }
                }
                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"; onFactMissing: showMissingFactOverlay(name) }
                    }
                }
                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"; onFactMissing: showMissingFactOverlay(name) }
                    }
                }
                Loader { sourceComponent: showCompass2Rot ? compass2ComponentLabel : null }
                Loader { sourceComponent: showCompass2Rot ? compass2ComponentCombo : null }
            } // Column
        } // QGCViewDialog
    } // Component - compassRotationDialogComponent

Don Gagne's avatar
Don Gagne committed
245 246 247 248
    Component {
        id: view

        QGCViewPanel {
Don Gagne's avatar
Don Gagne committed
249 250 251 252 253 254
            id:             viewPanel

            Connections {
                target: rootQGCView

                onCompleted: {
Don Gagne's avatar
Don Gagne committed
255 256 257 258 259 260 261 262 263
                    controller.factPanel = viewPanel
                    controller.statusLog = statusTextArea
                    controller.progressBar = progressBar
                    controller.compassButton = compassButton
                    controller.gyroButton = gyroButton
                    controller.accelButton = accelButton
                    controller.airspeedButton = airspeedButton
                    controller.cancelButton = cancelButton
                    controller.orientationCalAreaHelpText = orientationCalAreaHelpText
Don Gagne's avatar
Don Gagne committed
264 265 266
                }
            }

Don Gagne's avatar
Don Gagne committed
267 268 269 270 271 272
            QGCPalette { id: qgcPal; colorGroupEnabled: enabled }



            color: qgcPal.window

273

Don Gagne's avatar
Don Gagne committed
274 275
            Column {
                anchors.fill: parent
Don Gagne's avatar
Don Gagne committed
276

Don Gagne's avatar
Don Gagne committed
277 278 279 280
                QGCLabel {
                    text: "SENSORS CONFIG"
                    font.pointSize: ScreenTools.fontPointFactor * (20);
                }
281

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

Don Gagne's avatar
Don Gagne committed
284 285
                Row {
                    readonly property int buttonWidth: 120
Don Gagne's avatar
Don Gagne committed
286

Don Gagne's avatar
Don Gagne committed
287
                    spacing: 20
288

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

Don Gagne's avatar
Don Gagne committed
291 292
                    IndicatorButton {
                        property Fact fact: Fact { name: "CAL_MAG0_ID" }
293

Don Gagne's avatar
Don Gagne committed
294 295 296 297
                        id:             compassButton
                        width:          parent.buttonWidth
                        text:           "Compass"
                        indicatorGreen: fact.value != 0
298

Don Gagne's avatar
Don Gagne committed
299 300 301 302 303
                        onClicked: {
                            preCalibrationDialogType = "compass"
                            preCalibrationDialogHelp = compassHelp
                            showDialog(preCalibrationDialogComponent, "Calibrate Compass", 50, StandardButton.Cancel | StandardButton.Ok)
                        }
Don Gagne's avatar
Don Gagne committed
304
                    }
Don Gagne's avatar
Don Gagne committed
305

Don Gagne's avatar
Don Gagne committed
306 307
                    IndicatorButton {
                        property Fact fact: Fact { name: "CAL_GYRO0_ID" }
Don Gagne's avatar
Don Gagne committed
308

Don Gagne's avatar
Don Gagne committed
309 310 311 312
                        id:             gyroButton
                        width:          parent.buttonWidth
                        text:           "Gyroscope"
                        indicatorGreen: fact.value != 0
Don Gagne's avatar
Don Gagne committed
313

Don Gagne's avatar
Don Gagne committed
314 315 316 317 318
                        onClicked: {
                            preCalibrationDialogType = "gyro"
                            preCalibrationDialogHelp = gyroHelp
                            showDialog(preCalibrationDialogComponent, "Calibrate Gyro", 50, StandardButton.Cancel | StandardButton.Ok)
                        }
Don Gagne's avatar
Don Gagne committed
319
                    }
Don Gagne's avatar
Don Gagne committed
320

Don Gagne's avatar
Don Gagne committed
321 322
                    IndicatorButton {
                        property Fact fact: Fact { name: "CAL_ACC0_ID" }
323

Don Gagne's avatar
Don Gagne committed
324 325 326 327
                        id:             accelButton
                        width:          parent.buttonWidth
                        text:           "Accelerometer"
                        indicatorGreen: fact.value != 0
328

Don Gagne's avatar
Don Gagne committed
329 330 331 332 333
                        onClicked: {
                            preCalibrationDialogType = "accel"
                            preCalibrationDialogHelp = accelHelp
                            showDialog(preCalibrationDialogComponent, "Calibrate Accelerometer", 50, StandardButton.Cancel | StandardButton.Ok)
                        }
334
                    }
Don Gagne's avatar
Don Gagne committed
335

336 337 338 339 340 341 342 343 344 345 346 347 348 349 350
                    IndicatorButton {
                        property Fact fact: Fact { name: "SENS_BOARD_X_OFF" }

                        id:             levelButton
                        width:          parent.buttonWidth
                        text:           "Level Horizon"
                        indicatorGreen: fact.value != 0

                        onClicked: {
                            preCalibrationDialogType = "level"
                            preCalibrationDialogHelp = levelHelp
                            showDialog(preCalibrationDialogComponent, "Level Horizon", 50, StandardButton.Cancel | StandardButton.Ok)
                        }
                    }

Don Gagne's avatar
Don Gagne committed
351 352 353 354 355 356 357 358
                    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
359 360 361 362 363 364

                        onClicked: {
                            preCalibrationDialogType = "airspeed"
                            preCalibrationDialogHelp = airspeedHelp
                            showDialog(preCalibrationDialogComponent, "Calibrate Airspeed", 50, StandardButton.Cancel | StandardButton.Ok)
                        }
365
                    }
Don Gagne's avatar
Don Gagne committed
366 367 368 369 370 371

                    QGCButton {
                        id:         cancelButton
                        text:       "Cancel"
                        enabled:    false
                        onClicked:  controller.cancelCalibration()
372 373
                    }
                }
Don Gagne's avatar
Don Gagne committed
374

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

Don Gagne's avatar
Don Gagne committed
377 378 379
                ProgressBar {
                    id: progressBar
                    width: parent.width - rotationColumnWidth
Don Gagne's avatar
Don Gagne committed
380 381
                }

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

Don Gagne's avatar
Don Gagne committed
384 385 386
                Item {
                    readonly property int calibrationAreaHeight: 300
                    property int calDisplayAreaWidth: parent.width - rotationColumnWidth
Don Gagne's avatar
Don Gagne committed
387

Don Gagne's avatar
Don Gagne committed
388 389
                    width:  parent.width
                    height: parent.height - y
Don Gagne's avatar
Don Gagne committed
390

Don Gagne's avatar
Don Gagne committed
391 392 393 394 395 396 397 398 399 400 401 402
                    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
403 404
                    }

Don Gagne's avatar
Don Gagne committed
405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468
                    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
469

Don Gagne's avatar
Don Gagne committed
470 471 472
                    Column {
                        x: parent.width - rotationColumnWidth

Don Gagne's avatar
Don Gagne committed
473
                        QGCLabel { text: "Autopilot Orientation" }
Don Gagne's avatar
Don Gagne committed
474 475 476 477 478 479 480 481 482 483 484 485

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

                        // Compass 0 rotation
                        Component {
                            id: compass0ComponentLabel2

Don Gagne's avatar
Don Gagne committed
486
                            QGCLabel { text: "External Compass Orientation" }
Don Gagne's avatar
Don Gagne committed
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 526 527 528 529 530 531 532 533 534 535 536 537
                        }
                        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
538 539 540
                    }
                }
            }
Don Gagne's avatar
Don Gagne committed
541 542
        } // Rectangle
    } // Component - view
Don Gagne's avatar
Don Gagne committed
543
}