GeneralSettings.qml 20.3 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 13 14 15 16 17


import QtQuick                  2.5
import QtQuick.Controls         1.2
import QtQuick.Controls.Styles  1.2
import QtQuick.Dialogs          1.1

import QGroundControl                       1.0
import QGroundControl.FactSystem            1.0
18
import QGroundControl.FactControls          1.0
dogmaphobic's avatar
dogmaphobic committed
19 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 25 26
QGCView {
    id:                 qgcView
    viewPanel:          panel
27
    color:              qgcPal.window
28 29
    anchors.fill:       parent
    anchors.margins:    ScreenTools.defaultFontPixelWidth
dogmaphobic's avatar
dogmaphobic committed
30

dogmaphobic's avatar
dogmaphobic committed
31
    property Fact _percentRemainingAnnounce:    QGroundControl.multiVehicleManager.disconnectedVehicle.battery.percentRemainingAnnounce
Don Gagne's avatar
Don Gagne committed
32
    property real _editFieldWidth:              ScreenTools.defaultFontPixelWidth * 15
33

34
    QGCPalette { id: qgcPal }
dogmaphobic's avatar
dogmaphobic committed
35

36 37 38 39 40 41 42 43 44
    QGCViewPanel {
        id:             panel
        anchors.fill:   parent

        QGCFlickable {
            clip:               true
            anchors.fill:       parent
            contentHeight:      settingsColumn.height
            contentWidth:       settingsColumn.width
Don Gagne's avatar
Don Gagne committed
45

46 47 48 49 50 51 52
            Column {
                id:                 settingsColumn
                anchors.margins:    ScreenTools.defaultFontPixelWidth
                spacing:            ScreenTools.defaultFontPixelHeight / 2

                //-----------------------------------------------------------------
                //-- Base UI Font Point Size
53
                Row {
54
                    spacing: ScreenTools.defaultFontPixelWidth
Don Gagne's avatar
Don Gagne committed
55

56 57 58 59 60
                    QGCLabel {
                        id:     baseFontLabel
                        text:   qsTr("Base UI font size:")
                        anchors.verticalCenter: parent.verticalCenter
                    }
Don Gagne's avatar
Don Gagne committed
61

62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
                    Row {
                        id:         baseFontRow
                        spacing:    ScreenTools.defaultFontPixelWidth / 2
                        anchors.verticalCenter: parent.verticalCenter

                        QGCButton {
                            id:     decrementButton
                            width:  height
                            height: baseFontEdit.height
                            text:   "-"

                            onClicked: {
                                if(ScreenTools.defaultFontPointSize > 6) {
                                    QGroundControl.baseFontPointSize = QGroundControl.baseFontPointSize - 1
                                }
77 78
                            }
                        }
Don Gagne's avatar
Don Gagne committed
79

80 81 82 83 84 85 86 87 88 89 90 91 92 93
                        QGCTextField {
                            id:             baseFontEdit
                            width:          _editFieldWidth - (decrementButton.width * 2) - (baseFontRow.spacing * 2)
                            text:           QGroundControl.baseFontPointSize
                            showUnits:      true
                            unitsLabel:     "pt"
                            maximumLength:  6
                            validator:      DoubleValidator {bottom: 6.0; top: 48.0; decimals: 2;}

                            onEditingFinished: {
                                var point = parseFloat(text)
                                if(point >= 6.0 && point <= 48.0)
                                    QGroundControl.baseFontPointSize = point;
                            }
94
                        }
Don Gagne's avatar
Don Gagne committed
95

96 97 98 99
                        QGCButton {
                            width:  height
                            height: baseFontEdit.height
                            text:   "+"
Don Gagne's avatar
Don Gagne committed
100

101 102 103 104
                            onClicked: {
                                if(ScreenTools.defaultFontPointSize < 49) {
                                    QGroundControl.baseFontPointSize = QGroundControl.baseFontPointSize + 1
                                }
105 106 107
                            }
                        }
                    }
Don Gagne's avatar
Don Gagne committed
108

109 110 111 112
                    QGCLabel {
                        anchors.verticalCenter: parent.verticalCenter
                        text:                   qsTr("(requires app restart)")
                    }
113 114
                }

115 116
                //-----------------------------------------------------------------
                //-- Units
117

118 119
                Row {
                    spacing:    ScreenTools.defaultFontPixelWidth
120

121 122 123 124 125
                    QGCLabel {
                        width:              baseFontLabel.width
                        anchors.baseline:   distanceUnitsCombo.baseline
                        text:               qsTr("Distance units:")
                    }
126

127 128 129 130 131 132 133 134 135 136 137
                    FactComboBox {
                        id:                 distanceUnitsCombo
                        width:              _editFieldWidth
                        fact:               QGroundControl.distanceUnits
                        indexModel:         false
                    }

                    QGCLabel {
                        anchors.baseline:   distanceUnitsCombo.baseline
                        text:               qsTr("(requires app restart)")
                    }
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
                Row {
                    spacing:    ScreenTools.defaultFontPixelWidth

                    QGCLabel {
                        width:              baseFontLabel.width
                        anchors.baseline:   areaUnitsCombo.baseline
                        text:               qsTr("Area units:")
                    }

                    FactComboBox {
                        id:                 areaUnitsCombo
                        width:              _editFieldWidth
                        fact:               QGroundControl.areaUnits
                        indexModel:         false
                    }

                    QGCLabel {
                        anchors.baseline:   areaUnitsCombo.baseline
                        text:               qsTr("(requires app restart)")
                    }

                }

164 165
                Row {
                    spacing:                ScreenTools.defaultFontPixelWidth
166

167 168 169 170 171
                    QGCLabel {
                        width:              baseFontLabel.width
                        anchors.baseline:   speedUnitsCombo.baseline
                        text:               qsTr("Speed units:")
                    }
172

173 174 175 176 177 178
                    FactComboBox {
                        id:                 speedUnitsCombo
                        width:              _editFieldWidth
                        fact:               QGroundControl.speedUnits
                        indexModel:         false
                    }
179

180 181 182 183
                    QGCLabel {
                        anchors.baseline:   speedUnitsCombo.baseline
                        text:               qsTr("(requires app restart)")
                    }
184 185
                }

186 187 188
                Item {
                    height: ScreenTools.defaultFontPixelHeight / 2
                    width:  parent.width
189
                }
Don Gagne's avatar
Don Gagne committed
190

191 192 193 194 195 196 197 198
                //-----------------------------------------------------------------
                //-- Audio preferences
                QGCCheckBox {
                    text:       qsTr("Mute all audio output")
                    checked:    QGroundControl.isAudioMuted
                    onClicked: {
                        QGroundControl.isAudioMuted = checked
                    }
dogmaphobic's avatar
dogmaphobic committed
199
                }
200 201 202 203 204 205 206 207 208 209
                //-----------------------------------------------------------------
                //-- Prompt Save Log
                QGCCheckBox {
                    id:         promptSaveLog
                    text:       qsTr("Prompt to save Flight Data Log after each flight")
                    checked:    QGroundControl.isSaveLogPrompt
                    visible:    !ScreenTools.isMobile
                    onClicked: {
                        QGroundControl.isSaveLogPrompt = checked
                    }
210
                }
211 212 213 214 215 216 217 218 219 220
                //-----------------------------------------------------------------
                //-- Prompt Save even if not armed
                QGCCheckBox {
                    text:       qsTr("Prompt to save Flight Data Log even if vehicle was not armed")
                    checked:    QGroundControl.isSaveLogPromptNotArmed
                    visible:    !ScreenTools.isMobile
                    enabled:    promptSaveLog.checked
                    onClicked: {
                        QGroundControl.isSaveLogPromptNotArmed = checked
                    }
dogmaphobic's avatar
dogmaphobic committed
221
                }
222 223 224 225 226 227 228 229
                //-----------------------------------------------------------------
                //-- Clear settings
                QGCCheckBox {
                    id:         clearCheck
                    text:       qsTr("Clear all settings on next start")
                    checked:    false
                    onClicked: {
                        checked ? clearDialog.visible = true : QGroundControl.clearDeleteAllSettingsNextBoot()
dogmaphobic's avatar
dogmaphobic committed
230
                    }
231 232 233 234 235 236 237 238 239 240 241 242 243 244 245
                    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 QGroundControl. Is this really what you want?")
                        onYes: {
                            QGroundControl.deleteAllSettingsNextBoot()
                            clearDialog.visible = false
                        }
                        onNo: {
                            clearCheck.checked  = false
                            clearDialog.visible = false
                        }
dogmaphobic's avatar
dogmaphobic committed
246 247
                    }
                }
248 249 250 251
                //-----------------------------------------------------------------
                //-- Battery talker
                Row {
                    spacing: ScreenTools.defaultFontPixelWidth
252

253 254 255 256 257
                    QGCCheckBox {
                        id:                 announcePercentCheckbox
                        anchors.baseline:   announcePercent.baseline
                        text:               qsTr("Announce battery lower than:")
                        checked:            _percentRemainingAnnounce.value != 0
258

259 260 261 262 263 264
                        onClicked: {
                            if (checked) {
                                _percentRemainingAnnounce.value = _percentRemainingAnnounce.defaultValueString
                            } else {
                                _percentRemainingAnnounce.value = 0
                            }
265 266 267
                        }
                    }

268 269 270 271 272
                    FactTextField {
                        id:                 announcePercent
                        fact:               _percentRemainingAnnounce
                        enabled:            announcePercentCheckbox.checked
                    }
273
                }
274

275 276 277 278
                Item {
                    height: ScreenTools.defaultFontPixelHeight / 2
                    width:  parent.width
                }
Don Gagne's avatar
Don Gagne committed
279

280 281 282
                //-----------------------------------------------------------------
                //-- Map Providers
                Row {
283 284 285 286 287 288 289 290 291

                    /*
                      TODO: Map settings should come from QGroundControl.mapEngineManager. What is currently in
                      QGroundControl.flightMapSettings should be moved there so all map related funtions are in
                      one place.
                     */

                    spacing:    ScreenTools.defaultFontPixelWidth
                    visible:    QGroundControl.flightMapSettings.googleMapEnabled
Don Gagne's avatar
Don Gagne committed
292

293 294 295 296 297
                    QGCLabel {
                        id:                 mapProvidersLabel
                        anchors.baseline:   mapProviders.baseline
                        text:               qsTr("Map Provider:")
                    }
Don Gagne's avatar
Don Gagne committed
298

299 300 301 302 303 304 305 306 307 308 309
                    QGCComboBox {
                        id:                 mapProviders
                        width:              _editFieldWidth
                        model:              QGroundControl.flightMapSettings.mapProviders
                        Component.onCompleted: {
                            var index = mapProviders.find(QGroundControl.flightMapSettings.mapProvider)
                            if (index < 0) {
                                console.warn(qsTr("Active map provider not in combobox"), QGroundControl.flightMapSettings.mapProvider)
                            } else {
                                mapProviders.currentIndex = index
                            }
dogmaphobic's avatar
dogmaphobic committed
310
                        }
311 312 313 314 315 316
                        onActivated: {
                            if (index != -1) {
                                currentIndex = index
                                console.log(qsTr("New map provider: ") + model[index])
                                QGroundControl.flightMapSettings.mapProvider = model[index]
                            }
dogmaphobic's avatar
dogmaphobic committed
317 318 319
                        }
                    }
                }
320 321 322 323 324 325 326 327 328 329
                //-----------------------------------------------------------------
                //-- Palette Styles
                Row {
                    spacing: ScreenTools.defaultFontPixelWidth

                    QGCLabel {
                        width:              mapProvidersLabel.width
                        anchors.baseline:   paletteCombo.baseline
                        text:               qsTr("Style:")
                    }
Don Gagne's avatar
Don Gagne committed
330

331 332 333 334 335
                    QGCComboBox {
                        id:             paletteCombo
                        width:          _editFieldWidth
                        model:          [ qsTr("Indoor"), qsTr("Outdoor") ]
                        currentIndex:   QGroundControl.isDarkStyle ? 0 : 1
Don Gagne's avatar
Don Gagne committed
336

337 338 339 340 341
                        onActivated: {
                            if (index != -1) {
                                currentIndex = index
                                QGroundControl.isDarkStyle = index === 0 ? true : false
                            }
dogmaphobic's avatar
dogmaphobic committed
342 343 344
                        }
                    }
                }
Don Gagne's avatar
Don Gagne committed
345

346 347 348 349
                Item {
                    height: ScreenTools.defaultFontPixelHeight / 2
                    width:  parent.width
                }
350

351 352 353
                //-----------------------------------------------------------------
                //-- Autoconnect settings
                QGCLabel { text: "Autoconnect to the following devices:" }
Don Gagne's avatar
Don Gagne committed
354

355 356
                Row {
                    spacing: ScreenTools.defaultFontPixelWidth * 2
Don Gagne's avatar
Don Gagne committed
357

358 359 360 361 362 363
                    QGCCheckBox {
                        text:       qsTr("Pixhawk")
                        visible:    !ScreenTools.isiOS
                        checked:    QGroundControl.linkManager.autoconnectPixhawk
                        onClicked:  QGroundControl.linkManager.autoconnectPixhawk = checked
                    }
Don Gagne's avatar
Don Gagne committed
364

365 366 367 368 369 370
                    QGCCheckBox {
                        text:       qsTr("SiK Radio")
                        visible:    !ScreenTools.isiOS
                        checked:    QGroundControl.linkManager.autoconnect3DRRadio
                        onClicked:  QGroundControl.linkManager.autoconnect3DRRadio = checked
                    }
Don Gagne's avatar
Don Gagne committed
371

372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389
                    QGCCheckBox {
                        text:       qsTr("PX4 Flow")
                        visible:    !ScreenTools.isiOS
                        checked:    QGroundControl.linkManager.autoconnectPX4Flow
                        onClicked:  QGroundControl.linkManager.autoconnectPX4Flow = checked
                    }

                    QGCCheckBox {
                        text:       qsTr("UDP")
                        checked:    QGroundControl.linkManager.autoconnectUDP
                        onClicked:  QGroundControl.linkManager.autoconnectUDP = checked
                    }

                    QGCCheckBox {
                        text:       qsTr("RTK GPS")
                        checked:    QGroundControl.linkManager.autoconnectRTKGPS
                        onClicked:  QGroundControl.linkManager.autoconnectRTKGPS = checked
                    }
390 391
                }

392 393 394
                Item {
                    height: ScreenTools.defaultFontPixelHeight / 2
                    width:  parent.width
395
                }
Don Gagne's avatar
Don Gagne committed
396

397 398
                //-----------------------------------------------------------------
                //-- Virtual joystick settings
Don Gagne's avatar
Don Gagne committed
399
                QGCCheckBox {
400 401 402
                    text:       qsTr("Virtual Joystick")
                    checked:    QGroundControl.virtualTabletJoystick
                    onClicked:  QGroundControl.virtualTabletJoystick = checked
Don Gagne's avatar
Don Gagne committed
403
                }
404

405 406 407 408
                Item {
                    height: ScreenTools.defaultFontPixelHeight / 2
                    width:  parent.width
                }
409

410 411
                //-----------------------------------------------------------------
                //-- Offline mission editing settings
412 413 414

                QGCLabel { text: "Offline mission editing" }

415 416
                Row {
                    spacing: ScreenTools.defaultFontPixelWidth
417

418
                    QGCLabel {
419 420
                        text:               qsTr("Firmware:")
                        width:              hoverSpeedLabel.width
421 422
                        anchors.baseline:   offlineTypeCombo.baseline
                    }
423

424 425 426 427 428 429
                    FactComboBox {
                        id:         offlineTypeCombo
                        width:      ScreenTools.defaultFontPixelWidth * 18
                        fact:       QGroundControl.offlineEditingFirmwareType
                        indexModel: false
                    }
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 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487
                Row {
                    spacing: ScreenTools.defaultFontPixelWidth

                    QGCLabel {
                        text:               qsTr("Vehicle:")
                        width:              hoverSpeedLabel.width
                        anchors.baseline:   offlineVehicleCombo.baseline
                    }

                    FactComboBox {
                        id:         offlineVehicleCombo
                        width:      offlineTypeCombo.width
                        fact:       QGroundControl.offlineEditingVehicleType
                        indexModel: false
                    }
                }

                Row {
                    spacing: ScreenTools.defaultFontPixelWidth
                    visible:  offlineVehicleCombo.currentText != "Multicopter"

                    QGCLabel {
                        text:               qsTr("Cruise speed:")
                        width:              hoverSpeedLabel.width
                        anchors.baseline:   cruiseSpeedField.baseline
                    }


                    FactTextField {
                        id:                 cruiseSpeedField
                        width:              offlineTypeCombo.width
                        fact:               QGroundControl.offlineEditingCruiseSpeed
                        enabled:            true
                    }
                }

                Row {
                    spacing: ScreenTools.defaultFontPixelWidth
                    visible:  offlineVehicleCombo.currentText != "Fixedwing"

                    QGCLabel {
                        id:                 hoverSpeedLabel
                        text:               qsTr("Hover speed:")
                        width:              baseFontLabel.width
                        anchors.baseline:   hoverSpeedField.baseline
                    }


                    FactTextField {
                        id:                 hoverSpeedField
                        width:              offlineTypeCombo.width
                        fact:               QGroundControl.offlineEditingHoverSpeed
                        enabled:            true
                    }
                }

488 489 490
                Item {
                    height: ScreenTools.defaultFontPixelHeight / 2
                    width:  parent.width
491
                }
492
            }
dogmaphobic's avatar
dogmaphobic committed
493
        }
494 495
    } // QGCViewPanel
} // QGCView