Add subcategory functionality to settings, still need to read/write JSON

This commit is contained in:
Dan Paulat 2024-09-21 08:28:09 -05:00
parent cea2993665
commit 1a30743c0a
2 changed files with 43 additions and 0 deletions

View file

@ -25,6 +25,7 @@ public:
std::vector<std::pair<std::string, std::vector<SettingsCategory*>>> std::vector<std::pair<std::string, std::vector<SettingsCategory*>>>
subcategoryArrays_; subcategoryArrays_;
std::vector<SettingsCategory*> subcategories_;
std::vector<SettingsVariableBase*> variables_; std::vector<SettingsVariableBase*> variables_;
}; };
@ -54,6 +55,12 @@ void SettingsCategory::SetDefaults()
} }
} }
// Set subcategory defaults
for (auto& subcategory : p->subcategories_)
{
subcategory->SetDefaults();
}
// Set variable defaults // Set variable defaults
for (auto& variable : p->variables_) 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 // Read variables
for (auto& variable : p->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); object.insert_or_assign(subcategoryArray.first, arrayObject);
} }
// Write subcategories
for (auto& subcategory : p->subcategories_)
{
(void) subcategory;
// TODO:
// subcategory->WriteJson();
}
// Write variables // Write variables
for (auto& variable : p->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); json.insert_or_assign(p->name_, object);
} }
void SettingsCategory::RegisterSubcategory(SettingsCategory& subcategory)
{
p->subcategories_.push_back(&subcategory);
}
void SettingsCategory::RegisterSubcategoryArray( void SettingsCategory::RegisterSubcategoryArray(
const std::string& name, std::vector<SettingsCategory>& subcategories) const std::string& name, std::vector<SettingsCategory>& subcategories)
{ {
@ -175,6 +203,18 @@ void SettingsCategory::RegisterSubcategoryArray(
[](SettingsCategory& subcategory) { return &subcategory; }); [](SettingsCategory& subcategory) { return &subcategory; });
} }
void SettingsCategory::RegisterSubcategoryArray(
const std::string& name, std::vector<SettingsCategory*>& subcategories)
{
auto& newSubcategories = p->subcategoryArrays_.emplace_back(
name, std::vector<SettingsCategory*> {});
std::transform(subcategories.begin(),
subcategories.end(),
std::back_inserter(newSubcategories.second),
[](SettingsCategory* subcategory) { return subcategory; });
}
void SettingsCategory::RegisterVariables( void SettingsCategory::RegisterVariables(
std::initializer_list<SettingsVariableBase*> variables) std::initializer_list<SettingsVariableBase*> variables)
{ {

View file

@ -50,8 +50,11 @@ public:
*/ */
virtual void WriteJson(boost::json::object& json) const; virtual void WriteJson(boost::json::object& json) const;
void RegisterSubcategory(SettingsCategory& subcategory);
void RegisterSubcategoryArray(const std::string& name, void RegisterSubcategoryArray(const std::string& name,
std::vector<SettingsCategory>& subcategories); std::vector<SettingsCategory>& subcategories);
void RegisterSubcategoryArray(const std::string& name,
std::vector<SettingsCategory*>& subcategories);
void void
RegisterVariables(std::initializer_list<SettingsVariableBase*> variables); RegisterVariables(std::initializer_list<SettingsVariableBase*> variables);
void RegisterVariables(std::vector<SettingsVariableBase*> variables); void RegisterVariables(std::vector<SettingsVariableBase*> variables);