LMMS
Loading...
Searching...
No Matches
juce::ListenerList< ListenerClass, ArrayType > Class Template Reference

#include <juce_ListenerList.h>

Classes

struct  DummyBailOutChecker
struct  Iterator
class  WrappedIterator

Public Types

using ThisType = ListenerList<ListenerClass, ArrayType>
using ListenerType = ListenerClass

Public Member Functions

 ListenerList ()=default
 ~ListenerList ()
void add (ListenerClass *listenerToAdd)
void remove (ListenerClass *listenerToRemove)
int size () const noexcept
bool isEmpty () const noexcept
void clear ()
bool contains (ListenerClass *listener) const noexcept
const ArrayType & getListeners () const noexcept
template<typename Callback>
void call (Callback &&callback)
template<typename Callback>
void callExcluding (ListenerClass *listenerToExclude, Callback &&callback)
template<typename Callback, typename BailOutCheckerType>
void callChecked (const BailOutCheckerType &bailOutChecker, Callback &&callback)
template<typename Callback, typename BailOutCheckerType>
void callCheckedExcluding (ListenerClass *listenerToExclude, const BailOutCheckerType &bailOutChecker, Callback &&callback)
void call (void(ListenerClass::*callbackFunction)())
void callExcluding (ListenerClass *listenerToExclude, void(ListenerClass::*callbackFunction)())
template<class BailOutCheckerType>
void callChecked (const BailOutCheckerType &bailOutChecker, void(ListenerClass::*callbackFunction)())
template<class BailOutCheckerType>
void callCheckedExcluding (ListenerClass *listenerToExclude, const BailOutCheckerType &bailOutChecker, void(ListenerClass::*callbackFunction)())
template<typename... MethodArgs, typename... Args>
void call (void(ListenerClass::*callbackFunction)(MethodArgs...), Args &&... args)
template<typename... MethodArgs, typename... Args>
void callExcluding (ListenerClass *listenerToExclude, void(ListenerClass::*callbackFunction)(MethodArgs...), Args &&... args)
template<typename BailOutCheckerType, typename... MethodArgs, typename... Args>
void callChecked (const BailOutCheckerType &bailOutChecker, void(ListenerClass::*callbackFunction)(MethodArgs...), Args &&... args)
template<typename BailOutCheckerType, typename... MethodArgs, typename... Args>
void callCheckedExcluding (ListenerClass *listenerToExclude, const BailOutCheckerType &bailOutChecker, void(ListenerClass::*callbackFunction)(MethodArgs...), Args &&... args)

Private Attributes

ArrayType listeners
WrappedIteratoractiveIterators = nullptr

Detailed Description

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
class juce::ListenerList< ListenerClass, ArrayType >

Holds a set of objects and can invoke a member function callback on each object in the set with a single call.

Use a ListenerList to manage a set of objects which need a callback, and you can invoke a member function by simply calling call() or callChecked().

E.g.

class MyListenerType
{
public:
void myCallbackMethod (int foo, bool bar);
};
listeners.add (someCallbackObjects...);
// This will invoke myCallbackMethod (1234, true) on each of the objects
// in the list...
listeners.call ([] (MyListenerType& l) { l.myCallbackMethod (1234, true); });
Definition juce_ListenerList.h:70
void call(Callback &&callback)
Definition juce_ListenerList.h:135
void add(ListenerClass *listenerToAdd)
Definition juce_ListenerList.h:91
int * l
Definition inflate.c:1579

It is guaranteed that every Listener is called during an iteration if it's inside the ListenerList before the iteration starts and isn't removed until its end. This guarantee holds even if some Listeners are removed or new ones are added during the iteration.

Listeners added during an iteration are guaranteed to be not called in that iteration.

Sometimes, there's a chance that invoking one of the callbacks might result in the list itself being deleted while it's still iterating - to survive this situation, you can use callChecked() instead of call(), passing it a local object to act as a "BailOutChecker". The BailOutChecker must implement a method of the form "bool shouldBailOut()", and the list will check this after each callback to determine whether it should abort the operation. For an example of a bail-out checker, see the Component::BailOutChecker class, which can be used to check when a Component has been deleted. See also ListenerList::DummyBailOutChecker, which is a dummy checker that always returns false.

@tags{Core}

Member Typedef Documentation

◆ ListenerType

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
using juce::ListenerList< ListenerClass, ArrayType >::ListenerType = ListenerClass

◆ ThisType

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
using juce::ListenerList< ListenerClass, ArrayType >::ThisType = ListenerList<ListenerClass, ArrayType>

Constructor & Destructor Documentation

◆ ListenerList()

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
juce::ListenerList< ListenerClass, ArrayType >::ListenerList ( )
default

Creates an empty list.

◆ ~ListenerList()

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
juce::ListenerList< ListenerClass, ArrayType >::~ListenerList ( )
inline

Destructor.

Member Function Documentation

◆ add()

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
void juce::ListenerList< ListenerClass, ArrayType >::add ( ListenerClass * listenerToAdd)
inline

Adds a listener to the list. A listener can only be added once, so if the listener is already in the list, this method has no effect.

See also
remove

◆ call() [1/3]

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
template<typename Callback>
void juce::ListenerList< ListenerClass, ArrayType >::call ( Callback && callback)
inline

Calls a member function on each listener in the list, with multiple parameters.

◆ call() [2/3]

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
void juce::ListenerList< ListenerClass, ArrayType >::call ( void(ListenerClass::* callbackFunction )())
inline

◆ call() [3/3]

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
template<typename... MethodArgs, typename... Args>
void juce::ListenerList< ListenerClass, ArrayType >::call ( void(ListenerClass::* callbackFunction )(MethodArgs...),
Args &&... args )
inline

◆ callChecked() [1/3]

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
template<typename Callback, typename BailOutCheckerType>
void juce::ListenerList< ListenerClass, ArrayType >::callChecked ( const BailOutCheckerType & bailOutChecker,
Callback && callback )
inline

Calls a member function on each listener in the list, with 1 parameter and a bail-out-checker. See the class description for info about writing a bail-out checker.

◆ callChecked() [2/3]

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
template<class BailOutCheckerType>
void juce::ListenerList< ListenerClass, ArrayType >::callChecked ( const BailOutCheckerType & bailOutChecker,
void(ListenerClass::* callbackFunction )() )
inline

◆ callChecked() [3/3]

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
template<typename BailOutCheckerType, typename... MethodArgs, typename... Args>
void juce::ListenerList< ListenerClass, ArrayType >::callChecked ( const BailOutCheckerType & bailOutChecker,
void(ListenerClass::* callbackFunction )(MethodArgs...),
Args &&... args )
inline

◆ callCheckedExcluding() [1/3]

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
template<typename Callback, typename BailOutCheckerType>
void juce::ListenerList< ListenerClass, ArrayType >::callCheckedExcluding ( ListenerClass * listenerToExclude,
const BailOutCheckerType & bailOutChecker,
Callback && callback )
inline

Calls a member function, with 1 parameter, on all but the specified listener in the list with a bail-out-checker. This can be useful if the caller is also a listener and needs to exclude itself. See the class description for info about writing a bail-out checker.

◆ callCheckedExcluding() [2/3]

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
template<class BailOutCheckerType>
void juce::ListenerList< ListenerClass, ArrayType >::callCheckedExcluding ( ListenerClass * listenerToExclude,
const BailOutCheckerType & bailOutChecker,
void(ListenerClass::* callbackFunction )() )
inline

◆ callCheckedExcluding() [3/3]

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
template<typename BailOutCheckerType, typename... MethodArgs, typename... Args>
void juce::ListenerList< ListenerClass, ArrayType >::callCheckedExcluding ( ListenerClass * listenerToExclude,
const BailOutCheckerType & bailOutChecker,
void(ListenerClass::* callbackFunction )(MethodArgs...),
Args &&... args )
inline

◆ callExcluding() [1/3]

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
template<typename Callback>
void juce::ListenerList< ListenerClass, ArrayType >::callExcluding ( ListenerClass * listenerToExclude,
Callback && callback )
inline

Calls a member function with 1 parameter, on all but the specified listener in the list. This can be useful if the caller is also a listener and needs to exclude itself.

◆ callExcluding() [2/3]

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
void juce::ListenerList< ListenerClass, ArrayType >::callExcluding ( ListenerClass * listenerToExclude,
void(ListenerClass::* callbackFunction )() )
inline

◆ callExcluding() [3/3]

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
template<typename... MethodArgs, typename... Args>
void juce::ListenerList< ListenerClass, ArrayType >::callExcluding ( ListenerClass * listenerToExclude,
void(ListenerClass::* callbackFunction )(MethodArgs...),
Args &&... args )
inline

◆ clear()

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
void juce::ListenerList< ListenerClass, ArrayType >::clear ( )
inline

Clears the list.

◆ contains()

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
bool juce::ListenerList< ListenerClass, ArrayType >::contains ( ListenerClass * listener) const
inlinenoexcept

Returns true if the specified listener has been added to the list.

◆ getListeners()

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
const ArrayType & juce::ListenerList< ListenerClass, ArrayType >::getListeners ( ) const
inlinenoexcept

Returns the raw array of listeners.

◆ isEmpty()

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
bool juce::ListenerList< ListenerClass, ArrayType >::isEmpty ( ) const
inlinenoexcept

Returns true if no listeners are registered, false otherwise.

◆ remove()

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
void juce::ListenerList< ListenerClass, ArrayType >::remove ( ListenerClass * listenerToRemove)
inline

Removes a listener from the list. If the listener wasn't in the list, this has no effect.

◆ size()

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
int juce::ListenerList< ListenerClass, ArrayType >::size ( ) const
inlinenoexcept

Returns the number of registered listeners.

Member Data Documentation

◆ activeIterators

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
WrappedIterator* juce::ListenerList< ListenerClass, ArrayType >::activeIterators = nullptr
private

◆ listeners

template<class ListenerClass, class ArrayType = Array<ListenerClass*>>
ArrayType juce::ListenerList< ListenerClass, ArrayType >::listeners
private

The documentation for this class was generated from the following file: