mirror of
https://gitee.com/csharpui/CPF.git
synced 2025-07-15 05:13:18 +08:00
237 lines
6.6 KiB
C#
237 lines
6.6 KiB
C#
using CPF.Mac.ObjCRuntime;
|
|
using System;
|
|
using System.ComponentModel;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace CPF.Mac.Foundation
|
|
{
|
|
[Register("NSIndexPath", true)]
|
|
public class NSIndexPath : NSObject
|
|
{
|
|
private static readonly IntPtr selLengthHandle = Selector.GetHandle("length");
|
|
|
|
private static readonly IntPtr selIndexPathWithIndex_Handle = Selector.GetHandle("indexPathWithIndex:");
|
|
|
|
private static readonly IntPtr selIndexPathWithIndexesLength_Handle = Selector.GetHandle("indexPathWithIndexes:length:");
|
|
|
|
private static readonly IntPtr selIndexPathByAddingIndex_Handle = Selector.GetHandle("indexPathByAddingIndex:");
|
|
|
|
private static readonly IntPtr selIndexPathByRemovingLastIndexHandle = Selector.GetHandle("indexPathByRemovingLastIndex");
|
|
|
|
private static readonly IntPtr selIndexAtPosition_Handle = Selector.GetHandle("indexAtPosition:");
|
|
|
|
private static readonly IntPtr selGetIndexes_Handle = Selector.GetHandle("getIndexes:");
|
|
|
|
private static readonly IntPtr selCompare_Handle = Selector.GetHandle("compare:");
|
|
|
|
private static readonly IntPtr class_ptr = Class.GetHandle("NSIndexPath");
|
|
|
|
public override IntPtr ClassHandle => class_ptr;
|
|
|
|
public virtual ulong Length
|
|
{
|
|
[Export("length")]
|
|
get
|
|
{
|
|
if (IsDirectBinding)
|
|
{
|
|
return Messaging.UInt64_objc_msgSend(base.Handle, selLengthHandle);
|
|
}
|
|
return Messaging.UInt64_objc_msgSendSuper(base.SuperHandle, selLengthHandle);
|
|
}
|
|
}
|
|
|
|
[Advice("Use NSIndexPath.Create (int[]) instead")]
|
|
public NSIndexPath FromIndexes(uint[] indexes)
|
|
{
|
|
if (indexes == null)
|
|
{
|
|
throw new ArgumentNullException("indexes");
|
|
}
|
|
IntPtr intPtr = Marshal.AllocHGlobal(4 * indexes.Length);
|
|
for (int i = 0; i < indexes.Length; i++)
|
|
{
|
|
Marshal.WriteInt32(intPtr, i * 4, (int)indexes[i]);
|
|
}
|
|
NSIndexPath result = _FromIndex(intPtr, (ulong)indexes.Length);
|
|
Marshal.FreeHGlobal(intPtr);
|
|
return result;
|
|
}
|
|
|
|
public static NSIndexPath Create(params int[] indexes)
|
|
{
|
|
if (indexes == null)
|
|
{
|
|
throw new ArgumentNullException("indexes");
|
|
}
|
|
IntPtr intPtr = Marshal.AllocHGlobal(4 * indexes.Length);
|
|
for (int i = 0; i < indexes.Length; i++)
|
|
{
|
|
Marshal.WriteInt32(intPtr, i * 4, indexes[i]);
|
|
}
|
|
NSIndexPath result = _FromIndex(intPtr, (ulong)indexes.Length);
|
|
Marshal.FreeHGlobal(intPtr);
|
|
return result;
|
|
}
|
|
|
|
public static NSIndexPath Create(params uint[] indexes)
|
|
{
|
|
if (indexes == null)
|
|
{
|
|
throw new ArgumentNullException("indexes");
|
|
}
|
|
IntPtr intPtr = Marshal.AllocHGlobal(4 * indexes.Length);
|
|
for (int i = 0; i < indexes.Length; i++)
|
|
{
|
|
Marshal.WriteInt32(intPtr, i * 4, (int)indexes[i]);
|
|
}
|
|
NSIndexPath result = _FromIndex(intPtr, (ulong)indexes.Length);
|
|
Marshal.FreeHGlobal(intPtr);
|
|
return result;
|
|
}
|
|
|
|
public uint[] GetIndexes()
|
|
{
|
|
int num = (int)Length;
|
|
IntPtr intPtr = Marshal.AllocHGlobal(4 * num);
|
|
uint[] array = new uint[num];
|
|
for (int i = 0; i < num; i++)
|
|
{
|
|
array[i] = (uint)Marshal.ReadInt32(intPtr, i * 4);
|
|
}
|
|
Marshal.FreeHGlobal(intPtr);
|
|
return array;
|
|
}
|
|
|
|
public override bool Equals(object obj)
|
|
{
|
|
if (obj == null)
|
|
{
|
|
return false;
|
|
}
|
|
NSIndexPath nSIndexPath = obj as NSIndexPath;
|
|
if (nSIndexPath == null)
|
|
{
|
|
return false;
|
|
}
|
|
return Compare(nSIndexPath) == 0;
|
|
}
|
|
|
|
public override int GetHashCode()
|
|
{
|
|
return (int)Length;
|
|
}
|
|
|
|
[EditorBrowsable(EditorBrowsableState.Advanced)]
|
|
[Export("init")]
|
|
public NSIndexPath()
|
|
: 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 NSIndexPath(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 NSIndexPath(NSObjectFlag t)
|
|
: base(t)
|
|
{
|
|
}
|
|
|
|
[EditorBrowsable(EditorBrowsableState.Advanced)]
|
|
public NSIndexPath(IntPtr handle)
|
|
: base(handle)
|
|
{
|
|
}
|
|
|
|
[Export("indexPathWithIndex:")]
|
|
public static NSIndexPath FromIndex(ulong index)
|
|
{
|
|
return (NSIndexPath)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_UInt64(class_ptr, selIndexPathWithIndex_Handle, index));
|
|
}
|
|
|
|
[Export("indexPathWithIndexes:length:")]
|
|
internal static NSIndexPath _FromIndex(IntPtr indexes, ulong len)
|
|
{
|
|
return (NSIndexPath)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr_UInt64(class_ptr, selIndexPathWithIndexesLength_Handle, indexes, len));
|
|
}
|
|
|
|
[Export("indexPathByAddingIndex:")]
|
|
public virtual NSIndexPath IndexPathByAddingIndex(ulong index)
|
|
{
|
|
if (IsDirectBinding)
|
|
{
|
|
return (NSIndexPath)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_UInt64(base.Handle, selIndexPathByAddingIndex_Handle, index));
|
|
}
|
|
return (NSIndexPath)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_UInt64(base.SuperHandle, selIndexPathByAddingIndex_Handle, index));
|
|
}
|
|
|
|
[Export("indexPathByRemovingLastIndex")]
|
|
public virtual NSIndexPath IndexPathByRemovingLastIndex()
|
|
{
|
|
if (IsDirectBinding)
|
|
{
|
|
return (NSIndexPath)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selIndexPathByRemovingLastIndexHandle));
|
|
}
|
|
return (NSIndexPath)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selIndexPathByRemovingLastIndexHandle));
|
|
}
|
|
|
|
[Export("indexAtPosition:")]
|
|
public virtual ulong IndexAtPosition(ulong position)
|
|
{
|
|
if (IsDirectBinding)
|
|
{
|
|
return Messaging.UInt64_objc_msgSend_UInt64(base.Handle, selIndexAtPosition_Handle, position);
|
|
}
|
|
return Messaging.UInt64_objc_msgSendSuper_UInt64(base.SuperHandle, selIndexAtPosition_Handle, position);
|
|
}
|
|
|
|
[Export("getIndexes:")]
|
|
internal virtual void _GetIndexes(IntPtr target)
|
|
{
|
|
if (IsDirectBinding)
|
|
{
|
|
Messaging.void_objc_msgSend_IntPtr(base.Handle, selGetIndexes_Handle, target);
|
|
}
|
|
else
|
|
{
|
|
Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selGetIndexes_Handle, target);
|
|
}
|
|
}
|
|
|
|
[Export("compare:")]
|
|
public virtual long Compare(NSIndexPath other)
|
|
{
|
|
if (other == null)
|
|
{
|
|
throw new ArgumentNullException("other");
|
|
}
|
|
if (IsDirectBinding)
|
|
{
|
|
return Messaging.Int64_objc_msgSend_IntPtr(base.Handle, selCompare_Handle, other.Handle);
|
|
}
|
|
return Messaging.Int64_objc_msgSendSuper_IntPtr(base.SuperHandle, selCompare_Handle, other.Handle);
|
|
}
|
|
}
|
|
}
|