diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro
index 71fe844ff1f83c6cda39e919e78b579bc12d6e78..f0629234084bf69566ee7831fd8bd75f068513e3 100644
--- a/qgroundcontrol.pro
+++ b/qgroundcontrol.pro
@@ -291,6 +291,7 @@ INCLUDEPATH += \
src/QmlControls \
src/QtLocationPlugin \
src/QtLocationPlugin/QMLControl \
+ src/Settings \
src/VehicleSetup \
src/ViewWidgets \
src/audio \
@@ -474,7 +475,12 @@ HEADERS += \
src/QmlControls/RCChannelMonitorController.h \
src/QmlControls/ScreenToolsController.h \
src/QtLocationPlugin/QMLControl/QGCMapEngineManager.h \
- src/SettingsManager.h \
+ src/Settings/AppSettings.h \
+ src/Settings/AutoConnectSettings.h \
+ src/Settings/SettingsGroup.h \
+ src/Settings/SettingsManager.h \
+ src/Settings/UnitsSettings.h \
+ src/Settings/VideoSettings.h \
src/Vehicle/MAVLinkLogManager.h \
src/VehicleSetup/JoystickConfigController.h \
src/audio/QGCAudioWorker.h \
@@ -636,7 +642,12 @@ SOURCES += \
src/QmlControls/RCChannelMonitorController.cc \
src/QmlControls/ScreenToolsController.cc \
src/QtLocationPlugin/QMLControl/QGCMapEngineManager.cc \
- src/SettingsManager.cc \
+ src/Settings/AppSettings.cc \
+ src/Settings/AutoConnectSettings.cc \
+ src/Settings/SettingsGroup.cc \
+ src/Settings/SettingsManager.cc \
+ src/Settings/UnitsSettings.cc \
+ src/Settings/VideoSettings.cc \
src/Vehicle/MAVLinkLogManager.cc \
src/VehicleSetup/JoystickConfigController.cc \
src/audio/QGCAudioWorker.cpp \
diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc
index 296df8debaf853e773ee5c14d023f9f9568186c4..1f4bb7924275bceba004c24d0ece61d5069f40bf 100644
--- a/qgroundcontrol.qrc
+++ b/qgroundcontrol.qrc
@@ -178,7 +178,10 @@
src/Vehicle/GPSFact.json
src/Vehicle/WindFact.json
src/Vehicle/VibrationFact.json
- src/SettingsManager.json
+ src/Settings/SettingsGroup.app.json
+ src/Settings/SettingsGroup.autoConnect.json
+ src/Settings/SettingsGroup.units.json
+ src/Settings/SettingsGroup.video.json
src/MissionManager/RallyPoint.FactMetaData.json
src/MissionManager/FWLandingPattern.FactMetaData.json
src/MissionManager/Survey.FactMetaData.json
diff --git a/src/FactSystem/FactMetaData.cc b/src/FactSystem/FactMetaData.cc
index aa0575d19b1e699f6bec73430f587ed595f61637..dc9651422c11992cbe255fc996b4b8b32a6f4784 100644
--- a/src/FactSystem/FactMetaData.cc
+++ b/src/FactSystem/FactMetaData.cc
@@ -40,21 +40,21 @@ const FactMetaData::BuiltInTranslation_s FactMetaData::_rgBuiltInTranslations[]
// Translations driven by app settings
const FactMetaData::AppSettingsTranslation_s FactMetaData::_rgAppSettingsTranslations[] = {
- { "m", "m", false, SettingsManager::DistanceUnitsMeters, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator },
- { "meters", "meters", false, SettingsManager::DistanceUnitsMeters, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator },
- { "m/s", "m/s", true, SettingsManager::SpeedUnitsMetersPerSecond, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator },
- { "m^2", "m^2", false, SettingsManager::AreaUnitsSquareMeters, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator },
- { "m", "ft", false, SettingsManager::DistanceUnitsFeet, FactMetaData::_metersToFeet, FactMetaData::_feetToMeters },
- { "meters", "ft", false, SettingsManager::DistanceUnitsFeet, FactMetaData::_metersToFeet, FactMetaData::_feetToMeters },
- { "m^2", "km^2", false, SettingsManager::AreaUnitsSquareKilometers, FactMetaData::_squareMetersToSquareKilometers, FactMetaData::_squareKilometersToSquareMeters },
- { "m^2", "ha", false, SettingsManager::AreaUnitsHectares, FactMetaData::_squareMetersToHectares, FactMetaData::_hectaresToSquareMeters },
- { "m^2", "ft^2", false, SettingsManager::AreaUnitsSquareFeet, FactMetaData::_squareMetersToSquareFeet, FactMetaData::_squareFeetToSquareMeters },
- { "m^2", "ac", false, SettingsManager::AreaUnitsAcres, FactMetaData::_squareMetersToAcres, FactMetaData::_acresToSquareMeters },
- { "m^2", "mi^2", false, SettingsManager::AreaUnitsSquareMiles, FactMetaData::_squareMetersToSquareMiles, FactMetaData::_squareMilesToSquareMeters },
- { "m/s", "ft/s", true, SettingsManager::SpeedUnitsFeetPerSecond, FactMetaData::_metersToFeet, FactMetaData::_feetToMeters },
- { "m/s", "mph", true, SettingsManager::SpeedUnitsMilesPerHour, FactMetaData::_metersPerSecondToMilesPerHour, FactMetaData::_milesPerHourToMetersPerSecond },
- { "m/s", "km/h", true, SettingsManager::SpeedUnitsKilometersPerHour, FactMetaData::_metersPerSecondToKilometersPerHour, FactMetaData::_kilometersPerHourToMetersPerSecond },
- { "m/s", "kn", true, SettingsManager::SpeedUnitsKnots, FactMetaData::_metersPerSecondToKnots, FactMetaData::_knotsToMetersPerSecond },
+ { "m", "m", false, UnitsSettings::DistanceUnitsMeters, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator },
+ { "meters", "meters", false, UnitsSettings::DistanceUnitsMeters, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator },
+ { "m/s", "m/s", true, UnitsSettings::SpeedUnitsMetersPerSecond, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator },
+ { "m^2", "m^2", false, UnitsSettings::AreaUnitsSquareMeters, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator },
+ { "m", "ft", false, UnitsSettings::DistanceUnitsFeet, FactMetaData::_metersToFeet, FactMetaData::_feetToMeters },
+ { "meters", "ft", false, UnitsSettings::DistanceUnitsFeet, FactMetaData::_metersToFeet, FactMetaData::_feetToMeters },
+ { "m^2", "km^2", false, UnitsSettings::AreaUnitsSquareKilometers, FactMetaData::_squareMetersToSquareKilometers, FactMetaData::_squareKilometersToSquareMeters },
+ { "m^2", "ha", false, UnitsSettings::AreaUnitsHectares, FactMetaData::_squareMetersToHectares, FactMetaData::_hectaresToSquareMeters },
+ { "m^2", "ft^2", false, UnitsSettings::AreaUnitsSquareFeet, FactMetaData::_squareMetersToSquareFeet, FactMetaData::_squareFeetToSquareMeters },
+ { "m^2", "ac", false, UnitsSettings::AreaUnitsAcres, FactMetaData::_squareMetersToAcres, FactMetaData::_acresToSquareMeters },
+ { "m^2", "mi^2", false, UnitsSettings::AreaUnitsSquareMiles, FactMetaData::_squareMetersToSquareMiles, FactMetaData::_squareMilesToSquareMeters },
+ { "m/s", "ft/s", true, UnitsSettings::SpeedUnitsFeetPerSecond, FactMetaData::_metersToFeet, FactMetaData::_feetToMeters },
+ { "m/s", "mph", true, UnitsSettings::SpeedUnitsMilesPerHour, FactMetaData::_metersPerSecondToMilesPerHour, FactMetaData::_milesPerHourToMetersPerSecond },
+ { "m/s", "km/h", true, UnitsSettings::SpeedUnitsKilometersPerHour, FactMetaData::_metersPerSecondToKilometersPerHour, FactMetaData::_kilometersPerHourToMetersPerSecond },
+ { "m/s", "kn", true, UnitsSettings::SpeedUnitsKnots, FactMetaData::_metersPerSecondToKnots, FactMetaData::_knotsToMetersPerSecond },
};
const char* FactMetaData::_decimalPlacesJsonKey = "decimalPlaces";
@@ -635,8 +635,8 @@ void FactMetaData::_setAppSettingsTranslators(void)
const AppSettingsTranslation_s* pAppSettingsTranslation = &_rgAppSettingsTranslations[i];
if (pAppSettingsTranslation->rawUnits == _rawUnits.toLower() &&
- ((pAppSettingsTranslation->speed && pAppSettingsTranslation->speedOrDistanceUnits == qgcApp()->toolbox()->settingsManager()->speedUnits()->rawValue().toUInt()) ||
- (!pAppSettingsTranslation->speed && pAppSettingsTranslation->speedOrDistanceUnits == qgcApp()->toolbox()->settingsManager()->distanceUnits()->rawValue().toUInt()))) {
+ ((pAppSettingsTranslation->speed && pAppSettingsTranslation->speedOrDistanceUnits == qgcApp()->toolbox()->settingsManager()->unitsSettings()->speedUnits()->rawValue().toUInt()) ||
+ (!pAppSettingsTranslation->speed && pAppSettingsTranslation->speedOrDistanceUnits == qgcApp()->toolbox()->settingsManager()->unitsSettings()->distanceUnits()->rawValue().toUInt()))) {
_cookedUnits = pAppSettingsTranslation->cookedUnits;
setTranslators(pAppSettingsTranslation->rawTranslator, pAppSettingsTranslation->cookedTranslator);
return;
@@ -651,7 +651,7 @@ const FactMetaData::AppSettingsTranslation_s* FactMetaData::_findAppSettingsDist
const AppSettingsTranslation_s* pAppSettingsTranslation = &_rgAppSettingsTranslations[i];
if (pAppSettingsTranslation->rawUnits == rawUnits &&
- (!pAppSettingsTranslation->speed && pAppSettingsTranslation->speedOrDistanceUnits == qgcApp()->toolbox()->settingsManager()->distanceUnits()->rawValue().toUInt())) {
+ (!pAppSettingsTranslation->speed && pAppSettingsTranslation->speedOrDistanceUnits == qgcApp()->toolbox()->settingsManager()->unitsSettings()->distanceUnits()->rawValue().toUInt())) {
return pAppSettingsTranslation;
}
}
@@ -665,7 +665,7 @@ const FactMetaData::AppSettingsTranslation_s* FactMetaData::_findAppSettingsArea
const AppSettingsTranslation_s* pAppSettingsTranslation = &_rgAppSettingsTranslations[i];
if (pAppSettingsTranslation->rawUnits == rawUnits &&
- (!pAppSettingsTranslation->speed && pAppSettingsTranslation->speedOrDistanceUnits == qgcApp()->toolbox()->settingsManager()->areaUnits()->rawValue().toUInt())
+ (!pAppSettingsTranslation->speed && pAppSettingsTranslation->speedOrDistanceUnits == qgcApp()->toolbox()->settingsManager()->unitsSettings()->areaUnits()->rawValue().toUInt())
) {
return pAppSettingsTranslation;
}
diff --git a/src/FlightMap/MapScale.qml b/src/FlightMap/MapScale.qml
index a861e41d5439ff4cdc09e0e381026f5f137202e2..8a265d86398904f128e0779636ec5e18d3fb6830 100644
--- a/src/FlightMap/MapScale.qml
+++ b/src/FlightMap/MapScale.qml
@@ -115,7 +115,7 @@ Item {
var rightCoord = mapControl.toCoordinate(Qt.point(scaleLinePixelLength, scale.y))
var scaleLineMeters = Math.round(leftCoord.distanceTo(rightCoord))
- if (QGroundControl.settingsManager.distanceUnits.value == QGroundControl.settingsManager.DistanceUnitsFeet) {
+ if (QGroundControl.settingsManager.unitsSettings.distanceUnits.value == UnitsSettings.DistanceUnitsFeet) {
calculateFeetRatio(scaleLineMeters, scaleLinePixelLength)
} else {
calculateMetersRatio(scaleLineMeters, scaleLinePixelLength)
diff --git a/src/GAudioOutput.cc b/src/GAudioOutput.cc
index c20f3a0b21fe06f2ebb70f04a45f63937457bae7..480e04dedf38c963409ffa025b2f6aefe336c0a7 100644
--- a/src/GAudioOutput.cc
+++ b/src/GAudioOutput.cc
@@ -56,7 +56,7 @@ GAudioOutput::~GAudioOutput()
bool GAudioOutput::say(const QString& inText)
{
- bool muted = qgcApp()->toolbox()->settingsManager()->audioMuted()->rawValue().toBool();
+ bool muted = qgcApp()->toolbox()->settingsManager()->appSettings()->audioMuted()->rawValue().toBool();
muted |= qgcApp()->runningUnitTests();
if (!muted && !qgcApp()->runningUnitTests()) {
#if defined __android__
diff --git a/src/MissionEditor/MissionSettingsEditor.qml b/src/MissionEditor/MissionSettingsEditor.qml
index 3e711443a5fff06c3d9cc45f407ee450ece39af9..729370c2a8699c1eb167de54c750ac2fd0533d4d 100644
--- a/src/MissionEditor/MissionSettingsEditor.qml
+++ b/src/MissionEditor/MissionSettingsEditor.qml
@@ -122,7 +122,7 @@ Rectangle {
Layout.fillWidth: true
}
FactComboBox {
- fact: QGroundControl.settingsManager.offlineEditingFirmwareType
+ fact: QGroundControl.settingsManager.appSettings.offlineEditingFirmwareType
indexModel: false
visible: _showOfflineEditingCombos
Layout.preferredWidth: _fieldWidth
@@ -146,7 +146,7 @@ Rectangle {
}
FactComboBox {
id: offlineVehicleCombo
- fact: QGroundControl.settingsManager.offlineEditingVehicleType
+ fact: QGroundControl.settingsManager.appSettings.offlineEditingVehicleType
indexModel: false
visible: _showOfflineEditingCombos
Layout.preferredWidth: _fieldWidth
@@ -170,7 +170,7 @@ Rectangle {
Layout.fillWidth: true
}
FactTextField {
- fact: QGroundControl.settingsManager.offlineEditingCruiseSpeed
+ fact: QGroundControl.settingsManager.appSettings.offlineEditingCruiseSpeed
visible: _showCruiseSpeed
Layout.preferredWidth: _fieldWidth
}
@@ -182,7 +182,7 @@ Rectangle {
Layout.fillWidth: true
}
FactTextField {
- fact: QGroundControl.settingsManager.offlineEditingHoverSpeed
+ fact: QGroundControl.settingsManager.appSettings.offlineEditingHoverSpeed
visible: _showHoverSpeed
Layout.preferredWidth: _fieldWidth
}
@@ -196,7 +196,7 @@ Rectangle {
QGCLabel { text: qsTr("Hover speed:"); Layout.fillWidth: true }
FactTextField {
Layout.preferredWidth: _fieldWidth
- fact: QGroundControl.settingsManager.offlineEditingHoverSpeed
+ fact: QGroundControl.settingsManager.appSettings.offlineEditingHoverSpeed
}
}
diff --git a/src/MissionManager/MissionCommandTree.cc b/src/MissionManager/MissionCommandTree.cc
index 31f69f52fd38ac5573b4c9454df5d9fba349e04a..f494826b6c8112846d14706d8bd2a7ddc8e47635 100644
--- a/src/MissionManager/MissionCommandTree.cc
+++ b/src/MissionManager/MissionCommandTree.cc
@@ -253,7 +253,7 @@ void MissionCommandTree::_baseVehicleInfo(Vehicle* vehicle, MAV_AUTOPILOT& baseF
baseVehicleType = _baseVehicleType(vehicle->vehicleType());
} else {
// No Vehicle means offline editing
- baseFirmwareType = _baseFirmwareType((MAV_AUTOPILOT)_settingsManager->offlineEditingFirmwareType()->rawValue().toInt());
- baseVehicleType = _baseVehicleType((MAV_TYPE)_settingsManager->offlineEditingVehicleType()->rawValue().toInt());
+ baseFirmwareType = _baseFirmwareType((MAV_AUTOPILOT)_settingsManager->appSettings()->offlineEditingFirmwareType()->rawValue().toInt());
+ baseVehicleType = _baseVehicleType((MAV_TYPE)_settingsManager->appSettings()->offlineEditingVehicleType()->rawValue().toInt());
}
}
diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc
index 53a209823badefbd21bdfcb52d7374a6eda8c049..39d31974a19c76dbdfc5e4a347b5076c8913c98e 100644
--- a/src/MissionManager/MissionController.cc
+++ b/src/MissionManager/MissionController.cc
@@ -437,13 +437,13 @@ bool MissionController::_loadJsonMissionFileV2(Vehicle* vehicle, const QJsonObje
return false;
}
if (json.contains(_jsonVehicleTypeKey) && vehicle->isOfflineEditingVehicle()) {
- settingsManager->offlineEditingVehicleType()->setRawValue(json[_jsonVehicleTypeKey].toDouble());
+ settingsManager->appSettings()->offlineEditingVehicleType()->setRawValue(json[_jsonVehicleTypeKey].toDouble());
}
if (json.contains(_jsonCruiseSpeedKey)) {
- settingsManager->offlineEditingCruiseSpeed()->setRawValue(json[_jsonCruiseSpeedKey].toDouble());
+ settingsManager->appSettings()->offlineEditingCruiseSpeed()->setRawValue(json[_jsonCruiseSpeedKey].toDouble());
}
if (json.contains(_jsonHoverSpeedKey)) {
- settingsManager->offlineEditingHoverSpeed()->setRawValue(json[_jsonHoverSpeedKey].toDouble());
+ settingsManager->appSettings()->offlineEditingHoverSpeed()->setRawValue(json[_jsonHoverSpeedKey].toDouble());
}
SimpleMissionItem* homeItem = new SimpleMissionItem(vehicle, visualItems);
diff --git a/src/MissionManager/RallyPointController.cc b/src/MissionManager/RallyPointController.cc
index 66e0b76672e6dc42166b00186fd6aa4e67ba774d..adc43f62fb958dbca3a72df5167c2e6af5e8d859 100644
--- a/src/MissionManager/RallyPointController.cc
+++ b/src/MissionManager/RallyPointController.cc
@@ -268,7 +268,7 @@ void RallyPointController::addPoint(QGeoCoordinate point)
if (_points.count()) {
defaultAlt = qobject_cast(_points[_points.count() - 1])->coordinate().altitude();
} else {
- defaultAlt = qgcApp()->toolbox()->settingsManager()->defaultMissionItemAltitude()->rawValue().toDouble();
+ defaultAlt = qgcApp()->toolbox()->settingsManager()->appSettings()->defaultMissionItemAltitude()->rawValue().toDouble();
}
point.setAltitude(defaultAlt);
RallyPoint* newPoint = new RallyPoint(point, this);
diff --git a/src/MissionManager/SimpleMissionItem.cc b/src/MissionManager/SimpleMissionItem.cc
index 3d6c0de22ea6e89c9775cc4d99de815653c358c0..21a04129fcc735eb2329a3a6adae894781ca44a3 100644
--- a/src/MissionManager/SimpleMissionItem.cc
+++ b/src/MissionManager/SimpleMissionItem.cc
@@ -530,7 +530,7 @@ void SimpleMissionItem::_syncFrameToAltitudeRelativeToHome(void)
void SimpleMissionItem::setDefaultsForCommand(void)
{
// We set these global defaults first, then if there are param defaults they will get reset
- _missionItem.setParam7(qgcApp()->toolbox()->settingsManager()->defaultMissionItemAltitude()->rawValue().toDouble());
+ _missionItem.setParam7(qgcApp()->toolbox()->settingsManager()->appSettings()->defaultMissionItemAltitude()->rawValue().toDouble());
MAV_CMD command = (MAV_CMD)this->command();
const MissionCommandUIInfo* uiInfo = _commandTree->getUIInfo(_vehicle, command);
diff --git a/src/MissionManager/SimpleMissionItemTest.cc b/src/MissionManager/SimpleMissionItemTest.cc
index cf453d34edcdabf162de647672ac2c83185d324b..3339cedbcfcf2942abb50ad7d2d4c6e163a9c75b 100644
--- a/src/MissionManager/SimpleMissionItemTest.cc
+++ b/src/MissionManager/SimpleMissionItemTest.cc
@@ -141,7 +141,7 @@ void SimpleMissionItemTest::_testDefaultValues(void)
item.missionItem().setCommand(MAV_CMD_NAV_WAYPOINT);
item.missionItem().setFrame(MAV_FRAME_GLOBAL_RELATIVE_ALT);
- QCOMPARE(item.missionItem().param7(), qgcApp()->toolbox()->settingsManager()->defaultMissionItemAltitude()->rawValue().toDouble());
+ QCOMPARE(item.missionItem().param7(), qgcApp()->toolbox()->settingsManager()->appSettings()->defaultMissionItemAltitude()->rawValue().toDouble());
}
void SimpleMissionItemTest::_testSignals(void)
@@ -226,7 +226,7 @@ void SimpleMissionItemTest::_testSignals(void)
// dirtyChanged
// Check that changing to the same coordinate does not signal
- simpleMissionItem.setCoordinate(QGeoCoordinate(50.1234567, 60.1234567, qgcApp()->toolbox()->settingsManager()->defaultMissionItemAltitude()->rawValue().toDouble()));
+ simpleMissionItem.setCoordinate(QGeoCoordinate(50.1234567, 60.1234567, qgcApp()->toolbox()->settingsManager()->appSettings()->defaultMissionItemAltitude()->rawValue().toDouble()));
QVERIFY(multiSpy->checkNoSignals());
// Check that actually changing coordinate signals correctly
diff --git a/src/Settings/AppSettings.cc b/src/Settings/AppSettings.cc
new file mode 100644
index 0000000000000000000000000000000000000000..348baf896e7f6e07f5fd586bbf5375cc272e7c75
--- /dev/null
+++ b/src/Settings/AppSettings.cc
@@ -0,0 +1,129 @@
+/****************************************************************************
+ *
+ * (c) 2009-2016 QGROUNDCONTROL PROJECT
+ *
+ * QGroundControl is licensed according to the terms in the file
+ * COPYING.md in the root of the source code directory.
+ *
+ ****************************************************************************/
+
+#include "AppSettings.h"
+
+#include
+
+const char* AppSettings::appSettingsGroupName = "app";
+const char* AppSettings::offlineEditingFirmwareTypeSettingsName = "OfflineEditingFirmwareType";
+const char* AppSettings::offlineEditingVehicleTypeSettingsName = "OfflineEditingVehicleType";
+const char* AppSettings::offlineEditingCruiseSpeedSettingsName = "OfflineEditingCruiseSpeed";
+const char* AppSettings::offlineEditingHoverSpeedSettingsName = "OfflineEditingHoverSpeed";
+const char* AppSettings::batteryPercentRemainingAnnounceSettingsName = "batteryPercentRemainingAnnounce";
+const char* AppSettings::defaultMissionItemAltitudeSettingsName = "DefaultMissionItemAltitude";
+const char* AppSettings::missionAutoLoadDirSettingsName = "MissionAutoLoadDir";
+const char* AppSettings::promptFlightTelemetrySaveName = "PromptFLightDataSave";
+const char* AppSettings::promptFlightTelemetrySaveNotArmedName = "PromptFLightDataSaveNotArmed";
+const char* AppSettings::audioMutedName = "AudioMuted";
+
+AppSettings::AppSettings(QObject* parent)
+ : SettingsGroup(appSettingsGroupName, QString() /* root settings group */, parent)
+ , _offlineEditingFirmwareTypeFact(NULL)
+ , _offlineEditingVehicleTypeFact(NULL)
+ , _offlineEditingCruiseSpeedFact(NULL)
+ , _offlineEditingHoverSpeedFact(NULL)
+ , _batteryPercentRemainingAnnounceFact(NULL)
+ , _defaultMissionItemAltitudeFact(NULL)
+ , _missionAutoLoadDirFact(NULL)
+ , _promptFlightTelemetrySave(NULL)
+ , _promptFlightTelemetrySaveNotArmed(NULL)
+ , _audioMuted(NULL)
+{
+ QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership);
+ qmlRegisterUncreatableType("QGroundControl.SettingsManager", 1, 0, "AppSettings", "Reference only");
+}
+
+Fact* AppSettings::offlineEditingFirmwareType(void)
+{
+ if (!_offlineEditingFirmwareTypeFact) {
+ _offlineEditingFirmwareTypeFact = _createSettingsFact(offlineEditingFirmwareTypeSettingsName);
+ }
+
+ return _offlineEditingFirmwareTypeFact;
+}
+
+Fact* AppSettings::offlineEditingVehicleType(void)
+{
+ if (!_offlineEditingVehicleTypeFact) {
+ _offlineEditingVehicleTypeFact = _createSettingsFact(offlineEditingVehicleTypeSettingsName);
+ }
+
+ return _offlineEditingVehicleTypeFact;
+}
+
+Fact* AppSettings::offlineEditingCruiseSpeed(void)
+{
+ if (!_offlineEditingCruiseSpeedFact) {
+ _offlineEditingCruiseSpeedFact = _createSettingsFact(offlineEditingCruiseSpeedSettingsName);
+ }
+ return _offlineEditingCruiseSpeedFact;
+}
+
+Fact* AppSettings::offlineEditingHoverSpeed(void)
+{
+ if (!_offlineEditingHoverSpeedFact) {
+ _offlineEditingHoverSpeedFact = _createSettingsFact(offlineEditingHoverSpeedSettingsName);
+ }
+ return _offlineEditingHoverSpeedFact;
+}
+
+Fact* AppSettings::batteryPercentRemainingAnnounce(void)
+{
+ if (!_batteryPercentRemainingAnnounceFact) {
+ _batteryPercentRemainingAnnounceFact = _createSettingsFact(batteryPercentRemainingAnnounceSettingsName);
+ }
+
+ return _batteryPercentRemainingAnnounceFact;
+}
+
+Fact* AppSettings::defaultMissionItemAltitude(void)
+{
+ if (!_defaultMissionItemAltitudeFact) {
+ _defaultMissionItemAltitudeFact = _createSettingsFact(defaultMissionItemAltitudeSettingsName);
+ }
+
+ return _defaultMissionItemAltitudeFact;
+}
+
+Fact* AppSettings::missionAutoLoadDir(void)
+{
+ if (!_missionAutoLoadDirFact) {
+ _missionAutoLoadDirFact = _createSettingsFact(missionAutoLoadDirSettingsName);
+ }
+
+ return _missionAutoLoadDirFact;
+}
+
+Fact* AppSettings::promptFlightTelemetrySave(void)
+{
+ if (!_promptFlightTelemetrySave) {
+ _promptFlightTelemetrySave = _createSettingsFact(promptFlightTelemetrySaveName);
+ }
+
+ return _promptFlightTelemetrySave;
+}
+
+Fact* AppSettings::promptFlightTelemetrySaveNotArmed(void)
+{
+ if (!_promptFlightTelemetrySaveNotArmed) {
+ _promptFlightTelemetrySaveNotArmed = _createSettingsFact(promptFlightTelemetrySaveNotArmedName);
+ }
+
+ return _promptFlightTelemetrySaveNotArmed;
+}
+
+Fact* AppSettings::audioMuted(void)
+{
+ if (!_audioMuted) {
+ _audioMuted = _createSettingsFact(audioMutedName);
+ }
+
+ return _audioMuted;
+}
diff --git a/src/SettingsManager.h b/src/Settings/AppSettings.h
similarity index 62%
rename from src/SettingsManager.h
rename to src/Settings/AppSettings.h
index 1df5d57a09f1760dbc1eb1e64a2a6811130eac05..c9bbae84ac269b5d1df0b9545f3af3331fa97429 100644
--- a/src/SettingsManager.h
+++ b/src/Settings/AppSettings.h
@@ -7,60 +7,22 @@
*
****************************************************************************/
+#ifndef AppSettings_H
+#define AppSettings_H
-#ifndef SettingsManager_H
-#define SettingsManager_H
+#include "SettingsGroup.h"
-#include "QGCLoggingCategory.h"
-#include "Joystick.h"
-#include "MultiVehicleManager.h"
-#include "QGCToolbox.h"
-
-#include
-
-Q_DECLARE_LOGGING_CATEGORY(SettingsManagerLog)
-
-/// Provides access to all app settings
-class SettingsManager : public QGCTool
+class AppSettings : public SettingsGroup
{
Q_OBJECT
public:
- SettingsManager(QGCApplication* app);
-
- enum DistanceUnits {
- DistanceUnitsFeet = 0,
- DistanceUnitsMeters
- };
-
- enum AreaUnits {
- AreaUnitsSquareFeet = 0,
- AreaUnitsSquareMeters,
- AreaUnitsSquareKilometers,
- AreaUnitsHectares,
- AreaUnitsAcres,
- AreaUnitsSquareMiles,
- };
-
- enum SpeedUnits {
- SpeedUnitsFeetPerSecond = 0,
- SpeedUnitsMetersPerSecond,
- SpeedUnitsMilesPerHour,
- SpeedUnitsKilometersPerHour,
- SpeedUnitsKnots,
- };
-
- Q_ENUMS(DistanceUnits)
- Q_ENUMS(AreaUnits)
- Q_ENUMS(SpeedUnits)
+ AppSettings(QObject* parent = NULL);
Q_PROPERTY(Fact* offlineEditingFirmwareType READ offlineEditingFirmwareType CONSTANT)
Q_PROPERTY(Fact* offlineEditingVehicleType READ offlineEditingVehicleType CONSTANT)
Q_PROPERTY(Fact* offlineEditingCruiseSpeed READ offlineEditingCruiseSpeed CONSTANT)
Q_PROPERTY(Fact* offlineEditingHoverSpeed READ offlineEditingHoverSpeed CONSTANT)
- Q_PROPERTY(Fact* distanceUnits READ distanceUnits CONSTANT)
- Q_PROPERTY(Fact* areaUnits READ areaUnits CONSTANT)
- Q_PROPERTY(Fact* speedUnits READ speedUnits CONSTANT)
Q_PROPERTY(Fact* batteryPercentRemainingAnnounce READ batteryPercentRemainingAnnounce CONSTANT)
Q_PROPERTY(Fact* defaultMissionItemAltitude READ defaultMissionItemAltitude CONSTANT)
Q_PROPERTY(Fact* missionAutoLoadDir READ missionAutoLoadDir CONSTANT)
@@ -72,9 +34,6 @@ public:
Fact* offlineEditingVehicleType (void);
Fact* offlineEditingCruiseSpeed (void);
Fact* offlineEditingHoverSpeed (void);
- Fact* distanceUnits (void);
- Fact* areaUnits (void);
- Fact* speedUnits (void);
Fact* batteryPercentRemainingAnnounce (void);
Fact* defaultMissionItemAltitude (void);
Fact* missionAutoLoadDir (void);
@@ -82,16 +41,12 @@ public:
Fact* promptFlightTelemetrySaveNotArmed (void);
Fact* audioMuted (void);
- // Override from QGCTool
- virtual void setToolbox(QGCToolbox *toolbox);
+ static const char* appSettingsGroupName;
static const char* offlineEditingFirmwareTypeSettingsName;
static const char* offlineEditingVehicleTypeSettingsName;
static const char* offlineEditingCruiseSpeedSettingsName;
static const char* offlineEditingHoverSpeedSettingsName;
- static const char* distanceUnitsSettingsName;
- static const char* areaUnitsSettingsName;
- static const char* speedUnitsSettingsName;
static const char* batteryPercentRemainingAnnounceSettingsName;
static const char* defaultMissionItemAltitudeSettingsName;
static const char* missionAutoLoadDirSettingsName;
@@ -100,17 +55,10 @@ public:
static const char* audioMutedName;
private:
- SettingsFact* _createSettingsFact(const QString& name);
-
- QMap _nameToMetaDataMap;
-
SettingsFact* _offlineEditingFirmwareTypeFact;
SettingsFact* _offlineEditingVehicleTypeFact;
SettingsFact* _offlineEditingCruiseSpeedFact;
SettingsFact* _offlineEditingHoverSpeedFact;
- SettingsFact* _distanceUnitsFact;
- SettingsFact* _areaUnitsFact;
- SettingsFact* _speedUnitsFact;
SettingsFact* _batteryPercentRemainingAnnounceFact;
SettingsFact* _defaultMissionItemAltitudeFact;
SettingsFact* _missionAutoLoadDirFact;
diff --git a/src/Settings/AutoConnectSettings.cc b/src/Settings/AutoConnectSettings.cc
new file mode 100644
index 0000000000000000000000000000000000000000..71de8257b7bc89c74a4073197ec97a54d49752d4
--- /dev/null
+++ b/src/Settings/AutoConnectSettings.cc
@@ -0,0 +1,21 @@
+/****************************************************************************
+ *
+ * (c) 2009-2016 QGROUNDCONTROL PROJECT
+ *
+ * QGroundControl is licensed according to the terms in the file
+ * COPYING.md in the root of the source code directory.
+ *
+ ****************************************************************************/
+
+#include "AutoConnectSettings.h"
+
+#include
+
+const char* AutoConnectSettings::autoConnectSettingsGroupName = "autoConnect";
+
+AutoConnectSettings::AutoConnectSettings(QObject* parent)
+ : SettingsGroup(autoConnectSettingsGroupName, QString() /* root settings group */, parent)
+{
+ QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership);
+ qmlRegisterUncreatableType("QGroundControl.SettingsManager", 1, 0, "AutoConnectSettings", "Reference only");
+}
diff --git a/src/Settings/AutoConnectSettings.h b/src/Settings/AutoConnectSettings.h
new file mode 100644
index 0000000000000000000000000000000000000000..afcd32b63377ae2ad7dd29ad221ff65f65f43b3d
--- /dev/null
+++ b/src/Settings/AutoConnectSettings.h
@@ -0,0 +1,27 @@
+/****************************************************************************
+ *
+ * (c) 2009-2016 QGROUNDCONTROL PROJECT
+ *
+ * QGroundControl is licensed according to the terms in the file
+ * COPYING.md in the root of the source code directory.
+ *
+ ****************************************************************************/
+
+#ifndef AutoConnectSettings_H
+#define AutoConnectSettings_H
+
+#include "SettingsGroup.h"
+
+class AutoConnectSettings : public SettingsGroup
+{
+ Q_OBJECT
+
+public:
+ AutoConnectSettings(QObject* parent = NULL);
+
+ static const char* autoConnectSettingsGroupName;
+
+private:
+};
+
+#endif
diff --git a/src/SettingsManager.json b/src/Settings/SettingsGroup.app.json
similarity index 100%
rename from src/SettingsManager.json
rename to src/Settings/SettingsGroup.app.json
diff --git a/src/Settings/SettingsGroup.autoConnect.json b/src/Settings/SettingsGroup.autoConnect.json
new file mode 100644
index 0000000000000000000000000000000000000000..0d4f101c7a37a4c875e6999bee1a287fdb733380
--- /dev/null
+++ b/src/Settings/SettingsGroup.autoConnect.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/src/Settings/SettingsGroup.cc b/src/Settings/SettingsGroup.cc
new file mode 100644
index 0000000000000000000000000000000000000000..c29c42509378a547727c554054eea2a5f0c16299
--- /dev/null
+++ b/src/Settings/SettingsGroup.cc
@@ -0,0 +1,29 @@
+/****************************************************************************
+ *
+ * (c) 2009-2016 QGROUNDCONTROL PROJECT
+ *
+ * QGroundControl is licensed according to the terms in the file
+ * COPYING.md in the root of the source code directory.
+ *
+ ****************************************************************************/
+
+#include "SettingsGroup.h"
+#include "QGCCorePlugin.h"
+#include "QGCApplication.h"
+
+SettingsGroup::SettingsGroup(const QString& name, const QString& settingsGroup, QObject* parent)
+ : QObject(parent)
+ , _name(name)
+ , _settingsGroup(settingsGroup)
+ , _visible(qgcApp()->toolbox()->corePlugin()->overrideSettingsGroupVisibility(name))
+{
+ QString jsonNameFormat(":/json/SettingsGroup.%1.json");
+
+ _nameToMetaDataMap = FactMetaData::createMapFromJsonFile(jsonNameFormat.arg(name), this);
+}
+
+SettingsFact* SettingsGroup::_createSettingsFact(const QString& name)
+{
+ return new SettingsFact(_settingsGroup, _nameToMetaDataMap[name], this);
+}
+
diff --git a/src/Settings/SettingsGroup.h b/src/Settings/SettingsGroup.h
new file mode 100644
index 0000000000000000000000000000000000000000..048c0b1132fdb721cb48c5f962ad505776f2c934
--- /dev/null
+++ b/src/Settings/SettingsGroup.h
@@ -0,0 +1,43 @@
+/****************************************************************************
+ *
+ * (c) 2009-2016 QGROUNDCONTROL PROJECT
+ *
+ * QGroundControl is licensed according to the terms in the file
+ * COPYING.md in the root of the source code directory.
+ *
+ ****************************************************************************/
+
+#ifndef SettingsGroup_H
+#define SettingsGroup_H
+
+#include "QGCLoggingCategory.h"
+#include "Joystick.h"
+#include "MultiVehicleManager.h"
+#include "QGCToolbox.h"
+
+#include
+
+/// Provides access to group of settings. The group is named and has a visible property associated with which can control whether the group
+/// is shows in the ui.
+class SettingsGroup : public QObject
+{
+ Q_OBJECT
+
+public:
+ /// @param name Name for this Settings group
+ /// @param settingsGroup Group to place settings in for QSettings::setGroup
+ SettingsGroup(const QString& name, const QString& settingsGroup, QObject* parent = NULL);
+
+ Q_PROPERTY(bool visible MEMBER _visible CONSTANT)
+
+protected:
+ SettingsFact* _createSettingsFact(const QString& name);
+
+ QString _name;
+ QString _settingsGroup;
+ bool _visible;
+
+ QMap _nameToMetaDataMap;
+};
+
+#endif
diff --git a/src/Settings/SettingsGroup.units.json b/src/Settings/SettingsGroup.units.json
new file mode 100644
index 0000000000000000000000000000000000000000..0d4f101c7a37a4c875e6999bee1a287fdb733380
--- /dev/null
+++ b/src/Settings/SettingsGroup.units.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/src/Settings/SettingsGroup.video.json b/src/Settings/SettingsGroup.video.json
new file mode 100644
index 0000000000000000000000000000000000000000..0d4f101c7a37a4c875e6999bee1a287fdb733380
--- /dev/null
+++ b/src/Settings/SettingsGroup.video.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/src/Settings/SettingsManager.cc b/src/Settings/SettingsManager.cc
new file mode 100644
index 0000000000000000000000000000000000000000..35f47cbc7d87646c3641c0c98e6c29644879f152
--- /dev/null
+++ b/src/Settings/SettingsManager.cc
@@ -0,0 +1,34 @@
+/****************************************************************************
+ *
+ * (c) 2009-2016 QGROUNDCONTROL PROJECT
+ *
+ * QGroundControl is licensed according to the terms in the file
+ * COPYING.md in the root of the source code directory.
+ *
+ ****************************************************************************/
+
+#include "SettingsManager.h"
+
+#include
+
+SettingsManager::SettingsManager(QGCApplication* app)
+ : QGCTool(app)
+ , _appSettings(NULL)
+ , _unitsSettings(NULL)
+ , _autoConnectSettings(NULL)
+ , _videoSettings(NULL)
+{
+
+}
+
+void SettingsManager::setToolbox(QGCToolbox *toolbox)
+{
+ QGCTool::setToolbox(toolbox);
+ QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership);
+ qmlRegisterUncreatableType("QGroundControl.SettingsManager", 1, 0, "SettingsManager", "Reference only");
+
+ _unitsSettings = new UnitsSettings(this); // Must be first since AppSettings references it
+ _appSettings = new AppSettings(this);
+ _autoConnectSettings = new AutoConnectSettings(this);
+ _videoSettings = new VideoSettings(this);
+}
diff --git a/src/Settings/SettingsManager.h b/src/Settings/SettingsManager.h
new file mode 100644
index 0000000000000000000000000000000000000000..40e67555c4a1881ec96c3a2b2a8de5c1e2c690ff
--- /dev/null
+++ b/src/Settings/SettingsManager.h
@@ -0,0 +1,52 @@
+/****************************************************************************
+ *
+ * (c) 2009-2016 QGROUNDCONTROL PROJECT
+ *
+ * QGroundControl is licensed according to the terms in the file
+ * COPYING.md in the root of the source code directory.
+ *
+ ****************************************************************************/
+
+#ifndef SettingsManager_H
+#define SettingsManager_H
+
+#include "QGCLoggingCategory.h"
+#include "Joystick.h"
+#include "MultiVehicleManager.h"
+#include "QGCToolbox.h"
+#include "AppSettings.h"
+#include "UnitsSettings.h"
+#include "AutoConnectSettings.h"
+#include "VideoSettings.h"
+
+#include
+
+/// Provides access to all app settings
+class SettingsManager : public QGCTool
+{
+ Q_OBJECT
+
+public:
+ SettingsManager(QGCApplication* app);
+
+ Q_PROPERTY(QObject* appSettings READ appSettings CONSTANT)
+ Q_PROPERTY(QObject* unitsSettings READ unitsSettings CONSTANT)
+ Q_PROPERTY(QObject* autoConnectSettings READ autoConnectSettings CONSTANT)
+ Q_PROPERTY(QObject* videoSettings READ videoSettings CONSTANT)
+
+ // Override from QGCTool
+ virtual void setToolbox(QGCToolbox *toolbox);
+
+ AppSettings* appSettings (void) { return _appSettings; }
+ UnitsSettings* unitsSettings (void) { return _unitsSettings; }
+ AutoConnectSettings* autoConnectSettings (void) { return _autoConnectSettings; }
+ VideoSettings* videoSettings (void) { return _videoSettings; }
+
+private:
+ AppSettings* _appSettings;
+ UnitsSettings* _unitsSettings;
+ AutoConnectSettings* _autoConnectSettings;
+ VideoSettings* _videoSettings;
+};
+
+#endif
diff --git a/src/Settings/UnitsSettings.cc b/src/Settings/UnitsSettings.cc
new file mode 100644
index 0000000000000000000000000000000000000000..78c7d6b44058489ba80f3d9f3417e3ca07dbca5b
--- /dev/null
+++ b/src/Settings/UnitsSettings.cc
@@ -0,0 +1,93 @@
+/****************************************************************************
+ *
+ * (c) 2009-2016 QGROUNDCONTROL PROJECT
+ *
+ * QGroundControl is licensed according to the terms in the file
+ * COPYING.md in the root of the source code directory.
+ *
+ ****************************************************************************/
+
+#include "UnitsSettings.h"
+
+#include
+
+const char* UnitsSettings::unitsSettingsGroupName = "units";
+const char* UnitsSettings::distanceUnitsSettingsName = "DistanceUnits";
+const char* UnitsSettings::areaUnitsSettingsName = "AreaUnits";
+const char* UnitsSettings::speedUnitsSettingsName = "SpeedUnits";
+
+UnitsSettings::UnitsSettings(QObject* parent)
+ : SettingsGroup(unitsSettingsGroupName, QString() /* root settings group */, parent)
+ , _distanceUnitsFact(NULL)
+ , _areaUnitsFact(NULL)
+ , _speedUnitsFact(NULL)
+{
+ QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership);
+ qmlRegisterUncreatableType("QGroundControl.SettingsManager", 1, 0, "UnitsSettings", "Reference only");
+}
+
+Fact* UnitsSettings::distanceUnits(void)
+{
+ if (!_distanceUnitsFact) {
+ // Distance/Area/Speed units settings can't be loaded from json since it creates an infinite loop of meta data loading.
+ QStringList enumStrings;
+ QVariantList enumValues;
+
+ enumStrings << "Feet" << "Meters";
+ enumValues << QVariant::fromValue((uint32_t)DistanceUnitsFeet) << QVariant::fromValue((uint32_t)DistanceUnitsMeters);
+
+ FactMetaData* metaData = new FactMetaData(FactMetaData::valueTypeUint32, this);
+ metaData->setName(distanceUnitsSettingsName);
+ metaData->setEnumInfo(enumStrings, enumValues);
+ metaData->setRawDefaultValue(DistanceUnitsMeters);
+
+ _distanceUnitsFact = new SettingsFact(QString() /* no settings group */, metaData, this);
+
+ }
+
+ return _distanceUnitsFact;
+
+}
+
+Fact* UnitsSettings::areaUnits(void)
+{
+ if (!_areaUnitsFact) {
+ // Distance/Area/Speed units settings can't be loaded from json since it creates an infinite loop of meta data loading.
+ QStringList enumStrings;
+ QVariantList enumValues;
+
+ enumStrings << "SquareFeet" << "SquareMeters" << "SquareKilometers" << "Hectares" << "Acres" << "SquareMiles";
+ enumValues << QVariant::fromValue((uint32_t)AreaUnitsSquareFeet) << QVariant::fromValue((uint32_t)AreaUnitsSquareMeters) << QVariant::fromValue((uint32_t)AreaUnitsSquareKilometers) << QVariant::fromValue((uint32_t)AreaUnitsHectares) << QVariant::fromValue((uint32_t)AreaUnitsAcres) << QVariant::fromValue((uint32_t)AreaUnitsSquareMiles);
+
+ FactMetaData* metaData = new FactMetaData(FactMetaData::valueTypeUint32, this);
+ metaData->setName(areaUnitsSettingsName);
+ metaData->setEnumInfo(enumStrings, enumValues);
+ metaData->setRawDefaultValue(AreaUnitsSquareMeters);
+
+ _areaUnitsFact = new SettingsFact(QString() /* no settings group */, metaData, this);
+ }
+
+ return _areaUnitsFact;
+
+}
+
+Fact* UnitsSettings::speedUnits(void)
+{
+ if (!_speedUnitsFact) {
+ // Distance/Area/Speed units settings can't be loaded from json since it creates an infinite loop of meta data loading.
+ QStringList enumStrings;
+ QVariantList enumValues;
+
+ enumStrings << "Feet/second" << "Meters/second" << "Miles/hour" << "Kilometers/hour" << "Knots";
+ enumValues << QVariant::fromValue((uint32_t)SpeedUnitsFeetPerSecond) << QVariant::fromValue((uint32_t)SpeedUnitsMetersPerSecond) << QVariant::fromValue((uint32_t)SpeedUnitsMilesPerHour) << QVariant::fromValue((uint32_t)SpeedUnitsKilometersPerHour) << QVariant::fromValue((uint32_t)SpeedUnitsKnots);
+
+ FactMetaData* metaData = new FactMetaData(FactMetaData::valueTypeUint32, this);
+ metaData->setName(speedUnitsSettingsName);
+ metaData->setEnumInfo(enumStrings, enumValues);
+ metaData->setRawDefaultValue(SpeedUnitsMetersPerSecond);
+
+ _speedUnitsFact = new SettingsFact(QString() /* no settings group */, metaData, this);
+ }
+
+ return _speedUnitsFact;
+}
diff --git a/src/Settings/UnitsSettings.h b/src/Settings/UnitsSettings.h
new file mode 100644
index 0000000000000000000000000000000000000000..3ede8765a39cd7bd0bdd929ae9a7aec3d377c953
--- /dev/null
+++ b/src/Settings/UnitsSettings.h
@@ -0,0 +1,68 @@
+/****************************************************************************
+ *
+ * (c) 2009-2016 QGROUNDCONTROL PROJECT
+ *
+ * QGroundControl is licensed according to the terms in the file
+ * COPYING.md in the root of the source code directory.
+ *
+ ****************************************************************************/
+
+#ifndef UnitsSettings_H
+#define UnitsSettings_H
+
+#include "SettingsGroup.h"
+
+class UnitsSettings : public SettingsGroup
+{
+ Q_OBJECT
+
+public:
+ UnitsSettings(QObject* parent = NULL);
+
+ enum DistanceUnits {
+ DistanceUnitsFeet = 0,
+ DistanceUnitsMeters
+ };
+
+ enum AreaUnits {
+ AreaUnitsSquareFeet = 0,
+ AreaUnitsSquareMeters,
+ AreaUnitsSquareKilometers,
+ AreaUnitsHectares,
+ AreaUnitsAcres,
+ AreaUnitsSquareMiles,
+ };
+
+ enum SpeedUnits {
+ SpeedUnitsFeetPerSecond = 0,
+ SpeedUnitsMetersPerSecond,
+ SpeedUnitsMilesPerHour,
+ SpeedUnitsKilometersPerHour,
+ SpeedUnitsKnots,
+ };
+
+ Q_ENUMS(DistanceUnits)
+ Q_ENUMS(AreaUnits)
+ Q_ENUMS(SpeedUnits)
+
+ Q_PROPERTY(Fact* distanceUnits READ distanceUnits CONSTANT)
+ Q_PROPERTY(Fact* areaUnits READ areaUnits CONSTANT)
+ Q_PROPERTY(Fact* speedUnits READ speedUnits CONSTANT)
+
+ Fact* distanceUnits (void);
+ Fact* areaUnits (void);
+ Fact* speedUnits (void);
+
+ static const char* unitsSettingsGroupName;
+
+ static const char* distanceUnitsSettingsName;
+ static const char* areaUnitsSettingsName;
+ static const char* speedUnitsSettingsName;
+
+private:
+ SettingsFact* _distanceUnitsFact;
+ SettingsFact* _areaUnitsFact;
+ SettingsFact* _speedUnitsFact;
+};
+
+#endif
diff --git a/src/Settings/VideoSettings.cc b/src/Settings/VideoSettings.cc
new file mode 100644
index 0000000000000000000000000000000000000000..f518056e1e219b40e2e1dad9cd5551419faac5a8
--- /dev/null
+++ b/src/Settings/VideoSettings.cc
@@ -0,0 +1,21 @@
+/****************************************************************************
+ *
+ * (c) 2009-2016 QGROUNDCONTROL PROJECT
+ *
+ * QGroundControl is licensed according to the terms in the file
+ * COPYING.md in the root of the source code directory.
+ *
+ ****************************************************************************/
+
+#include "VideoSettings.h"
+
+#include
+
+const char* VideoSettings::VideoSettingsGroupName = "video";
+
+VideoSettings::VideoSettings(QObject* parent)
+ : SettingsGroup(VideoSettingsGroupName, QString() /* root settings group */, parent)
+{
+ QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership);
+ qmlRegisterUncreatableType("QGroundControl.SettingsManager", 1, 0, "VideoSettings", "Reference only");
+}
diff --git a/src/Settings/VideoSettings.h b/src/Settings/VideoSettings.h
new file mode 100644
index 0000000000000000000000000000000000000000..e5bc1117d3293afdbd207efe3e8b456b9640bf09
--- /dev/null
+++ b/src/Settings/VideoSettings.h
@@ -0,0 +1,27 @@
+/****************************************************************************
+ *
+ * (c) 2009-2016 QGROUNDCONTROL PROJECT
+ *
+ * QGroundControl is licensed according to the terms in the file
+ * COPYING.md in the root of the source code directory.
+ *
+ ****************************************************************************/
+
+#ifndef VideoSettings_H
+#define VideoSettings_H
+
+#include "SettingsGroup.h"
+
+class VideoSettings : public SettingsGroup
+{
+ Q_OBJECT
+
+public:
+ VideoSettings(QObject* parent = NULL);
+
+ static const char* VideoSettingsGroupName;
+
+private:
+};
+
+#endif
diff --git a/src/SettingsManager.cc b/src/SettingsManager.cc
deleted file mode 100644
index 115c610c0b9312a7219277535c38c456a33e50a2..0000000000000000000000000000000000000000
--- a/src/SettingsManager.cc
+++ /dev/null
@@ -1,214 +0,0 @@
-/****************************************************************************
- *
- * (c) 2009-2016 QGROUNDCONTROL PROJECT
- *
- * QGroundControl is licensed according to the terms in the file
- * COPYING.md in the root of the source code directory.
- *
- ****************************************************************************/
-
-#include "SettingsManager.h"
-#include "QGCApplication.h"
-
-QGC_LOGGING_CATEGORY(SettingsManagerLog, "SettingsManagerLog")
-
-const char* SettingsManager::offlineEditingFirmwareTypeSettingsName = "OfflineEditingFirmwareType";
-const char* SettingsManager::offlineEditingVehicleTypeSettingsName = "OfflineEditingVehicleType";
-const char* SettingsManager::offlineEditingCruiseSpeedSettingsName = "OfflineEditingCruiseSpeed";
-const char* SettingsManager::offlineEditingHoverSpeedSettingsName = "OfflineEditingHoverSpeed";
-const char* SettingsManager::distanceUnitsSettingsName = "DistanceUnits";
-const char* SettingsManager::areaUnitsSettingsName = "AreaUnits";
-const char* SettingsManager::speedUnitsSettingsName = "SpeedUnits";
-const char* SettingsManager::batteryPercentRemainingAnnounceSettingsName = "batteryPercentRemainingAnnounce";
-const char* SettingsManager::defaultMissionItemAltitudeSettingsName = "DefaultMissionItemAltitude";
-const char* SettingsManager::missionAutoLoadDirSettingsName = "MissionAutoLoadDir";
-const char* SettingsManager::promptFlightTelemetrySaveName = "PromptFLightDataSave";
-const char* SettingsManager::promptFlightTelemetrySaveNotArmedName = "PromptFLightDataSaveNotArmed";
-const char* SettingsManager::audioMutedName = "AudioMuted";
-
-SettingsManager::SettingsManager(QGCApplication* app)
- : QGCTool(app)
- , _offlineEditingFirmwareTypeFact(NULL)
- , _offlineEditingVehicleTypeFact(NULL)
- , _offlineEditingCruiseSpeedFact(NULL)
- , _offlineEditingHoverSpeedFact(NULL)
- , _distanceUnitsFact(NULL)
- , _areaUnitsFact(NULL)
- , _speedUnitsFact(NULL)
- , _batteryPercentRemainingAnnounceFact(NULL)
- , _defaultMissionItemAltitudeFact(NULL)
- , _missionAutoLoadDirFact(NULL)
- , _promptFlightTelemetrySave(NULL)
- , _promptFlightTelemetrySaveNotArmed(NULL)
- , _audioMuted(NULL)
-{
-
-}
-
-void SettingsManager::setToolbox(QGCToolbox *toolbox)
-{
- QGCTool::setToolbox(toolbox);
- QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership);
- qmlRegisterUncreatableType("QGroundControl.SettingsManager", 1, 0, "SettingsManager", "Reference only");
-
- _nameToMetaDataMap = FactMetaData::createMapFromJsonFile(":/json/SettingsManager.json", this);
-}
-
-SettingsFact* SettingsManager::_createSettingsFact(const QString& name)
-{
- return new SettingsFact(QString() /* no settings group */, _nameToMetaDataMap[name], this);
-}
-
-Fact* SettingsManager::offlineEditingFirmwareType(void)
-{
- if (!_offlineEditingFirmwareTypeFact) {
- _offlineEditingFirmwareTypeFact = _createSettingsFact(offlineEditingFirmwareTypeSettingsName);
- }
-
- return _offlineEditingFirmwareTypeFact;
-}
-
-Fact* SettingsManager::offlineEditingVehicleType(void)
-{
- if (!_offlineEditingVehicleTypeFact) {
- _offlineEditingVehicleTypeFact = _createSettingsFact(offlineEditingVehicleTypeSettingsName);
- }
-
- return _offlineEditingVehicleTypeFact;
-}
-
-Fact* SettingsManager::offlineEditingCruiseSpeed(void)
-{
- if (!_offlineEditingCruiseSpeedFact) {
- _offlineEditingCruiseSpeedFact = _createSettingsFact(offlineEditingCruiseSpeedSettingsName);
- }
- return _offlineEditingCruiseSpeedFact;
-}
-
-Fact* SettingsManager::offlineEditingHoverSpeed(void)
-{
- if (!_offlineEditingHoverSpeedFact) {
- _offlineEditingHoverSpeedFact = _createSettingsFact(offlineEditingHoverSpeedSettingsName);
- }
- return _offlineEditingHoverSpeedFact;
-}
-
-Fact* SettingsManager::batteryPercentRemainingAnnounce(void)
-{
- if (!_batteryPercentRemainingAnnounceFact) {
- _batteryPercentRemainingAnnounceFact = _createSettingsFact(batteryPercentRemainingAnnounceSettingsName);
- }
-
- return _batteryPercentRemainingAnnounceFact;
-}
-
-Fact* SettingsManager::defaultMissionItemAltitude(void)
-{
- if (!_defaultMissionItemAltitudeFact) {
- _defaultMissionItemAltitudeFact = _createSettingsFact(defaultMissionItemAltitudeSettingsName);
- }
-
- return _defaultMissionItemAltitudeFact;
-}
-
-Fact* SettingsManager::missionAutoLoadDir(void)
-{
- if (!_missionAutoLoadDirFact) {
- _missionAutoLoadDirFact = _createSettingsFact(missionAutoLoadDirSettingsName);
- }
-
- return _missionAutoLoadDirFact;
-}
-
-Fact* SettingsManager::promptFlightTelemetrySave(void)
-{
- if (!_promptFlightTelemetrySave) {
- _promptFlightTelemetrySave = _createSettingsFact(promptFlightTelemetrySaveName);
- }
-
- return _promptFlightTelemetrySave;
-}
-
-Fact* SettingsManager::promptFlightTelemetrySaveNotArmed(void)
-{
- if (!_promptFlightTelemetrySaveNotArmed) {
- _promptFlightTelemetrySaveNotArmed = _createSettingsFact(promptFlightTelemetrySaveNotArmedName);
- }
-
- return _promptFlightTelemetrySaveNotArmed;
-}
-
-Fact* SettingsManager::audioMuted(void)
-{
- if (!_audioMuted) {
- _audioMuted = _createSettingsFact(audioMutedName);
- }
-
- return _audioMuted;
-}
-
-Fact* SettingsManager::distanceUnits(void)
-{
- if (!_distanceUnitsFact) {
- // Distance/Area/Speed units settings can't be loaded from json since it creates an infinite loop of meta data loading.
- QStringList enumStrings;
- QVariantList enumValues;
-
- enumStrings << "Feet" << "Meters";
- enumValues << QVariant::fromValue((uint32_t)DistanceUnitsFeet) << QVariant::fromValue((uint32_t)DistanceUnitsMeters);
-
- FactMetaData* metaData = new FactMetaData(FactMetaData::valueTypeUint32, this);
- metaData->setName(distanceUnitsSettingsName);
- metaData->setEnumInfo(enumStrings, enumValues);
- metaData->setRawDefaultValue(DistanceUnitsMeters);
-
- _distanceUnitsFact = new SettingsFact(QString() /* no settings group */, metaData, this);
-
- }
-
- return _distanceUnitsFact;
-
-}
-
-Fact* SettingsManager::areaUnits(void)
-{
- if (!_areaUnitsFact) {
- // Distance/Area/Speed units settings can't be loaded from json since it creates an infinite loop of meta data loading.
- QStringList enumStrings;
- QVariantList enumValues;
-
- enumStrings << "SquareFeet" << "SquareMeters" << "SquareKilometers" << "Hectares" << "Acres" << "SquareMiles";
- enumValues << QVariant::fromValue((uint32_t)AreaUnitsSquareFeet) << QVariant::fromValue((uint32_t)AreaUnitsSquareMeters) << QVariant::fromValue((uint32_t)AreaUnitsSquareKilometers) << QVariant::fromValue((uint32_t)AreaUnitsHectares) << QVariant::fromValue((uint32_t)AreaUnitsAcres) << QVariant::fromValue((uint32_t)AreaUnitsSquareMiles);
-
- FactMetaData* metaData = new FactMetaData(FactMetaData::valueTypeUint32, this);
- metaData->setName(areaUnitsSettingsName);
- metaData->setEnumInfo(enumStrings, enumValues);
- metaData->setRawDefaultValue(AreaUnitsSquareMeters);
-
- _areaUnitsFact = new SettingsFact(QString() /* no settings group */, metaData, this);
- }
-
- return _areaUnitsFact;
-
-}
-
-Fact* SettingsManager::speedUnits(void)
-{
- if (!_speedUnitsFact) {
- // Distance/Area/Speed units settings can't be loaded from json since it creates an infinite loop of meta data loading.
- QStringList enumStrings;
- QVariantList enumValues;
-
- enumStrings << "Feet/second" << "Meters/second" << "Miles/hour" << "Kilometers/hour" << "Knots";
- enumValues << QVariant::fromValue((uint32_t)SpeedUnitsFeetPerSecond) << QVariant::fromValue((uint32_t)SpeedUnitsMetersPerSecond) << QVariant::fromValue((uint32_t)SpeedUnitsMilesPerHour) << QVariant::fromValue((uint32_t)SpeedUnitsKilometersPerHour) << QVariant::fromValue((uint32_t)SpeedUnitsKnots);
-
- FactMetaData* metaData = new FactMetaData(FactMetaData::valueTypeUint32, this);
- metaData->setName(speedUnitsSettingsName);
- metaData->setEnumInfo(enumStrings, enumValues);
- metaData->setRawDefaultValue(SpeedUnitsMetersPerSecond);
-
- _speedUnitsFact = new SettingsFact(QString() /* no settings group */, metaData, this);
- }
-
- return _speedUnitsFact;
-}
diff --git a/src/Vehicle/MultiVehicleManager.cc b/src/Vehicle/MultiVehicleManager.cc
index 45d3656c0ec5fa869f470fd5758177e44abbdedb..105da0786d8ba8696aa1e5dc67b87b56737f8120 100644
--- a/src/Vehicle/MultiVehicleManager.cc
+++ b/src/Vehicle/MultiVehicleManager.cc
@@ -64,8 +64,8 @@ void MultiVehicleManager::setToolbox(QGCToolbox *toolbox)
connect(_mavlinkProtocol, &MAVLinkProtocol::vehicleHeartbeatInfo, this, &MultiVehicleManager::_vehicleHeartbeatInfo);
SettingsManager* settingsManager = toolbox->settingsManager();
- _offlineEditingVehicle = new Vehicle(static_cast(settingsManager->offlineEditingFirmwareType()->rawValue().toInt()),
- static_cast(settingsManager->offlineEditingVehicleType()->rawValue().toInt()),
+ _offlineEditingVehicle = new Vehicle(static_cast(settingsManager->appSettings()->offlineEditingFirmwareType()->rawValue().toInt()),
+ static_cast(settingsManager->appSettings()->offlineEditingVehicleType()->rawValue().toInt()),
_firmwarePluginManager,
this);
}
diff --git a/src/Vehicle/Vehicle.cc b/src/Vehicle/Vehicle.cc
index a98e094a520978a78e455401f62e79b12223389d..1639e05197136782a7b7fc742e04c5756f1ec92e 100644
--- a/src/Vehicle/Vehicle.cc
+++ b/src/Vehicle/Vehicle.cc
@@ -101,8 +101,8 @@ Vehicle::Vehicle(LinkInterface* link,
, _onboardControlSensorsUnhealthy(0)
, _gpsRawIntMessageAvailable(false)
, _globalPositionIntMessageAvailable(false)
- , _cruiseSpeed(_settingsManager->offlineEditingCruiseSpeed()->rawValue().toDouble())
- , _hoverSpeed(_settingsManager->offlineEditingHoverSpeed()->rawValue().toDouble())
+ , _cruiseSpeed(_settingsManager->appSettings()->offlineEditingCruiseSpeed()->rawValue().toDouble())
+ , _hoverSpeed(_settingsManager->appSettings()->offlineEditingHoverSpeed()->rawValue().toDouble())
, _telemetryRRSSI(0)
, _telemetryLRSSI(0)
, _telemetryRXErrors(0)
@@ -260,8 +260,8 @@ Vehicle::Vehicle(MAV_AUTOPILOT firmwareType,
, _onboardControlSensorsUnhealthy(0)
, _gpsRawIntMessageAvailable(false)
, _globalPositionIntMessageAvailable(false)
- , _cruiseSpeed(_settingsManager->offlineEditingCruiseSpeed()->rawValue().toDouble())
- , _hoverSpeed(_settingsManager->offlineEditingHoverSpeed()->rawValue().toDouble())
+ , _cruiseSpeed(_settingsManager->appSettings()->offlineEditingCruiseSpeed()->rawValue().toDouble())
+ , _hoverSpeed(_settingsManager->appSettings()->offlineEditingHoverSpeed()->rawValue().toDouble())
, _connectionLost(false)
, _connectionLostEnabled(true)
, _missionManager(NULL)
@@ -323,10 +323,10 @@ void Vehicle::_commonInit(void)
connect(_rallyPointManager, &RallyPointManager::error, this, &Vehicle::_rallyPointManagerError);
// Offline editing vehicle tracks settings changes for offline editing settings
- connect(_settingsManager->offlineEditingFirmwareType(), &Fact::rawValueChanged, this, &Vehicle::_offlineFirmwareTypeSettingChanged);
- connect(_settingsManager->offlineEditingVehicleType(), &Fact::rawValueChanged, this, &Vehicle::_offlineVehicleTypeSettingChanged);
- connect(_settingsManager->offlineEditingCruiseSpeed(), &Fact::rawValueChanged, this, &Vehicle::_offlineCruiseSpeedSettingChanged);
- connect(_settingsManager->offlineEditingHoverSpeed(), &Fact::rawValueChanged, this, &Vehicle::_offlineHoverSpeedSettingChanged);
+ connect(_settingsManager->appSettings()->offlineEditingFirmwareType(), &Fact::rawValueChanged, this, &Vehicle::_offlineFirmwareTypeSettingChanged);
+ connect(_settingsManager->appSettings()->offlineEditingVehicleType(), &Fact::rawValueChanged, this, &Vehicle::_offlineVehicleTypeSettingChanged);
+ connect(_settingsManager->appSettings()->offlineEditingCruiseSpeed(), &Fact::rawValueChanged, this, &Vehicle::_offlineCruiseSpeedSettingChanged);
+ connect(_settingsManager->appSettings()->offlineEditingHoverSpeed(), &Fact::rawValueChanged, this, &Vehicle::_offlineHoverSpeedSettingChanged);
// Build FactGroup object model
@@ -791,7 +791,7 @@ void Vehicle::_handleSysStatus(mavlink_message_t& message)
}
_batteryFactGroup.percentRemaining()->setRawValue(sysStatus.battery_remaining);
- if (sysStatus.battery_remaining > 0 && sysStatus.battery_remaining < _settingsManager->batteryPercentRemainingAnnounce()->rawValue().toInt()) {
+ if (sysStatus.battery_remaining > 0 && sysStatus.battery_remaining < _settingsManager->appSettings()->batteryPercentRemainingAnnounce()->rawValue().toInt()) {
if (!_lowBatteryAnnounceTimer.isValid() || _lowBatteryAnnounceTimer.elapsed() > _lowBatteryAnnounceRepeatMSecs) {
_lowBatteryAnnounceTimer.restart();
_say(QString("%1 low battery: %2 percent remaining").arg(_vehicleIdSpeech()).arg(sysStatus.battery_remaining));
@@ -1579,7 +1579,7 @@ void Vehicle::_parametersReady(bool parametersReady)
{
if (parametersReady && !_missionManagerInitialRequestSent) {
_missionManagerInitialRequestSent = true;
- QString missionAutoLoadDirPath = _settingsManager->missionAutoLoadDir()->rawValue().toString();
+ QString missionAutoLoadDirPath = _settingsManager->appSettings()->missionAutoLoadDir()->rawValue().toString();
if (missionAutoLoadDirPath.isEmpty()) {
_missionManager->requestMissionItems();
} else {
diff --git a/src/api/QGCCorePlugin.cc b/src/api/QGCCorePlugin.cc
index b59c274a3db8284627e30dab861dbaaaebd5b6a0..aee94cde77f33acb808447c2d8d123566fdbda87 100644
--- a/src/api/QGCCorePlugin.cc
+++ b/src/api/QGCCorePlugin.cc
@@ -159,3 +159,11 @@ QVariantList& QGCCorePlugin::toolBarIndicators()
}
return _p->toolBarIndicatorList;
}
+
+bool QGCCorePlugin::overrideSettingsGroupVisibility(QString name)
+{
+ Q_UNUSED(name);
+
+ // Always show all
+ return true;
+}
diff --git a/src/api/QGCCorePlugin.h b/src/api/QGCCorePlugin.h
index 582821a3aca385c59c44497772889a131a2f5bca..eb2ca44aaecaae4756f9a60db532975a3d4ebb4a 100644
--- a/src/api/QGCCorePlugin.h
+++ b/src/api/QGCCorePlugin.h
@@ -53,6 +53,11 @@ public:
/// @return An instance of QGCOptions
virtual QGCOptions* options ();
+ /// Allows the core plugin to override the default value for the specified setting
+ /// @param name - Setting group name
+ /// @return true: Show settings ui, false: Hide settings ui
+ virtual bool overrideSettingsGroupVisibility(QString name);
+
/// Allows the core plugin to override the default value for the specified setting
/// @param name - Setting name
/// @param defaultValue - Standard default value for setting
diff --git a/src/comm/MAVLinkProtocol.cc b/src/comm/MAVLinkProtocol.cc
index 3ca92d845b1e835c4b8b8eebf38da8946a952879..0d031a4f88a72fd664325ff23fb27ad2b0e5d4a3 100644
--- a/src/comm/MAVLinkProtocol.cc
+++ b/src/comm/MAVLinkProtocol.cc
@@ -424,7 +424,7 @@ void MAVLinkProtocol::_stopLogging(void)
if (_closeLogFile()) {
// If the signals are not connected it means we are running a unit test. In that case just delete log files
SettingsManager* settingsManager = _app->toolbox()->settingsManager();
- if ((_vehicleWasArmed || settingsManager->promptFlightTelemetrySaveNotArmed()->rawValue().toBool()) && settingsManager->promptFlightTelemetrySave()->rawValue().toBool()) {
+ if ((_vehicleWasArmed || settingsManager->appSettings()->promptFlightTelemetrySaveNotArmed()->rawValue().toBool()) && settingsManager->appSettings()->promptFlightTelemetrySave()->rawValue().toBool()) {
emit saveTempFlightDataLog(_tempLogFile.fileName());
} else {
QFile::remove(_tempLogFile.fileName());
diff --git a/src/ui/preferences/GeneralSettings.qml b/src/ui/preferences/GeneralSettings.qml
index 75fe1906ca1328c555b5063e7607a4f2c5a22629..ecaaeb9ddba5c2b0c8b5519059dba7aa74555abd 100644
--- a/src/ui/preferences/GeneralSettings.qml
+++ b/src/ui/preferences/GeneralSettings.qml
@@ -32,8 +32,8 @@ QGCView {
anchors.fill: parent
anchors.margins: ScreenTools.defaultFontPixelWidth
- property Fact _percentRemainingAnnounce: QGroundControl.settingsManager.batteryPercentRemainingAnnounce
- property Fact _autoLoadDir: QGroundControl.settingsManager.missionAutoLoadDir
+ property Fact _percentRemainingAnnounce: QGroundControl.settingsManager.appSettings.batteryPercentRemainingAnnounce
+ property Fact _autoLoadDir: QGroundControl.settingsManager.appSettings.missionAutoLoadDir
property real _labelWidth: ScreenTools.defaultFontPixelWidth * 15
property real _editFieldWidth: ScreenTools.defaultFontPixelWidth * 30
@@ -41,14 +41,6 @@ QGCView {
QGCPalette { id: qgcPal }
- FileDialog {
- id: fileDialog
- title: "Choose a location to save video files."
- folder: shortcuts.home
- selectFolder: true
- onAccepted: QGroundControl.videoManager.setVideoSavePathByUrl(fileDialog.fileUrl)
- }
-
QGCViewPanel {
id: panel
anchors.fill: parent
@@ -65,10 +57,11 @@ QGCView {
//-----------------------------------------------------------------
//-- Units
Item {
- width: qgcView.width * 0.8
- height: unitLabel.height
- anchors.margins: ScreenTools.defaultFontPixelWidth
- anchors.horizontalCenter: parent.horizontalCenter
+ width: qgcView.width * 0.8
+ height: unitLabel.height
+ anchors.margins: ScreenTools.defaultFontPixelWidth
+ anchors.horizontalCenter: parent.horizontalCenter
+ visible: QGroundControl.settingsManager.unitsSettings.visible
QGCLabel {
id: unitLabel
text: qsTr("Units (Requires Restart)")
@@ -76,11 +69,12 @@ QGCView {
}
}
Rectangle {
- height: unitsCol.height + (ScreenTools.defaultFontPixelHeight * 2)
- width: qgcView.width * 0.8
- color: qgcPal.windowShade
- anchors.margins: ScreenTools.defaultFontPixelWidth
- anchors.horizontalCenter: parent.horizontalCenter
+ height: unitsCol.height + (ScreenTools.defaultFontPixelHeight * 2)
+ width: qgcView.width * 0.8
+ color: qgcPal.windowShade
+ anchors.margins: ScreenTools.defaultFontPixelWidth
+ anchors.horizontalCenter: parent.horizontalCenter
+ visible: QGroundControl.settingsManager.unitsSettings.visible
Column {
id: unitsCol
spacing: ScreenTools.defaultFontPixelWidth
@@ -95,7 +89,7 @@ QGCView {
FactComboBox {
id: distanceUnitsCombo
width: _editFieldWidth
- fact: QGroundControl.settingsManager.distanceUnits
+ fact: QGroundControl.settingsManager.unitsSettings.distanceUnits
indexModel: false
}
}
@@ -109,7 +103,7 @@ QGCView {
FactComboBox {
id: areaUnitsCombo
width: _editFieldWidth
- fact: QGroundControl.settingsManager.areaUnits
+ fact: QGroundControl.settingsManager.unitsSettings.areaUnits
indexModel: false
}
}
@@ -123,7 +117,7 @@ QGCView {
FactComboBox {
id: speedUnitsCombo
width: _editFieldWidth
- fact: QGroundControl.settingsManager.speedUnits
+ fact: QGroundControl.settingsManager.unitsSettings.speedUnits
indexModel: false
}
}
@@ -132,10 +126,11 @@ QGCView {
//-----------------------------------------------------------------
//-- Miscellanous
Item {
- width: qgcView.width * 0.8
- height: miscLabel.height
- anchors.margins: ScreenTools.defaultFontPixelWidth
- anchors.horizontalCenter: parent.horizontalCenter
+ width: qgcView.width * 0.8
+ height: miscLabel.height
+ anchors.margins: ScreenTools.defaultFontPixelWidth
+ anchors.horizontalCenter: parent.horizontalCenter
+ visible: QGroundControl.settingsManager.appSettings.visible
QGCLabel {
id: miscLabel
text: qsTr("Miscellaneous")
@@ -143,11 +138,12 @@ QGCView {
}
}
Rectangle {
- height: miscCol.height + (ScreenTools.defaultFontPixelHeight * 2)
- width: qgcView.width * 0.8
- color: qgcPal.windowShade
- anchors.margins: ScreenTools.defaultFontPixelWidth
- anchors.horizontalCenter: parent.horizontalCenter
+ height: miscCol.height + (ScreenTools.defaultFontPixelHeight * 2)
+ width: qgcView.width * 0.8
+ color: qgcPal.windowShade
+ anchors.margins: ScreenTools.defaultFontPixelWidth
+ anchors.horizontalCenter: parent.horizontalCenter
+ visible: QGroundControl.settingsManager.appSettings.visible
Column {
id: miscCol
spacing: ScreenTools.defaultFontPixelWidth
@@ -233,22 +229,21 @@ QGCView {
//-- Audio preferences
FactCheckBox {
text: qsTr("Mute all audio output")
- fact: QGroundControl.settingsManager.audioMuted
+ fact: QGroundControl.settingsManager.appSettings.audioMuted
}
//-----------------------------------------------------------------
//-- Prompt Save Log
- QGCCheckBox {
+ FactCheckBox {
id: promptSaveLog
text: qsTr("Prompt to save Flight Data Log after each flight")
- checked: QGroundControl.settingsManager.promptFlightTelemetrySave
- //fact: QGroundControl.settingsManager.promptFlightTelemetrySave
+ fact: QGroundControl.settingsManager.appSettings.promptFlightTelemetrySave
visible: !ScreenTools.isMobile
}
//-----------------------------------------------------------------
//-- Prompt Save even if not armed
FactCheckBox {
text: qsTr("Prompt to save Flight Data Log even if vehicle was not armed")
- fact: QGroundControl.settingsManager.promptFlightTelemetrySaveNotArmed
+ fact: QGroundControl.settingsManager.appSettings.promptFlightTelemetrySaveNotArmed
visible: !ScreenTools.isMobile
enabled: promptSaveLog.checked
}
@@ -320,7 +315,7 @@ QGCView {
}
FactTextField {
id: defaultItemAltitudeField
- fact: QGroundControl.settingsManager.defaultMissionItemAltitude
+ fact: QGroundControl.settingsManager.appSettings.defaultMissionItemAltitude
}
}
//-----------------------------------------------------------------
@@ -403,11 +398,11 @@ QGCView {
//-----------------------------------------------------------------
//-- Autoconnect settings
Item {
- width: qgcView.width * 0.8
- height: autoConnectLabel.height
- anchors.margins: ScreenTools.defaultFontPixelWidth
- anchors.horizontalCenter: parent.horizontalCenter
- visible: QGroundControl.corePlugin.options.enableAutoConnectOptions
+ width: qgcView.width * 0.8
+ height: autoConnectLabel.height
+ anchors.margins: ScreenTools.defaultFontPixelWidth
+ anchors.horizontalCenter: parent.horizontalCenter
+ visible: QGroundControl.settingsManager.autoConnectSettings.visible
QGCLabel {
id: autoConnectLabel
text: qsTr("AutoConnect to the following devices:")
@@ -415,12 +410,12 @@ QGCView {
}
}
Rectangle {
- height: autoConnectCol.height + (ScreenTools.defaultFontPixelHeight * 2)
- width: qgcView.width * 0.8
- color: qgcPal.windowShade
- visible: QGroundControl.corePlugin.options.enableAutoConnectOptions
- anchors.margins: ScreenTools.defaultFontPixelWidth
- anchors.horizontalCenter: parent.horizontalCenter
+ height: autoConnectCol.height + (ScreenTools.defaultFontPixelHeight * 2)
+ width: qgcView.width * 0.8
+ color: qgcPal.windowShade
+ anchors.margins: ScreenTools.defaultFontPixelWidth
+ anchors.horizontalCenter: parent.horizontalCenter
+ visible: QGroundControl.settingsManager.autoConnectSettings.visible
Column {
id: autoConnectCol
spacing: ScreenTools.defaultFontPixelWidth
@@ -468,11 +463,11 @@ QGCView {
//-----------------------------------------------------------------
//-- Video Source
Item {
- width: qgcView.width * 0.8
- height: videoLabel.height
- visible: QGroundControl.corePlugin.options.enableVideoSourceOptions
- anchors.margins: ScreenTools.defaultFontPixelWidth
- anchors.horizontalCenter: parent.horizontalCenter
+ width: qgcView.width * 0.8
+ height: videoLabel.height
+ anchors.margins: ScreenTools.defaultFontPixelWidth
+ anchors.horizontalCenter: parent.horizontalCenter
+ visible: QGroundControl.settingsManager.videoSettings.visible
QGCLabel {
id: videoLabel
text: qsTr("Video (Requires Restart)")
@@ -480,12 +475,12 @@ QGCView {
}
}
Rectangle {
- height: videoCol.height + (ScreenTools.defaultFontPixelHeight * 2)
- width: qgcView.width * 0.8
- color: qgcPal.windowShade
- visible: QGroundControl.corePlugin.options.enableVideoSourceOptions
- anchors.margins: ScreenTools.defaultFontPixelWidth
- anchors.horizontalCenter: parent.horizontalCenter
+ height: videoCol.height + (ScreenTools.defaultFontPixelHeight * 2)
+ width: qgcView.width * 0.8
+ color: qgcPal.windowShade
+ anchors.margins: ScreenTools.defaultFontPixelWidth
+ anchors.horizontalCenter: parent.horizontalCenter
+ visible: QGroundControl.settingsManager.videoSettings.visible
Column {
id: videoCol
spacing: ScreenTools.defaultFontPixelWidth
@@ -566,8 +561,17 @@ QGCView {
text: QGroundControl.videoManager.videoSavePath
}
QGCButton {
- text: "Browse"
- onClicked: fileDialog.visible = true
+ text: "Browse"
+ onClicked: videoLocationFileDialog.visible = true
+
+ FileDialog {
+ id: videoLocationFileDialog
+ title: "Choose a location to save video files."
+ folder: shortcuts.home
+ selectFolder: true
+ onAccepted: QGroundControl.videoManager.setVideoSavePathByUrl(fileDialog.fileUrl)
+ }
+
}
}
}