diff --git a/scwx-qt/source/scwx/qt/settings/settings_variable.cpp b/scwx-qt/source/scwx/qt/settings/settings_variable.cpp index e0aa7d3f..fc813c4e 100644 --- a/scwx-qt/source/scwx/qt/settings/settings_variable.cpp +++ b/scwx-qt/source/scwx/qt/settings/settings_variable.cpp @@ -1,3 +1,5 @@ +#define SETTINGS_VARIABLE_IMPLEMENTATION + #include #include @@ -8,11 +10,6 @@ namespace qt namespace settings { -template class SettingsVariable; -template class SettingsVariable; -template class SettingsVariable; -template class SettingsVariable>; - static const std::string logPrefix_ = "scwx::qt::settings::settings_variable"; template @@ -84,6 +81,14 @@ bool SettingsVariable::SetValueOrDefault(const T& value) p->value_ = value; validated = true; } + else if (p->minimum_.has_value() && value < p->minimum_) + { + p->value_ = *p->minimum_; + } + else if (p->maximum_.has_value() && value > p->maximum_) + { + p->value_ = *p->maximum_; + } else { p->value_ = p->default_; @@ -92,6 +97,12 @@ bool SettingsVariable::SetValueOrDefault(const T& value) return validated; } +template +void SettingsVariable::SetValueToDefault() +{ + p->value_ = p->default_; +} + template bool SettingsVariable::StageValue(const T& value) { @@ -111,7 +122,7 @@ void SettingsVariable::Commit() { if (p->staged_.has_value()) { - p->value_ = std::move(p->staged_.value()); + p->value_ = std::move(*p->staged_); p->staged_.reset(); } } diff --git a/scwx-qt/source/scwx/qt/settings/settings_variable.hpp b/scwx-qt/source/scwx/qt/settings/settings_variable.hpp index ffe4aa0a..25889230 100644 --- a/scwx-qt/source/scwx/qt/settings/settings_variable.hpp +++ b/scwx-qt/source/scwx/qt/settings/settings_variable.hpp @@ -29,6 +29,7 @@ public: T GetValue() const; bool SetValue(const T& value); bool SetValueOrDefault(const T& value); + void SetValueToDefault(); bool StageValue(const T& value); void Commit(); @@ -45,11 +46,11 @@ private: std::unique_ptr p; }; -// Instantiated templates: -// template class SettingsVariable; -// template class SettingsVariable; -// template class SettingsVariable; -// template class SettingsVariable>; +#ifdef SETTINGS_VARIABLE_IMPLEMENTATION +template class SettingsVariable; +template class SettingsVariable; +template class SettingsVariable; +#endif } // namespace settings } // namespace qt diff --git a/test/source/scwx/qt/settings/settings_variable.test.cpp b/test/source/scwx/qt/settings/settings_variable.test.cpp index 3c3cf3ec..bb7b4e9a 100644 --- a/test/source/scwx/qt/settings/settings_variable.test.cpp +++ b/test/source/scwx/qt/settings/settings_variable.test.cpp @@ -9,6 +9,50 @@ namespace qt namespace settings { +TEST(SettingsVariableTest, Boolean) +{ + SettingsVariable boolVariable {"bool"}; + boolVariable.SetDefault(true); + boolVariable.SetValue(false); + + EXPECT_EQ(boolVariable.name(), "bool"); + EXPECT_EQ(boolVariable.GetValue(), false); + EXPECT_EQ(boolVariable.SetValue(true), true); + EXPECT_EQ(boolVariable.GetValue(), true); + EXPECT_EQ(boolVariable.SetValueOrDefault(false), true); + EXPECT_EQ(boolVariable.GetValue(), false); +} + +TEST(SettingsVariableTest, Integer) +{ + SettingsVariable intVariable {"int64_t"}; + intVariable.SetDefault(42); + intVariable.SetMinimum(10); + intVariable.SetMaximum(99); + intVariable.SetValue(50); + + EXPECT_EQ(intVariable.name(), "int64_t"); + EXPECT_EQ(intVariable.GetValue(), 50); + EXPECT_EQ(intVariable.SetValue(0), false); + EXPECT_EQ(intVariable.GetValue(), 50); + EXPECT_EQ(intVariable.SetValueOrDefault(0), false); // < Minimum + EXPECT_EQ(intVariable.GetValue(), 10); + EXPECT_EQ(intVariable.SetValueOrDefault(100), false); // > Maximum + EXPECT_EQ(intVariable.GetValue(), 99); + intVariable.SetValueToDefault(); + EXPECT_EQ(intVariable.GetValue(), 42); + EXPECT_EQ(intVariable.SetValue(43), true); + EXPECT_EQ(intVariable.GetValue(), 43); + EXPECT_EQ(intVariable.SetValueOrDefault(57), true); + EXPECT_EQ(intVariable.GetValue(), 57); + + EXPECT_EQ(intVariable.StageValue(0), false); + EXPECT_EQ(intVariable.StageValue(50), true); + EXPECT_EQ(intVariable.GetValue(), 57); + intVariable.Commit(); + EXPECT_EQ(intVariable.GetValue(), 50); +} + TEST(SettingsVariableTest, String) { SettingsVariable stringVariable {"string"};