mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 01:40:05 +00:00
parent
721e3a163e
commit
35f29a794b
3 changed files with 89 additions and 37 deletions
|
|
@ -31,28 +31,38 @@ public:
|
|||
{
|
||||
auto& productSettings = settings::ProductSettings::Instance();
|
||||
|
||||
productSettings.sti_forecast_enabled().RegisterValueStagedCallback(
|
||||
[=, this](const bool& value)
|
||||
{
|
||||
stiForecastEnabled_ = value;
|
||||
stiNeedsUpdate_ = true;
|
||||
stiForecastEnabledCallbackUuid_ =
|
||||
productSettings.sti_forecast_enabled().RegisterValueStagedCallback(
|
||||
[=, this](const bool& value)
|
||||
{
|
||||
stiForecastEnabled_ = value;
|
||||
stiNeedsUpdate_ = true;
|
||||
|
||||
Q_EMIT self_->NeedsRendering();
|
||||
});
|
||||
productSettings.sti_past_enabled().RegisterValueStagedCallback(
|
||||
[=, this](const bool& value)
|
||||
{
|
||||
stiPastEnabled_ = value;
|
||||
stiNeedsUpdate_ = true;
|
||||
Q_EMIT self_->NeedsRendering();
|
||||
});
|
||||
stiPastEnabledCallbackUuid_ =
|
||||
productSettings.sti_past_enabled().RegisterValueStagedCallback(
|
||||
[=, this](const bool& value)
|
||||
{
|
||||
stiPastEnabled_ = value;
|
||||
stiNeedsUpdate_ = true;
|
||||
|
||||
Q_EMIT self_->NeedsRendering();
|
||||
});
|
||||
Q_EMIT self_->NeedsRendering();
|
||||
});
|
||||
|
||||
stiForecastEnabled_ =
|
||||
productSettings.sti_forecast_enabled().GetStagedOrValue();
|
||||
stiPastEnabled_ = productSettings.sti_past_enabled().GetStagedOrValue();
|
||||
}
|
||||
~Impl() = default;
|
||||
~Impl()
|
||||
{
|
||||
auto& productSettings = settings::ProductSettings::Instance();
|
||||
|
||||
productSettings.sti_forecast_enabled().UnregisterValueStagedCallback(
|
||||
stiForecastEnabledCallbackUuid_);
|
||||
productSettings.sti_past_enabled().UnregisterValueStagedCallback(
|
||||
stiPastEnabledCallbackUuid_);
|
||||
}
|
||||
|
||||
void UpdateStormTrackingInformation();
|
||||
|
||||
|
|
@ -87,6 +97,9 @@ public:
|
|||
|
||||
OverlayProductLayer* self_;
|
||||
|
||||
boost::uuids::uuid stiForecastEnabledCallbackUuid_;
|
||||
boost::uuids::uuid stiPastEnabledCallbackUuid_;
|
||||
|
||||
bool stiForecastEnabled_ {true};
|
||||
bool stiPastEnabled_ {true};
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@
|
|||
#include <scwx/util/logger.hpp>
|
||||
|
||||
#include <boost/json.hpp>
|
||||
#include <boost/unordered/unordered_flat_map.hpp>
|
||||
#include <boost/uuid/random_generator.hpp>
|
||||
#include <fmt/ostream.h>
|
||||
|
||||
namespace scwx
|
||||
|
|
@ -30,8 +32,10 @@ public:
|
|||
std::optional<T> maximum_ {};
|
||||
std::function<bool(const T&)> validator_ {nullptr};
|
||||
|
||||
std::vector<ValueCallbackFunction> valueChangedCallbackFunctions_ {};
|
||||
std::vector<ValueCallbackFunction> valueStagedCallbackFunctions_ {};
|
||||
boost::unordered_flat_map<boost::uuids::uuid, ValueCallbackFunction>
|
||||
valueChangedCallbackFunctions_ {};
|
||||
boost::unordered_flat_map<boost::uuids::uuid, ValueCallbackFunction>
|
||||
valueStagedCallbackFunctions_ {};
|
||||
};
|
||||
|
||||
template<class T>
|
||||
|
|
@ -80,11 +84,11 @@ bool SettingsVariable<T>::SetValue(const T& value)
|
|||
|
||||
for (auto& callback : p->valueChangedCallbackFunctions_)
|
||||
{
|
||||
callback(p->value_);
|
||||
callback.second(p->value_);
|
||||
}
|
||||
for (auto& callback : p->valueStagedCallbackFunctions_)
|
||||
{
|
||||
callback(p->value_);
|
||||
callback.second(p->value_);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -128,11 +132,11 @@ bool SettingsVariable<T>::SetValueOrDefault(const T& value)
|
|||
|
||||
for (auto& callback : p->valueChangedCallbackFunctions_)
|
||||
{
|
||||
callback(p->value_);
|
||||
callback.second(p->value_);
|
||||
}
|
||||
for (auto& callback : p->valueStagedCallbackFunctions_)
|
||||
{
|
||||
callback(p->value_);
|
||||
callback.second(p->value_);
|
||||
}
|
||||
|
||||
return validated;
|
||||
|
|
@ -145,11 +149,11 @@ void SettingsVariable<T>::SetValueToDefault()
|
|||
|
||||
for (auto& callback : p->valueChangedCallbackFunctions_)
|
||||
{
|
||||
callback(p->value_);
|
||||
callback.second(p->value_);
|
||||
}
|
||||
for (auto& callback : p->valueStagedCallbackFunctions_)
|
||||
{
|
||||
callback(p->value_);
|
||||
callback.second(p->value_);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -167,7 +171,7 @@ void SettingsVariable<T>::StageDefault()
|
|||
|
||||
for (auto& callback : p->valueStagedCallbackFunctions_)
|
||||
{
|
||||
callback(p->default_);
|
||||
callback.second(p->default_);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -191,7 +195,7 @@ bool SettingsVariable<T>::StageValue(const T& value)
|
|||
|
||||
for (auto& callback : p->valueStagedCallbackFunctions_)
|
||||
{
|
||||
callback(value);
|
||||
callback.second(value);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -211,11 +215,11 @@ bool SettingsVariable<T>::Commit()
|
|||
|
||||
for (auto& callback : p->valueChangedCallbackFunctions_)
|
||||
{
|
||||
callback(p->value_);
|
||||
callback.second(p->value_);
|
||||
}
|
||||
for (auto& callback : p->valueStagedCallbackFunctions_)
|
||||
{
|
||||
callback(p->value_);
|
||||
callback.second(p->value_);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -229,7 +233,7 @@ void SettingsVariable<T>::Reset()
|
|||
|
||||
for (auto& callback : p->valueStagedCallbackFunctions_)
|
||||
{
|
||||
callback(p->value_);
|
||||
callback.second(p->value_);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -327,11 +331,11 @@ bool SettingsVariable<T>::ReadValue(const boost::json::object& json)
|
|||
|
||||
for (auto& callback : p->valueChangedCallbackFunctions_)
|
||||
{
|
||||
callback(p->value_);
|
||||
callback.second(p->value_);
|
||||
}
|
||||
for (auto& callback : p->valueStagedCallbackFunctions_)
|
||||
{
|
||||
callback(p->value_);
|
||||
callback.second(p->value_);
|
||||
}
|
||||
|
||||
return validated;
|
||||
|
|
@ -344,17 +348,34 @@ void SettingsVariable<T>::WriteValue(boost::json::object& json) const
|
|||
}
|
||||
|
||||
template<class T>
|
||||
void SettingsVariable<T>::RegisterValueChangedCallback(
|
||||
boost::uuids::uuid SettingsVariable<T>::RegisterValueChangedCallback(
|
||||
ValueCallbackFunction callback)
|
||||
{
|
||||
p->valueChangedCallbackFunctions_.push_back(std::move(callback));
|
||||
boost::uuids::uuid uuid = boost::uuids::random_generator()();
|
||||
p->valueChangedCallbackFunctions_.emplace(uuid, std::move(callback));
|
||||
return uuid;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
void SettingsVariable<T>::RegisterValueStagedCallback(
|
||||
ValueCallbackFunction callback)
|
||||
void SettingsVariable<T>::UnregisterValueChangedCallback(
|
||||
boost::uuids::uuid uuid)
|
||||
{
|
||||
p->valueStagedCallbackFunctions_.push_back(std::move(callback));
|
||||
p->valueChangedCallbackFunctions_.erase(uuid);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
boost::uuids::uuid
|
||||
SettingsVariable<T>::RegisterValueStagedCallback(ValueCallbackFunction callback)
|
||||
{
|
||||
boost::uuids::uuid uuid = boost::uuids::random_generator()();
|
||||
p->valueStagedCallbackFunctions_.emplace(uuid, std::move(callback));
|
||||
return uuid;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
void SettingsVariable<T>::UnregisterValueStagedCallback(boost::uuids::uuid uuid)
|
||||
{
|
||||
p->valueStagedCallbackFunctions_.erase(uuid);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@
|
|||
#include <functional>
|
||||
#include <optional>
|
||||
|
||||
#include <boost/uuid/uuid.hpp>
|
||||
|
||||
class QAbstractButton;
|
||||
class QWidget;
|
||||
|
||||
|
|
@ -194,7 +196,15 @@ public:
|
|||
*
|
||||
* @param callback Function to be called
|
||||
*/
|
||||
void RegisterValueChangedCallback(ValueCallbackFunction callback);
|
||||
boost::uuids::uuid
|
||||
RegisterValueChangedCallback(ValueCallbackFunction callback);
|
||||
|
||||
/**
|
||||
* Unregisters a function previously registered for change callback.
|
||||
*
|
||||
* @param uuid Uuid of the callback registration
|
||||
*/
|
||||
void UnregisterValueChangedCallback(boost::uuids::uuid uuid);
|
||||
|
||||
/**
|
||||
* Registers a function to be called when the staged value changes (or a
|
||||
|
|
@ -204,7 +214,15 @@ public:
|
|||
*
|
||||
* @param callback Function to be called
|
||||
*/
|
||||
void RegisterValueStagedCallback(ValueCallbackFunction callback);
|
||||
boost::uuids::uuid
|
||||
RegisterValueStagedCallback(ValueCallbackFunction callback);
|
||||
|
||||
/**
|
||||
* Unregisters a function previously registered for value staging callback.
|
||||
*
|
||||
* @param uuid Uuid of the callback registration
|
||||
*/
|
||||
void UnregisterValueStagedCallback(boost::uuids::uuid uuid);
|
||||
|
||||
protected:
|
||||
virtual bool Equals(const SettingsVariableBase& o) const override;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue