mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 16:40:05 +00:00
Add callbacks to settings variables, use to update radar dialog location in settings dialog
This commit is contained in:
parent
87f611e026
commit
f7cc902eef
5 changed files with 136 additions and 2 deletions
|
|
@ -67,6 +67,12 @@ void SettingsInterface<T>::SetSettingsVariable(SettingsVariable<T>& variable)
|
|||
p->variable_ = &variable;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
SettingsVariable<T>* SettingsInterface<T>::GetSettingsVariable() const
|
||||
{
|
||||
return p->variable_;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
bool SettingsInterface<T>::Commit()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -32,12 +32,19 @@ public:
|
|||
|
||||
/**
|
||||
* Sets the settings variable associated with the interface. This must be
|
||||
* set prior to setting any widgets.
|
||||
* set prior to calling any other functions.
|
||||
*
|
||||
* @param variable Settings variable
|
||||
*/
|
||||
void SetSettingsVariable(SettingsVariable<T>& variable);
|
||||
|
||||
/**
|
||||
* Gets the settings variable associated with the interface.
|
||||
*
|
||||
* @return Settings variable
|
||||
*/
|
||||
SettingsVariable<T>* GetSettingsVariable() const;
|
||||
|
||||
/**
|
||||
* Sets the current value of the associated settings variable to the staged
|
||||
* value.
|
||||
|
|
|
|||
|
|
@ -29,6 +29,9 @@ public:
|
|||
std::optional<T> minimum_ {};
|
||||
std::optional<T> maximum_ {};
|
||||
std::function<bool(const T&)> validator_ {nullptr};
|
||||
|
||||
std::vector<ValueCallbackFunction> valueChangedCallbackFunctions_ {};
|
||||
std::vector<ValueCallbackFunction> valueStagedCallbackFunctions_ {};
|
||||
};
|
||||
|
||||
template<class T>
|
||||
|
|
@ -73,6 +76,15 @@ bool SettingsVariable<T>::SetValue(const T& value)
|
|||
{
|
||||
p->value_ = value;
|
||||
validated = true;
|
||||
|
||||
for (auto& callback : p->valueChangedCallbackFunctions_)
|
||||
{
|
||||
callback(p->value_);
|
||||
}
|
||||
for (auto& callback : p->valueStagedCallbackFunctions_)
|
||||
{
|
||||
callback(p->value_);
|
||||
}
|
||||
}
|
||||
|
||||
return validated;
|
||||
|
|
@ -113,6 +125,15 @@ bool SettingsVariable<T>::SetValueOrDefault(const T& value)
|
|||
p->value_ = p->default_;
|
||||
}
|
||||
|
||||
for (auto& callback : p->valueChangedCallbackFunctions_)
|
||||
{
|
||||
callback(p->value_);
|
||||
}
|
||||
for (auto& callback : p->valueStagedCallbackFunctions_)
|
||||
{
|
||||
callback(p->value_);
|
||||
}
|
||||
|
||||
return validated;
|
||||
}
|
||||
|
||||
|
|
@ -120,6 +141,15 @@ template<class T>
|
|||
void SettingsVariable<T>::SetValueToDefault()
|
||||
{
|
||||
p->value_ = p->default_;
|
||||
|
||||
for (auto& callback : p->valueChangedCallbackFunctions_)
|
||||
{
|
||||
callback(p->value_);
|
||||
}
|
||||
for (auto& callback : p->valueStagedCallbackFunctions_)
|
||||
{
|
||||
callback(p->value_);
|
||||
}
|
||||
}
|
||||
|
||||
template<class T>
|
||||
|
|
@ -133,6 +163,11 @@ void SettingsVariable<T>::StageDefault()
|
|||
{
|
||||
p->staged_.reset();
|
||||
}
|
||||
|
||||
for (auto& callback : p->valueStagedCallbackFunctions_)
|
||||
{
|
||||
callback(p->default_);
|
||||
}
|
||||
}
|
||||
|
||||
template<class T>
|
||||
|
|
@ -150,7 +185,13 @@ bool SettingsVariable<T>::StageValue(const T& value)
|
|||
{
|
||||
p->staged_.reset();
|
||||
}
|
||||
|
||||
validated = true;
|
||||
|
||||
for (auto& callback : p->valueStagedCallbackFunctions_)
|
||||
{
|
||||
callback(value);
|
||||
}
|
||||
}
|
||||
|
||||
return validated;
|
||||
|
|
@ -166,6 +207,15 @@ bool SettingsVariable<T>::Commit()
|
|||
p->value_ = std::move(*p->staged_);
|
||||
p->staged_.reset();
|
||||
committed = true;
|
||||
|
||||
for (auto& callback : p->valueChangedCallbackFunctions_)
|
||||
{
|
||||
callback(p->value_);
|
||||
}
|
||||
for (auto& callback : p->valueStagedCallbackFunctions_)
|
||||
{
|
||||
callback(p->value_);
|
||||
}
|
||||
}
|
||||
|
||||
return committed;
|
||||
|
|
@ -175,6 +225,11 @@ template<class T>
|
|||
void SettingsVariable<T>::Reset()
|
||||
{
|
||||
p->staged_.reset();
|
||||
|
||||
for (auto& callback : p->valueStagedCallbackFunctions_)
|
||||
{
|
||||
callback(p->value_);
|
||||
}
|
||||
}
|
||||
|
||||
template<class T>
|
||||
|
|
@ -263,6 +318,15 @@ bool SettingsVariable<T>::ReadValue(const boost::json::object& json)
|
|||
p->value_ = p->default_;
|
||||
}
|
||||
|
||||
for (auto& callback : p->valueChangedCallbackFunctions_)
|
||||
{
|
||||
callback(p->value_);
|
||||
}
|
||||
for (auto& callback : p->valueStagedCallbackFunctions_)
|
||||
{
|
||||
callback(p->value_);
|
||||
}
|
||||
|
||||
return validated;
|
||||
}
|
||||
|
||||
|
|
@ -272,6 +336,20 @@ void SettingsVariable<T>::WriteValue(boost::json::object& json) const
|
|||
json[name()] = boost::json::value_from<T&>(p->value_);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
void SettingsVariable<T>::RegisterValueChangedCallback(
|
||||
ValueCallbackFunction callback)
|
||||
{
|
||||
p->valueChangedCallbackFunctions_.push_back(std::move(callback));
|
||||
}
|
||||
|
||||
template<class T>
|
||||
void SettingsVariable<T>::RegisterValueStagedCallback(
|
||||
ValueCallbackFunction callback)
|
||||
{
|
||||
p->valueStagedCallbackFunctions_.push_back(std::move(callback));
|
||||
}
|
||||
|
||||
template<class T>
|
||||
bool SettingsVariable<T>::Equals(const SettingsVariableBase& o) const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -19,6 +19,13 @@ template<class T>
|
|||
class SettingsVariable : public SettingsVariableBase
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Callback function for when a value changes.
|
||||
*
|
||||
* @param value New value
|
||||
*/
|
||||
typedef std::function<void(const T& value)> ValueCallbackFunction;
|
||||
|
||||
explicit SettingsVariable(const std::string& name);
|
||||
~SettingsVariable();
|
||||
|
||||
|
|
@ -173,6 +180,24 @@ public:
|
|||
*/
|
||||
virtual void WriteValue(boost::json::object& json) const override;
|
||||
|
||||
/**
|
||||
* Registers a function to be called when the current value changes. The
|
||||
* current value is passed to the callback function.
|
||||
*
|
||||
* @param callback Function to be called
|
||||
*/
|
||||
void RegisterValueChangedCallback(ValueCallbackFunction callback);
|
||||
|
||||
/**
|
||||
* Registers a function to be called when the staged value changes (or a
|
||||
* value is unstaged or committed). The staged value is passed to the
|
||||
* callback function (or in the case of unstaging or committing, the current
|
||||
* value).
|
||||
*
|
||||
* @param callback Function to be called
|
||||
*/
|
||||
void RegisterValueStagedCallback(ValueCallbackFunction callback);
|
||||
|
||||
protected:
|
||||
virtual bool Equals(const SettingsVariableBase& o) const override;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue