27 changed files with 482 additions and 349 deletions
@ -0,0 +1,170 @@ |
|||||||
|
/****************************************************************************
|
||||||
|
* |
||||||
|
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
|
||||||
|
* |
||||||
|
* QGroundControl is licensed according to the terms in the file |
||||||
|
* COPYING.md in the root of the source code directory. |
||||||
|
* |
||||||
|
****************************************************************************/ |
||||||
|
|
||||||
|
#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"; |
||||||
|
|
||||||
|
SettingsManager::SettingsManager(QGCApplication* app) |
||||||
|
: QGCTool(app) |
||||||
|
, _offlineEditingFirmwareTypeFact(NULL) |
||||||
|
, _offlineEditingVehicleTypeFact(NULL) |
||||||
|
, _offlineEditingCruiseSpeedFact(NULL) |
||||||
|
, _offlineEditingHoverSpeedFact(NULL) |
||||||
|
, _distanceUnitsFact(NULL) |
||||||
|
, _areaUnitsFact(NULL) |
||||||
|
, _speedUnitsFact(NULL) |
||||||
|
, _batteryPercentRemainingAnnounceFact(NULL) |
||||||
|
, _defaultMissionItemAltitudeFact(NULL) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void SettingsManager::setToolbox(QGCToolbox *toolbox) |
||||||
|
{ |
||||||
|
QGCTool::setToolbox(toolbox); |
||||||
|
QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership); |
||||||
|
qmlRegisterUncreatableType<SettingsManager>("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::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; |
||||||
|
} |
@ -0,0 +1,112 @@ |
|||||||
|
/****************************************************************************
|
||||||
|
* |
||||||
|
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
|
||||||
|
* |
||||||
|
* QGroundControl is licensed according to the terms in the file |
||||||
|
* COPYING.md in the root of the source code directory. |
||||||
|
* |
||||||
|
****************************************************************************/ |
||||||
|
|
||||||
|
|
||||||
|
#ifndef SettingsManager_H |
||||||
|
#define SettingsManager_H |
||||||
|
|
||||||
|
#include "QGCLoggingCategory.h" |
||||||
|
#include "Joystick.h" |
||||||
|
#include "MultiVehicleManager.h" |
||||||
|
#include "QGCToolbox.h" |
||||||
|
|
||||||
|
#include <QVariantList> |
||||||
|
|
||||||
|
Q_DECLARE_LOGGING_CATEGORY(SettingsManagerLog) |
||||||
|
|
||||||
|
/// Provides access to all app settings
|
||||||
|
class SettingsManager : public QGCTool |
||||||
|
{ |
||||||
|
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) |
||||||
|
|
||||||
|
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) |
||||||
|
|
||||||
|
Fact* offlineEditingFirmwareType (void); |
||||||
|
Fact* offlineEditingVehicleType (void); |
||||||
|
Fact* offlineEditingCruiseSpeed (void); |
||||||
|
Fact* offlineEditingHoverSpeed (void); |
||||||
|
Fact* distanceUnits (void); |
||||||
|
Fact* areaUnits (void); |
||||||
|
Fact* speedUnits (void); |
||||||
|
Fact* batteryPercentRemainingAnnounce(void); |
||||||
|
Fact* defaultMissionItemAltitude (void); |
||||||
|
|
||||||
|
// Override from QGCTool
|
||||||
|
virtual void setToolbox(QGCToolbox *toolbox); |
||||||
|
|
||||||
|
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; |
||||||
|
|
||||||
|
public slots: |
||||||
|
|
||||||
|
signals: |
||||||
|
|
||||||
|
private slots: |
||||||
|
|
||||||
|
private: |
||||||
|
SettingsFact* _createSettingsFact(const QString& name); |
||||||
|
|
||||||
|
QMap<QString, FactMetaData*> _nameToMetaDataMap; |
||||||
|
|
||||||
|
SettingsFact* _offlineEditingFirmwareTypeFact; |
||||||
|
SettingsFact* _offlineEditingVehicleTypeFact; |
||||||
|
SettingsFact* _offlineEditingCruiseSpeedFact; |
||||||
|
SettingsFact* _offlineEditingHoverSpeedFact; |
||||||
|
SettingsFact* _distanceUnitsFact; |
||||||
|
SettingsFact* _areaUnitsFact; |
||||||
|
SettingsFact* _speedUnitsFact; |
||||||
|
SettingsFact* _batteryPercentRemainingAnnounceFact; |
||||||
|
SettingsFact* _defaultMissionItemAltitudeFact; |
||||||
|
}; |
||||||
|
|
||||||
|
#endif |
Loading…
Reference in new issue