// ------------------------------------------------------------------ // Desc: // ------------------------------------------------------------------ void DoDispatchEvent(exUIControl _sender, List <exUIEventListener> _listeners, exUIEvent _event) { for (int i = 0; i < _listeners.Count; ++i) { exUIEventListener listener = _listeners[i]; // if (_event.eventPhase == exUIEventPhase.Capture) { if (listener.capturePhase == false) { continue; } } else if (_event.eventPhase == exUIEventPhase.Bubble) { if (listener.capturePhase) { continue; } } // listener.func(_event); // // if ( _event.isPropagationStopped ) // break; } }
/////////////////////////////////////////////////////////////////////////////// // /////////////////////////////////////////////////////////////////////////////// // ------------------------------------------------------------------ // Desc: // ------------------------------------------------------------------ public void AddEventListener(string _name, System.Action <exUIEvent> _func, bool _capturePhase = false) { List <exUIEventListener> eventListeners = null; if (eventListenerTable.ContainsKey(_name)) { eventListeners = eventListenerTable[_name]; for (int i = 0; i < eventListeners.Count; ++i) { exUIEventListener eventListener = eventListeners[i]; if (eventListener.func == _func && eventListener.capturePhase == _capturePhase) { return; } } } if (eventListeners == null) { eventListeners = new List <exUIEventListener>(); eventListenerTable.Add(_name, eventListeners); } // exUIEventListener newEventInfo = new exUIEventListener(); newEventInfo.func = _func; newEventInfo.capturePhase = _capturePhase; eventListeners.Add(newEventInfo); }
public void RemoveEventListener(string _name, System.Action <exUIEvent> _func, bool _capturePhase = false) { List <exUIEventListener> eventListeners = null; if (eventListenerTable.ContainsKey(_name)) { eventListeners = eventListenerTable[_name]; for (int i = 0; i < eventListeners.Count; ++i) { exUIEventListener eventListener = eventListeners[i]; if (eventListener.func == _func && eventListener.capturePhase == _capturePhase) { eventListeners.RemoveAt(i); return; } } } }
// ------------------------------------------------------------------ // Desc: // ------------------------------------------------------------------ public void DispatchEvent(exUIControl _sender, string _name, List <exUIEventListener> _listeners, exUIEvent _event) { _event.target = _sender; if (_event.bubbles) { List <exUIControl> routine = GetRoutine(_sender); // capture phase if (_listeners != null) { for (int i = 0; i < _listeners.Count; ++i) { exUIEventListener listener = _listeners[i]; if (listener.capturePhase) { _event.eventPhase = exUIEventPhase.Capture; for (int j = routine.Count - 1; j >= 0; --j) { exUIControl sender2 = routine[j]; List <exUIEventListener> listeners2 = sender2.GetEventListeners(_name); _event.currentTarget = sender2; DoDispatchEvent(sender2, listeners2, _event); if (_event.isPropagationStopped) { return; } } } } } // target phase if (_listeners != null) { _event.eventPhase = exUIEventPhase.Target; _event.currentTarget = _sender; DoDispatchEvent(_sender, _listeners, _event); if (_event.isPropagationStopped) { return; } } // bubble phase _event.eventPhase = exUIEventPhase.Bubble; for (int j = 0; j < routine.Count; ++j) { exUIControl sender2 = routine[j]; List <exUIEventListener> listeners2 = sender2.GetEventListeners(_name); _event.currentTarget = sender2; DoDispatchEvent(sender2, listeners2, _event); if (_event.isPropagationStopped) { return; } } } else { _event.eventPhase = exUIEventPhase.Target; _event.currentTarget = _sender; DoDispatchEvent(_sender, _listeners, _event); } }