mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 16:50:06 +00:00
Register font subcategories with text settings
This commit is contained in:
parent
ad1646d725
commit
d82fb666f9
4 changed files with 95 additions and 5 deletions
|
|
@ -2,6 +2,8 @@
|
|||
#include <scwx/qt/util/json.hpp>
|
||||
#include <scwx/util/logger.hpp>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
namespace scwx
|
||||
{
|
||||
namespace qt
|
||||
|
|
@ -21,6 +23,8 @@ public:
|
|||
|
||||
const std::string name_;
|
||||
|
||||
std::vector<std::pair<std::string, std::vector<SettingsCategory*>>>
|
||||
subcategoryArrays_;
|
||||
std::vector<SettingsVariableBase*> variables_;
|
||||
};
|
||||
|
||||
|
|
@ -41,6 +45,16 @@ std::string SettingsCategory::name() const
|
|||
|
||||
void SettingsCategory::SetDefaults()
|
||||
{
|
||||
// Set subcategory array defaults
|
||||
for (auto& subcategoryArray : p->subcategoryArrays_)
|
||||
{
|
||||
for (auto& subcategory : subcategoryArray.second)
|
||||
{
|
||||
subcategory->SetDefaults();
|
||||
}
|
||||
}
|
||||
|
||||
// Set variable defaults
|
||||
for (auto& variable : p->variables_)
|
||||
{
|
||||
variable->SetValueToDefault();
|
||||
|
|
@ -57,6 +71,47 @@ bool SettingsCategory::ReadJson(const boost::json::object& json)
|
|||
{
|
||||
const boost::json::object& object = value->as_object();
|
||||
|
||||
// Read subcategory arrays
|
||||
for (auto& subcategoryArray : p->subcategoryArrays_)
|
||||
{
|
||||
const boost::json::value* arrayValue =
|
||||
object.if_contains(subcategoryArray.first);
|
||||
|
||||
if (arrayValue != nullptr && arrayValue->is_object())
|
||||
{
|
||||
const boost::json::object& arrayObject = arrayValue->as_object();
|
||||
|
||||
for (auto& subcategory : subcategoryArray.second)
|
||||
{
|
||||
validated &= subcategory->ReadJson(arrayObject);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (arrayValue == nullptr)
|
||||
{
|
||||
logger_->debug(
|
||||
"Subcategory array key {} is not present, resetting to "
|
||||
"defaults",
|
||||
subcategoryArray.first);
|
||||
}
|
||||
else if (!arrayValue->is_object())
|
||||
{
|
||||
logger_->warn(
|
||||
"Invalid json for subcategory array key {}, resetting to "
|
||||
"defaults",
|
||||
p->name_);
|
||||
}
|
||||
|
||||
for (auto& subcategory : subcategoryArray.second)
|
||||
{
|
||||
subcategory->SetDefaults();
|
||||
}
|
||||
validated = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Read variables
|
||||
for (auto& variable : p->variables_)
|
||||
{
|
||||
validated &= variable->ReadValue(object);
|
||||
|
|
@ -66,8 +121,8 @@ bool SettingsCategory::ReadJson(const boost::json::object& json)
|
|||
{
|
||||
if (value == nullptr)
|
||||
{
|
||||
logger_->warn("Key {} is not present, resetting to defaults",
|
||||
p->name_);
|
||||
logger_->debug("Key {} is not present, resetting to defaults",
|
||||
p->name_);
|
||||
}
|
||||
else if (!value->is_object())
|
||||
{
|
||||
|
|
@ -86,6 +141,20 @@ void SettingsCategory::WriteJson(boost::json::object& json) const
|
|||
{
|
||||
boost::json::object object;
|
||||
|
||||
// Write subcategory arrays
|
||||
for (auto& subcategoryArray : p->subcategoryArrays_)
|
||||
{
|
||||
boost::json::object arrayObject;
|
||||
|
||||
for (auto& subcategory : subcategoryArray.second)
|
||||
{
|
||||
subcategory->WriteJson(arrayObject);
|
||||
}
|
||||
|
||||
object.insert_or_assign(subcategoryArray.first, arrayObject);
|
||||
}
|
||||
|
||||
// Write variables
|
||||
for (auto& variable : p->variables_)
|
||||
{
|
||||
variable->WriteValue(object);
|
||||
|
|
@ -94,6 +163,18 @@ void SettingsCategory::WriteJson(boost::json::object& json) const
|
|||
json.insert_or_assign(p->name_, object);
|
||||
}
|
||||
|
||||
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(
|
||||
std::initializer_list<SettingsVariableBase*> variables)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -50,7 +50,8 @@ public:
|
|||
*/
|
||||
virtual void WriteJson(boost::json::object& json) const;
|
||||
|
||||
protected:
|
||||
void RegisterSubcategoryArray(const std::string& name,
|
||||
std::vector<SettingsCategory>& subcategories);
|
||||
void
|
||||
RegisterVariables(std::initializer_list<SettingsVariableBase*> variables);
|
||||
void RegisterVariables(std::vector<SettingsVariableBase*> variables);
|
||||
|
|
|
|||
|
|
@ -82,6 +82,7 @@ public:
|
|||
TextSettings* self_;
|
||||
|
||||
std::unordered_map<types::FontCategory, FontData> fontData_ {};
|
||||
std::vector<SettingsCategory> fontSettings_ {};
|
||||
|
||||
SettingsVariable<std::int64_t> hoverTextWrap_ {"hover_text_wrap"};
|
||||
SettingsVariable<std::string> tooltipMethod_ {"tooltip_method"};
|
||||
|
|
@ -120,8 +121,15 @@ void TextSettings::Impl::InitializeFontVariables()
|
|||
font.fontPointSize_.SetMinimum(6.0);
|
||||
font.fontPointSize_.SetMaximum(72.0);
|
||||
|
||||
// TODO: Variable registration
|
||||
// Variable registration
|
||||
auto& settings = fontSettings_.emplace_back(
|
||||
SettingsCategory {types::GetFontCategoryName(fontCategory)});
|
||||
|
||||
settings.RegisterVariables(
|
||||
{&font.fontFamily_, &font.fontStyle_, &font.fontPointSize_});
|
||||
}
|
||||
|
||||
self_->RegisterSubcategoryArray("fonts", fontSettings_);
|
||||
}
|
||||
|
||||
SettingsVariable<std::string>&
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit 33caca188b1007c643db75afa560fdfe348c0ee5
|
||||
Subproject commit 1685e4048ef4a9f34bc11ecbb8db4905dd0a2e19
|
||||
Loading…
Add table
Add a link
Reference in a new issue