diff --git a/src/FactSystem/FactMetaData.cc b/src/FactSystem/FactMetaData.cc index c254cd2a1d6c268c69dd8cfb3bbdbf30b57a1e23..79514d03f1cd53af843ed4852148f8ff897ee3ab 100644 --- a/src/FactSystem/FactMetaData.cc +++ b/src/FactSystem/FactMetaData.cc @@ -616,7 +616,7 @@ void FactMetaData::setBuiltInTranslator(void) for (size_t i=0; irawUnits == _rawUnits.toLower()) { + if (pBuiltInTranslation->rawUnits.toLower() == _rawUnits.toLower()) { _cookedUnits = pBuiltInTranslation->cookedUnits; setTranslators(pBuiltInTranslation->rawTranslator, pBuiltInTranslation->cookedTranslator); return; @@ -875,13 +875,33 @@ void FactMetaData::_setAppSettingsTranslators(void) if (!_enumStrings.count() && (type() == valueTypeDouble || type() == valueTypeFloat)) { for (size_t i=0; irawUnits == _rawUnits.toLower() && ( - (pAppSettingsTranslation->unitType == UnitTemperature && pAppSettingsTranslation->unitOption == qgcApp()->toolbox()->settingsManager()->unitsSettings()->temperatureUnits()->rawValue().toUInt()) || - (pAppSettingsTranslation->unitType == UnitSpeed && pAppSettingsTranslation->unitOption == qgcApp()->toolbox()->settingsManager()->unitsSettings()->speedUnits()->rawValue().toUInt()) || - (pAppSettingsTranslation->unitType == UnitDistance && pAppSettingsTranslation->unitOption == qgcApp()->toolbox()->settingsManager()->unitsSettings()->distanceUnits()->rawValue().toUInt()) || - (pAppSettingsTranslation->unitType == UnitArea && pAppSettingsTranslation->unitOption == qgcApp()->toolbox()->settingsManager()->unitsSettings()->areaUnits()->rawValue().toUInt()))) - { - _cookedUnits = pAppSettingsTranslation->cookedUnits; + + if (_rawUnits.toLower() != pAppSettingsTranslation->rawUnits.toLower()) { + continue; + } + + UnitsSettings* settings = qgcApp()->toolbox()->settingsManager()->unitsSettings(); + uint settingsUnits = 0; + + switch (pAppSettingsTranslation->unitType) { + case UnitDistance: + settingsUnits = settings->distanceUnits()->rawValue().toUInt(); + break; + case UnitSpeed: + settingsUnits = settings->speedUnits()->rawValue().toUInt(); + break; + case UnitArea: + settingsUnits = settings->areaUnits()->rawValue().toUInt(); + break; + case UnitTemperature: + settingsUnits = settings->temperatureUnits()->rawValue().toUInt(); + break; + default: + break; + } + + if (settingsUnits == pAppSettingsTranslation->unitOption) { + _cookedUnits = pAppSettingsTranslation->cookedUnits; setTranslators(pAppSettingsTranslation->rawTranslator, pAppSettingsTranslation->cookedTranslator); return; } @@ -893,8 +913,15 @@ const FactMetaData::AppSettingsTranslation_s* FactMetaData::_findAppSettingsDist { for (size_t i=0; irawUnits == rawUnits.toLower() && - (pAppSettingsTranslation->unitType == UnitDistance && pAppSettingsTranslation->unitOption == qgcApp()->toolbox()->settingsManager()->unitsSettings()->distanceUnits()->rawValue().toUInt())) { + + if (rawUnits.toLower() != pAppSettingsTranslation->rawUnits.toLower()) { + continue; + } + + uint settingsUnits = qgcApp()->toolbox()->settingsManager()->unitsSettings()->areaUnits()->rawValue().toUInt(); + + if (pAppSettingsTranslation->unitType == UnitDistance + && pAppSettingsTranslation->unitOption == settingsUnits) { return pAppSettingsTranslation; } } @@ -905,8 +932,15 @@ const FactMetaData::AppSettingsTranslation_s* FactMetaData::_findAppSettingsArea { for (size_t i=0; irawUnits == rawUnits.toLower() && - (pAppSettingsTranslation->unitType == UnitArea && pAppSettingsTranslation->unitOption == qgcApp()->toolbox()->settingsManager()->unitsSettings()->areaUnits()->rawValue().toUInt())) { + + if (rawUnits.toLower() != pAppSettingsTranslation->rawUnits.toLower()) { + continue; + } + + uint settingsUnits = qgcApp()->toolbox()->settingsManager()->unitsSettings()->areaUnits()->rawValue().toUInt(); + + if (pAppSettingsTranslation->unitType == UnitArea + && pAppSettingsTranslation->unitOption == settingsUnits) { return pAppSettingsTranslation; } } diff --git a/src/FactSystem/FactMetaData.h b/src/FactSystem/FactMetaData.h index a82408476a95af2ca47529b08d30151ee7caaf7b..da0ee47e155944d61122b65945ac9ee6a4b48ca5 100644 --- a/src/FactSystem/FactMetaData.h +++ b/src/FactSystem/FactMetaData.h @@ -216,7 +216,7 @@ private: }; struct AppSettingsTranslation_s { - const char* rawUnits; + QString rawUnits; const char* cookedUnits; UnitTypes unitType; uint32_t unitOption; @@ -265,7 +265,7 @@ private: } constants; struct BuiltInTranslation_s { - const char* rawUnits; + QString rawUnits; const char* cookedUnits; Translator rawTranslator; Translator cookedTranslator;