using CPF.Mac.ObjCRuntime; using System; using System.ComponentModel; namespace CPF.Mac.Foundation { [Register("NSUserNotificationCenter", true)] [MountainLion] public class NSUserNotificationCenter : NSObject { [Register] private sealed class _NSUserNotificationCenterDelegate : NSUserNotificationCenterDelegate { internal EventHandler didDeliverNotification; internal EventHandler didActivateNotification; internal UNCShouldPresentNotification shouldPresentNotification; [Preserve(Conditional = true)] public override void DidDeliverNotification(NSUserNotificationCenter center, NSUserNotification notification) { EventHandler eventHandler = didDeliverNotification; if (eventHandler != null) { UNCDidDeliverNotificationEventArgs e = new UNCDidDeliverNotificationEventArgs(notification); eventHandler(center, e); } } [Preserve(Conditional = true)] public override void DidActivateNotification(NSUserNotificationCenter center, NSUserNotification notification) { EventHandler eventHandler = didActivateNotification; if (eventHandler != null) { UNCDidActivateNotificationEventArgs e = new UNCDidActivateNotificationEventArgs(notification); eventHandler(center, e); } } [Preserve(Conditional = true)] public override bool ShouldPresentNotification(NSUserNotificationCenter center, NSUserNotification notification) { return shouldPresentNotification?.Invoke(center, notification) ?? false; } } private static readonly IntPtr selDefaultUserNotificationCenterHandle = Selector.GetHandle("defaultUserNotificationCenter"); private static readonly IntPtr selDelegateHandle = Selector.GetHandle("delegate"); private static readonly IntPtr selSetDelegate_Handle = Selector.GetHandle("setDelegate:"); private static readonly IntPtr selScheduledNotificationsHandle = Selector.GetHandle("scheduledNotifications"); private static readonly IntPtr selSetScheduledNotifications_Handle = Selector.GetHandle("setScheduledNotifications:"); private static readonly IntPtr selDeliveredNotificationsHandle = Selector.GetHandle("deliveredNotifications"); private static readonly IntPtr selScheduleNotification_Handle = Selector.GetHandle("scheduleNotification:"); private static readonly IntPtr selRemoveScheduledNotification_Handle = Selector.GetHandle("removeScheduledNotification:"); private static readonly IntPtr selDeliverNotification_Handle = Selector.GetHandle("deliverNotification:"); private static readonly IntPtr selRemoveDeliveredNotification_Handle = Selector.GetHandle("removeDeliveredNotification:"); private static readonly IntPtr selRemoveAllDeliveredNotificationsHandle = Selector.GetHandle("removeAllDeliveredNotifications"); private static readonly IntPtr class_ptr = Class.GetHandle("NSUserNotificationCenter"); private static object __mt_DefaultUserNotificationCenter_var_static; private object __mt_WeakDelegate_var; private object __mt_ScheduledNotifications_var; private object __mt_DeliveredNotifications_var; public override IntPtr ClassHandle => class_ptr; public static NSUserNotificationCenter DefaultUserNotificationCenter { [Export("defaultUserNotificationCenter")] get { return (NSUserNotificationCenter)(__mt_DefaultUserNotificationCenter_var_static = (NSUserNotificationCenter)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(class_ptr, selDefaultUserNotificationCenterHandle))); } } public virtual NSObject WeakDelegate { [Export("delegate")] get { return (NSObject)(__mt_WeakDelegate_var = ((!IsDirectBinding) ? Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selDelegateHandle)) : Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selDelegateHandle)))); } [Export("setDelegate:")] set { if (IsDirectBinding) { Messaging.void_objc_msgSend_IntPtr(base.Handle, selSetDelegate_Handle, value?.Handle ?? IntPtr.Zero); } else { Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selSetDelegate_Handle, value?.Handle ?? IntPtr.Zero); } __mt_WeakDelegate_var = value; } } public NSUserNotificationCenterDelegate Delegate { get { return WeakDelegate as NSUserNotificationCenterDelegate; } set { WeakDelegate = value; } } public virtual NSUserNotification[] ScheduledNotifications { [Export("scheduledNotifications")] get { return (NSUserNotification[])(__mt_ScheduledNotifications_var = ((!IsDirectBinding) ? NSArray.ArrayFromHandle(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selScheduledNotificationsHandle)) : NSArray.ArrayFromHandle(Messaging.IntPtr_objc_msgSend(base.Handle, selScheduledNotificationsHandle)))); } [Export("setScheduledNotifications:")] set { if (value == null) { throw new ArgumentNullException("value"); } NSArray nSArray = NSArray.FromNSObjects(value); if (IsDirectBinding) { Messaging.void_objc_msgSend_IntPtr(base.Handle, selSetScheduledNotifications_Handle, nSArray.Handle); } else { Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selSetScheduledNotifications_Handle, nSArray.Handle); } nSArray.Dispose(); __mt_ScheduledNotifications_var = value; } } public virtual NSUserNotification[] DeliveredNotifications { [Export("deliveredNotifications")] get { return (NSUserNotification[])(__mt_DeliveredNotifications_var = ((!IsDirectBinding) ? NSArray.ArrayFromHandle(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selDeliveredNotificationsHandle)) : NSArray.ArrayFromHandle(Messaging.IntPtr_objc_msgSend(base.Handle, selDeliveredNotificationsHandle)))); } } public UNCShouldPresentNotification ShouldPresentNotification { get { return EnsureNSUserNotificationCenterDelegate().shouldPresentNotification; } set { EnsureNSUserNotificationCenterDelegate().shouldPresentNotification = value; } } public event EventHandler DidDeliverNotification { add { _NSUserNotificationCenterDelegate nSUserNotificationCenterDelegate = EnsureNSUserNotificationCenterDelegate(); nSUserNotificationCenterDelegate.didDeliverNotification = (EventHandler)System.Delegate.Combine(nSUserNotificationCenterDelegate.didDeliverNotification, value); } remove { _NSUserNotificationCenterDelegate nSUserNotificationCenterDelegate = EnsureNSUserNotificationCenterDelegate(); nSUserNotificationCenterDelegate.didDeliverNotification = (EventHandler)System.Delegate.Remove(nSUserNotificationCenterDelegate.didDeliverNotification, value); } } public event EventHandler DidActivateNotification { add { _NSUserNotificationCenterDelegate nSUserNotificationCenterDelegate = EnsureNSUserNotificationCenterDelegate(); nSUserNotificationCenterDelegate.didActivateNotification = (EventHandler)System.Delegate.Combine(nSUserNotificationCenterDelegate.didActivateNotification, value); } remove { _NSUserNotificationCenterDelegate nSUserNotificationCenterDelegate = EnsureNSUserNotificationCenterDelegate(); nSUserNotificationCenterDelegate.didActivateNotification = (EventHandler)System.Delegate.Remove(nSUserNotificationCenterDelegate.didActivateNotification, value); } } [EditorBrowsable(EditorBrowsableState.Advanced)] [Export("initWithCoder:")] public NSUserNotificationCenter(NSCoder coder) : base(NSObjectFlag.Empty) { if (IsDirectBinding) { base.Handle = Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, Selector.InitWithCoder, coder.Handle); } else { base.Handle = Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, Selector.InitWithCoder, coder.Handle); } } [EditorBrowsable(EditorBrowsableState.Advanced)] public NSUserNotificationCenter(NSObjectFlag t) : base(t) { } [EditorBrowsable(EditorBrowsableState.Advanced)] public NSUserNotificationCenter(IntPtr handle) : base(handle) { } [Export("scheduleNotification:")] public virtual void ScheduleNotification(NSUserNotification notification) { if (notification == null) { throw new ArgumentNullException("notification"); } if (IsDirectBinding) { Messaging.void_objc_msgSend_IntPtr(base.Handle, selScheduleNotification_Handle, notification.Handle); } else { Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selScheduleNotification_Handle, notification.Handle); } _ = ScheduledNotifications; } [Export("removeScheduledNotification:")] public virtual void RemoveScheduledNotification(NSUserNotification notification) { if (notification == null) { throw new ArgumentNullException("notification"); } if (IsDirectBinding) { Messaging.void_objc_msgSend_IntPtr(base.Handle, selRemoveScheduledNotification_Handle, notification.Handle); } else { Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selRemoveScheduledNotification_Handle, notification.Handle); } _ = ScheduledNotifications; } [Export("deliverNotification:")] public virtual void DeliverNotification(NSUserNotification notification) { if (notification == null) { throw new ArgumentNullException("notification"); } if (IsDirectBinding) { Messaging.void_objc_msgSend_IntPtr(base.Handle, selDeliverNotification_Handle, notification.Handle); } else { Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selDeliverNotification_Handle, notification.Handle); } _ = DeliveredNotifications; } [Export("removeDeliveredNotification:")] public virtual void RemoveDeliveredNotification(NSUserNotification notification) { if (notification == null) { throw new ArgumentNullException("notification"); } if (IsDirectBinding) { Messaging.void_objc_msgSend_IntPtr(base.Handle, selRemoveDeliveredNotification_Handle, notification.Handle); } else { Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selRemoveDeliveredNotification_Handle, notification.Handle); } _ = DeliveredNotifications; } [Export("removeAllDeliveredNotifications")] public virtual void RemoveAllDeliveredNotifications() { if (IsDirectBinding) { Messaging.void_objc_msgSend(base.Handle, selRemoveAllDeliveredNotificationsHandle); } else { Messaging.void_objc_msgSendSuper(base.SuperHandle, selRemoveAllDeliveredNotificationsHandle); } _ = DeliveredNotifications; } private _NSUserNotificationCenterDelegate EnsureNSUserNotificationCenterDelegate() { NSObject nSObject = WeakDelegate; if (nSObject == null || !(nSObject is _NSUserNotificationCenterDelegate)) { nSObject = (WeakDelegate = new _NSUserNotificationCenterDelegate()); } return (_NSUserNotificationCenterDelegate)nSObject; } protected override void Dispose(bool disposing) { base.Dispose(disposing); if (base.Handle == IntPtr.Zero) { __mt_WeakDelegate_var = null; __mt_ScheduledNotifications_var = null; __mt_DeliveredNotifications_var = null; } } } }