I want this on a t-shirt.
Listener’s aren’t anything magic, they’re just base classes (or structs) that can be used to inform objects about changes in another object. Here’s a super basic example using JUCE’s ListenerList
class:
class MyCoolClass
{
public:
void setValue(int newValue)
{
value = newValue;
listeners.call([this](Listener& l) {
l.coolClassValueChanged(*this, value);
});
}
struct Listener
{
virtual ~Listener() = default;
virtual void coolClassValueChanged(MyCoolClass&, int newValue) = 0;
}
void addListener(Listener* newListener) { listeners.add(newListener); }
void removeListener(Listener* listenerToRemove) { listeners.remove(listenerToRemove); }
private:
int value = 0;
juce::ListenerList<Listener> listeners;
};
Here’s the juce::Slider::Listener
implementation: