CPF/CPF.Mac/Mac/Foundation/NSPort.cs
2023-11-21 23:05:03 +08:00

129 lines
3.0 KiB
C#

using CPF.Mac.ObjCRuntime;
using System;
using System.ComponentModel;
namespace CPF.Mac.Foundation
{
[Register("NSPort", true)]
public class NSPort : NSObject
{
private static readonly IntPtr selIsValidHandle = Selector.GetHandle("isValid");
private static readonly IntPtr selDelegateHandle = Selector.GetHandle("delegate");
private static readonly IntPtr selSetDelegate_Handle = Selector.GetHandle("setDelegate:");
private static readonly IntPtr selPortHandle = Selector.GetHandle("port");
private static readonly IntPtr selInvalidateHandle = Selector.GetHandle("invalidate");
private static readonly IntPtr class_ptr = Class.GetHandle("NSPort");
private object __mt_WeakDelegate_var;
public override IntPtr ClassHandle => class_ptr;
public virtual bool IsValid
{
[Export("isValid")]
get
{
if (IsDirectBinding)
{
return Messaging.bool_objc_msgSend(base.Handle, selIsValidHandle);
}
return Messaging.bool_objc_msgSendSuper(base.SuperHandle, selIsValidHandle);
}
}
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 NSPortDelegate Delegate
{
get
{
return WeakDelegate as NSPortDelegate;
}
set
{
WeakDelegate = value;
}
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
[Export("initWithCoder:")]
public NSPort(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 NSPort(NSObjectFlag t)
: base(t)
{
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
public NSPort(IntPtr handle)
: base(handle)
{
}
[Export("port")]
public static NSPort Create()
{
return (NSPort)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(class_ptr, selPortHandle));
}
[Export("invalidate")]
public virtual void Invalidate()
{
if (IsDirectBinding)
{
Messaging.void_objc_msgSend(base.Handle, selInvalidateHandle);
}
else
{
Messaging.void_objc_msgSendSuper(base.SuperHandle, selInvalidateHandle);
}
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (base.Handle == IntPtr.Zero)
{
__mt_WeakDelegate_var = null;
}
}
}
}