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) + } + } } }