GeneralSettings.qml 15.8 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

46
            //-----------------------------------------------------------------
47 48
            //-- Base UI Font Point Size
            Row {
Don Gagne's avatar
Don Gagne committed
49 50
                spacing: ScreenTools.defaultFontPixelWidth

51
                QGCLabel {
Don Gagne's avatar
Don Gagne committed
52 53
                    id:     baseFontLabel
                    text:   qsTr("Base UI font size:")
54 55
                    anchors.verticalCenter: parent.verticalCenter
                }
Don Gagne's avatar
Don Gagne committed
56

57
                Row {
Don Gagne's avatar
Don Gagne committed
58 59
                    id:         baseFontRow
                    spacing:    ScreenTools.defaultFontPixelWidth / 2
60
                    anchors.verticalCenter: parent.verticalCenter
Don Gagne's avatar
Don Gagne committed
61 62 63 64 65 66 67 68 69 70

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

                        onClicked: {
                            if(ScreenTools.defaultFontPointSize > 6) {
                                QGroundControl.baseFontPointSize = QGroundControl.baseFontPointSize - 1
71 72 73
                            }
                        }
                    }
Don Gagne's avatar
Don Gagne committed
74

75
                    QGCTextField {
Don Gagne's avatar
Don Gagne committed
76 77 78 79 80 81 82 83
                        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;}

84 85 86 87 88 89
                        onEditingFinished: {
                            var point = parseFloat(text)
                            if(point >= 6.0 && point <= 48.0)
                                QGroundControl.baseFontPointSize = point;
                        }
                    }
Don Gagne's avatar
Don Gagne committed
90 91 92 93 94 95 96 97 98

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

                        onClicked: {
                            if(ScreenTools.defaultFontPointSize < 49) {
                                QGroundControl.baseFontPointSize = QGroundControl.baseFontPointSize + 1
99 100 101 102
                            }
                        }
                    }
                }
Don Gagne's avatar
Don Gagne committed
103

104 105
                QGCLabel {
                    anchors.verticalCenter: parent.verticalCenter
Don Gagne's avatar
Don Gagne committed
106
                    text:                   qsTr("(requires app restart)")
107 108 109 110
                }
            }

            //-----------------------------------------------------------------
111 112 113 114 115 116
            //-- Units

            Row {
                spacing:    ScreenTools.defaultFontPixelWidth

                QGCLabel {
Don Gagne's avatar
Don Gagne committed
117
                    width:              baseFontLabel.width
118
                    anchors.baseline:   distanceUnitsCombo.baseline
Tomaz Canabrava's avatar
Tomaz Canabrava committed
119
                    text:               qsTr("Distance units:")
120 121 122
                }

                FactComboBox {
dogmaphobic's avatar
dogmaphobic committed
123 124 125 126
                    id:                 distanceUnitsCombo
                    width:              _editFieldWidth
                    fact:               QGroundControl.distanceUnits
                    indexModel:         false
127 128 129 130
                }

                QGCLabel {
                    anchors.baseline:   distanceUnitsCombo.baseline
Don Gagne's avatar
Don Gagne committed
131
                    text:               qsTr("(requires app restart)")
132 133 134 135 136
                }

            }

            Row {
dogmaphobic's avatar
dogmaphobic committed
137
                spacing:                ScreenTools.defaultFontPixelWidth
138 139

                QGCLabel {
Don Gagne's avatar
Don Gagne committed
140
                    width:              baseFontLabel.width
141
                    anchors.baseline:   speedUnitsCombo.baseline
Tomaz Canabrava's avatar
Tomaz Canabrava committed
142
                    text:               qsTr("Speed units:")
143 144 145
                }

                FactComboBox {
dogmaphobic's avatar
dogmaphobic committed
146 147 148 149
                    id:                 speedUnitsCombo
                    width:              _editFieldWidth
                    fact:               QGroundControl.speedUnits
                    indexModel:         false
150 151 152
                }

                QGCLabel {
153
                    anchors.baseline:   speedUnitsCombo.baseline
Don Gagne's avatar
Don Gagne committed
154
                    text:               qsTr("(requires app restart)")
155 156 157
                }
            }

Don Gagne's avatar
Don Gagne committed
158 159 160 161 162
            Item {
                height: ScreenTools.defaultFontPixelHeight / 2
                width:  parent.width
            }

dogmaphobic's avatar
dogmaphobic committed
163 164 165
            //-----------------------------------------------------------------
            //-- Audio preferences
            QGCCheckBox {
Tomaz Canabrava's avatar
Tomaz Canabrava committed
166
                text:       qsTr("Mute all audio output")
dogmaphobic's avatar
dogmaphobic committed
167 168 169 170 171 172 173 174
                checked:    QGroundControl.isAudioMuted
                onClicked: {
                    QGroundControl.isAudioMuted = checked
                }
            }
            //-----------------------------------------------------------------
            //-- Prompt Save Log
            QGCCheckBox {
175
                id:         promptSaveLog
Tomaz Canabrava's avatar
Tomaz Canabrava committed
176
                text:       qsTr("Prompt to save Flight Data Log after each flight")
dogmaphobic's avatar
dogmaphobic committed
177 178 179 180 181 182 183
                checked:    QGroundControl.isSaveLogPrompt
                visible:    !ScreenTools.isMobile
                onClicked: {
                    QGroundControl.isSaveLogPrompt = checked
                }
            }
            //-----------------------------------------------------------------
184 185
            //-- Prompt Save even if not armed
            QGCCheckBox {
Tomaz Canabrava's avatar
Tomaz Canabrava committed
186
                text:       qsTr("Prompt to save Flight Data Log even if vehicle was not armed")
187 188 189 190 191 192 193 194
                checked:    QGroundControl.isSaveLogPromptNotArmed
                visible:    !ScreenTools.isMobile
                enabled:    promptSaveLog.checked
                onClicked: {
                    QGroundControl.isSaveLogPromptNotArmed = checked
                }
            }
            //-----------------------------------------------------------------
dogmaphobic's avatar
dogmaphobic committed
195 196 197
            //-- Clear settings
            QGCCheckBox {
                id:         clearCheck
Tomaz Canabrava's avatar
Tomaz Canabrava committed
198
                text:       qsTr("Clear all settings on next start")
dogmaphobic's avatar
dogmaphobic committed
199 200 201 202 203 204 205 206 207
                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
208 209
                    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
210 211 212 213 214 215 216 217 218 219
                    onYes: {
                        QGroundControl.deleteAllSettingsNextBoot()
                        clearDialog.visible = false
                    }
                    onNo: {
                        clearCheck.checked  = false
                        clearDialog.visible = false
                    }
                }
            }
220 221 222 223 224 225 226 227
            //-----------------------------------------------------------------
            //-- Battery talker
            Row {
                spacing: ScreenTools.defaultFontPixelWidth

                QGCCheckBox {
                    id:                 announcePercentCheckbox
                    anchors.baseline:   announcePercent.baseline
Don Gagne's avatar
Don Gagne committed
228
                    text:               qsTr("Announce battery lower than:")
229 230 231 232 233 234 235 236 237 238 239 240
                    checked:            _percentRemainingAnnounce.value != 0

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

                FactTextField {
Don Gagne's avatar
Don Gagne committed
241 242 243
                    id:                 announcePercent
                    fact:               _percentRemainingAnnounce
                    enabled:            announcePercentCheckbox.checked
244 245
                }
            }
246 247 248 249 250

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

dogmaphobic's avatar
dogmaphobic committed
252 253 254
            //-----------------------------------------------------------------
            //-- Map Providers
            Row {
Don Gagne's avatar
Don Gagne committed
255 256
                spacing: ScreenTools.defaultFontPixelWidth

dogmaphobic's avatar
dogmaphobic committed
257
                QGCLabel {
Don Gagne's avatar
Don Gagne committed
258
                    id:                 mapProvidersLabel
259
                    anchors.baseline:   mapProviders.baseline
260
                    text:               qsTr("Map Provider:")
dogmaphobic's avatar
dogmaphobic committed
261
                }
Don Gagne's avatar
Don Gagne committed
262

dogmaphobic's avatar
dogmaphobic committed
263
                QGCComboBox {
dogmaphobic's avatar
dogmaphobic committed
264 265 266
                    id:                 mapProviders
                    width:              _editFieldWidth
                    model:              QGroundControl.flightMapSettings.mapProviders
dogmaphobic's avatar
dogmaphobic committed
267 268 269
                    Component.onCompleted: {
                        var index = mapProviders.find(QGroundControl.flightMapSettings.mapProvider)
                        if (index < 0) {
Tomaz Canabrava's avatar
Tomaz Canabrava committed
270
                            console.warn(qsTr("Active map provider not in combobox"), QGroundControl.flightMapSettings.mapProvider)
dogmaphobic's avatar
dogmaphobic committed
271 272 273 274 275 276 277
                        } else {
                            mapProviders.currentIndex = index
                        }
                    }
                    onActivated: {
                        if (index != -1) {
                            currentIndex = index
Tomaz Canabrava's avatar
Tomaz Canabrava committed
278
                            console.log(qsTr("New map provider: ") + model[index])
dogmaphobic's avatar
dogmaphobic committed
279 280 281 282 283 284 285 286
                            QGroundControl.flightMapSettings.mapProvider = model[index]
                        }
                    }
                }
            }
            //-----------------------------------------------------------------
            //-- Palette Styles
            Row {
Don Gagne's avatar
Don Gagne committed
287 288
                spacing: ScreenTools.defaultFontPixelWidth

dogmaphobic's avatar
dogmaphobic committed
289
                QGCLabel {
Don Gagne's avatar
Don Gagne committed
290
                    width:              mapProvidersLabel.width
291
                    anchors.baseline:   paletteCombo.baseline
Tomaz Canabrava's avatar
Tomaz Canabrava committed
292
                    text:               qsTr("Style:")
dogmaphobic's avatar
dogmaphobic committed
293
                }
Don Gagne's avatar
Don Gagne committed
294

dogmaphobic's avatar
dogmaphobic committed
295
                QGCComboBox {
Don Gagne's avatar
Don Gagne committed
296 297 298 299 300
                    id:             paletteCombo
                    width:          _editFieldWidth
                    model:          [ qsTr("Indoor"), qsTr("Outdoor") ]
                    currentIndex:   QGroundControl.isDarkStyle ? 0 : 1

dogmaphobic's avatar
dogmaphobic committed
301 302 303 304 305 306 307 308
                    onActivated: {
                        if (index != -1) {
                            currentIndex = index
                            QGroundControl.isDarkStyle = index === 0 ? true : false
                        }
                    }
                }
            }
Don Gagne's avatar
Don Gagne committed
309

310 311 312 313 314
            Item {
                height: ScreenTools.defaultFontPixelHeight / 2
                width:  parent.width
            }

Don Gagne's avatar
Don Gagne committed
315 316 317 318
            //-----------------------------------------------------------------
            //-- Autoconnect settings
            QGCLabel { text: "Autoconnect to the following devices:" }

319 320
            Row {
                spacing: ScreenTools.defaultFontPixelWidth * 2
Don Gagne's avatar
Don Gagne committed
321

322
                QGCCheckBox {
Tomaz Canabrava's avatar
Tomaz Canabrava committed
323
                    text:       qsTr("Pixhawk")
324 325 326 327
                    visible:    !ScreenTools.isiOS
                    checked:    QGroundControl.linkManager.autoconnectPixhawk
                    onClicked:  QGroundControl.linkManager.autoconnectPixhawk = checked
                }
Don Gagne's avatar
Don Gagne committed
328

329
                QGCCheckBox {
Tomaz Canabrava's avatar
Tomaz Canabrava committed
330
                    text:       qsTr("SiK Radio")
331 332 333 334
                    visible:    !ScreenTools.isiOS
                    checked:    QGroundControl.linkManager.autoconnect3DRRadio
                    onClicked:  QGroundControl.linkManager.autoconnect3DRRadio = checked
                }
Don Gagne's avatar
Don Gagne committed
335

336
                QGCCheckBox {
Tomaz Canabrava's avatar
Tomaz Canabrava committed
337
                    text:       qsTr("PX4 Flow")
338 339 340 341 342 343
                    visible:    !ScreenTools.isiOS
                    checked:    QGroundControl.linkManager.autoconnectPX4Flow
                    onClicked:  QGroundControl.linkManager.autoconnectPX4Flow = checked
                }

                QGCCheckBox {
Tomaz Canabrava's avatar
Tomaz Canabrava committed
344
                    text:       qsTr("UDP")
345 346 347
                    checked:    QGroundControl.linkManager.autoconnectUDP
                    onClicked:  QGroundControl.linkManager.autoconnectUDP = checked
                }
Don Gagne's avatar
Don Gagne committed
348 349 350 351 352 353

                QGCCheckBox {
                    text:       qsTr("RTK GPS")
                    checked:    QGroundControl.linkManager.autoconnectRTKGPS
                    onClicked:  QGroundControl.linkManager.autoconnectRTKGPS = checked
                }
Don Gagne's avatar
Don Gagne committed
354
            }
355 356 357 358 359 360 361 362 363

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

            //-----------------------------------------------------------------
            //-- Virtual joystick settings
            QGCCheckBox {
Tomaz Canabrava's avatar
Tomaz Canabrava committed
364
                text:       qsTr("Virtual Joystick")
365 366 367
                checked:    QGroundControl.virtualTabletJoystick
                onClicked:  QGroundControl.virtualTabletJoystick = checked
            }
368 369 370 371 372 373

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

374 375
            //-----------------------------------------------------------------
            //-- Offline mission editing settings
376 377 378 379
            Row {
                spacing: ScreenTools.defaultFontPixelWidth

                QGCLabel {
Don Gagne's avatar
Don Gagne committed
380
                    text:               qsTr("Offline mission editing:")
381 382 383 384 385
                    anchors.baseline:   offlineTypeCombo.baseline
                }

                FactComboBox {
                    id:         offlineTypeCombo
Don Gagne's avatar
Don Gagne committed
386
                    width:      ScreenTools.defaultFontPixelWidth * 18
387 388 389 390
                    fact:       QGroundControl.offlineEditingFirmwareType
                    indexModel: false
                }
            }
391 392 393 394 395 396 397 398 399

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

            //-----------------------------------------------------------------
            //-- Experimental Survey settings
            QGCCheckBox {
Tomaz Canabrava's avatar
Tomaz Canabrava committed
400
                text:       qsTr("Experimental Survey [WIP - no bugs reports please]")
401 402 403
                checked:    QGroundControl.experimentalSurvey
                onClicked:  QGroundControl.experimentalSurvey = checked
            }
dogmaphobic's avatar
dogmaphobic committed
404 405 406
        }
    }
}