25 #ifndef JUCE_LISTENERLIST_H_INCLUDED
26 #define JUCE_LISTENERLIST_H_INCLUDED
67 template <
class ListenerClass,
73 #if JUCE_VC8_OR_EARLIER
74 #define LL_TEMPLATE(a) typename P##a, typename Q##a
75 #define LL_PARAM(a) Q##a& param##a
77 #define LL_TEMPLATE(a) typename P##a
78 #define LL_PARAM(a) PARAMETER_TYPE(P##a) param##a
100 void add (ListenerClass*
const listenerToAdd)
103 jassert (listenerToAdd !=
nullptr);
105 if (listenerToAdd !=
nullptr)
106 listeners.addIfNotAlreadyThere (listenerToAdd);
112 void remove (ListenerClass*
const listenerToRemove)
115 jassert (listenerToRemove !=
nullptr);
117 listeners.removeFirstMatchingValue (listenerToRemove);
123 return listeners.size();
129 return listeners.size() == 0;
141 return listeners.contains (listener);
146 void call (
void (ListenerClass::*callbackFunction) ())
148 callChecked (
static_cast <const DummyBailOutChecker&
> (DummyBailOutChecker()), callbackFunction);
153 template <
class BailOutCheckerType>
155 void (ListenerClass::*callbackFunction) ())
157 for (Iterator<BailOutCheckerType, ThisType> iter (*
this); iter.next (bailOutChecker);)
158 (iter.getListener()->*callbackFunction) ();
163 template <LL_TEMPLATE(1)>
166 for (Iterator<DummyBailOutChecker, ThisType> iter (*
this); iter.next();)
167 (iter.getListener()->*callbackFunction) (param1);
172 template <
class BailOutCheckerType, LL_TEMPLATE(1)>
174 void (ListenerClass::*callbackFunction) (P1),
177 for (Iterator<BailOutCheckerType, ThisType> iter (*
this); iter.next (bailOutChecker);)
178 (iter.getListener()->*callbackFunction) (param1);
183 template <LL_TEMPLATE(1), LL_TEMPLATE(2)>
184 void call (
void (ListenerClass::*callbackFunction) (P1, P2),
187 for (Iterator<DummyBailOutChecker, ThisType> iter (*
this); iter.next();)
188 (iter.getListener()->*callbackFunction) (param1, param2);
193 template <
class BailOutCheckerType, LL_TEMPLATE(1), LL_TEMPLATE(2)>
195 void (ListenerClass::*callbackFunction) (P1, P2),
198 for (Iterator<BailOutCheckerType, ThisType> iter (*
this); iter.next (bailOutChecker);)
199 (iter.getListener()->*callbackFunction) (param1, param2);
204 template <LL_TEMPLATE(1), LL_TEMPLATE(2), LL_TEMPLATE(3)>
205 void call (
void (ListenerClass::*callbackFunction) (P1, P2, P3),
208 for (Iterator<DummyBailOutChecker, ThisType> iter (*
this); iter.next();)
209 (iter.getListener()->*callbackFunction) (param1, param2, param3);
214 template <
class BailOutCheckerType, LL_TEMPLATE(1), LL_TEMPLATE(2), LL_TEMPLATE(3)>
216 void (ListenerClass::*callbackFunction) (P1, P2, P3),
219 for (Iterator<BailOutCheckerType, ThisType> iter (*
this); iter.next (bailOutChecker);)
220 (iter.getListener()->*callbackFunction) (param1, param2, param3);
225 template <LL_TEMPLATE(1), LL_TEMPLATE(2), LL_TEMPLATE(3), LL_TEMPLATE(4)>
226 void call (
void (ListenerClass::*callbackFunction) (P1, P2, P3, P4),
229 for (Iterator<DummyBailOutChecker, ThisType> iter (*
this); iter.next();)
230 (iter.getListener()->*callbackFunction) (param1, param2, param3, param4);
235 template <
class BailOutCheckerType, LL_TEMPLATE(1), LL_TEMPLATE(2), LL_TEMPLATE(3), LL_TEMPLATE(4)>
237 void (ListenerClass::*callbackFunction) (P1, P2, P3, P4),
240 for (Iterator<BailOutCheckerType, ThisType> iter (*
this); iter.next (bailOutChecker);)
241 (iter.getListener()->*callbackFunction) (param1, param2, param3, param4);
246 template <LL_TEMPLATE(1), LL_TEMPLATE(2), LL_TEMPLATE(3), LL_TEMPLATE(4), LL_TEMPLATE(5)>
247 void call (
void (ListenerClass::*callbackFunction) (P1, P2, P3, P4, P5),
250 for (Iterator<DummyBailOutChecker, ThisType> iter (*
this); iter.next();)
251 (iter.getListener()->*callbackFunction) (param1, param2, param3, param4, param5);
256 template <
class BailOutCheckerType, LL_TEMPLATE(1), LL_TEMPLATE(2), LL_TEMPLATE(3), LL_TEMPLATE(4), LL_TEMPLATE(5)>
258 void (ListenerClass::*callbackFunction) (P1, P2, P3, P4, P5),
261 for (Iterator<BailOutCheckerType, ThisType> iter (*
this); iter.next (bailOutChecker);)
262 (iter.getListener()->*callbackFunction) (param1, param2, param3, param4, param5);
267 template <LL_TEMPLATE(1), LL_TEMPLATE(2), LL_TEMPLATE(3), LL_TEMPLATE(4), LL_TEMPLATE(5), LL_TEMPLATE(6)>
268 void call (
void (ListenerClass::*callbackFunction) (P1, P2, P3, P4, P5, P6),
271 for (Iterator<DummyBailOutChecker, ThisType> iter (*
this); iter.next();)
272 (iter.getListener()->*callbackFunction) (param1, param2, param3, param4, param5, param6);
277 template <
class BailOutCheckerType, LL_TEMPLATE(1), LL_TEMPLATE(2), LL_TEMPLATE(3), LL_TEMPLATE(4), LL_TEMPLATE(5), LL_TEMPLATE(6)>
279 void (ListenerClass::*callbackFunction) (P1, P2, P3, P4, P5, P6),
282 for (Iterator<BailOutCheckerType, ThisType> iter (*
this); iter.next (bailOutChecker);)
283 (iter.getListener()->*callbackFunction) (param1, param2, param3, param4, param5, param6);
299 template <
class BailOutCheckerType,
class ListType>
305 : list (listToIterate), index (listToIterate.size())
316 const int listSize = list.size();
318 if (--index < listSize)
321 index = listSize - 1;
327 return (! bailOutChecker.shouldBailOut()) &&
next();
332 return list.getListeners().getUnchecked (index);
337 const ListType& list;
359 #endif // JUCE_LISTENERLIST_H_INCLUDED