cocos2d-x  3.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
EventDispatcher Class Reference

This class manages event listener subscriptions and event dispatching. More...

#include <CCEventDispatcher.h>

Inheritance diagram for EventDispatcher:
Ref

Classes

class  EventListenerVector
 The vector to store event listeners with scene graph based priority and fixed priority. More...
 

Public Member Functions

void addEventListenerWithSceneGraphPriority (EventListener *listener, Node *node)
 Adds a event listener for a specified event with the priority of scene graph. More...
 
void addEventListenerWithFixedPriority (EventListener *listener, int fixedPriority)
 Adds a event listener for a specified event with the fixed priority. More...
 
EventListenerCustomaddCustomEventListener (const std::string &eventName, const std::function< void(EventCustom *)> &callback)
 Adds a Custom event listener. More...
 
void removeEventListener (EventListener *listener)
 Remove a listener. More...
 
void removeEventListenersForType (EventListener::Type listenerType)
 Removes all listeners with the same event listener type. More...
 
void removeEventListenersForTarget (Node *target, bool recursive=false)
 Removes all listeners which are associated with the specified target. More...
 
void removeCustomEventListeners (const std::string &customEventName)
 Removes all custom listeners with the same event name. More...
 
void removeAllEventListeners ()
 Removes all listeners. More...
 
void pauseEventListenersForTarget (Node *target, bool recursive=false)
 Pauses all listeners which are associated the specified target. More...
 
void resumeEventListenersForTarget (Node *target, bool recursive=false)
 Resumes all listeners which are associated the specified target. More...
 
void setPriority (EventListener *listener, int fixedPriority)
 Sets listener's priority with fixed value. More...
 
void setEnabled (bool isEnabled)
 Whether to enable dispatching events. More...
 
bool isEnabled () const
 Checks whether dispatching events is enabled. More...
 
void dispatchEvent (Event *event)
 Dispatches the event Also removes all EventListeners marked for deletion from the event dispatcher list. More...
 
void dispatchCustomEvent (const std::string &eventName, void *optionalUserData=nullptr)
 Dispatches a Custom Event with a event name an optional user data. More...
 
 EventDispatcher ()
 Constructor of EventDispatcher. More...
 
 ~EventDispatcher ()
 Destructor of EventDispatcher. More...
 
- Public Member Functions inherited from Ref
void retain ()
 Retains the ownership. More...
 
void release ()
 Releases the ownership immediately. More...
 
Refautorelease ()
 Releases the ownership sometime soon automatically. More...
 
unsigned int getReferenceCount () const
 Returns the Ref's current reference count. More...
 
virtual ~Ref ()
 NA NA More...
 

Protected Types

enum  DirtyFlag { NONE = 0, FIXED_PRIORITY = 1 << 0, SCENE_GRAPH_PRIORITY = 1 << 1, ALL = FIXED_PRIORITY | SCENE_GRAPH_PRIORITY }
 Priority dirty flag. More...
 

Protected Member Functions

void setDirtyForNode (Node *node)
 Sets the dirty flag for a node. More...
 
void addEventListener (EventListener *listener)
 Adds an event listener with item. More...
 
void forceAddEventListener (EventListener *listener)
 Force adding an event listener. More...
 
EventListenerVectorgetListeners (const EventListener::ListenerID &listenerID)
 Gets event the listener list for the event listener type. More...
 
void updateDirtyFlagForSceneGraph ()
 Update dirty flag. More...
 
void removeEventListenersForListenerID (const EventListener::ListenerID &listenerID)
 Removes all listeners with the same event listener ID. More...
 
void sortEventListeners (const EventListener::ListenerID &listenerID)
 Sort event listener. More...
 
void sortEventListenersOfSceneGraphPriority (const EventListener::ListenerID &listenerID, Node *rootNode)
 Sorts the listeners of specified type by scene graph priority. More...
 
void sortEventListenersOfFixedPriority (const EventListener::ListenerID &listenerID)
 Sorts the listeners of specified type by fixed priority. More...
 
void updateListeners (Event *event)
 Updates all listeners 1) Removes all listener items that have been marked as 'removed' when dispatching event. More...
 
void dispatchTouchEvent (EventTouch *event)
 Touch event needs to be processed different with other events since it needs support ALL_AT_ONCE and ONE_BY_NONE mode. More...
 
void associateNodeAndEventListener (Node *node, EventListener *listener)
 Associates node with event listener. More...
 
void dissociateNodeAndEventListener (Node *node, EventListener *listener)
 Dissociates node with event listener. More...
 
void dispatchEventToListeners (EventListenerVector *listeners, const std::function< bool(EventListener *)> &onEvent)
 Dispatches event to listeners with a specified listener type. More...
 
void setDirty (const EventListener::ListenerID &listenerID, DirtyFlag flag)
 Sets the dirty flag for a specified listener ID. More...
 
void visitTarget (Node *node, bool isRootNode)
 Walks though scene graph to get the draw order for each node, it's called before sorting event listener with scene graph priority. More...
 
- Protected Member Functions inherited from Ref
 Ref ()
 Constructor. More...
 

Protected Attributes

std::unordered_map
< EventListener::ListenerID,
EventListenerVector * > 
_listenerMap
 Listeners map. More...
 
std::unordered_map
< EventListener::ListenerID,
DirtyFlag
_priorityDirtyFlagMap
 The map of dirty flag. More...
 
std::unordered_map< Node
*, std::vector< EventListener * > * > 
_nodeListenersMap
 The map of node and event listeners. More...
 
std::unordered_map< Node *, int > _nodePriorityMap
 The map of node and its event priority. More...
 
std::unordered_map< float,
std::vector< Node * > > 
_globalZOrderNodeMap
 key: Global Z Order, value: Sorted Nodes More...
 
std::vector< EventListener * > _toAddedListeners
 The listeners to be added after dispatching event. More...
 
std::set< Node * > _dirtyNodes
 The nodes were associated with scene graph based priority listeners. More...
 
int _inDispatch
 Whether the dispatcher is dispatching event. More...
 
bool _isEnabled
 Whether to enable dispatching event. More...
 
int _nodePriorityIndex
 
std::set< std::string > _internalCustomListenerIDs
 
- Protected Attributes inherited from Ref
unsigned int _referenceCount
 count of references More...
 

Friends

class Node
 

Detailed Description

This class manages event listener subscriptions and event dispatching.

The EventListener list is managed in such a way that event listeners can be added and removed even from within an EventListener, while events are being dispatched.

Member Enumeration Documentation

enum DirtyFlag
strongprotected

Priority dirty flag.

Enumerator
NONE 
FIXED_PRIORITY 
SCENE_GRAPH_PRIORITY 
ALL 

Constructor & Destructor Documentation

Constructor of EventDispatcher.

Destructor of EventDispatcher.

Member Function Documentation

EventListenerCustom* addCustomEventListener ( const std::string &  eventName,
const std::function< void(EventCustom *)> &  callback 
)

Adds a Custom event listener.

It will use a fixed priority of 1.

Returns
the generated event. Needed in order to remove the event from the dispather
void addEventListener ( EventListener listener)
protected

Adds an event listener with item.

Note
if it is dispatching event, the added operation will be delayed to the end of current dispatch
See also
forceAddEventListener
void addEventListenerWithFixedPriority ( EventListener listener,
int  fixedPriority 
)

Adds a event listener for a specified event with the fixed priority.

Parameters
listenerThe listener of a specified event.
fixedPriorityThe fixed priority of the listener.
Note
A lower priority will be called before the ones that have a higher value. 0 priority is forbidden for fixed priority since it's used for scene graph based priority.
void addEventListenerWithSceneGraphPriority ( EventListener listener,
Node node 
)

Adds a event listener for a specified event with the priority of scene graph.

Parameters
listenerThe listener of a specified event.
nodeThe priority of the listener is based on the draw order of this node.
Note
The priority of scene graph will be fixed value 0. So the order of listener item in the vector will be ' <0, scene graph (0 priority), >0'.
void associateNodeAndEventListener ( Node node,
EventListener listener 
)
protected

Associates node with event listener.

void dispatchCustomEvent ( const std::string &  eventName,
void *  optionalUserData = nullptr 
)

Dispatches a Custom Event with a event name an optional user data.

void dispatchEvent ( Event event)

Dispatches the event Also removes all EventListeners marked for deletion from the event dispatcher list.

void dispatchEventToListeners ( EventListenerVector listeners,
const std::function< bool(EventListener *)> &  onEvent 
)
protected

Dispatches event to listeners with a specified listener type.

void dispatchTouchEvent ( EventTouch event)
protected

Touch event needs to be processed different with other events since it needs support ALL_AT_ONCE and ONE_BY_NONE mode.

void dissociateNodeAndEventListener ( Node node,
EventListener listener 
)
protected

Dissociates node with event listener.

void forceAddEventListener ( EventListener listener)
protected

Force adding an event listener.

Note
force add an event listener which will ignore whether it's in dispatching.
See also
addEventListener
EventListenerVector* getListeners ( const EventListener::ListenerID listenerID)
protected

Gets event the listener list for the event listener type.

bool isEnabled ( ) const

Checks whether dispatching events is enabled.

void pauseEventListenersForTarget ( Node target,
bool  recursive = false 
)

Pauses all listeners which are associated the specified target.

void removeAllEventListeners ( )

Removes all listeners.

void removeCustomEventListeners ( const std::string &  customEventName)

Removes all custom listeners with the same event name.

void removeEventListener ( EventListener listener)

Remove a listener.

Parameters
listenerThe specified event listener which needs to be removed.
void removeEventListenersForListenerID ( const EventListener::ListenerID listenerID)
protected

Removes all listeners with the same event listener ID.

void removeEventListenersForTarget ( Node target,
bool  recursive = false 
)

Removes all listeners which are associated with the specified target.

void removeEventListenersForType ( EventListener::Type  listenerType)

Removes all listeners with the same event listener type.

void resumeEventListenersForTarget ( Node target,
bool  recursive = false 
)

Resumes all listeners which are associated the specified target.

void setDirty ( const EventListener::ListenerID listenerID,
DirtyFlag  flag 
)
protected

Sets the dirty flag for a specified listener ID.

void setDirtyForNode ( Node node)
protected

Sets the dirty flag for a node.

void setEnabled ( bool  isEnabled)

Whether to enable dispatching events.

void setPriority ( EventListener listener,
int  fixedPriority 
)

Sets listener's priority with fixed value.

void sortEventListeners ( const EventListener::ListenerID listenerID)
protected

Sort event listener.

void sortEventListenersOfFixedPriority ( const EventListener::ListenerID listenerID)
protected

Sorts the listeners of specified type by fixed priority.

void sortEventListenersOfSceneGraphPriority ( const EventListener::ListenerID listenerID,
Node rootNode 
)
protected

Sorts the listeners of specified type by scene graph priority.

void updateDirtyFlagForSceneGraph ( )
protected

Update dirty flag.

void updateListeners ( Event event)
protected

Updates all listeners 1) Removes all listener items that have been marked as 'removed' when dispatching event.

2) Adds all listener items that have been marked as 'added' when dispatching event.

void visitTarget ( Node node,
bool  isRootNode 
)
protected

Walks though scene graph to get the draw order for each node, it's called before sorting event listener with scene graph priority.

Friends And Related Function Documentation

friend class Node
friend

Member Data Documentation

std::set<Node*> _dirtyNodes
protected

The nodes were associated with scene graph based priority listeners.

std::unordered_map<float, std::vector<Node*> > _globalZOrderNodeMap
protected

key: Global Z Order, value: Sorted Nodes

int _inDispatch
protected

Whether the dispatcher is dispatching event.

std::set<std::string> _internalCustomListenerIDs
protected
bool _isEnabled
protected

Whether to enable dispatching event.

std::unordered_map<EventListener::ListenerID, EventListenerVector*> _listenerMap
protected

Listeners map.

std::unordered_map<Node*, std::vector<EventListener*>*> _nodeListenersMap
protected

The map of node and event listeners.

int _nodePriorityIndex
protected
std::unordered_map<Node*, int> _nodePriorityMap
protected

The map of node and its event priority.

std::unordered_map<EventListener::ListenerID, DirtyFlag> _priorityDirtyFlagMap
protected

The map of dirty flag.

std::vector<EventListener*> _toAddedListeners
protected

The listeners to be added after dispatching event.


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