7 #include "../../iuidescwindow.h" 8 #include "../valuelistener.h" 10 #include <unordered_map> 14 namespace Standalone {
20 using Call = std::function<void (IValue&)>;
23 Call onPerformEditCall;
25 Call onStateChangeCall;
30 c.onPerformEditCall = std::move (call);
37 c.onEndEditCall = std::move (call);
44 c.onEndEditCall = [call = std::move (call)] (
IValue & v)
46 if (v.getValue () > 0.5)
54 using ModelBindingCallbacksPtr = std::shared_ptr<ModelBindingCallbacks>;
60 static ModelBindingCallbacksPtr make () {
return std::make_shared<ModelBindingCallbacks> (); }
63 ValuePtr addValue (ValuePtr value,
const ValueCalls& callbacks = {});
64 ValuePtr addValue (ValuePtr value,
ValueCalls&& callbacks);
69 const ValueList& getValues ()
const override {
return valueList; }
71 void onBeginEdit (
IValue& value)
override;
73 void onEndEdit (
IValue& value)
override;
74 void onStateChange (
IValue& value)
override;
76 using ValueMap = std::unordered_map<const IValue*, ValueCalls>;
82 inline ModelBindingCallbacks::~ModelBindingCallbacks ()
84 for (
auto& v : valueList)
85 v->unregisterListener (
this);
91 inline ValuePtr ModelBindingCallbacks::addValue (ValuePtr value,
const ValueCalls& callbacks)
93 values.emplace (value.get (), callbacks);
94 valueList.emplace_back (value);
95 value->registerListener (
this);
100 inline ValuePtr ModelBindingCallbacks::addValue (ValuePtr value, ValueCalls&& callbacks)
102 values.emplace (value.get (), std::move (callbacks));
103 valueList.emplace_back (value);
104 value->registerListener (
this);
109 inline ValuePtr ModelBindingCallbacks::getValue (UTF8StringView valueID)
const 111 for (
auto& v : valueList)
113 if (v->getID () == valueID)
120 inline void ModelBindingCallbacks::onBeginEdit (IValue& value)
122 auto it = values.find (&value);
123 if (it != values.end () && it->second.onBeginEditCall)
124 it->second.onBeginEditCall (value);
128 inline void ModelBindingCallbacks::onPerformEdit (IValue& value,
IValue::Type newValue)
130 auto it = values.find (&value);
131 if (it != values.end () && it->second.onPerformEditCall)
132 it->second.onPerformEditCall (value);
136 inline void ModelBindingCallbacks::onEndEdit (IValue& value)
138 auto it = values.find (&value);
139 if (it != values.end () && it->second.onEndEditCall)
140 it->second.onEndEditCall (value);
144 inline void ModelBindingCallbacks::onStateChange (IValue& value)
146 auto it = values.find (&value);
147 if (it != values.end () && it->second.onStateChangeCall)
148 it->second.onStateChangeCall (value);
double Type
Definition: ivalue.h:24
Definition: valuelistener.h:18
Definition: customcontrols.cpp:8
Definition: modelbinding.h:57
Definition: iuidescwindow.h:26
a view on a null terminated UTF-8 String
Definition: cstring.h:172
Definition: modelbinding.h:18