using CPF.Mac.Foundation; using CPF.Mac.ObjCRuntime; using System; namespace CPF.Mac.AppKit { [Register("__monomac_internal_ActionDispatcher")] internal class ActionDispatcher : NSObject { private const string skey = "__monomac_internal_ActionDispatcher_activated:"; private const string dkey = "__monomac_internal_ActionDispatcher_doubleActivated:"; public static Selector Action = new Selector("__monomac_internal_ActionDispatcher_activated:"); public static Selector DoubleAction = new Selector("__monomac_internal_ActionDispatcher_doubleActivated:"); public EventHandler Activated; public EventHandler DoubleActivated; [Preserve] [Export("__monomac_internal_ActionDispatcher_activated:")] public void OnActivated(NSObject sender) { Activated?.Invoke(sender, EventArgs.Empty); } [Preserve] [Export("__monomac_internal_ActionDispatcher_doubleActivated:")] public void OnActivated2(NSObject sender) { DoubleActivated?.Invoke(sender, EventArgs.Empty); } public ActionDispatcher(EventHandler handler) { Activated = handler; } public ActionDispatcher() { } public static NSObject SetupAction(NSObject target, EventHandler handler) { ActionDispatcher actionDispatcher = target as ActionDispatcher; if (actionDispatcher == null) { actionDispatcher = new ActionDispatcher(); ActionDispatcher actionDispatcher2 = actionDispatcher; actionDispatcher2.Activated = (EventHandler)Delegate.Combine(actionDispatcher2.Activated, handler); } return actionDispatcher; } public static void RemoveAction(NSObject target, EventHandler handler) { ActionDispatcher actionDispatcher = target as ActionDispatcher; if (actionDispatcher != null) { actionDispatcher.Activated = (EventHandler)Delegate.Remove(actionDispatcher.Activated, handler); } } public static NSObject SetupDoubleAction(NSObject target, EventHandler doubleHandler) { ActionDispatcher actionDispatcher = target as ActionDispatcher; if (actionDispatcher == null) { actionDispatcher = new ActionDispatcher(); ActionDispatcher actionDispatcher2 = actionDispatcher; actionDispatcher2.DoubleActivated = (EventHandler)Delegate.Combine(actionDispatcher2.DoubleActivated, doubleHandler); } return actionDispatcher; } public static void RemoveDoubleAction(NSObject target, EventHandler doubleHandler) { ActionDispatcher actionDispatcher = target as ActionDispatcher; if (actionDispatcher != null) { actionDispatcher.DoubleActivated = (EventHandler)Delegate.Remove(actionDispatcher.DoubleActivated, doubleHandler); } } } }