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

356 lines
10 KiB
C#

using CPF.Mac.Foundation;
using CPF.Mac.ObjCRuntime;
using System;
using System.ComponentModel;
namespace CPF.Mac.AppKit
{
[Register("NSTextStorage", true)]
public class NSTextStorage : NSMutableAttributedString
{
[Register]
private sealed class _NSTextStorageDelegate : NSTextStorageDelegate
{
internal EventHandler textStorageWillProcessEditing;
internal EventHandler textStorageDidProcessEditing;
[Preserve(Conditional = true)]
public override void TextStorageWillProcessEditing(NSNotification notification)
{
textStorageWillProcessEditing?.Invoke(notification, EventArgs.Empty);
}
[Preserve(Conditional = true)]
public override void TextStorageDidProcessEditing(NSNotification notification)
{
textStorageDidProcessEditing?.Invoke(notification, EventArgs.Empty);
}
}
private static readonly IntPtr selLayoutManagersHandle = Selector.GetHandle("layoutManagers");
private static readonly IntPtr selFixesAttributesLazilyHandle = Selector.GetHandle("fixesAttributesLazily");
private static readonly IntPtr selEditedMaskHandle = Selector.GetHandle("editedMask");
private static readonly IntPtr selEditedRangeHandle = Selector.GetHandle("editedRange");
private static readonly IntPtr selChangeInLengthHandle = Selector.GetHandle("changeInLength");
private static readonly IntPtr selDelegateHandle = Selector.GetHandle("delegate");
private static readonly IntPtr selSetDelegate_Handle = Selector.GetHandle("setDelegate:");
private static readonly IntPtr selAddLayoutManager_Handle = Selector.GetHandle("addLayoutManager:");
private static readonly IntPtr selRemoveLayoutManager_Handle = Selector.GetHandle("removeLayoutManager:");
private static readonly IntPtr selEditedRangeChangeInLength_Handle = Selector.GetHandle("edited:range:changeInLength:");
private static readonly IntPtr selProcessEditingHandle = Selector.GetHandle("processEditing");
private static readonly IntPtr selInvalidateAttributesInRange_Handle = Selector.GetHandle("invalidateAttributesInRange:");
private static readonly IntPtr selEnsureAttributesAreFixedInRange_Handle = Selector.GetHandle("ensureAttributesAreFixedInRange:");
private static readonly IntPtr class_ptr = Class.GetHandle("NSTextStorage");
private object __mt_LayoutManagers_var;
private object __mt_WeakDelegate_var;
public override IntPtr ClassHandle => class_ptr;
public virtual NSLayoutManager[] LayoutManagers
{
[Export("layoutManagers")]
get
{
NSApplication.EnsureUIThread();
return (NSLayoutManager[])(__mt_LayoutManagers_var = ((!IsDirectBinding) ? NSArray.ArrayFromHandle<NSLayoutManager>(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selLayoutManagersHandle)) : NSArray.ArrayFromHandle<NSLayoutManager>(Messaging.IntPtr_objc_msgSend(base.Handle, selLayoutManagersHandle))));
}
}
public virtual bool FixesAttributesLazily
{
[Export("fixesAttributesLazily")]
get
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
return Messaging.bool_objc_msgSend(base.Handle, selFixesAttributesLazilyHandle);
}
return Messaging.bool_objc_msgSendSuper(base.SuperHandle, selFixesAttributesLazilyHandle);
}
}
public virtual NSTextStorageEditedFlags EditedMask
{
[Export("editedMask")]
get
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
return (NSTextStorageEditedFlags)Messaging.UInt64_objc_msgSend(base.Handle, selEditedMaskHandle);
}
return (NSTextStorageEditedFlags)Messaging.UInt64_objc_msgSendSuper(base.SuperHandle, selEditedMaskHandle);
}
}
public virtual NSRange EditedRange
{
[Export("editedRange")]
get
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
return Messaging.NSRange_objc_msgSend(base.Handle, selEditedRangeHandle);
}
return Messaging.NSRange_objc_msgSendSuper(base.SuperHandle, selEditedRangeHandle);
}
}
public virtual long ChangeInLength
{
[Export("changeInLength")]
get
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
return Messaging.Int64_objc_msgSend(base.Handle, selChangeInLengthHandle);
}
return Messaging.Int64_objc_msgSendSuper(base.SuperHandle, selChangeInLengthHandle);
}
}
public virtual NSObject WeakDelegate
{
[Export("delegate")]
get
{
NSApplication.EnsureUIThread();
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
{
NSApplication.EnsureUIThread();
if (value == null)
{
throw new ArgumentNullException("value");
}
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_IntPtr(base.Handle, selSetDelegate_Handle, value.Handle);
}
else
{
Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selSetDelegate_Handle, value.Handle);
}
__mt_WeakDelegate_var = value;
}
}
public NSTextStorageDelegate Delegate
{
get
{
return WeakDelegate as NSTextStorageDelegate;
}
set
{
WeakDelegate = value;
}
}
public event EventHandler TextStorageWillProcessEditing
{
add
{
_NSTextStorageDelegate nSTextStorageDelegate = EnsureNSTextStorageDelegate();
nSTextStorageDelegate.textStorageWillProcessEditing = (EventHandler)System.Delegate.Combine(nSTextStorageDelegate.textStorageWillProcessEditing, value);
}
remove
{
_NSTextStorageDelegate nSTextStorageDelegate = EnsureNSTextStorageDelegate();
nSTextStorageDelegate.textStorageWillProcessEditing = (EventHandler)System.Delegate.Remove(nSTextStorageDelegate.textStorageWillProcessEditing, value);
}
}
public event EventHandler TextStorageDidProcessEditing
{
add
{
_NSTextStorageDelegate nSTextStorageDelegate = EnsureNSTextStorageDelegate();
nSTextStorageDelegate.textStorageDidProcessEditing = (EventHandler)System.Delegate.Combine(nSTextStorageDelegate.textStorageDidProcessEditing, value);
}
remove
{
_NSTextStorageDelegate nSTextStorageDelegate = EnsureNSTextStorageDelegate();
nSTextStorageDelegate.textStorageDidProcessEditing = (EventHandler)System.Delegate.Remove(nSTextStorageDelegate.textStorageDidProcessEditing, value);
}
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
[Export("init")]
public NSTextStorage()
: base(NSObjectFlag.Empty)
{
if (IsDirectBinding)
{
base.Handle = Messaging.IntPtr_objc_msgSend(base.Handle, Selector.Init);
}
else
{
base.Handle = Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, Selector.Init);
}
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
[Export("initWithCoder:")]
public NSTextStorage(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 NSTextStorage(NSObjectFlag t)
: base(t)
{
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
public NSTextStorage(IntPtr handle)
: base(handle)
{
}
[Export("addLayoutManager:")]
public virtual void AddLayoutManager(NSLayoutManager obj)
{
NSApplication.EnsureUIThread();
if (obj == null)
{
throw new ArgumentNullException("obj");
}
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_IntPtr(base.Handle, selAddLayoutManager_Handle, obj.Handle);
}
else
{
Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selAddLayoutManager_Handle, obj.Handle);
}
_ = LayoutManagers;
}
[Export("removeLayoutManager:")]
public virtual void RemoveLayoutManager(NSLayoutManager obj)
{
NSApplication.EnsureUIThread();
if (obj == null)
{
throw new ArgumentNullException("obj");
}
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_IntPtr(base.Handle, selRemoveLayoutManager_Handle, obj.Handle);
}
else
{
Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selRemoveLayoutManager_Handle, obj.Handle);
}
_ = LayoutManagers;
}
[Export("edited:range:changeInLength:")]
public virtual void Edited(ulong editedMask, NSRange range, long delta)
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_UInt64_NSRange_Int64(base.Handle, selEditedRangeChangeInLength_Handle, editedMask, range, delta);
}
else
{
Messaging.void_objc_msgSendSuper_UInt64_NSRange_Int64(base.SuperHandle, selEditedRangeChangeInLength_Handle, editedMask, range, delta);
}
}
[Export("processEditing")]
public virtual void ProcessEditing()
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
Messaging.void_objc_msgSend(base.Handle, selProcessEditingHandle);
}
else
{
Messaging.void_objc_msgSendSuper(base.SuperHandle, selProcessEditingHandle);
}
}
[Export("invalidateAttributesInRange:")]
public virtual void InvalidateAttributes(NSRange range)
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_NSRange(base.Handle, selInvalidateAttributesInRange_Handle, range);
}
else
{
Messaging.void_objc_msgSendSuper_NSRange(base.SuperHandle, selInvalidateAttributesInRange_Handle, range);
}
}
[Export("ensureAttributesAreFixedInRange:")]
public virtual void EnsureAttributesAreFixed(NSRange range)
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_NSRange(base.Handle, selEnsureAttributesAreFixedInRange_Handle, range);
}
else
{
Messaging.void_objc_msgSendSuper_NSRange(base.SuperHandle, selEnsureAttributesAreFixedInRange_Handle, range);
}
}
private _NSTextStorageDelegate EnsureNSTextStorageDelegate()
{
NSTextStorageDelegate nSTextStorageDelegate = Delegate;
if (nSTextStorageDelegate == null || !(nSTextStorageDelegate is _NSTextStorageDelegate))
{
nSTextStorageDelegate = (Delegate = new _NSTextStorageDelegate());
}
return (_NSTextStorageDelegate)nSTextStorageDelegate;
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (base.Handle == IntPtr.Zero)
{
__mt_LayoutManagers_var = null;
__mt_WeakDelegate_var = null;
}
}
}
}