Beispiel #1
0
        public void AddEventListener(string eventType, TargetEventHandler handler)
        {
            if (eventType == null)
            {
                return;
            }
            if (handler == null)
            {
                return;
            }

            var sendListen = false;

            List <TargetEventHandler> handlers;

            lock (eventListeners) {
                if (!eventListeners.TryGetValue(eventType, out handlers))
                {
                    handlers = new List <TargetEventHandler> ();
                    eventListeners[eventType] = handlers;
                    sendListen = true;
                }
                handlers.Add(handler);
            }

            if (sendListen)
            {
                Send(new Message {
                    MessageType = MessageType.Listen,
                    TargetId    = Id,
                    Key         = eventType,
                });
            }
        }
Beispiel #2
0
 // Wrap event invocations inside a protected virtual method
 protected virtual void OnTargetEventHandler(TargetEventArgs e)
 {
     // Make a temporary copy of the event to avoid possibility of
     // a race condition if the last subscriber unsubscribes
     // immediately after the null check and before the event is raised.
     TargetEventHandler?.Invoke(this, e);
 }
Beispiel #3
0
        protected virtual NativeGestureRecognizer GetNativeRecognizer(IGestureRecognizer recognizer)
        {
            if (recognizer == null)
            {
                return(null);
            }

            var weakRecognizer   = new WeakReference(recognizer);
            var weakEventTracker = new WeakReference(this);

            var tapRecognizer = recognizer as TapGestureRecognizer;

            if (tapRecognizer != null && tapRecognizer.NumberOfTapsRequired == 1)
            {
                var returnAction = new TargetEventHandler((s, e) =>
                {
                    var tapGestureRecognizer = weakRecognizer.Target as TapGestureRecognizer;
                    var eventTracker         = weakEventTracker.Target as EventTracker;
                    var view = eventTracker?._renderer?.Element as View;

                    if (tapGestureRecognizer != null && view != null)
                    {
                        tapGestureRecognizer.SendTapped(view);
                    }
                });
                var uiRecognizer = new NativeGestureRecognizer
                {
                    EventType = "click",
                    Handler   = returnAction,
                };
                return(uiRecognizer);
            }
            if (tapRecognizer != null && tapRecognizer.NumberOfTapsRequired == 2)
            {
                var returnAction = new TargetEventHandler((s, e) =>
                {
                    var tapGestureRecognizer = weakRecognizer.Target as TapGestureRecognizer;
                    var eventTracker         = weakEventTracker.Target as EventTracker;
                    var view = eventTracker?._renderer?.Element as View;

                    if (tapGestureRecognizer != null && view != null)
                    {
                        tapGestureRecognizer.SendTapped(view);
                    }
                });
                var uiRecognizer = new NativeGestureRecognizer
                {
                    EventType = "dblclick",
                    Handler   = returnAction,
                };
                return(uiRecognizer);
            }

            return(null);
        }
Beispiel #4
0
        public void RemoveEventListener(string eventType, TargetEventHandler handler)
        {
            if (eventType == null)
            {
                return;
            }
            if (handler == null)
            {
                return;
            }

            List <TargetEventHandler> handlers;

            lock (eventListeners) {
                if (eventListeners.TryGetValue(eventType, out handlers))
                {
                    handlers.Remove(handler);
                }
            }
        }