56 const T& defaultValue,
57 void(pfnValidate)(T& val) =
nullptr)
59 , m_currentValue(defaultValue)
60 , m_defaultValue(defaultValue)
61 , m_pfnValidate(pfnValidate)
66 [[nodiscard]]
auto ToString()
const -> std::string
override
68 return StringConversion::ToString<T>(m_currentValue);
70 void FromString(
const std::string& s)
override
72 if (!StringConversion::FromString<T>(s, m_currentValue)) {
73 m_currentValue = m_defaultValue;
76 m_pfnValidate(m_currentValue);
79 void SetFromStack(lua_State* L)
override
81 LuaHelpers::Pop<T>(L, m_currentValue);
83 m_pfnValidate(m_currentValue);
86 void PushValue(lua_State* L)
const override
88 LuaHelpers::Push<T>(L, m_currentValue);
91 void LoadDefault()
override { m_currentValue = m_defaultValue; }
92 void SetDefaultFromString(
const std::string& s)
override
94 T def = m_defaultValue;
95 if (!StringConversion::FromString<T>(s, m_defaultValue)) {
100 [[nodiscard]]
auto Get()
const ->
const T& {
return m_currentValue; }
102 [[nodiscard]]
auto GetDefault()
const ->
const T& {
return m_defaultValue; }
104 operator const T()
const {
return Get(); }
106 void Set(
const T& other)
108 m_currentValue = other;
109 BroadcastPreferenceChanged(GetName());
112 static auto GetPreferenceByName(
const std::string& sName) ->
Preference<T>*
114 auto pPreference = IPreference::GetPreferenceByName(sName);
122 void (*m_pfnValidate)(T& val);