diff --git a/scwx-qt/scwx-qt.cmake b/scwx-qt/scwx-qt.cmake index ec0979d1..7fcbed33 100644 --- a/scwx-qt/scwx-qt.cmake +++ b/scwx-qt/scwx-qt.cmake @@ -158,6 +158,7 @@ set(HDR_SETTINGS source/scwx/qt/settings/audio_settings.hpp source/scwx/qt/settings/general_settings.hpp source/scwx/qt/settings/map_settings.hpp source/scwx/qt/settings/palette_settings.hpp + source/scwx/qt/settings/product_settings.hpp source/scwx/qt/settings/settings_category.hpp source/scwx/qt/settings/settings_container.hpp source/scwx/qt/settings/settings_definitions.hpp @@ -171,6 +172,7 @@ set(SRC_SETTINGS source/scwx/qt/settings/audio_settings.cpp source/scwx/qt/settings/general_settings.cpp source/scwx/qt/settings/map_settings.cpp source/scwx/qt/settings/palette_settings.cpp + source/scwx/qt/settings/product_settings.cpp source/scwx/qt/settings/settings_category.cpp source/scwx/qt/settings/settings_container.cpp source/scwx/qt/settings/settings_interface.cpp diff --git a/scwx-qt/source/scwx/qt/manager/settings_manager.cpp b/scwx-qt/source/scwx/qt/manager/settings_manager.cpp index 36ad057c..8a244054 100644 --- a/scwx-qt/source/scwx/qt/manager/settings_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/settings_manager.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -116,6 +117,7 @@ void SettingsManager::Shutdown() dataChanged |= settings::GeneralSettings::Instance().Shutdown(); dataChanged |= settings::MapSettings::Instance().Shutdown(); + dataChanged |= settings::ProductSettings::Instance().Shutdown(); dataChanged |= settings::UiSettings::Instance().Shutdown(); if (dataChanged) @@ -132,6 +134,7 @@ boost::json::value SettingsManager::Impl::ConvertSettingsToJson() settings::AudioSettings::Instance().WriteJson(settingsJson); settings::MapSettings::Instance().WriteJson(settingsJson); settings::PaletteSettings::Instance().WriteJson(settingsJson); + settings::ProductSettings::Instance().WriteJson(settingsJson); settings::TextSettings::Instance().WriteJson(settingsJson); settings::UiSettings::Instance().WriteJson(settingsJson); @@ -146,6 +149,7 @@ void SettingsManager::Impl::GenerateDefaultSettings() settings::AudioSettings::Instance().SetDefaults(); settings::MapSettings::Instance().SetDefaults(); settings::PaletteSettings::Instance().SetDefaults(); + settings::ProductSettings::Instance().SetDefaults(); settings::TextSettings::Instance().SetDefaults(); settings::UiSettings::Instance().SetDefaults(); } @@ -161,6 +165,7 @@ bool SettingsManager::Impl::LoadSettings( jsonDirty |= !settings::AudioSettings::Instance().ReadJson(settingsJson); jsonDirty |= !settings::MapSettings::Instance().ReadJson(settingsJson); jsonDirty |= !settings::PaletteSettings::Instance().ReadJson(settingsJson); + jsonDirty |= !settings::ProductSettings::Instance().ReadJson(settingsJson); jsonDirty |= !settings::TextSettings::Instance().ReadJson(settingsJson); jsonDirty |= !settings::UiSettings::Instance().ReadJson(settingsJson); diff --git a/scwx-qt/source/scwx/qt/settings/product_settings.cpp b/scwx-qt/source/scwx/qt/settings/product_settings.cpp new file mode 100644 index 00000000..3cf47ef7 --- /dev/null +++ b/scwx-qt/source/scwx/qt/settings/product_settings.cpp @@ -0,0 +1,75 @@ +#include +#include + +namespace scwx +{ +namespace qt +{ +namespace settings +{ + +static const std::string logPrefix_ = "scwx::qt::settings::product_settings"; + +class ProductSettings::Impl +{ +public: + explicit Impl() + { + stiForecastEnabled_.SetDefault(true); + stiPastEnabled_.SetDefault(true); + } + + ~Impl() {} + + SettingsVariable stiForecastEnabled_ {"sti_forecast_enabled"}; + SettingsVariable stiPastEnabled_ {"sti_past_enabled"}; +}; + +ProductSettings::ProductSettings() : + SettingsCategory("product"), p(std::make_unique()) +{ + RegisterVariables({&p->stiForecastEnabled_, &p->stiPastEnabled_}); + SetDefaults(); +} +ProductSettings::~ProductSettings() = default; + +ProductSettings::ProductSettings(ProductSettings&&) noexcept = default; +ProductSettings& +ProductSettings::operator=(ProductSettings&&) noexcept = default; + +SettingsVariable& ProductSettings::sti_forecast_enabled() const +{ + return p->stiForecastEnabled_; +} + +SettingsVariable& ProductSettings::sti_past_enabled() const +{ + return p->stiPastEnabled_; +} + +bool ProductSettings::Shutdown() +{ + bool dataChanged = false; + + // Commit settings that are managed separate from the settings dialog + dataChanged |= p->stiForecastEnabled_.Commit(); + dataChanged |= p->stiPastEnabled_.Commit(); + + return dataChanged; +} + +ProductSettings& ProductSettings::Instance() +{ + static ProductSettings generalSettings_; + return generalSettings_; +} + +bool operator==(const ProductSettings& lhs, const ProductSettings& rhs) +{ + return (lhs.p->stiForecastEnabled_ == rhs.p->stiForecastEnabled_ && + lhs.p->stiPastEnabled_ == rhs.p->stiPastEnabled_); +} + +} // namespace settings +} // namespace qt +} // namespace scwx diff --git a/scwx-qt/source/scwx/qt/settings/product_settings.hpp b/scwx-qt/source/scwx/qt/settings/product_settings.hpp new file mode 100644 index 00000000..c7c09dd8 --- /dev/null +++ b/scwx-qt/source/scwx/qt/settings/product_settings.hpp @@ -0,0 +1,45 @@ +#pragma once + +#include +#include + +#include +#include + +namespace scwx +{ +namespace qt +{ +namespace settings +{ + +class ProductSettings : public SettingsCategory +{ +public: + explicit ProductSettings(); + ~ProductSettings(); + + ProductSettings(const ProductSettings&) = delete; + ProductSettings& operator=(const ProductSettings&) = delete; + + ProductSettings(ProductSettings&&) noexcept; + ProductSettings& operator=(ProductSettings&&) noexcept; + + SettingsVariable& sti_forecast_enabled() const; + SettingsVariable& sti_past_enabled() const; + + static ProductSettings& Instance(); + + friend bool operator==(const ProductSettings& lhs, + const ProductSettings& rhs); + + bool Shutdown(); + +private: + class Impl; + std::unique_ptr p; +}; + +} // namespace settings +} // namespace qt +} // namespace scwx diff --git a/test/data b/test/data index 90331f76..0446ff70 160000 --- a/test/data +++ b/test/data @@ -1 +1 @@ -Subproject commit 90331f7654586302b223d88329846929514bc883 +Subproject commit 0446ff708b387728faf8d2dbb3862a757067c2ee