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.
1064 lines
63 KiB
1064 lines
63 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.3 |
|
import QtQuick.Controls 1.2 |
|
import QtQuick.Controls.Styles 1.4 |
|
import QtQuick.Dialogs 1.2 |
|
import QtQuick.Layouts 1.2 |
|
|
|
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 |
|
import QGroundControl.Controllers 1.0 |
|
import QGroundControl.SettingsManager 1.0 |
|
|
|
Rectangle { |
|
id: _root |
|
color: qgcPal.window |
|
anchors.fill: parent |
|
anchors.margins: ScreenTools.defaultFontPixelWidth |
|
|
|
property Fact _percentRemainingAnnounce: QGroundControl.settingsManager.appSettings.batteryPercentRemainingAnnounce |
|
property Fact _savePath: QGroundControl.settingsManager.appSettings.savePath |
|
property Fact _appFontPointSize: QGroundControl.settingsManager.appSettings.appFontPointSize |
|
property Fact _userBrandImageIndoor: QGroundControl.settingsManager.brandImageSettings.userBrandImageIndoor |
|
property Fact _userBrandImageOutdoor: QGroundControl.settingsManager.brandImageSettings.userBrandImageOutdoor |
|
property real _labelWidth: ScreenTools.defaultFontPixelWidth * 20 |
|
property real _comboFieldWidth: ScreenTools.defaultFontPixelWidth * 28 |
|
property real _valueFieldWidth: ScreenTools.defaultFontPixelWidth * 10 |
|
property Fact _mapProvider: QGroundControl.settingsManager.flightMapSettings.mapProvider |
|
property Fact _mapType: QGroundControl.settingsManager.flightMapSettings.mapType |
|
property Fact _followTarget: QGroundControl.settingsManager.appSettings.followTarget |
|
property real _panelWidth: _root.width * _internalWidthRatio |
|
property real _margins: ScreenTools.defaultFontPixelWidth |
|
|
|
property string _videoSource: QGroundControl.settingsManager.videoSettings.videoSource.value |
|
property bool _isGst: QGroundControl.videoManager.isGStreamer |
|
property bool _isUDP264: _isGst && _videoSource === QGroundControl.settingsManager.videoSettings.udp264VideoSource |
|
property bool _isUDP265: _isGst && _videoSource === QGroundControl.settingsManager.videoSettings.udp265VideoSource |
|
property bool _isRTSP: _isGst && _videoSource === QGroundControl.settingsManager.videoSettings.rtspVideoSource |
|
property bool _isTCP: _isGst && _videoSource === QGroundControl.settingsManager.videoSettings.tcpVideoSource |
|
property bool _isMPEGTS: _isGst && _videoSource === QGroundControl.settingsManager.videoSettings.mpegtsVideoSource |
|
|
|
property string gpsDisabled: "Disabled" |
|
property string gpsUdpPort: "UDP Port" |
|
|
|
readonly property real _internalWidthRatio: 0.8 |
|
|
|
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 |
|
} |
|
} |
|
} |
|
} |
|
|
|
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 |
|
|
|
GridLayout { |
|
id: comboGrid |
|
anchors.horizontalCenter: parent.horizontalCenter |
|
columns: 2 |
|
|
|
QGCLabel { |
|
text: qsTr("Language") |
|
visible: QGroundControl.settingsManager.appSettings.language.visible |
|
} |
|
FactComboBox { |
|
Layout.preferredWidth: _comboFieldWidth |
|
fact: QGroundControl.settingsManager.appSettings.language |
|
indexModel: false |
|
visible: QGroundControl.settingsManager.appSettings.language.visible |
|
} |
|
|
|
QGCLabel { |
|
text: qsTr("Color Scheme") |
|
visible: QGroundControl.settingsManager.appSettings.indoorPalette.visible |
|
} |
|
FactComboBox { |
|
Layout.preferredWidth: _comboFieldWidth |
|
fact: QGroundControl.settingsManager.appSettings.indoorPalette |
|
indexModel: false |
|
visible: QGroundControl.settingsManager.appSettings.indoorPalette.visible |
|
} |
|
|
|
QGCLabel { |
|
text: qsTr("Map Provider") |
|
width: _labelWidth |
|
visible: _mapProvider && _mapProvider.visible |
|
} |
|
FactComboBox { |
|
Layout.preferredWidth: _comboFieldWidth |
|
fact: _mapProvider |
|
indexModel: false |
|
visible: _mapProvider && _mapProvider.visible |
|
} |
|
|
|
QGCLabel { |
|
text: qsTr("Map Type") |
|
visible: _mapType && _mapType.visible |
|
} |
|
FactComboBox { |
|
id: mapTypes |
|
Layout.preferredWidth: _comboFieldWidth |
|
fact: _mapType |
|
indexModel: false |
|
visible: _mapType && _mapType.visible |
|
Connections { |
|
target: QGroundControl.settingsManager.flightMapSettings |
|
onMapTypeChanged: { |
|
mapTypes.model = _mapType.enumStrings |
|
} |
|
} |
|
} |
|
|
|
QGCLabel { |
|
text: qsTr("Stream GCS Position") |
|
visible: _followTarget ? _followTarget.visible : false |
|
} |
|
FactComboBox { |
|
Layout.preferredWidth: _comboFieldWidth |
|
fact: _followTarget |
|
indexModel: false |
|
visible: _followTarget ? _followTarget.visible : false |
|
} |
|
} |
|
} |
|
|
|
Item { |
|
id: miscColItem |
|
anchors.margins: _margins |
|
anchors.left: parent.left |
|
anchors.right: parent.right |
|
anchors.top: comboGridItem.bottom |
|
height: miscCol.height |
|
|
|
ColumnLayout { |
|
id: miscCol |
|
anchors.horizontalCenter: parent.horizontalCenter |
|
spacing: _margins |
|
|
|
RowLayout { |
|
Layout.fillWidth: false |
|
Layout.alignment: Qt.AlignHCenter |
|
visible: _appFontPointSize ? _appFontPointSize.visible : false |
|
|
|
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 |
|
} |
|
} |
|
} |
|
FactTextField { |
|
id: baseFontEdit |
|
Layout.preferredWidth: _valueFieldWidth |
|
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 |
|
} |
|
} |
|
} |
|
} |
|
|
|
FactCheckBox { |
|
text: qsTr("Use Vehicle Pairing") |
|
fact: _usePairing |
|
visible: _usePairing && _usePairing.visible && QGroundControl.supportsPairing |
|
property Fact _usePairing: QGroundControl.settingsManager.appSettings.usePairing |
|
} |
|
|
|
FactCheckBox { |
|
text: qsTr("Mute all audio output") |
|
fact: _audioMuted |
|
visible: _audioMuted && _audioMuted.visible |
|
property Fact _audioMuted: QGroundControl.settingsManager.appSettings.audioMuted |
|
} |
|
|
|
FactCheckBox { |
|
text: qsTr("Check for Internet connection") |
|
fact: _checkInternet |
|
visible: _checkInternet && _checkInternet.visible |
|
property Fact _checkInternet: QGroundControl.settingsManager.appSettings.checkInternet |
|
} |
|
|
|
FactCheckBox { |
|
text: qsTr("AutoLoad Missions") |
|
fact: _autoLoad |
|
visible: _autoLoad && _autoLoad.visible |
|
|
|
property Fact _autoLoad: QGroundControl.settingsManager.appSettings.autoLoadMissions |
|
} |
|
|
|
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 %1. Is this really what you want?").arg(QGroundControl.appName) |
|
onYes: { |
|
QGroundControl.deleteAllSettingsNextBoot() |
|
clearDialog.visible = false |
|
} |
|
onNo: { |
|
clearCheck.checked = false |
|
clearDialog.visible = false |
|
} |
|
} |
|
} |
|
|
|
RowLayout { |
|
visible: QGroundControl.settingsManager.appSettings.batteryPercentRemainingAnnounce.visible |
|
|
|
QGCCheckBox { |
|
id: announcePercentCheckbox |
|
text: qsTr("Announce battery lower than") |
|
checked: _percentRemainingAnnounce && _percentRemainingAnnounce.value !== 0 |
|
onClicked: { |
|
if (checked) { |
|
_percentRemainingAnnounce.value = _percentRemainingAnnounce.defaultValueString |
|
} else { |
|
_percentRemainingAnnounce.value = 0 |
|
} |
|
} |
|
} |
|
FactTextField { |
|
fact: _percentRemainingAnnounce |
|
Layout.preferredWidth: _valueFieldWidth |
|
enabled: announcePercentCheckbox.checked |
|
} |
|
} |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------- |
|
//-- Save path |
|
RowLayout { |
|
id: pathRow |
|
anchors.margins: _margins |
|
anchors.left: parent.left |
|
anchors.right: parent.right |
|
anchors.top: miscColItem.bottom |
|
visible: (_savePath && _savePath.visible) && !ScreenTools.isMobile |
|
|
|
QGCLabel { text: qsTr("Application Load/Save Path") } |
|
QGCTextField { |
|
Layout.fillWidth: true |
|
readOnly: true |
|
text: _savePath ? (_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 ? _savePath.rawValue : "" |
|
selectExisting: true |
|
selectFolder: true |
|
onAcceptedForLoad: _savePath.rawValue = file |
|
} |
|
} |
|
} |
|
} |
|
|
|
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 && _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 && _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 && _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 && _useChecklist.visible && QGroundControl.corePlugin.options.preFlightChecklistUrl.toString().length |
|
|
|
property Fact _useChecklist: QGroundControl.settingsManager.appSettings.useChecklist |
|
} |
|
|
|
FactCheckBox { |
|
text: qsTr("Show Telemetry Log Replay Status Bar") |
|
fact: _showLogReplayStatusBar |
|
visible: _showLogReplayStatusBar && _showLogReplayStatusBar.visible |
|
|
|
property Fact _showLogReplayStatusBar: QGroundControl.settingsManager.flyViewSettings.showLogReplayStatusBar |
|
} |
|
|
|
FactCheckBox { |
|
text: qsTr("Virtual Joystick") |
|
visible: _virtualJoystick && _virtualJoystick.visible |
|
fact: _virtualJoystick |
|
|
|
property Fact _virtualJoystick: QGroundControl.settingsManager.appSettings.virtualJoystick |
|
} |
|
|
|
FactCheckBox { |
|
text: qsTr("Auto-Center throttle") |
|
visible: _virtualJoystickCentralized && _virtualJoystickCentralized.visible && activeVehicle && (activeVehicle.sub || activeVehicle.rover) |
|
fact: _virtualJoystickCentralized |
|
Layout.leftMargin: _margins |
|
|
|
property Fact _virtualJoystickCentralized: QGroundControl.settingsManager.appSettings.virtualJoystickCentralized |
|
} |
|
FactCheckBox { |
|
text: qsTr("Use Vertical Instrument Panel") |
|
visible: _alternateInstrumentPanel && _alternateInstrumentPanel.visible |
|
fact: _alternateInstrumentPanel |
|
|
|
property Fact _alternateInstrumentPanel: QGroundControl.settingsManager.flyViewSettings.alternateInstrumentPanel |
|
} |
|
FactCheckBox { |
|
text: qsTr("Show additional heading indicators on Compass") |
|
visible: _showAdditionalIndicatorsCompass ? _showAdditionalIndicatorsCompass.visible : false |
|
fact: _showAdditionalIndicatorsCompass |
|
|
|
property Fact _showAdditionalIndicatorsCompass: QGroundControl.settingsManager.flyViewSettings.showAdditionalIndicatorsCompass |
|
} |
|
FactCheckBox { |
|
text: qsTr("Lock Compass Nose-Up") |
|
visible: _lockNoseUpCompass ? _lockNoseUpCompass.visible : false |
|
fact: _lockNoseUpCompass |
|
|
|
property Fact _lockNoseUpCompass: QGroundControl.settingsManager.flyViewSettings.lockNoseUpCompass |
|
} |
|
|
|
|
|
GridLayout { |
|
columns: 2 |
|
|
|
property Fact _guidedMinimumAltitude: QGroundControl.settingsManager.flyViewSettings.guidedMinimumAltitude |
|
property Fact _guidedMaximumAltitude: QGroundControl.settingsManager.flyViewSettings.guidedMaximumAltitude |
|
property Fact _maxGoToLocationDistance: QGroundControl.settingsManager.flyViewSettings.maxGoToLocationDistance |
|
|
|
QGCLabel { |
|
text: qsTr("Guided Minimum Altitude") |
|
visible: parent._guidedMinimumAltitude && parent._guidedMinimumAltitude.visible |
|
} |
|
FactTextField { |
|
Layout.preferredWidth: _valueFieldWidth |
|
visible: parent._guidedMinimumAltitude && parent._guidedMinimumAltitude.visible |
|
fact: parent._guidedMinimumAltitude |
|
} |
|
|
|
QGCLabel { |
|
text: qsTr("Guided Maximum Altitude") |
|
visible: parent._guidedMaximumAltitude && parent._guidedMaximumAltitude.visible |
|
} |
|
FactTextField { |
|
Layout.preferredWidth: _valueFieldWidth |
|
visible: parent._guidedMaximumAltitude && parent._guidedMaximumAltitude.visible |
|
fact: parent._guidedMaximumAltitude |
|
} |
|
|
|
QGCLabel { |
|
text: qsTr("Go To Location Max Distance") |
|
visible: parent._maxGoToLocationDistance && parent._maxGoToLocationDistance.visible |
|
} |
|
FactTextField { |
|
Layout.preferredWidth: _valueFieldWidth |
|
visible: parent._maxGoToLocationDistance && parent._maxGoToLocationDistance.visible |
|
fact: parent._maxGoToLocationDistance |
|
} |
|
} |
|
} |
|
} |
|
|
|
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 |
|
|
|
RowLayout { |
|
spacing: ScreenTools.defaultFontPixelWidth |
|
visible: QGroundControl.settingsManager.appSettings.defaultMissionItemAltitude.visible |
|
|
|
QGCLabel { text: qsTr("Default Mission Altitude") } |
|
FactTextField { |
|
Layout.preferredWidth: _valueFieldWidth |
|
fact: QGroundControl.settingsManager.appSettings.defaultMissionItemAltitude |
|
} |
|
} |
|
} |
|
} |
|
|
|
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 |
|
|
|
RowLayout { |
|
spacing: _margins |
|
|
|
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 |
|
] |
|
|
|
property var names: [ qsTr("Pixhawk"), qsTr("SiK Radio"), qsTr("PX4 Flow"), qsTr("LibrePilot"), qsTr("UDP"), qsTr("RTK GPS") ] |
|
|
|
FactCheckBox { |
|
text: autoConnectRepeater.names[index] |
|
fact: modelData |
|
visible: modelData.visible |
|
} |
|
} |
|
} |
|
|
|
GridLayout { |
|
Layout.fillWidth: false |
|
Layout.alignment: Qt.AlignHCenter |
|
columns: 2 |
|
visible: !ScreenTools.isMobile |
|
&& QGroundControl.settingsManager.autoConnectSettings.autoConnectNmeaPort.visible |
|
&& QGroundControl.settingsManager.autoConnectSettings.autoConnectNmeaBaud.visible |
|
|
|
QGCLabel { |
|
text: qsTr("NMEA GPS Device") |
|
} |
|
QGCComboBox { |
|
id: nmeaPortCombo |
|
Layout.preferredWidth: _comboFieldWidth |
|
|
|
model: ListModel { |
|
} |
|
|
|
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>"}) |
|
} |
|
} |
|
} |
|
|
|
QGCLabel { |
|
visible: nmeaPortCombo.currentText !== gpsUdpPort && nmeaPortCombo.currentText !== gpsDisabled |
|
text: qsTr("NMEA GPS Baudrate") |
|
} |
|
QGCComboBox { |
|
visible: nmeaPortCombo.currentText !== gpsUdpPort && nmeaPortCombo.currentText !== gpsDisabled |
|
id: nmeaBaudCombo |
|
Layout.preferredWidth: _comboFieldWidth |
|
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; |
|
} |
|
} |
|
|
|
QGCLabel { |
|
text: qsTr("NMEA stream UDP port") |
|
visible: nmeaPortCombo.currentText === gpsUdpPort |
|
} |
|
FactTextField { |
|
visible: nmeaPortCombo.currentText === gpsUdpPort |
|
Layout.preferredWidth: _valueFieldWidth |
|
fact: QGroundControl.settingsManager.autoConnectSettings.nmeaUdpPort |
|
} |
|
} |
|
} |
|
} |
|
|
|
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 && rtkSettings.useFixedBasePosition.rawValue |
|
property real firstColWidth: ScreenTools.defaultFontPixelWidth * 3 |
|
|
|
QGCRadioButton { |
|
text: qsTr("Perform Survey-In") |
|
visible: rtkGrid.rtkSettings && rtkGrid.rtkSettings.useFixedBasePosition.visible |
|
checked: rtkGrid.rtkSettings && rtkGrid.rtkSettings.useFixedBasePosition.value === false |
|
onClicked: { |
|
if(rtkGrid.rtkSettings) |
|
rtkGrid.rtkSettings.useFixedBasePosition.value = false |
|
} |
|
Layout.columnSpan: 3 |
|
} |
|
|
|
Item { width: rtkGrid.firstColWidth; height: 1 } |
|
QGCLabel { |
|
text: rtkGrid.rtkSettings ? rtkGrid.rtkSettings.surveyInAccuracyLimit.shortDescription : "" |
|
visible: rtkGrid.rtkSettings && rtkGrid.rtkSettings.surveyInAccuracyLimit.visible |
|
enabled: !rtkGrid.useFixedPosition |
|
} |
|
FactTextField { |
|
fact: rtkGrid.rtkSettings ? rtkGrid.rtkSettings.surveyInAccuracyLimit : null |
|
visible: rtkGrid.rtkSettings && rtkGrid.rtkSettings.surveyInAccuracyLimit.visible |
|
enabled: !rtkGrid.useFixedPosition |
|
Layout.preferredWidth: _valueFieldWidth |
|
} |
|
|
|
Item { width: rtkGrid.firstColWidth; height: 1 } |
|
QGCLabel { |
|
text: rtkGrid.rtkSettings ? rtkGrid.rtkSettings.surveyInMinObservationDuration.shortDescription : "" |
|
visible: rtkGrid.rtkSettings && rtkGrid.rtkSettings.surveyInMinObservationDuration.visible |
|
enabled: !rtkGrid.useFixedPosition |
|
} |
|
FactTextField { |
|
fact: rtkGrid.rtkSettings ? rtkGrid.rtkSettings.surveyInMinObservationDuration : null |
|
visible: rtkGrid.rtkSettings && rtkGrid.rtkSettings.surveyInMinObservationDuration.visible |
|
enabled: !rtkGrid.useFixedPosition |
|
Layout.preferredWidth: _valueFieldWidth |
|
} |
|
|
|
QGCRadioButton { |
|
text: qsTr("Use Specified Base Position") |
|
visible: rtkGrid.rtkSettings && rtkGrid.rtkSettings.useFixedBasePosition.visible |
|
checked: rtkGrid.rtkSettings && rtkGrid.rtkSettings.useFixedBasePosition.value === true |
|
onClicked: { |
|
if(rtkGrid.rtkSettings) |
|
rtkGrid.rtkSettings.useFixedBasePosition.value = true |
|
} |
|
Layout.columnSpan: 3 |
|
} |
|
|
|
Item { width: rtkGrid.firstColWidth; height: 1 } |
|
QGCLabel { |
|
text: rtkGrid.rtkSettings ? rtkGrid.rtkSettings.fixedBasePositionLatitude.shortDescription : "" |
|
visible: rtkGrid.rtkSettings && rtkGrid.rtkSettings.fixedBasePositionLatitude.visible |
|
enabled: rtkGrid.useFixedPosition |
|
} |
|
FactTextField { |
|
fact: rtkGrid.rtkSettings ? rtkGrid.rtkSettings.fixedBasePositionLatitude : null |
|
visible: rtkGrid.rtkSettings && rtkGrid.rtkSettings.fixedBasePositionLatitude.visible |
|
enabled: rtkGrid.useFixedPosition |
|
Layout.fillWidth: true |
|
} |
|
|
|
Item { width: rtkGrid.firstColWidth; height: 1 } |
|
QGCLabel { |
|
text: rtkGrid.rtkSettings ? rtkGrid.rtkSettings.fixedBasePositionLongitude.shortDescription : "" |
|
visible: rtkGrid.rtkSettings && rtkGrid.rtkSettings.fixedBasePositionLongitude.visible |
|
enabled: rtkGrid.useFixedPosition |
|
} |
|
FactTextField { |
|
fact: rtkGrid.rtkSettings ? rtkGrid.rtkSettings.fixedBasePositionLongitude : null |
|
visible: rtkGrid.rtkSettings && rtkGrid.rtkSettings.fixedBasePositionLongitude.visible |
|
enabled: rtkGrid.useFixedPosition |
|
Layout.fillWidth: true |
|
} |
|
|
|
Item { width: rtkGrid.firstColWidth; height: 1 } |
|
QGCLabel { |
|
text: rtkGrid.rtkSettings ? rtkGrid.rtkSettings.fixedBasePositionAltitude.shortDescription : "" |
|
visible: rtkGrid.rtkSettings && rtkGrid.rtkSettings.fixedBasePositionAltitude.visible |
|
enabled: rtkGrid.useFixedPosition |
|
} |
|
FactTextField { |
|
fact: rtkGrid.rtkSettings ? rtkGrid.rtkSettings.fixedBasePositionAltitude : null |
|
visible: rtkGrid.rtkSettings && rtkGrid.rtkSettings.fixedBasePositionAltitude.visible |
|
enabled: rtkGrid.useFixedPosition |
|
Layout.fillWidth: true |
|
} |
|
|
|
Item { width: rtkGrid.firstColWidth; height: 1 } |
|
QGCLabel { |
|
text: rtkGrid.rtkSettings ? rtkGrid.rtkSettings.fixedBasePositionAccuracy.shortDescription : "" |
|
visible: rtkGrid.rtkSettings && rtkGrid.rtkSettings.fixedBasePositionAccuracy.visible |
|
enabled: rtkGrid.useFixedPosition |
|
} |
|
FactTextField { |
|
fact: rtkGrid.rtkSettings ? rtkGrid.rtkSettings.fixedBasePositionAccuracy : null |
|
visible: rtkGrid.rtkSettings && rtkGrid.rtkSettings.fixedBasePositionAccuracy.visible |
|
enabled: rtkGrid.useFixedPosition |
|
Layout.fillWidth: true |
|
} |
|
|
|
Item { width: rtkGrid.firstColWidth; height: 1 } |
|
QGCButton { |
|
text: qsTr("Save Current Base Position") |
|
enabled: QGroundControl.gpsRtk && QGroundControl.gpsRtk.valid.value |
|
Layout.columnSpan: 2 |
|
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 |
|
} |
|
} |
|
} |
|
} |
|
|
|
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 |
|
} |
|
|
|
QGCLabel { |
|
text: qsTr("UDP Port") |
|
visible: (_isUDP264 || _isUDP265 || _isMPEGTS) && QGroundControl.settingsManager.videoSettings.udpPort.visible |
|
} |
|
FactTextField { |
|
Layout.preferredWidth: _comboFieldWidth |
|
fact: QGroundControl.settingsManager.videoSettings.udpPort |
|
visible: (_isUDP264 || _isUDP265 || _isMPEGTS) && QGroundControl.settingsManager.videoSettings.udpPort.visible |
|
} |
|
|
|
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 |
|
} |
|
|
|
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 |
|
} |
|
} |
|
} |
|
|
|
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 |
|
} |
|
|
|
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 |
|
} |
|
|
|
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 |
|
} |
|
} |
|
} |
|
|
|
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 ? _userBrandImageIndoor.visible : false |
|
} |
|
QGCTextField { |
|
readOnly: true |
|
Layout.fillWidth: true |
|
text: _userBrandImageIndoor ? _userBrandImageIndoor.valueString.replace("file:///","") : "" |
|
} |
|
QGCButton { |
|
text: qsTr("Browse") |
|
onClicked: userBrandImageIndoorBrowseDialog.openForLoad() |
|
QGCFileDialog { |
|
id: userBrandImageIndoorBrowseDialog |
|
title: qsTr("Choose custom brand image file") |
|
folder: _userBrandImageIndoor ? _userBrandImageIndoor.rawValue.replace("file:///","") : "" |
|
selectExisting: true |
|
selectFolder: false |
|
onAcceptedForLoad: { |
|
if(_userBrandImageIndoor) |
|
_userBrandImageIndoor.rawValue = "file:///" + file |
|
} |
|
} |
|
} |
|
|
|
QGCLabel { |
|
text: qsTr("Outdoor Image") |
|
visible: _userBrandImageOutdoor && _userBrandImageOutdoor.visible |
|
} |
|
QGCTextField { |
|
readOnly: true |
|
Layout.fillWidth: true |
|
text: _userBrandImageOutdoor ? _userBrandImageOutdoor.valueString.replace("file:///","") : "" |
|
} |
|
QGCButton { |
|
text: qsTr("Browse") |
|
onClicked: userBrandImageOutdoorBrowseDialog.openForLoad() |
|
QGCFileDialog { |
|
id: userBrandImageOutdoorBrowseDialog |
|
title: qsTr("Choose custom brand image file") |
|
folder: _userBrandImageOutdoor ? _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 = "" |
|
} |
|
} |
|
} |
|
} |
|
|
|
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 |
|
} |
|
} |
|
}
|
|
|