GeneralSettings.qml 16.2 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 24
import QGroundControl.Controls              1.0
import QGroundControl.ScreenTools           1.0
import QGroundControl.MultiVehicleManager   1.0
import QGroundControl.Palette               1.0

Rectangle {
25
    id:                 _generalRoot
26
    color:              qgcPal.window
27 28
    anchors.fill:       parent
    anchors.margins:    ScreenTools.defaultFontPixelWidth
dogmaphobic's avatar
dogmaphobic committed
29

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

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

Don Gagne's avatar
Don Gagne committed
35
    QGCFlickable {
dogmaphobic's avatar
dogmaphobic committed
36 37 38
        clip:               true
        anchors.fill:       parent
        contentHeight:      settingsColumn.height
Don Gagne's avatar
Don Gagne committed
39
        contentWidth:       settingsColumn.width
dogmaphobic's avatar
dogmaphobic committed
40 41 42 43

        Column {
            id:                 settingsColumn
            anchors.margins:    ScreenTools.defaultFontPixelWidth
44
            spacing:            ScreenTools.defaultFontPixelHeight / 2
Don Gagne's avatar
Don Gagne committed
45

dogmaphobic's avatar
dogmaphobic committed
46
            QGCLabel {
Tomaz Canabrava's avatar
Tomaz Canabrava committed
47
                text:   qsTr("General Settings")
48
                font.pointSize: ScreenTools.mediumFontPointSize
dogmaphobic's avatar
dogmaphobic committed
49
            }
Don Gagne's avatar
Don Gagne committed
50

51 52 53
            Rectangle {
                height: 1
                width:  parent.width
Don Gagne's avatar
Don Gagne committed
54
                color:  qgcPal.text
55
            }
Don Gagne's avatar
Don Gagne committed
56

57 58
            Item {
                height: ScreenTools.defaultFontPixelHeight / 2
dogmaphobic's avatar
dogmaphobic committed
59 60
                width:  parent.width
            }
61

62
            //-----------------------------------------------------------------
63 64
            //-- Base UI Font Point Size
            Row {
Don Gagne's avatar
Don Gagne committed
65 66
                spacing: ScreenTools.defaultFontPixelWidth

67
                QGCLabel {
Don Gagne's avatar
Don Gagne committed
68 69
                    id:     baseFontLabel
                    text:   qsTr("Base UI font size:")
70 71
                    anchors.verticalCenter: parent.verticalCenter
                }
Don Gagne's avatar
Don Gagne committed
72

73
                Row {
Don Gagne's avatar
Don Gagne committed
74 75
                    id:         baseFontRow
                    spacing:    ScreenTools.defaultFontPixelWidth / 2
76
                    anchors.verticalCenter: parent.verticalCenter
Don Gagne's avatar
Don Gagne committed
77 78 79 80 81 82 83 84 85 86

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

                        onClicked: {
                            if(ScreenTools.defaultFontPointSize > 6) {
                                QGroundControl.baseFontPointSize = QGroundControl.baseFontPointSize - 1
87 88 89
                            }
                        }
                    }
Don Gagne's avatar
Don Gagne committed
90

91
                    QGCTextField {
Don Gagne's avatar
Don Gagne committed
92 93 94 95 96 97 98 99
                        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;}

100 101 102 103 104 105
                        onEditingFinished: {
                            var point = parseFloat(text)
                            if(point >= 6.0 && point <= 48.0)
                                QGroundControl.baseFontPointSize = point;
                        }
                    }
Don Gagne's avatar
Don Gagne committed
106 107 108 109 110 111 112 113 114

                    QGCButton {
                        width:  height
                        height: baseFontEdit.height
                        text:   "+"

                        onClicked: {
                            if(ScreenTools.defaultFontPointSize < 49) {
                                QGroundControl.baseFontPointSize = QGroundControl.baseFontPointSize + 1
115 116 117 118
                            }
                        }
                    }
                }
Don Gagne's avatar
Don Gagne committed
119

120 121
                QGCLabel {
                    anchors.verticalCenter: parent.verticalCenter
Don Gagne's avatar
Don Gagne committed
122
                    text:                   qsTr("(requires app restart)")
123 124 125 126
                }
            }

            //-----------------------------------------------------------------
127 128 129 130 131 132
            //-- Units

            Row {
                spacing:    ScreenTools.defaultFontPixelWidth

                QGCLabel {
Don Gagne's avatar
Don Gagne committed
133
                    width:              baseFontLabel.width
134
                    anchors.baseline:   distanceUnitsCombo.baseline
Tomaz Canabrava's avatar
Tomaz Canabrava committed
135
                    text:               qsTr("Distance units:")
136 137 138
                }

                FactComboBox {
dogmaphobic's avatar
dogmaphobic committed
139 140 141 142
                    id:                 distanceUnitsCombo
                    width:              _editFieldWidth
                    fact:               QGroundControl.distanceUnits
                    indexModel:         false
143 144 145 146
                }

                QGCLabel {
                    anchors.baseline:   distanceUnitsCombo.baseline
Don Gagne's avatar
Don Gagne committed
147
                    text:               qsTr("(requires app restart)")
148 149 150 151 152
                }

            }

            Row {
dogmaphobic's avatar
dogmaphobic committed
153
                spacing:                ScreenTools.defaultFontPixelWidth
154 155

                QGCLabel {
Don Gagne's avatar
Don Gagne committed
156
                    width:              baseFontLabel.width
157
                    anchors.baseline:   speedUnitsCombo.baseline
Tomaz Canabrava's avatar
Tomaz Canabrava committed
158
                    text:               qsTr("Speed units:")
159 160 161
                }

                FactComboBox {
dogmaphobic's avatar
dogmaphobic committed
162 163 164 165
                    id:                 speedUnitsCombo
                    width:              _editFieldWidth
                    fact:               QGroundControl.speedUnits
                    indexModel:         false
166 167 168
                }

                QGCLabel {
169
                    anchors.baseline:   speedUnitsCombo.baseline
Don Gagne's avatar
Don Gagne committed
170
                    text:               qsTr("(requires app restart)")
171 172 173
                }
            }

Don Gagne's avatar
Don Gagne committed
174 175 176 177 178
            Item {
                height: ScreenTools.defaultFontPixelHeight / 2
                width:  parent.width
            }

dogmaphobic's avatar
dogmaphobic committed
179 180 181
            //-----------------------------------------------------------------
            //-- Audio preferences
            QGCCheckBox {
Tomaz Canabrava's avatar
Tomaz Canabrava committed
182
                text:       qsTr("Mute all audio output")
dogmaphobic's avatar
dogmaphobic committed
183 184 185 186 187 188 189 190
                checked:    QGroundControl.isAudioMuted
                onClicked: {
                    QGroundControl.isAudioMuted = checked
                }
            }
            //-----------------------------------------------------------------
            //-- Prompt Save Log
            QGCCheckBox {
191
                id:         promptSaveLog
Tomaz Canabrava's avatar
Tomaz Canabrava committed
192
                text:       qsTr("Prompt to save Flight Data Log after each flight")
dogmaphobic's avatar
dogmaphobic committed
193 194 195 196 197 198 199
                checked:    QGroundControl.isSaveLogPrompt
                visible:    !ScreenTools.isMobile
                onClicked: {
                    QGroundControl.isSaveLogPrompt = checked
                }
            }
            //-----------------------------------------------------------------
200 201
            //-- Prompt Save even if not armed
            QGCCheckBox {
Tomaz Canabrava's avatar
Tomaz Canabrava committed
202
                text:       qsTr("Prompt to save Flight Data Log even if vehicle was not armed")
203 204 205 206 207 208 209 210
                checked:    QGroundControl.isSaveLogPromptNotArmed
                visible:    !ScreenTools.isMobile
                enabled:    promptSaveLog.checked
                onClicked: {
                    QGroundControl.isSaveLogPromptNotArmed = checked
                }
            }
            //-----------------------------------------------------------------
dogmaphobic's avatar
dogmaphobic committed
211 212 213
            //-- Clear settings
            QGCCheckBox {
                id:         clearCheck
Tomaz Canabrava's avatar
Tomaz Canabrava committed
214
                text:       qsTr("Clear all settings on next start")
dogmaphobic's avatar
dogmaphobic committed
215 216 217 218 219 220 221 222 223
                checked:    false
                onClicked: {
                    checked ? clearDialog.visible = true : QGroundControl.clearDeleteAllSettingsNextBoot()
                }
                MessageDialog {
                    id:         clearDialog
                    visible:    false
                    icon:       StandardIcon.Warning
                    standardButtons: StandardButton.Yes | StandardButton.No
Tomaz Canabrava's avatar
Tomaz Canabrava committed
224 225
                    title:      qsTr("Clear Settings")
                    text:       qsTr("All saved settings will be reset the next time you start QGroundControl. Is this really what you want?")
dogmaphobic's avatar
dogmaphobic committed
226 227 228 229 230 231 232 233 234 235
                    onYes: {
                        QGroundControl.deleteAllSettingsNextBoot()
                        clearDialog.visible = false
                    }
                    onNo: {
                        clearCheck.checked  = false
                        clearDialog.visible = false
                    }
                }
            }
236 237 238 239 240 241 242 243
            //-----------------------------------------------------------------
            //-- Battery talker
            Row {
                spacing: ScreenTools.defaultFontPixelWidth

                QGCCheckBox {
                    id:                 announcePercentCheckbox
                    anchors.baseline:   announcePercent.baseline
Don Gagne's avatar
Don Gagne committed
244
                    text:               qsTr("Announce battery lower than:")
245 246 247 248 249 250 251 252 253 254 255 256
                    checked:            _percentRemainingAnnounce.value != 0

                    onClicked: {
                        if (checked) {
                            _percentRemainingAnnounce.value = _percentRemainingAnnounce.defaultValueString
                        } else {
                            _percentRemainingAnnounce.value = 0
                        }
                    }
                }

                FactTextField {
Don Gagne's avatar
Don Gagne committed
257 258 259
                    id:                 announcePercent
                    fact:               _percentRemainingAnnounce
                    enabled:            announcePercentCheckbox.checked
260 261
                }
            }
262 263 264 265 266

            Item {
                height: ScreenTools.defaultFontPixelHeight / 2
                width:  parent.width
            }
Don Gagne's avatar
Don Gagne committed
267

dogmaphobic's avatar
dogmaphobic committed
268 269 270
            //-----------------------------------------------------------------
            //-- Map Providers
            Row {
Don Gagne's avatar
Don Gagne committed
271 272
                spacing: ScreenTools.defaultFontPixelWidth

dogmaphobic's avatar
dogmaphobic committed
273
                QGCLabel {
Don Gagne's avatar
Don Gagne committed
274
                    id:                 mapProvidersLabel
275
                    anchors.baseline:   mapProviders.baseline
276
                    text:               qsTr("Map Provider:")
dogmaphobic's avatar
dogmaphobic committed
277
                }
Don Gagne's avatar
Don Gagne committed
278

dogmaphobic's avatar
dogmaphobic committed
279
                QGCComboBox {
dogmaphobic's avatar
dogmaphobic committed
280 281 282
                    id:                 mapProviders
                    width:              _editFieldWidth
                    model:              QGroundControl.flightMapSettings.mapProviders
dogmaphobic's avatar
dogmaphobic committed
283 284 285
                    Component.onCompleted: {
                        var index = mapProviders.find(QGroundControl.flightMapSettings.mapProvider)
                        if (index < 0) {
Tomaz Canabrava's avatar
Tomaz Canabrava committed
286
                            console.warn(qsTr("Active map provider not in combobox"), QGroundControl.flightMapSettings.mapProvider)
dogmaphobic's avatar
dogmaphobic committed
287 288 289 290 291 292 293
                        } else {
                            mapProviders.currentIndex = index
                        }
                    }
                    onActivated: {
                        if (index != -1) {
                            currentIndex = index
Tomaz Canabrava's avatar
Tomaz Canabrava committed
294
                            console.log(qsTr("New map provider: ") + model[index])
dogmaphobic's avatar
dogmaphobic committed
295 296 297 298 299 300 301 302
                            QGroundControl.flightMapSettings.mapProvider = model[index]
                        }
                    }
                }
            }
            //-----------------------------------------------------------------
            //-- Palette Styles
            Row {
Don Gagne's avatar
Don Gagne committed
303 304
                spacing: ScreenTools.defaultFontPixelWidth

dogmaphobic's avatar
dogmaphobic committed
305
                QGCLabel {
Don Gagne's avatar
Don Gagne committed
306
                    width:              mapProvidersLabel.width
307
                    anchors.baseline:   paletteCombo.baseline
Tomaz Canabrava's avatar
Tomaz Canabrava committed
308
                    text:               qsTr("Style:")
dogmaphobic's avatar
dogmaphobic committed
309
                }
Don Gagne's avatar
Don Gagne committed
310

dogmaphobic's avatar
dogmaphobic committed
311
                QGCComboBox {
Don Gagne's avatar
Don Gagne committed
312 313 314 315 316
                    id:             paletteCombo
                    width:          _editFieldWidth
                    model:          [ qsTr("Indoor"), qsTr("Outdoor") ]
                    currentIndex:   QGroundControl.isDarkStyle ? 0 : 1

dogmaphobic's avatar
dogmaphobic committed
317 318 319 320 321 322 323 324
                    onActivated: {
                        if (index != -1) {
                            currentIndex = index
                            QGroundControl.isDarkStyle = index === 0 ? true : false
                        }
                    }
                }
            }
Don Gagne's avatar
Don Gagne committed
325

326 327 328 329 330
            Item {
                height: ScreenTools.defaultFontPixelHeight / 2
                width:  parent.width
            }

Don Gagne's avatar
Don Gagne committed
331 332 333 334
            //-----------------------------------------------------------------
            //-- Autoconnect settings
            QGCLabel { text: "Autoconnect to the following devices:" }

335 336
            Row {
                spacing: ScreenTools.defaultFontPixelWidth * 2
Don Gagne's avatar
Don Gagne committed
337

338
                QGCCheckBox {
Tomaz Canabrava's avatar
Tomaz Canabrava committed
339
                    text:       qsTr("Pixhawk")
340 341 342 343
                    visible:    !ScreenTools.isiOS
                    checked:    QGroundControl.linkManager.autoconnectPixhawk
                    onClicked:  QGroundControl.linkManager.autoconnectPixhawk = checked
                }
Don Gagne's avatar
Don Gagne committed
344

345
                QGCCheckBox {
Tomaz Canabrava's avatar
Tomaz Canabrava committed
346
                    text:       qsTr("SiK Radio")
347 348 349 350
                    visible:    !ScreenTools.isiOS
                    checked:    QGroundControl.linkManager.autoconnect3DRRadio
                    onClicked:  QGroundControl.linkManager.autoconnect3DRRadio = checked
                }
Don Gagne's avatar
Don Gagne committed
351

352
                QGCCheckBox {
Tomaz Canabrava's avatar
Tomaz Canabrava committed
353
                    text:       qsTr("PX4 Flow")
354 355 356 357 358 359
                    visible:    !ScreenTools.isiOS
                    checked:    QGroundControl.linkManager.autoconnectPX4Flow
                    onClicked:  QGroundControl.linkManager.autoconnectPX4Flow = checked
                }

                QGCCheckBox {
Tomaz Canabrava's avatar
Tomaz Canabrava committed
360
                    text:       qsTr("UDP")
361 362 363
                    checked:    QGroundControl.linkManager.autoconnectUDP
                    onClicked:  QGroundControl.linkManager.autoconnectUDP = checked
                }
Don Gagne's avatar
Don Gagne committed
364 365 366 367 368 369

                QGCCheckBox {
                    text:       qsTr("RTK GPS")
                    checked:    QGroundControl.linkManager.autoconnectRTKGPS
                    onClicked:  QGroundControl.linkManager.autoconnectRTKGPS = checked
                }
Don Gagne's avatar
Don Gagne committed
370
            }
371 372 373 374 375 376 377 378 379

            Item {
                height: ScreenTools.defaultFontPixelHeight / 2
                width:  parent.width
            }

            //-----------------------------------------------------------------
            //-- Virtual joystick settings
            QGCCheckBox {
Tomaz Canabrava's avatar
Tomaz Canabrava committed
380
                text:       qsTr("Virtual Joystick")
381 382 383
                checked:    QGroundControl.virtualTabletJoystick
                onClicked:  QGroundControl.virtualTabletJoystick = checked
            }
384 385 386 387 388 389

            Item {
                height: ScreenTools.defaultFontPixelHeight / 2
                width:  parent.width
            }

390 391
            //-----------------------------------------------------------------
            //-- Offline mission editing settings
392 393 394 395
            Row {
                spacing: ScreenTools.defaultFontPixelWidth

                QGCLabel {
Don Gagne's avatar
Don Gagne committed
396
                    text:               qsTr("Offline mission editing:")
397 398 399 400 401
                    anchors.baseline:   offlineTypeCombo.baseline
                }

                FactComboBox {
                    id:         offlineTypeCombo
Don Gagne's avatar
Don Gagne committed
402
                    width:      ScreenTools.defaultFontPixelWidth * 18
403 404 405 406
                    fact:       QGroundControl.offlineEditingFirmwareType
                    indexModel: false
                }
            }
407 408 409 410 411 412 413 414 415

            Item {
                height: ScreenTools.defaultFontPixelHeight / 2
                width:  parent.width
            }

            //-----------------------------------------------------------------
            //-- Experimental Survey settings
            QGCCheckBox {
Tomaz Canabrava's avatar
Tomaz Canabrava committed
416
                text:       qsTr("Experimental Survey [WIP - no bugs reports please]")
417 418 419
                checked:    QGroundControl.experimentalSurvey
                onClicked:  QGroundControl.experimentalSurvey = checked
            }
dogmaphobic's avatar
dogmaphobic committed
420 421 422
        }
    }
}