29Value::ValueSource::ValueSource()
33Value::ValueSource::~ValueSource()
35 cancelPendingUpdate();
38void Value::ValueSource::handleAsyncUpdate()
40 sendChangeMessage (
true);
45 const int numListeners = valuesWithListeners.size();
55 for (
int i = numListeners; --i >= 0;)
56 if (Value*
const v = valuesWithListeners[i])
74 SimpleValueSource (
const var& initialValue)
75 : value (initialValue)
79 var getValue()
const override
84 void setValue (
const var& newValue)
override
86 if (! newValue.equalsWithSameType (value))
89 sendChangeMessage (
false);
96 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SimpleValueSource)
107 jassert (v !=
nullptr);
122 jassert (other.listeners.size() == 0);
124 other.removeFromListenerList();
125 value = std::move (other.value);
132 jassert (other.listeners.size() == 0);
134 other.removeFromListenerList();
135 value = std::move (other.value);
141 removeFromListenerList();
144void Value::removeFromListenerList()
146 if (listeners.size() > 0 && value !=
nullptr)
147 value->valuesWithListeners.removeValue (
this);
153 return value->getValue();
156Value::operator
var()
const
158 return value->getValue();
163 value->setValue (newValue);
168 return value->getValue().toString();
179 if (valueToReferTo.value != value)
181 if (listeners.size() > 0)
183 value->valuesWithListeners.removeValue (
this);
184 valueToReferTo.value->valuesWithListeners.add (
this);
187 value = valueToReferTo.value;
194 return value == other.value;
199 return value == other.value || value->getValue() == other.getValue();
204 return value != other.value && value->getValue() != other.getValue();
210 if (listener !=
nullptr)
212 if (listeners.size() == 0)
213 value->valuesWithListeners.add (
this);
215 listeners.add (listener);
221 listeners.remove (listener);
223 if (listeners.size() == 0)
224 value->valuesWithListeners.removeValue (
this);
227void Value::callListeners()
229 if (listeners.size() > 0)
238 return stream << value.toString();
void triggerAsyncUpdate()
void cancelPendingUpdate() noexcept
virtual void valueChanged(Value &value)=0
void sendChangeMessage(bool dispatchSynchronously)
bool operator==(const Value &other) const
void setValue(const var &newValue)
void addListener(Listener *listener)
void removeListener(Listener *listener)
bool refersToSameSourceAs(const Value &other) const
Value & operator=(const var &newValue)
void referTo(const Value &valueToReferTo)
bool operator!=(const Value &other) const