GeneralSettings.qml 53.1 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.
 *
 ****************************************************************************/
dogmaphobic's avatar
dogmaphobic committed
9 10


11 12
import QtQuick                  2.3
import QtQuick.Controls         1.2
13
import QtQuick.Controls.Styles  1.4
14
import QtQuick.Dialogs          1.2
15
import QtQuick.Layouts          1.2
dogmaphobic's avatar
dogmaphobic committed
16 17 18

import QGroundControl                       1.0
import QGroundControl.FactSystem            1.0
19
import QGroundControl.FactControls          1.0
dogmaphobic's avatar
dogmaphobic committed
20 21 22 23
import QGroundControl.Controls              1.0
import QGroundControl.ScreenTools           1.0
import QGroundControl.MultiVehicleManager   1.0
import QGroundControl.Palette               1.0
24
import QGroundControl.Controllers           1.0
25
import QGroundControl.SettingsManager       1.0
dogmaphobic's avatar
dogmaphobic committed
26

27
Rectangle {
28
    id:                 _root
29
    color:              qgcPal.window
30 31
    anchors.fill:       parent
    anchors.margins:    ScreenTools.defaultFontPixelWidth
dogmaphobic's avatar
dogmaphobic committed
32

33
    property Fact _percentRemainingAnnounce:    QGroundControl.settingsManager.appSettings.batteryPercentRemainingAnnounce
34
    property Fact _savePath:                    QGroundControl.settingsManager.appSettings.savePath
35
    property Fact _appFontPointSize:            QGroundControl.settingsManager.appSettings.appFontPointSize
36 37
    property Fact _userBrandImageIndoor:        QGroundControl.settingsManager.brandImageSettings.userBrandImageIndoor
    property Fact _userBrandImageOutdoor:       QGroundControl.settingsManager.brandImageSettings.userBrandImageOutdoor
38
    property real _labelWidth:                  ScreenTools.defaultFontPixelWidth * 20
39
    property real _comboFieldWidth:             ScreenTools.defaultFontPixelWidth * 28
40
    property real _valueFieldWidth:             ScreenTools.defaultFontPixelWidth * 10
41 42
    property Fact _mapProvider:                 QGroundControl.settingsManager.flightMapSettings.mapProvider
    property Fact _mapType:                     QGroundControl.settingsManager.flightMapSettings.mapType
43
    property Fact _followTarget:                QGroundControl.settingsManager.appSettings.followTarget
44
    property real _panelWidth:                  _root.width * _internalWidthRatio
45
    property real _margins:                     ScreenTools.defaultFontPixelWidth
Don Gagne's avatar
Don Gagne committed
46

47 48 49 50 51
    property string _videoSource:               QGroundControl.settingsManager.videoSettings.videoSource.value
    property bool   _isGst:                     QGroundControl.videoManager.isGStreamer
    property bool   _isUDP:                     _isGst && _videoSource === QGroundControl.settingsManager.videoSettings.udpVideoSource
    property bool   _isRTSP:                    _isGst && _videoSource === QGroundControl.settingsManager.videoSettings.rtspVideoSource
    property bool   _isTCP:                     _isGst && _videoSource === QGroundControl.settingsManager.videoSettings.tcpVideoSource
52
    property bool   _isMPEGTS:                  _isGst && _videoSource === QGroundControl.settingsManager.videoSettings.mpegtsVideoSource
53

54 55 56
    property string gpsDisabled: "Disabled"
    property string gpsUdpPort:  "UDP Port"

57
    readonly property real _internalWidthRatio: 0.8
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 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
    QGCFlickable {
        clip:               true
        anchors.fill:       parent
        contentHeight:      outerItem.height
        contentWidth:       outerItem.width

        Item {
            id:     outerItem
            width:  Math.max(_root.width, settingsColumn.width)
            height: settingsColumn.height

            ColumnLayout {
                id:                         settingsColumn
                anchors.horizontalCenter:   parent.horizontalCenter

                QGCLabel {
                    id:         unitsSectionLabel
                    text:       qsTr("Units")
                    visible:    QGroundControl.settingsManager.unitsSettings.visible
                }
                Rectangle {
                    Layout.preferredHeight: unitsGrid.height + (_margins * 2)
                    Layout.preferredWidth:  unitsGrid.width + (_margins * 2)
                    color:                  qgcPal.windowShade
                    visible:                miscSectionLabel.visible
                    Layout.fillWidth:       true

                    GridLayout {
                        id:                         unitsGrid
                        anchors.topMargin:          _margins
                        anchors.top:                parent.top
                        Layout.fillWidth:           false
                        anchors.horizontalCenter:   parent.horizontalCenter
                        flow:                       GridLayout.TopToBottom
                        rows:                       4

                        Repeater {
                            model: [ qsTr("Distance"), qsTr("Area"), qsTr("Speed"), qsTr("Temperature") ]
                            QGCLabel { text: modelData }
                        }
                        Repeater {
                            model:  [ QGroundControl.settingsManager.unitsSettings.distanceUnits, QGroundControl.settingsManager.unitsSettings.areaUnits, QGroundControl.settingsManager.unitsSettings.speedUnits, QGroundControl.settingsManager.unitsSettings.temperatureUnits ]
                            FactComboBox {
                                Layout.preferredWidth:  _comboFieldWidth
                                fact:                   modelData
                                indexModel:             false
                            }
                        }
107
                    }
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
                }

                Item { width: 1; height: _margins }

                QGCLabel {
                    id:         miscSectionLabel
                    text:       qsTr("Miscellaneous")
                    visible:    QGroundControl.settingsManager.appSettings.visible
                }
                Rectangle {
                    Layout.preferredWidth:  Math.max(comboGrid.width, miscCol.width) + (_margins * 2)
                    Layout.preferredHeight: (pathRow.visible ? pathRow.y + pathRow.height : miscColItem.y + miscColItem.height)  + (_margins * 2)
                    Layout.fillWidth:       true
                    color:                  qgcPal.windowShade
                    visible:                miscSectionLabel.visible

                    Item {
                        id:                 comboGridItem
                        anchors.margins:    _margins
                        anchors.top:        parent.top
                        anchors.left:       parent.left
                        anchors.right:      parent.right
                        height:             comboGrid.height
131 132

                        GridLayout {
133
                            id:                         comboGrid
134
                            anchors.horizontalCenter:   parent.horizontalCenter
135
                            columns:                    2
136

137 138 139
                            QGCLabel {
                                text:           qsTr("Language")
                                visible: QGroundControl.settingsManager.appSettings.language.visible
140
                            }
141 142 143 144 145
                            FactComboBox {
                                Layout.preferredWidth:  _comboFieldWidth
                                fact:                   QGroundControl.settingsManager.appSettings.language
                                indexModel:             false
                                visible:                QGroundControl.settingsManager.appSettings.language.visible
146
                            }
147

148 149 150
                            QGCLabel {
                                text:           qsTr("Color Scheme")
                                visible: QGroundControl.settingsManager.appSettings.indoorPalette.visible
Gus Grubba's avatar
Gus Grubba committed
151
                            }
152 153 154 155 156
                            FactComboBox {
                                Layout.preferredWidth:  _comboFieldWidth
                                fact:                   QGroundControl.settingsManager.appSettings.indoorPalette
                                indexModel:             false
                                visible:                QGroundControl.settingsManager.appSettings.indoorPalette.visible
157
                            }
158

159 160 161 162
                            QGCLabel {
                                text:       qsTr("Map Provider")
                                width:      _labelWidth
                                visible:    _mapProvider.visible
163
                            }
164 165 166 167 168
                            FactComboBox {
                                Layout.preferredWidth:  _comboFieldWidth
                                fact:                   _mapProvider
                                indexModel:             false
                                visible:                _mapProvider.visible
Don Gagne's avatar
Don Gagne committed
169
                            }
170

171
                            QGCLabel {
172 173
                                text:       qsTr("Map Type")
                                visible:    _mapType.visible
174
                            }
175 176 177 178 179 180 181 182 183 184 185 186
                            FactComboBox {
                                id:                     mapTypes
                                Layout.preferredWidth:  _comboFieldWidth
                                fact:                   _mapType
                                indexModel:             false
                                visible:                _mapType.visible
                                Connections {
                                    target: QGroundControl.settingsManager.flightMapSettings
                                    onMapTypeChanged: {
                                        mapTypes.model = _mapType.enumStrings
                                    }
                                }
187 188
                            }

189 190 191
                            QGCLabel {
                                text:       qsTr("Stream GCS Position")
                                visible:    _followTarget.visible
192
                            }
193 194 195 196 197
                            FactComboBox {
                                Layout.preferredWidth:  _comboFieldWidth
                                fact:                   _followTarget
                                indexModel:             false
                                visible:                _followTarget.visible
198 199 200 201
                            }
                        }
                    }

202 203 204 205 206 207 208
                    Item {
                        id:                 miscColItem
                        anchors.margins:    _margins
                        anchors.left:       parent.left
                        anchors.right:      parent.right
                        anchors.top:        comboGridItem.bottom
                        height:             miscCol.height
209 210

                        ColumnLayout {
211
                            id:                         miscCol
212 213 214 215
                            anchors.horizontalCenter:   parent.horizontalCenter
                            spacing:                    _margins

                            RowLayout {
216 217 218
                                Layout.fillWidth:   false
                                Layout.alignment:   Qt.AlignHCenter
                                visible:            _appFontPointSize ? _appFontPointSize.visible : false
219

220 221 222 223 224 225 226 227 228 229 230 231 232
                                QGCLabel {
                                    text:   qsTr("Font Size:")
                                }
                                QGCButton {
                                    Layout.preferredWidth:  height
                                    Layout.preferredHeight: baseFontEdit.height
                                    text:                   "-"
                                    onClicked: {
                                        if (_appFontPointSize.value > _appFontPointSize.min) {
                                            _appFontPointSize.value = _appFontPointSize.value - 1
                                        }
                                    }
                                }
233
                                FactTextField {
234
                                    id:                     baseFontEdit
235
                                    Layout.preferredWidth:  _valueFieldWidth
236 237 238 239 240 241 242 243 244 245 246
                                    fact:                   QGroundControl.settingsManager.appSettings.appFontPointSize
                                }
                                QGCButton {
                                    Layout.preferredWidth:  height
                                    Layout.preferredHeight: baseFontEdit.height
                                    text:                   "+"
                                    onClicked: {
                                        if (_appFontPointSize.value < _appFontPointSize.max) {
                                            _appFontPointSize.value = _appFontPointSize.value + 1
                                        }
                                    }
247 248 249 250
                                }
                            }


251 252 253 254 255 256
                            FactCheckBox {
                                text:       qsTr("Mute all audio output")
                                fact:       _audioMuted
                                visible:    _audioMuted.visible
                                property Fact _audioMuted: QGroundControl.settingsManager.appSettings.audioMuted
                            }
257

258 259 260 261
                            FactCheckBox {
                                text:       qsTr("AutoLoad Missions")
                                fact:       _autoLoad
                                visible:    _autoLoad.visible
262

263
                                property Fact _autoLoad: QGroundControl.settingsManager.appSettings.autoLoadMissions
264 265
                            }

266 267 268 269 270 271
                            QGCCheckBox {
                                id:         clearCheck
                                text:       qsTr("Clear all settings on next start")
                                checked:    false
                                onClicked: {
                                    checked ? clearDialog.visible = true : QGroundControl.clearDeleteAllSettingsNextBoot()
272
                                }
273 274 275 276 277 278 279 280 281 282
                                MessageDialog {
                                    id:                 clearDialog
                                    visible:            false
                                    icon:               StandardIcon.Warning
                                    standardButtons:    StandardButton.Yes | StandardButton.No
                                    title:              qsTr("Clear Settings")
                                    text:               qsTr("All saved settings will be reset the next time you start %1. Is this really what you want?").arg(QGroundControl.appName)
                                    onYes: {
                                        QGroundControl.deleteAllSettingsNextBoot()
                                        clearDialog.visible = false
283
                                    }
284 285 286
                                    onNo: {
                                        clearCheck.checked  = false
                                        clearDialog.visible = false
287 288
                                    }
                                }
289
                            }
290

291 292 293 294 295 296 297 298 299 300 301 302
                            RowLayout {
                                visible: QGroundControl.settingsManager.appSettings.batteryPercentRemainingAnnounce.visible

                                QGCCheckBox {
                                    id:         announcePercentCheckbox
                                    text:       qsTr("Announce battery lower than")
                                    checked:    _percentRemainingAnnounce.value !== 0
                                    onClicked: {
                                        if (checked) {
                                            _percentRemainingAnnounce.value = _percentRemainingAnnounce.defaultValueString
                                        } else {
                                            _percentRemainingAnnounce.value = 0
303 304
                                        }
                                    }
305 306
                                }
                                FactTextField {
307
                                    fact:                   _percentRemainingAnnounce
308
                                    Layout.preferredWidth:  _valueFieldWidth
309
                                    enabled:                announcePercentCheckbox.checked
310
                                }
311 312 313 314
                            }
                        }
                    }

315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342
                    //-----------------------------------------------------------------
                    //-- Save path
                    RowLayout {
                        id:                 pathRow
                        anchors.margins:    _margins
                        anchors.left:       parent.left
                        anchors.right:      parent.right
                        anchors.top:        miscColItem.bottom
                        visible:            _savePath.visible && !ScreenTools.isMobile

                        QGCLabel { text: qsTr("Application Load/Save Path") }
                        QGCTextField {
                            Layout.fillWidth:   true
                            readOnly:           true
                            text:               _savePath.rawValue === "" ? qsTr("<not set>") : _savePath.value
                        }
                        QGCButton {
                            text:       qsTr("Browse")
                            onClicked:  savePathBrowseDialog.openForLoad()
                            QGCFileDialog {
                                id:             savePathBrowseDialog
                                title:          qsTr("Choose the location to save/load files")
                                folder:         _savePath.rawValue
                                selectExisting: true
                                selectFolder:   true
                                onAcceptedForLoad: _savePath.rawValue = file
                            }
                        }
Don Gagne's avatar
Don Gagne committed
343
                    }
344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 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
                }

                Item { width: 1; height: _margins }
                QGCLabel {
                    id:         loggingSectionLabel
                    text:       qsTr("Data Persistence")
                }
                Rectangle {
                    Layout.preferredHeight: dataPersistCol.height + (_margins * 2)
                    Layout.preferredWidth:  dataPersistCol.width + (_margins * 2)
                    color:                  qgcPal.windowShade
                    Layout.fillWidth:       true
                    ColumnLayout {
                        id:                         dataPersistCol
                        anchors.margins:            _margins
                        anchors.top:                parent.top
                        anchors.horizontalCenter:   parent.horizontalCenter
                        spacing:                    _margins * 1.5
                        FactCheckBox {
                            id:         disableDataPersistence
                            text:       qsTr("Disable all data persistence")
                            fact:       _disableDataPersistence
                            visible:    _disableDataPersistence.visible
                            property Fact _disableDataPersistence: QGroundControl.settingsManager.appSettings.disableAllPersistence
                        }
                        QGCLabel {
                            text:       qsTr("When Data Persistence is disabled, all telemetry logging and map tile caching is disabled and not written to disk.")
                            wrapMode:   Text.WordWrap
                            font.pointSize:       ScreenTools.smallFontPointSize
                            Layout.maximumWidth:  logIfNotArmed.visible ? logIfNotArmed.width : disableDataPersistence.width * 1.5
                        }
                    }
                }

                Item { width: 1; height: _margins }
                QGCLabel {
                    text:       qsTr("Telemetry Logs from Vehicle")
                }
                Rectangle {
                    Layout.preferredHeight: loggingCol.height + (_margins * 2)
                    Layout.preferredWidth:  loggingCol.width + (_margins * 2)
                    color:                  qgcPal.windowShade
                    Layout.fillWidth:       true
                    ColumnLayout {
                        id:                         loggingCol
                        anchors.margins:            _margins
                        anchors.top:                parent.top
                        anchors.horizontalCenter:   parent.horizontalCenter
                        spacing:                    _margins
                        FactCheckBox {
                            id:         promptSaveLog
                            text:       qsTr("Save log after each flight")
                            fact:       _telemetrySave
                            visible:    _telemetrySave.visible
                            enabled:    !disableDataPersistence.checked
                            property Fact _telemetrySave: QGroundControl.settingsManager.appSettings.telemetrySave
                        }
                        FactCheckBox {
                            id:         logIfNotArmed
                            text:       qsTr("Save logs even if vehicle was not armed")
                            fact:       _telemetrySaveNotArmed
                            visible:    _telemetrySaveNotArmed.visible
                            enabled:    promptSaveLog.checked && !disableDataPersistence.checked
                            property Fact _telemetrySaveNotArmed: QGroundControl.settingsManager.appSettings.telemetrySaveNotArmed
                        }
                    }
                }

                Item { width: 1; height: _margins }
                QGCLabel {
                    id:         flyViewSectionLabel
                    text:       qsTr("Fly View")
                    visible:    QGroundControl.settingsManager.flyViewSettings.visible
                }
                Rectangle {
                    Layout.preferredHeight: flyViewCol.height + (_margins * 2)
                    Layout.preferredWidth:  flyViewCol.width + (_margins * 2)
                    color:                  qgcPal.windowShade
                    visible:                flyViewSectionLabel.visible
                    Layout.fillWidth:       true

                    ColumnLayout {
                        id:                         flyViewCol
                        anchors.margins:            _margins
                        anchors.top:                parent.top
                        anchors.horizontalCenter:   parent.horizontalCenter
                        spacing:                    _margins

                        FactCheckBox {
                            text:       qsTr("Use preflight checklist")
                            fact:       _useChecklist
                            visible:    _useChecklist.visible

                            property Fact _useChecklist: QGroundControl.settingsManager.appSettings.useChecklist
                        }
439

440 441 442 443
                        FactCheckBox {
                            text:       qsTr("Virtual Joystick")
                            visible:    _virtualJoystick.visible
                            fact:       _virtualJoystick
444

445 446
                            property Fact _virtualJoystick: QGroundControl.settingsManager.appSettings.virtualJoystick
                        }
447

448 449
                        GridLayout {
                            columns: 2
450

451
                            QGCLabel { text: qsTr("Guided Minimum Altitude") }
452
                            FactTextField {
453
                                Layout.preferredWidth:  _valueFieldWidth
454
                                fact:                   QGroundControl.settingsManager.flyViewSettings.guidedMinimumAltitude
455
                            }
Don Gagne's avatar
Don Gagne committed
456

457
                            QGCLabel { text: qsTr("Guided Maximum Altitude") }
458
                            FactTextField {
459
                                Layout.preferredWidth:  _valueFieldWidth
460
                                fact:                   QGroundControl.settingsManager.flyViewSettings.guidedMaximumAltitude
461
                            }
462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485
                        }
                    }
                }

                Item { width: 1; height: _margins }

                QGCLabel {
                    id:         planViewSectionLabel
                    text:       qsTr("Plan View")
                    visible:    QGroundControl.settingsManager.planViewSettings.visible
                }
                Rectangle {
                    Layout.preferredHeight: planViewCol.height + (_margins * 2)
                    Layout.preferredWidth:  planViewCol.width + (_margins * 2)
                    color:                  qgcPal.windowShade
                    visible:                planViewSectionLabel.visible
                    Layout.fillWidth:       true

                    ColumnLayout {
                        id:                         planViewCol
                        anchors.margins:            _margins
                        anchors.top:                parent.top
                        anchors.horizontalCenter:   parent.horizontalCenter
                        spacing:                    _margins
486

487 488 489
                        RowLayout {
                            spacing:    ScreenTools.defaultFontPixelWidth
                            visible:    QGroundControl.settingsManager.appSettings.defaultMissionItemAltitude.visible
490

491
                            QGCLabel { text: qsTr("Default Mission Altitude") }
492
                            FactTextField {
493 494
                                Layout.preferredWidth:  _valueFieldWidth
                                fact:                   QGroundControl.settingsManager.appSettings.defaultMissionItemAltitude
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
                        }
                    }
                }

                Item { width: 1; height: _margins }

                QGCLabel {
                    id:         autoConnectSectionLabel
                    text:       qsTr("AutoConnect to the following devices")
                    visible:    QGroundControl.settingsManager.autoConnectSettings.visible
                }
                Rectangle {
                    Layout.preferredWidth:  autoConnectCol.width + (_margins * 2)
                    Layout.preferredHeight: autoConnectCol.height + (_margins * 2)
                    color:                  qgcPal.windowShade
                    visible:                autoConnectSectionLabel.visible
                    Layout.fillWidth:       true

                    ColumnLayout {
                        id:                 autoConnectCol
                        anchors.margins:    _margins
                        anchors.left:       parent.left
                        anchors.top:        parent.top
                        spacing:            _margins
520

521 522
                        RowLayout {
                            spacing: _margins
523

524 525 526 527 528 529 530 531 532
                            Repeater {
                                id:     autoConnectRepeater
                                model:  [ QGroundControl.settingsManager.autoConnectSettings.autoConnectPixhawk,
                                    QGroundControl.settingsManager.autoConnectSettings.autoConnectSiKRadio,
                                    QGroundControl.settingsManager.autoConnectSettings.autoConnectPX4Flow,
                                    QGroundControl.settingsManager.autoConnectSettings.autoConnectLibrePilot,
                                    QGroundControl.settingsManager.autoConnectSettings.autoConnectUDP,
                                    QGroundControl.settingsManager.autoConnectSettings.autoConnectRTKGPS
                                ]
533

534
                                property var names: [ qsTr("Pixhawk"), qsTr("SiK Radio"), qsTr("PX4 Flow"), qsTr("LibrePilot"), qsTr("UDP"), qsTr("RTK GPS") ]
535

536 537 538 539
                                FactCheckBox {
                                    text:       autoConnectRepeater.names[index]
                                    fact:       modelData
                                    visible:    modelData.visible
540
                                }
541
                            }
542
                        }
543 544

                        GridLayout {
545 546 547 548 549 550
                            Layout.fillWidth:   false
                            Layout.alignment:   Qt.AlignHCenter
                            columns:            2
                            visible:            !ScreenTools.isMobile
                                                && QGroundControl.settingsManager.autoConnectSettings.autoConnectNmeaPort.visible
                                                && QGroundControl.settingsManager.autoConnectSettings.autoConnectNmeaBaud.visible
551

552
                            QGCLabel {
553
                                text: qsTr("NMEA GPS Device")
554
                            }
555 556
                            QGCComboBox {
                                id:                     nmeaPortCombo
557 558
                                Layout.preferredWidth:  _comboFieldWidth

559 560
                                model:  ListModel {
                                }
561

562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579
                                onActivated: {
                                    if (index != -1) {
                                        QGroundControl.settingsManager.autoConnectSettings.autoConnectNmeaPort.value = textAt(index);
                                    }
                                }
                                Component.onCompleted: {
                                    model.append({text: gpsDisabled})
                                    model.append({text: gpsUdpPort})

                                    for (var i in QGroundControl.linkManager.serialPorts) {
                                        nmeaPortCombo.model.append({text:QGroundControl.linkManager.serialPorts[i]})
                                    }
                                    var index = nmeaPortCombo.find(QGroundControl.settingsManager.autoConnectSettings.autoConnectNmeaPort.valueString);
                                    nmeaPortCombo.currentIndex = index;
                                    if (QGroundControl.linkManager.serialPorts.length === 0) {
                                        nmeaPortCombo.model.append({text: "Serial <none available>"})
                                    }
                                }
580
                            }
581

582
                            QGCLabel {
583 584
                                visible:          nmeaPortCombo.currentText !== gpsUdpPort && nmeaPortCombo.currentText !== gpsDisabled
                                text:             qsTr("NMEA GPS Baudrate")
585
                            }
586 587 588
                            QGCComboBox {
                                visible:                nmeaPortCombo.currentText !== gpsUdpPort && nmeaPortCombo.currentText !== gpsDisabled
                                id:                     nmeaBaudCombo
589
                                Layout.preferredWidth:  _comboFieldWidth
590 591 592 593 594 595 596 597 598 599 600
                                model:                  [4800, 9600, 19200, 38400, 57600, 115200]

                                onActivated: {
                                    if (index != -1) {
                                        QGroundControl.settingsManager.autoConnectSettings.autoConnectNmeaBaud.value = textAt(index);
                                    }
                                }
                                Component.onCompleted: {
                                    var index = nmeaBaudCombo.find(QGroundControl.settingsManager.autoConnectSettings.autoConnectNmeaBaud.valueString);
                                    nmeaBaudCombo.currentIndex = index;
                                }
601
                            }
602

603
                            QGCLabel {
604 605
                                text:       qsTr("NMEA stream UDP port")
                                visible:    nmeaPortCombo.currentText === gpsUdpPort
606
                            }
607 608 609 610
                            FactTextField {
                                visible:                nmeaPortCombo.currentText === gpsUdpPort
                                Layout.preferredWidth:  _valueFieldWidth
                                fact:                   QGroundControl.settingsManager.autoConnectSettings.nmeaUdpPort
611 612 613
                            }
                        }
                    }
614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644
                }

                Item { width: 1; height: _margins }

                QGCLabel {
                    id:         rtkSectionLabel
                    text:       qsTr("RTK GPS")
                    visible:    QGroundControl.settingsManager.rtkSettings.visible
                }
                Rectangle {
                    Layout.preferredHeight: rtkGrid.height + (_margins * 2)
                    Layout.preferredWidth:  rtkGrid.width + (_margins * 2)
                    color:                  qgcPal.windowShade
                    visible:                rtkSectionLabel.visible
                    Layout.fillWidth:       true

                    GridLayout {
                        id:                         rtkGrid
                        anchors.topMargin:          _margins
                        anchors.top:                parent.top
                        Layout.fillWidth:           true
                        anchors.horizontalCenter:   parent.horizontalCenter
                        columns:                    3

                        property var rtkSettings:       QGroundControl.settingsManager.rtkSettings
                        property bool useFixedPosition: rtkSettings.useFixedBasePosition.rawValue
                        property real firstColWidth:    ScreenTools.defaultFontPixelWidth * 3

                        QGCRadioButton {
                            text:               qsTr("Perform Survey-In")
                            visible:            rtkGrid.rtkSettings.useFixedBasePosition.visible
Gus Grubba's avatar
Gus Grubba committed
645
                            checked:            rtkGrid.rtkSettings.useFixedBasePosition.value === false
646 647 648
                            onClicked:          rtkGrid.rtkSettings.useFixedBasePosition.value = false
                            Layout.columnSpan:  3
                        }
649

650 651 652 653 654 655 656 657 658 659 660 661
                        Item { width: rtkGrid.firstColWidth; height: 1 }
                        QGCLabel {
                            text:       rtkGrid.rtkSettings.surveyInAccuracyLimit.shortDescription
                            visible:    rtkGrid.rtkSettings.surveyInAccuracyLimit.visible
                            enabled:    !rtkGrid.useFixedPosition
                        }
                        FactTextField {
                            fact:                   rtkGrid.rtkSettings.surveyInAccuracyLimit
                            visible:                rtkGrid.rtkSettings.surveyInAccuracyLimit.visible
                            enabled:                !rtkGrid.useFixedPosition
                            Layout.preferredWidth:  _valueFieldWidth
                        }
662

663 664 665 666 667 668 669 670 671 672 673 674
                        Item { width: rtkGrid.firstColWidth; height: 1 }
                        QGCLabel {
                            text:       rtkGrid.rtkSettings.surveyInMinObservationDuration.shortDescription
                            visible:    rtkGrid.rtkSettings.surveyInMinObservationDuration.visible
                            enabled:    !rtkGrid.useFixedPosition
                        }
                        FactTextField {
                            fact:                   rtkGrid.rtkSettings.surveyInMinObservationDuration
                            visible:                rtkGrid.rtkSettings.surveyInMinObservationDuration.visible
                            enabled:                !rtkGrid.useFixedPosition
                            Layout.preferredWidth:  _valueFieldWidth
                        }
675

676 677 678
                        QGCRadioButton {
                            text:               qsTr("Use Specified Base Position")
                            visible:            rtkGrid.rtkSettings.useFixedBasePosition.visible
Gus Grubba's avatar
Gus Grubba committed
679
                            checked:            rtkGrid.rtkSettings.useFixedBasePosition.value === true
680 681 682
                            onClicked:          rtkGrid.rtkSettings.useFixedBasePosition.value = true
                            Layout.columnSpan:  3
                        }
683

684 685 686 687 688 689 690 691 692 693 694 695
                        Item { width: rtkGrid.firstColWidth; height: 1 }
                        QGCLabel {
                            text:       rtkGrid.rtkSettings.fixedBasePositionLatitude.shortDescription
                            visible:    rtkGrid.rtkSettings.fixedBasePositionLatitude.visible
                            enabled:    rtkGrid.useFixedPosition
                        }
                        FactTextField {
                            fact:               rtkGrid.rtkSettings.fixedBasePositionLatitude
                            visible:            rtkGrid.rtkSettings.fixedBasePositionLatitude.visible
                            enabled:            rtkGrid.useFixedPosition
                            Layout.fillWidth:   true
                        }
696

697 698 699 700 701 702 703 704 705 706 707
                        Item { width: rtkGrid.firstColWidth; height: 1 }
                        QGCLabel {
                            text:           rtkGrid.rtkSettings.fixedBasePositionLongitude.shortDescription
                            visible:        rtkGrid.rtkSettings.fixedBasePositionLongitude.visible
                            enabled:        rtkGrid.useFixedPosition
                        }
                        FactTextField {
                            fact:               rtkGrid.rtkSettings.fixedBasePositionLongitude
                            visible:            rtkGrid.rtkSettings.fixedBasePositionLongitude.visible
                            enabled:            rtkGrid.useFixedPosition
                            Layout.fillWidth:   true
708
                        }
709

710 711 712 713 714 715 716 717 718 719 720 721
                        Item { width: rtkGrid.firstColWidth; height: 1 }
                        QGCLabel {
                            text:           rtkGrid.rtkSettings.fixedBasePositionAltitude.shortDescription
                            visible:        rtkGrid.rtkSettings.fixedBasePositionAltitude.visible
                            enabled:        rtkGrid.useFixedPosition
                        }
                        FactTextField {
                            fact:               rtkGrid.rtkSettings.fixedBasePositionAltitude
                            visible:            rtkGrid.rtkSettings.fixedBasePositionAltitude.visible
                            enabled:            rtkGrid.useFixedPosition
                            Layout.fillWidth:   true
                        }
722

723 724 725 726 727 728 729 730 731 732 733 734
                        Item { width: rtkGrid.firstColWidth; height: 1 }
                        QGCLabel {
                            text:           rtkGrid.rtkSettings.fixedBasePositionAccuracy.shortDescription
                            visible:        rtkGrid.rtkSettings.fixedBasePositionAccuracy.visible
                            enabled:        rtkGrid.useFixedPosition
                        }
                        FactTextField {
                            fact:               rtkGrid.rtkSettings.fixedBasePositionAccuracy
                            visible:            rtkGrid.rtkSettings.fixedBasePositionAccuracy.visible
                            enabled:            rtkGrid.useFixedPosition
                            Layout.fillWidth:   true
                        }
735

736 737 738 739 740
                        Item { width: rtkGrid.firstColWidth; height: 1 }
                        QGCButton {
                            text:               qsTr("Save Current Base Position")
                            enabled:            QGroundControl.gpsRtk && QGroundControl.gpsRtk.valid.value
                            Layout.columnSpan:  2
741

742 743 744 745 746
                            onClicked: {
                                rtkGrid.rtkSettings.fixedBasePositionLatitude.rawValue =    QGroundControl.gpsRtk.currentLatitude.rawValue
                                rtkGrid.rtkSettings.fixedBasePositionLongitude.rawValue =   QGroundControl.gpsRtk.currentLongitude.rawValue
                                rtkGrid.rtkSettings.fixedBasePositionAltitude.rawValue =    QGroundControl.gpsRtk.currentAltitude.rawValue
                                rtkGrid.rtkSettings.fixedBasePositionAccuracy.rawValue =    QGroundControl.gpsRtk.currentAccuracy.rawValue
747
                            }
748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784
                        }
                    }
                }

                Item { width: 1; height: _margins }

                QGCLabel {
                    id:         videoSectionLabel
                    text:       qsTr("Video")
                    visible:    QGroundControl.settingsManager.videoSettings.visible && !QGroundControl.videoManager.autoStreamConfigured
                }
                Rectangle {
                    Layout.preferredWidth:  videoGrid.width + (_margins * 2)
                    Layout.preferredHeight: videoGrid.height + (_margins * 2)
                    Layout.fillWidth:       true
                    color:                  qgcPal.windowShade
                    visible:                videoSectionLabel.visible

                    GridLayout {
                        id:                         videoGrid
                        anchors.margins:            _margins
                        anchors.top:                parent.top
                        anchors.horizontalCenter:   parent.horizontalCenter
                        Layout.fillWidth:           false
                        Layout.fillHeight:          false
                        columns:                    2
                        QGCLabel {
                            text:                   qsTr("Video Source")
                            visible:                QGroundControl.settingsManager.videoSettings.videoSource.visible
                        }
                        FactComboBox {
                            id:                     videoSource
                            Layout.preferredWidth:  _comboFieldWidth
                            indexModel:             false
                            fact:                   QGroundControl.settingsManager.videoSettings.videoSource
                            visible:                QGroundControl.settingsManager.videoSettings.videoSource.visible
                        }
785

786 787 788 789 790 791 792 793 794
                        QGCLabel {
                            text:                   qsTr("UDP Port")
                            visible:                (_isUDP || _isMPEGTS)  && QGroundControl.settingsManager.videoSettings.udpPort.visible
                        }
                        FactTextField {
                            Layout.preferredWidth:  _comboFieldWidth
                            fact:                   QGroundControl.settingsManager.videoSettings.udpPort
                            visible:                (_isUDP || _isMPEGTS) && QGroundControl.settingsManager.videoSettings.udpPort.visible
                        }
795

796 797 798 799 800 801 802 803 804
                        QGCLabel {
                            text:                   qsTr("RTSP URL")
                            visible:                _isRTSP && QGroundControl.settingsManager.videoSettings.rtspUrl.visible
                        }
                        FactTextField {
                            Layout.preferredWidth:  _comboFieldWidth
                            fact:                   QGroundControl.settingsManager.videoSettings.rtspUrl
                            visible:                _isRTSP && QGroundControl.settingsManager.videoSettings.rtspUrl.visible
                        }
805

806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832
                        QGCLabel {
                            text:                   qsTr("TCP URL")
                            visible:                _isTCP && QGroundControl.settingsManager.videoSettings.tcpUrl.visible
                        }
                        FactTextField {
                            Layout.preferredWidth:  _comboFieldWidth
                            fact:                   QGroundControl.settingsManager.videoSettings.tcpUrl
                            visible:                _isTCP && QGroundControl.settingsManager.videoSettings.tcpUrl.visible
                        }
                        QGCLabel {
                            text:                   qsTr("Aspect Ratio")
                            visible:                _isGst && QGroundControl.settingsManager.videoSettings.aspectRatio.visible
                        }
                        FactTextField {
                            Layout.preferredWidth:  _comboFieldWidth
                            fact:                   QGroundControl.settingsManager.videoSettings.aspectRatio
                            visible:                _isGst && QGroundControl.settingsManager.videoSettings.aspectRatio.visible
                        }

                        QGCLabel {
                            text:                   qsTr("Disable When Disarmed")
                            visible:                _isGst && QGroundControl.settingsManager.videoSettings.disableWhenDisarmed.visible
                        }
                        FactCheckBox {
                            text:                   ""
                            fact:                   QGroundControl.settingsManager.videoSettings.disableWhenDisarmed
                            visible:                _isGst && QGroundControl.settingsManager.videoSettings.disableWhenDisarmed.visible
833 834
                        }
                    }
835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867
                }

                Item { width: 1; height: _margins }

                QGCLabel {
                    id:                             videoRecSectionLabel
                    text:                           qsTr("Video Recording")
                    visible:                        (QGroundControl.settingsManager.videoSettings.visible && _isGst) || QGroundControl.videoManager.autoStreamConfigured
                }
                Rectangle {
                    Layout.preferredWidth:          videoRecCol.width  + (_margins * 2)
                    Layout.preferredHeight:         videoRecCol.height + (_margins * 2)
                    Layout.fillWidth:               true
                    color:                          qgcPal.windowShade
                    visible:                        videoRecSectionLabel.visible

                    GridLayout {
                        id:                         videoRecCol
                        anchors.margins:            _margins
                        anchors.top:                parent.top
                        anchors.horizontalCenter:   parent.horizontalCenter
                        Layout.fillWidth:           false
                        columns:                    2

                        QGCLabel {
                            text:                   qsTr("Auto-Delete Files")
                            visible:                QGroundControl.settingsManager.videoSettings.enableStorageLimit.visible
                        }
                        FactCheckBox {
                            text:                   ""
                            fact:                   QGroundControl.settingsManager.videoSettings.enableStorageLimit
                            visible:                QGroundControl.settingsManager.videoSettings.enableStorageLimit.visible
                        }
868

869 870 871 872 873 874 875 876 877
                        QGCLabel {
                            text:                   qsTr("Max Storage Usage")
                            visible:                QGroundControl.settingsManager.videoSettings.maxVideoSize.visible && QGroundControl.settingsManager.videoSettings.enableStorageLimit.value
                        }
                        FactTextField {
                            Layout.preferredWidth:  _comboFieldWidth
                            fact:                   QGroundControl.settingsManager.videoSettings.maxVideoSize
                            visible:                QGroundControl.settingsManager.videoSettings.maxVideoSize.visible && QGroundControl.settingsManager.videoSettings.enableStorageLimit.value
                        }
878

879 880 881 882 883 884 885 886 887
                        QGCLabel {
                            text:                   qsTr("Video File Format")
                            visible:                QGroundControl.settingsManager.videoSettings.recordingFormat.visible
                        }
                        FactComboBox {
                            Layout.preferredWidth:  _comboFieldWidth
                            fact:                   QGroundControl.settingsManager.videoSettings.recordingFormat
                            visible:                QGroundControl.settingsManager.videoSettings.recordingFormat.visible
                        }
888
                    }
889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964
                }

                Item { width: 1; height: _margins; visible: videoRecSectionLabel.visible }

                QGCLabel {
                    id:         brandImageSectionLabel
                    text:       qsTr("Brand Image")
                    visible:    QGroundControl.settingsManager.brandImageSettings.visible && !ScreenTools.isMobile
                }
                Rectangle {
                    Layout.preferredWidth:  brandImageGrid.width + (_margins * 2)
                    Layout.preferredHeight: brandImageGrid.height + (_margins * 2)
                    Layout.fillWidth:       true
                    color:                  qgcPal.windowShade
                    visible:                brandImageSectionLabel.visible

                    GridLayout {
                        id:                 brandImageGrid
                        anchors.margins:    _margins
                        anchors.top:        parent.top
                        anchors.left:       parent.left
                        anchors.right:      parent.right
                        columns:            3

                        QGCLabel {
                            text:       qsTr("Indoor Image")
                            visible:    _userBrandImageIndoor.visible
                        }
                        QGCTextField {
                            readOnly:           true
                            Layout.fillWidth:   true
                            text:               _userBrandImageIndoor.valueString.replace("file:///","")
                        }
                        QGCButton {
                            text:       qsTr("Browse")
                            onClicked:  userBrandImageIndoorBrowseDialog.openForLoad()
                            QGCFileDialog {
                                id:             userBrandImageIndoorBrowseDialog
                                title:          qsTr("Choose custom brand image file")
                                folder:         _userBrandImageIndoor.rawValue.replace("file:///","")
                                selectExisting: true
                                selectFolder:   false
                                onAcceptedForLoad: _userBrandImageIndoor.rawValue = "file:///" + file
                            }
                        }

                        QGCLabel {
                            text:       qsTr("Outdoor Image")
                            visible:    _userBrandImageOutdoor.visible
                        }
                        QGCTextField {
                            readOnly:           true
                            Layout.fillWidth:   true
                            text:               _userBrandImageOutdoor.valueString.replace("file:///","")
                        }
                        QGCButton {
                            text:       qsTr("Browse")
                            onClicked:  userBrandImageOutdoorBrowseDialog.openForLoad()
                            QGCFileDialog {
                                id:             userBrandImageOutdoorBrowseDialog
                                title:          qsTr("Choose custom brand image file")
                                folder:         _userBrandImageOutdoor.rawValue.replace("file:///","")
                                selectExisting: true
                                selectFolder:   false
                                onAcceptedForLoad: _userBrandImageOutdoor.rawValue = "file:///" + file
                            }
                        }
                        QGCButton {
                            text:               qsTr("Reset Default Brand Image")
                            Layout.columnSpan:  3
                            Layout.alignment:   Qt.AlignHCenter
                            onClicked:  {
                                _userBrandImageIndoor.rawValue = ""
                                _userBrandImageOutdoor.rawValue = ""
                            }
                        }
965
                    }
966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981
                }

                Item { width: 1; height: _margins }

                QGCLabel {
                    text:               qsTr("%1 Version").arg(QGroundControl.appName)
                    Layout.alignment:   Qt.AlignHCenter
                }
                QGCLabel {
                    text:               QGroundControl.qgcVersion
                    Layout.alignment:   Qt.AlignHCenter
                }
            } // settingsColumn
        }
    }
}