地面站终端 App
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

433 lines
17 KiB

/****************************************************************************
*
* (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.
*
****************************************************************************/
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
import QGroundControl.FactControls 1.0
import QGroundControl.Controls 1.0
import QGroundControl.ScreenTools 1.0
import QGroundControl.MultiVehicleManager 1.0
import QGroundControl.Palette 1.0
Rectangle {
id: _generalRoot
color: qgcPal.window
anchors.fill: parent
anchors.margins: ScreenTools.defaultFontPixelWidth
property Fact _percentRemainingAnnounce: QGroundControl.multiVehicleManager.disconnectedVehicle.battery.percentRemainingAnnounce
property real _editFieldWidth: ScreenTools.defaultFontPixelWidth * 15
QGCPalette { id: qgcPal }
QGCFlickable {
clip: true
anchors.fill: parent
contentHeight: settingsColumn.height
contentWidth: settingsColumn.width
Column {
id: settingsColumn
anchors.margins: ScreenTools.defaultFontPixelWidth
spacing: ScreenTools.defaultFontPixelHeight / 2
QGCLabel {
text: qsTr("General Settings")
font.pointSize: ScreenTools.mediumFontPointSize
}
Rectangle {
height: 1
width: parent.width
color: qgcPal.text
}
Item {
height: ScreenTools.defaultFontPixelHeight / 2
width: parent.width
}
//-----------------------------------------------------------------
//-- Base UI Font Point Size
Row {
spacing: ScreenTools.defaultFontPixelWidth
QGCLabel {
id: baseFontLabel
text: qsTr("Base UI font size:")
anchors.verticalCenter: parent.verticalCenter
}
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
}
}
}
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;
}
}
QGCButton {
width: height
height: baseFontEdit.height
text: "+"
onClicked: {
if(ScreenTools.defaultFontPointSize < 49) {
QGroundControl.baseFontPointSize = QGroundControl.baseFontPointSize + 1
}
}
}
}
QGCLabel {
anchors.verticalCenter: parent.verticalCenter
text: qsTr("(requires app restart)")
}
}
//-----------------------------------------------------------------
//-- Units
Row {
spacing: ScreenTools.defaultFontPixelWidth
QGCLabel {
width: baseFontLabel.width
anchors.baseline: distanceUnitsCombo.baseline
text: qsTr("Distance units:")
}
FactComboBox {
id: distanceUnitsCombo
width: _editFieldWidth
fact: QGroundControl.distanceUnits
indexModel: false
}
QGCLabel {
anchors.baseline: distanceUnitsCombo.baseline
text: qsTr("(requires app restart)")
}
}
Row {
spacing: ScreenTools.defaultFontPixelWidth
QGCLabel {
width: baseFontLabel.width
anchors.baseline: speedUnitsCombo.baseline
text: qsTr("Speed units:")
}
FactComboBox {
id: speedUnitsCombo
width: _editFieldWidth
fact: QGroundControl.speedUnits
indexModel: false
}
QGCLabel {
anchors.baseline: speedUnitsCombo.baseline
text: qsTr("(requires app restart)")
}
}
Item {
height: ScreenTools.defaultFontPixelHeight / 2
width: parent.width
}
//-----------------------------------------------------------------
//-- Scale on Flight View
QGCCheckBox {
text: qsTr("Show scale on Fly View")
onClicked: {
QGroundControl.flightMapSettings.showScaleOnFlyView = checked
}
Component.onCompleted: {
checked = QGroundControl.flightMapSettings.showScaleOnFlyView
}
}
//-----------------------------------------------------------------
//-- Audio preferences
QGCCheckBox {
text: qsTr("Mute all audio output")
checked: QGroundControl.isAudioMuted
onClicked: {
QGroundControl.isAudioMuted = checked
}
}
//-----------------------------------------------------------------
//-- 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
}
}
//-----------------------------------------------------------------
//-- 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
}
}
//-----------------------------------------------------------------
//-- Clear settings
QGCCheckBox {
id: clearCheck
text: qsTr("Clear all settings on next start")
checked: false
onClicked: {
checked ? clearDialog.visible = true : QGroundControl.clearDeleteAllSettingsNextBoot()
}
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
}
}
}
//-----------------------------------------------------------------
//-- Battery talker
Row {
spacing: ScreenTools.defaultFontPixelWidth
QGCCheckBox {
id: announcePercentCheckbox
anchors.baseline: announcePercent.baseline
text: qsTr("Announce battery lower than:")
checked: _percentRemainingAnnounce.value != 0
onClicked: {
if (checked) {
_percentRemainingAnnounce.value = _percentRemainingAnnounce.defaultValueString
} else {
_percentRemainingAnnounce.value = 0
}
}
}
FactTextField {
id: announcePercent
fact: _percentRemainingAnnounce
enabled: announcePercentCheckbox.checked
}
}
Item {
height: ScreenTools.defaultFontPixelHeight / 2
width: parent.width
}
//-----------------------------------------------------------------
//-- Map Providers
Row {
spacing: ScreenTools.defaultFontPixelWidth
QGCLabel {
id: mapProvidersLabel
anchors.baseline: mapProviders.baseline
text: qsTr("Map Providers:")
}
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
}
}
onActivated: {
if (index != -1) {
currentIndex = index
console.log(qsTr("New map provider: ") + model[index])
QGroundControl.flightMapSettings.mapProvider = model[index]
}
}
}
}
//-----------------------------------------------------------------
//-- Palette Styles
Row {
spacing: ScreenTools.defaultFontPixelWidth
QGCLabel {
width: mapProvidersLabel.width
anchors.baseline: paletteCombo.baseline
text: qsTr("Style:")
}
QGCComboBox {
id: paletteCombo
width: _editFieldWidth
model: [ qsTr("Indoor"), qsTr("Outdoor") ]
currentIndex: QGroundControl.isDarkStyle ? 0 : 1
onActivated: {
if (index != -1) {
currentIndex = index
QGroundControl.isDarkStyle = index === 0 ? true : false
}
}
}
}
Item {
height: ScreenTools.defaultFontPixelHeight / 2
width: parent.width
}
//-----------------------------------------------------------------
//-- Autoconnect settings
QGCLabel { text: "Autoconnect to the following devices:" }
Row {
spacing: ScreenTools.defaultFontPixelWidth * 2
QGCCheckBox {
text: qsTr("Pixhawk")
visible: !ScreenTools.isiOS
checked: QGroundControl.linkManager.autoconnectPixhawk
onClicked: QGroundControl.linkManager.autoconnectPixhawk = checked
}
QGCCheckBox {
text: qsTr("SiK Radio")
visible: !ScreenTools.isiOS
checked: QGroundControl.linkManager.autoconnect3DRRadio
onClicked: QGroundControl.linkManager.autoconnect3DRRadio = checked
}
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
}
}
Item {
height: ScreenTools.defaultFontPixelHeight / 2
width: parent.width
}
//-----------------------------------------------------------------
//-- Virtual joystick settings
QGCCheckBox {
text: qsTr("Virtual Joystick")
checked: QGroundControl.virtualTabletJoystick
onClicked: QGroundControl.virtualTabletJoystick = checked
}
Item {
height: ScreenTools.defaultFontPixelHeight / 2
width: parent.width
}
//-----------------------------------------------------------------
//-- Offline mission editing settings
Row {
spacing: ScreenTools.defaultFontPixelWidth
QGCLabel {
text: qsTr("Offline mission editing:")
anchors.baseline: offlineTypeCombo.baseline
}
FactComboBox {
id: offlineTypeCombo
width: ScreenTools.defaultFontPixelWidth * 18
fact: QGroundControl.offlineEditingFirmwareType
indexModel: false
}
}
Item {
height: ScreenTools.defaultFontPixelHeight / 2
width: parent.width
}
//-----------------------------------------------------------------
//-- Experimental Survey settings
QGCCheckBox {
text: qsTr("Experimental Survey [WIP - no bugs reports please]")
checked: QGroundControl.experimentalSurvey
onClicked: QGroundControl.experimentalSurvey = checked
}
}
}
}