Esempio n. 1
0
    // ------------------------------------------------------------------
    // 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;
        }
    }
Esempio n. 2
0
    ///////////////////////////////////////////////////////////////////////////////
    //
    ///////////////////////////////////////////////////////////////////////////////

    // ------------------------------------------------------------------
    // 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);
    }
Esempio n. 3
0
    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;
                }
            }
        }
    }
Esempio n. 4
0
    // ------------------------------------------------------------------
    // 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);
        }
    }