#include #include #include #include namespace scwx { namespace qt { namespace settings { static const std::string logPrefix_ = "scwx::qt::settings::unit_settings"; class UnitSettings::Impl { public: explicit Impl() { std::string defaultAccumulationUnitsValue = types::GetAccumulationUnitsName(types::AccumulationUnits::Inches); std::string defaultEchoTopsUnitsValue = types::GetEchoTopsUnitsName(types::EchoTopsUnits::Kilofeet); std::string defaultOtherUnitsValue = types::GetOtherUnitsName(types::OtherUnits::Default); std::string defaultSpeedUnitsValue = types::GetSpeedUnitsName(types::SpeedUnits::Knots); std::string defaultDistanceUnitsValue = types::GetDistanceUnitsName(types::DistanceUnits::Miles); boost::to_lower(defaultAccumulationUnitsValue); boost::to_lower(defaultEchoTopsUnitsValue); boost::to_lower(defaultOtherUnitsValue); boost::to_lower(defaultSpeedUnitsValue); boost::to_lower(defaultDistanceUnitsValue); accumulationUnits_.SetDefault(defaultAccumulationUnitsValue); echoTopsUnits_.SetDefault(defaultEchoTopsUnitsValue); otherUnits_.SetDefault(defaultOtherUnitsValue); speedUnits_.SetDefault(defaultSpeedUnitsValue); distanceUnits_.SetDefault(defaultDistanceUnitsValue); accumulationUnits_.SetValidator( SCWX_SETTINGS_ENUM_VALIDATOR(types::AccumulationUnits, types::AccumulationUnitsIterator(), types::GetAccumulationUnitsName)); echoTopsUnits_.SetValidator( SCWX_SETTINGS_ENUM_VALIDATOR(types::EchoTopsUnits, types::EchoTopsUnitsIterator(), types::GetEchoTopsUnitsName)); otherUnits_.SetValidator( SCWX_SETTINGS_ENUM_VALIDATOR(types::OtherUnits, types::OtherUnitsIterator(), types::GetOtherUnitsName)); speedUnits_.SetValidator( SCWX_SETTINGS_ENUM_VALIDATOR(types::SpeedUnits, types::SpeedUnitsIterator(), types::GetSpeedUnitsName)); distanceUnits_.SetValidator( SCWX_SETTINGS_ENUM_VALIDATOR(types::DistanceUnits, types::DistanceUnitsIterator(), types::GetDistanceUnitsName)); } ~Impl() {} SettingsVariable accumulationUnits_ {"accumulation_units"}; SettingsVariable echoTopsUnits_ {"echo_tops_units"}; SettingsVariable otherUnits_ {"other_units"}; SettingsVariable speedUnits_ {"speed_units"}; SettingsVariable distanceUnits_ {"distance_units"}; }; UnitSettings::UnitSettings() : SettingsCategory("unit"), p(std::make_unique()) { RegisterVariables({&p->accumulationUnits_, &p->echoTopsUnits_, &p->otherUnits_, &p->speedUnits_, &p->distanceUnits_}); SetDefaults(); } UnitSettings::~UnitSettings() = default; UnitSettings::UnitSettings(UnitSettings&&) noexcept = default; UnitSettings& UnitSettings::operator=(UnitSettings&&) noexcept = default; SettingsVariable& UnitSettings::accumulation_units() const { return p->accumulationUnits_; } SettingsVariable& UnitSettings::echo_tops_units() const { return p->echoTopsUnits_; } SettingsVariable& UnitSettings::other_units() const { return p->otherUnits_; } SettingsVariable& UnitSettings::speed_units() const { return p->speedUnits_; } SettingsVariable& UnitSettings::distance_units() const { return p->distanceUnits_; } UnitSettings& UnitSettings::Instance() { static UnitSettings generalSettings_; return generalSettings_; } bool operator==(const UnitSettings& lhs, const UnitSettings& rhs) { return (lhs.p->accumulationUnits_ == rhs.p->accumulationUnits_ && lhs.p->echoTopsUnits_ == rhs.p->echoTopsUnits_ && lhs.p->otherUnits_ == rhs.p->otherUnits_ && lhs.p->speedUnits_ == rhs.p->speedUnits_ && lhs.p->distanceUnits_ == rhs.p->distanceUnits_); } } // namespace settings } // namespace qt } // namespace scwx