diff --git a/scwx-qt/scwx-qt.cmake b/scwx-qt/scwx-qt.cmake index 0bdd5b0f..63063559 100644 --- a/scwx-qt/scwx-qt.cmake +++ b/scwx-qt/scwx-qt.cmake @@ -176,7 +176,8 @@ set(HDR_SETTINGS source/scwx/qt/settings/audio_settings.hpp source/scwx/qt/settings/settings_variable.hpp source/scwx/qt/settings/settings_variable_base.hpp source/scwx/qt/settings/text_settings.hpp - source/scwx/qt/settings/ui_settings.hpp) + source/scwx/qt/settings/ui_settings.hpp + source/scwx/qt/settings/unit_settings.hpp) set(SRC_SETTINGS source/scwx/qt/settings/audio_settings.cpp source/scwx/qt/settings/general_settings.cpp source/scwx/qt/settings/hotkey_settings.cpp @@ -190,7 +191,8 @@ set(SRC_SETTINGS source/scwx/qt/settings/audio_settings.cpp source/scwx/qt/settings/settings_variable.cpp source/scwx/qt/settings/settings_variable_base.cpp source/scwx/qt/settings/text_settings.cpp - source/scwx/qt/settings/ui_settings.cpp) + source/scwx/qt/settings/ui_settings.cpp + source/scwx/qt/settings/unit_settings.cpp) set(HDR_TYPES source/scwx/qt/types/alert_types.hpp source/scwx/qt/types/event_types.hpp source/scwx/qt/types/font_types.hpp diff --git a/scwx-qt/source/scwx/qt/manager/settings_manager.cpp b/scwx-qt/source/scwx/qt/manager/settings_manager.cpp index e5e806ea..056799ae 100644 --- a/scwx-qt/source/scwx/qt/manager/settings_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/settings_manager.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -139,6 +140,7 @@ boost::json::value SettingsManager::Impl::ConvertSettingsToJson() settings::ProductSettings::Instance().WriteJson(settingsJson); settings::TextSettings::Instance().WriteJson(settingsJson); settings::UiSettings::Instance().WriteJson(settingsJson); + settings::UnitSettings::Instance().WriteJson(settingsJson); return settingsJson; } @@ -155,6 +157,7 @@ void SettingsManager::Impl::GenerateDefaultSettings() settings::ProductSettings::Instance().SetDefaults(); settings::TextSettings::Instance().SetDefaults(); settings::UiSettings::Instance().SetDefaults(); + settings::UnitSettings::Instance().SetDefaults(); } bool SettingsManager::Impl::LoadSettings( @@ -172,6 +175,7 @@ bool SettingsManager::Impl::LoadSettings( jsonDirty |= !settings::ProductSettings::Instance().ReadJson(settingsJson); jsonDirty |= !settings::TextSettings::Instance().ReadJson(settingsJson); jsonDirty |= !settings::UiSettings::Instance().ReadJson(settingsJson); + jsonDirty |= !settings::UnitSettings::Instance().ReadJson(settingsJson); return jsonDirty; } diff --git a/scwx-qt/source/scwx/qt/settings/unit_settings.cpp b/scwx-qt/source/scwx/qt/settings/unit_settings.cpp new file mode 100644 index 00000000..54e64364 --- /dev/null +++ b/scwx-qt/source/scwx/qt/settings/unit_settings.cpp @@ -0,0 +1,99 @@ +#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 defaultSpeedUnitsValue = + types::GetSpeedUnitsName(types::SpeedUnits::Knots); + + boost::to_lower(defaultAccumulationUnitsValue); + boost::to_lower(defaultEchoTopsUnitsValue); + boost::to_lower(defaultSpeedUnitsValue); + + accumulationUnits_.SetDefault(defaultAccumulationUnitsValue); + echoTopsUnits_.SetDefault(defaultEchoTopsUnitsValue); + speedUnits_.SetDefault(defaultSpeedUnitsValue); + + accumulationUnits_.SetValidator( + SCWX_SETTINGS_ENUM_VALIDATOR(types::AccumulationUnits, + types::AccumulationUnitsIterator(), + types::GetAccumulationUnitsName)); + echoTopsUnits_.SetValidator( + SCWX_SETTINGS_ENUM_VALIDATOR(types::EchoTopsUnits, + types::EchoTopsUnitsIterator(), + types::GetEchoTopsUnitsName)); + speedUnits_.SetValidator( + SCWX_SETTINGS_ENUM_VALIDATOR(types::SpeedUnits, + types::SpeedUnitsIterator(), + types::GetSpeedUnitsName)); + } + + ~Impl() {} + + SettingsVariable accumulationUnits_ {"accumulation_units"}; + SettingsVariable echoTopsUnits_ {"echo_tops_units"}; + SettingsVariable speedUnits_ {"speed_units"}; +}; + +UnitSettings::UnitSettings() : + SettingsCategory("unit"), p(std::make_unique()) +{ + RegisterVariables( + {&p->accumulationUnits_, &p->echoTopsUnits_, &p->speedUnits_}); + 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::speed_units() const +{ + return p->speedUnits_; +} + +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->speedUnits_ == rhs.p->speedUnits_); +} + +} // namespace settings +} // namespace qt +} // namespace scwx diff --git a/scwx-qt/source/scwx/qt/settings/unit_settings.hpp b/scwx-qt/source/scwx/qt/settings/unit_settings.hpp new file mode 100644 index 00000000..c058857a --- /dev/null +++ b/scwx-qt/source/scwx/qt/settings/unit_settings.hpp @@ -0,0 +1,43 @@ +#pragma once + +#include +#include + +#include +#include + +namespace scwx +{ +namespace qt +{ +namespace settings +{ + +class UnitSettings : public SettingsCategory +{ +public: + explicit UnitSettings(); + ~UnitSettings(); + + UnitSettings(const UnitSettings&) = delete; + UnitSettings& operator=(const UnitSettings&) = delete; + + UnitSettings(UnitSettings&&) noexcept; + UnitSettings& operator=(UnitSettings&&) noexcept; + + SettingsVariable& accumulation_units() const; + SettingsVariable& echo_tops_units() const; + SettingsVariable& speed_units() const; + + static UnitSettings& Instance(); + + friend bool operator==(const UnitSettings& lhs, const UnitSettings& rhs); + +private: + class Impl; + std::unique_ptr p; +}; + +} // namespace settings +} // namespace qt +} // namespace scwx diff --git a/test/data b/test/data index e350743f..03b6188c 160000 --- a/test/data +++ b/test/data @@ -1 +1 @@ -Subproject commit e350743fd8ca6858ce49a22bb8e40a0c6710ca86 +Subproject commit 03b6188cdf1b85f65bae0de822194bc6fab9bd14