From 1a30743c0a0b6ca11793f529aaa3655e5a90603c Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sat, 21 Sep 2024 08:28:09 -0500 Subject: [PATCH] Add subcategory functionality to settings, still need to read/write JSON --- .../scwx/qt/settings/settings_category.cpp | 40 +++++++++++++++++++ .../scwx/qt/settings/settings_category.hpp | 3 ++ 2 files changed, 43 insertions(+) diff --git a/scwx-qt/source/scwx/qt/settings/settings_category.cpp b/scwx-qt/source/scwx/qt/settings/settings_category.cpp index e6c929f8..a346c50d 100644 --- a/scwx-qt/source/scwx/qt/settings/settings_category.cpp +++ b/scwx-qt/source/scwx/qt/settings/settings_category.cpp @@ -25,6 +25,7 @@ public: std::vector>> subcategoryArrays_; + std::vector subcategories_; std::vector variables_; }; @@ -54,6 +55,12 @@ void SettingsCategory::SetDefaults() } } + // Set subcategory defaults + for (auto& subcategory : p->subcategories_) + { + subcategory->SetDefaults(); + } + // Set variable defaults for (auto& variable : p->variables_) { @@ -111,6 +118,14 @@ bool SettingsCategory::ReadJson(const boost::json::object& json) } } + // Read subcategories + for (auto& subcategory : p->subcategories_) + { + (void) subcategory; + // TODO: + // subcategory->ReadJson(object); + } + // Read variables for (auto& variable : p->variables_) { @@ -154,6 +169,14 @@ void SettingsCategory::WriteJson(boost::json::object& json) const object.insert_or_assign(subcategoryArray.first, arrayObject); } + // Write subcategories + for (auto& subcategory : p->subcategories_) + { + (void) subcategory; + // TODO: + // subcategory->WriteJson(); + } + // Write variables for (auto& variable : p->variables_) { @@ -163,6 +186,11 @@ void SettingsCategory::WriteJson(boost::json::object& json) const json.insert_or_assign(p->name_, object); } +void SettingsCategory::RegisterSubcategory(SettingsCategory& subcategory) +{ + p->subcategories_.push_back(&subcategory); +} + void SettingsCategory::RegisterSubcategoryArray( const std::string& name, std::vector& subcategories) { @@ -175,6 +203,18 @@ void SettingsCategory::RegisterSubcategoryArray( [](SettingsCategory& subcategory) { return &subcategory; }); } +void SettingsCategory::RegisterSubcategoryArray( + const std::string& name, std::vector& subcategories) +{ + auto& newSubcategories = p->subcategoryArrays_.emplace_back( + name, std::vector {}); + + std::transform(subcategories.begin(), + subcategories.end(), + std::back_inserter(newSubcategories.second), + [](SettingsCategory* subcategory) { return subcategory; }); +} + void SettingsCategory::RegisterVariables( std::initializer_list variables) { diff --git a/scwx-qt/source/scwx/qt/settings/settings_category.hpp b/scwx-qt/source/scwx/qt/settings/settings_category.hpp index 2da7b9ab..bea48659 100644 --- a/scwx-qt/source/scwx/qt/settings/settings_category.hpp +++ b/scwx-qt/source/scwx/qt/settings/settings_category.hpp @@ -50,8 +50,11 @@ public: */ virtual void WriteJson(boost::json::object& json) const; + void RegisterSubcategory(SettingsCategory& subcategory); void RegisterSubcategoryArray(const std::string& name, std::vector& subcategories); + void RegisterSubcategoryArray(const std::string& name, + std::vector& subcategories); void RegisterVariables(std::initializer_list variables); void RegisterVariables(std::vector variables);