/**************************************************************************** * * (c) 2009-2020 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 #include DECLARE_SETTINGGROUP(Units, "Units") { qmlRegisterUncreatableType("QGroundControl.SettingsManager", 1, 0, "UnitsSettings", "Reference only"); } DECLARE_SETTINGSFACT_NO_FUNC(UnitsSettings, horizontalDistanceUnits) { if (!_horizontalDistanceUnitsFact) { // 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(static_cast(HorizontalDistanceUnitsFeet)) << QVariant::fromValue(static_cast(HorizontalDistanceUnitsMeters)); FactMetaData* metaData = new FactMetaData(FactMetaData::valueTypeUint32, this); metaData->setName(horizontalDistanceUnitsName); metaData->setShortDescription("Distance units"); metaData->setEnumInfo(enumStrings, enumValues); HorizontalDistanceUnits defaultHorizontalDistanceUnit = HorizontalDistanceUnitsMeters; switch(QLocale::system().measurementSystem()) { case QLocale::MetricSystem: { defaultHorizontalDistanceUnit = HorizontalDistanceUnitsMeters; } break; case QLocale::ImperialUSSystem: case QLocale::ImperialUKSystem: defaultHorizontalDistanceUnit = HorizontalDistanceUnitsFeet; break; } metaData->setRawDefaultValue(defaultHorizontalDistanceUnit); metaData->setQGCRebootRequired(true); _horizontalDistanceUnitsFact = new SettingsFact(_settingsGroup, metaData, this); } return _horizontalDistanceUnitsFact; } DECLARE_SETTINGSFACT_NO_FUNC(UnitsSettings, verticalDistanceUnits) { if (!_verticalDistanceUnitsFact) { // 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(static_cast(VerticalDistanceUnitsFeet)) << QVariant::fromValue(static_cast(VerticalDistanceUnitsMeters)); FactMetaData* metaData = new FactMetaData(FactMetaData::valueTypeUint32, this); metaData->setName(verticalDistanceUnitsName); metaData->setShortDescription("Altitude units"); metaData->setEnumInfo(enumStrings, enumValues); VerticalDistanceUnits defaultVerticalAltitudeUnit = VerticalDistanceUnitsMeters; switch(QLocale::system().measurementSystem()) { case QLocale::MetricSystem: { defaultVerticalAltitudeUnit = VerticalDistanceUnitsMeters; } break; case QLocale::ImperialUSSystem: case QLocale::ImperialUKSystem: defaultVerticalAltitudeUnit = VerticalDistanceUnitsFeet; break; } metaData->setRawDefaultValue(defaultVerticalAltitudeUnit); metaData->setQGCRebootRequired(true); _verticalDistanceUnitsFact = new SettingsFact(_settingsGroup, metaData, this); } return _verticalDistanceUnitsFact; } DECLARE_SETTINGSFACT_NO_FUNC(UnitsSettings, areaUnits) { 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(static_cast(AreaUnitsSquareFeet)) << QVariant::fromValue(static_cast(AreaUnitsSquareMeters)) << QVariant::fromValue(static_cast(AreaUnitsSquareKilometers)) << QVariant::fromValue(static_cast(AreaUnitsHectares)) << QVariant::fromValue(static_cast(AreaUnitsAcres)) << QVariant::fromValue(static_cast(AreaUnitsSquareMiles)); FactMetaData* metaData = new FactMetaData(FactMetaData::valueTypeUint32, this); metaData->setName(areaUnitsName); metaData->setShortDescription("Area units"); metaData->setEnumInfo(enumStrings, enumValues); AreaUnits defaultAreaUnit = AreaUnitsSquareMeters; switch(QLocale::system().measurementSystem()) { case QLocale::MetricSystem: { defaultAreaUnit = AreaUnitsSquareMeters; } break; case QLocale::ImperialUSSystem: case QLocale::ImperialUKSystem: defaultAreaUnit = AreaUnitsSquareMiles; break; } metaData->setRawDefaultValue(defaultAreaUnit); metaData->setQGCRebootRequired(true); _areaUnitsFact = new SettingsFact(_settingsGroup, metaData, this); } return _areaUnitsFact; } DECLARE_SETTINGSFACT_NO_FUNC(UnitsSettings, speedUnits) { 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(static_cast(SpeedUnitsFeetPerSecond)) << QVariant::fromValue(static_cast(SpeedUnitsMetersPerSecond)) << QVariant::fromValue(static_cast(SpeedUnitsMilesPerHour)) << QVariant::fromValue(static_cast(SpeedUnitsKilometersPerHour)) << QVariant::fromValue(static_cast(SpeedUnitsKnots)); FactMetaData* metaData = new FactMetaData(FactMetaData::valueTypeUint32, this); metaData->setName(speedUnitsName); metaData->setShortDescription("Speed units"); metaData->setEnumInfo(enumStrings, enumValues); SpeedUnits defaultSpeedUnit = SpeedUnitsMetersPerSecond; switch(QLocale::system().measurementSystem()) { case QLocale::MetricSystem: { defaultSpeedUnit = SpeedUnitsMetersPerSecond; } break; case QLocale::ImperialUSSystem: case QLocale::ImperialUKSystem: defaultSpeedUnit = SpeedUnitsMilesPerHour; break; } metaData->setRawDefaultValue(defaultSpeedUnit); metaData->setQGCRebootRequired(true); _speedUnitsFact = new SettingsFact(_settingsGroup, metaData, this); } return _speedUnitsFact; } DECLARE_SETTINGSFACT_NO_FUNC(UnitsSettings, temperatureUnits) { if (!_temperatureUnitsFact) { // Units settings can't be loaded from json since it creates an infinite loop of meta data loading. QStringList enumStrings; QVariantList enumValues; enumStrings << "Celsius" << "Farenheit"; enumValues << QVariant::fromValue(static_cast(TemperatureUnitsCelsius)) << QVariant::fromValue(static_cast(TemperatureUnitsFarenheit)); FactMetaData* metaData = new FactMetaData(FactMetaData::valueTypeUint32, this); metaData->setName(temperatureUnitsName); metaData->setShortDescription("Temperature units"); metaData->setEnumInfo(enumStrings, enumValues); TemperatureUnits defaultTemperatureUnit = TemperatureUnitsCelsius; switch(QLocale::system().measurementSystem()) { case QLocale::MetricSystem: { defaultTemperatureUnit = TemperatureUnitsCelsius; } break; case QLocale::ImperialUSSystem: case QLocale::ImperialUKSystem: defaultTemperatureUnit = TemperatureUnitsFarenheit; break; } metaData->setRawDefaultValue(defaultTemperatureUnit); metaData->setQGCRebootRequired(true); _temperatureUnitsFact = new SettingsFact(_settingsGroup, metaData, this); } return _temperatureUnitsFact; } DECLARE_SETTINGSFACT_NO_FUNC(UnitsSettings, weightUnits) { if (!_weightUnitsFact) { // Units settings can't be loaded from json since it creates an infinite loop of meta data loading. QStringList enumStrings; QVariantList enumValues; enumStrings << "Grams" << "Kilograms" << "Ounces" << "Pounds"; enumValues << QVariant::fromValue(static_cast(WeightUnitsGrams)) << QVariant::fromValue(static_cast(WeightUnitsKg)) << QVariant::fromValue(static_cast(WeightUnitsOz)) << QVariant::fromValue(static_cast(WeightUnitsLbs)); FactMetaData* metaData = new FactMetaData(FactMetaData::valueTypeUint32, this); metaData->setName(weightUnitsName); metaData->setShortDescription(tr("Weight units")); metaData->setEnumInfo(enumStrings, enumValues); WeightUnits defaultWeightUnit = WeightUnitsGrams; switch(QLocale::system().measurementSystem()) { case QLocale::MetricSystem: case QLocale::ImperialUKSystem: { defaultWeightUnit = WeightUnitsGrams; } break; case QLocale::ImperialUSSystem: defaultWeightUnit = WeightUnitsOz; break; } metaData->setRawDefaultValue(defaultWeightUnit); metaData->setQGCRebootRequired(true); _weightUnitsFact = new SettingsFact(_settingsGroup, metaData, this); } return _weightUnitsFact; }