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

327 lines
12 KiB
C#

using CPF.Mac.Foundation;
using CPF.Mac.ObjCRuntime;
using System;
using System.ComponentModel;
namespace CPF.Mac.AppKit
{
[Register("NSOpenPanel", true)]
public class NSOpenPanel : NSSavePanel
{
private static readonly IntPtr selOpenPanelHandle = Selector.GetHandle("openPanel");
private static readonly IntPtr selURLsHandle = Selector.GetHandle("URLs");
private static readonly IntPtr selResolvesAliasesHandle = Selector.GetHandle("resolvesAliases");
private static readonly IntPtr selSetResolvesAliases_Handle = Selector.GetHandle("setResolvesAliases:");
private static readonly IntPtr selCanChooseDirectoriesHandle = Selector.GetHandle("canChooseDirectories");
private static readonly IntPtr selSetCanChooseDirectories_Handle = Selector.GetHandle("setCanChooseDirectories:");
private static readonly IntPtr selAllowsMultipleSelectionHandle = Selector.GetHandle("allowsMultipleSelection");
private static readonly IntPtr selSetAllowsMultipleSelection_Handle = Selector.GetHandle("setAllowsMultipleSelection:");
private static readonly IntPtr selCanChooseFilesHandle = Selector.GetHandle("canChooseFiles");
private static readonly IntPtr selSetCanChooseFiles_Handle = Selector.GetHandle("setCanChooseFiles:");
private static readonly IntPtr selFilenamesHandle = Selector.GetHandle("filenames");
private static readonly IntPtr selBeginSheetForDirectoryFileTypesModalForWindowModalDelegateDidEndSelectorContextInfo_Handle = Selector.GetHandle("beginSheetForDirectory:file:types:modalForWindow:modalDelegate:didEndSelector:contextInfo:");
private static readonly IntPtr selBeginForDirectoryFileTypesModelessDelegateDidEndSelectorContextInfo_Handle = Selector.GetHandle("beginForDirectory:file:types:modelessDelegate:didEndSelector:contextInfo:");
private static readonly IntPtr selRunModalForDirectoryFileTypes_Handle = Selector.GetHandle("runModalForDirectory:file:types:");
private static readonly IntPtr selRunModalForTypes_Handle = Selector.GetHandle("runModalForTypes:");
private static readonly IntPtr class_ptr = Class.GetHandle("NSOpenPanel");
private static object __mt_OpenPanel_var_static;
private object __mt_Urls_var;
public override IntPtr ClassHandle => class_ptr;
public static NSOpenPanel OpenPanel
{
[Export("openPanel")]
get
{
NSApplication.EnsureUIThread();
return (NSOpenPanel)(__mt_OpenPanel_var_static = (NSOpenPanel)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(class_ptr, selOpenPanelHandle)));
}
}
public virtual NSUrl[] Urls
{
[Export("URLs")]
get
{
NSApplication.EnsureUIThread();
return (NSUrl[])(__mt_Urls_var = ((!IsDirectBinding) ? NSArray.ArrayFromHandle<NSUrl>(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selURLsHandle)) : NSArray.ArrayFromHandle<NSUrl>(Messaging.IntPtr_objc_msgSend(base.Handle, selURLsHandle))));
}
}
public virtual bool ResolvesAliases
{
[Export("resolvesAliases")]
get
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
return Messaging.bool_objc_msgSend(base.Handle, selResolvesAliasesHandle);
}
return Messaging.bool_objc_msgSendSuper(base.SuperHandle, selResolvesAliasesHandle);
}
[Export("setResolvesAliases:")]
set
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_bool(base.Handle, selSetResolvesAliases_Handle, value);
}
else
{
Messaging.void_objc_msgSendSuper_bool(base.SuperHandle, selSetResolvesAliases_Handle, value);
}
}
}
public virtual bool CanChooseDirectories
{
[Export("canChooseDirectories")]
get
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
return Messaging.bool_objc_msgSend(base.Handle, selCanChooseDirectoriesHandle);
}
return Messaging.bool_objc_msgSendSuper(base.SuperHandle, selCanChooseDirectoriesHandle);
}
[Export("setCanChooseDirectories:")]
set
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_bool(base.Handle, selSetCanChooseDirectories_Handle, value);
}
else
{
Messaging.void_objc_msgSendSuper_bool(base.SuperHandle, selSetCanChooseDirectories_Handle, value);
}
}
}
public virtual bool AllowsMultipleSelection
{
[Export("allowsMultipleSelection")]
get
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
return Messaging.bool_objc_msgSend(base.Handle, selAllowsMultipleSelectionHandle);
}
return Messaging.bool_objc_msgSendSuper(base.SuperHandle, selAllowsMultipleSelectionHandle);
}
[Export("setAllowsMultipleSelection:")]
set
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_bool(base.Handle, selSetAllowsMultipleSelection_Handle, value);
}
else
{
Messaging.void_objc_msgSendSuper_bool(base.SuperHandle, selSetAllowsMultipleSelection_Handle, value);
}
}
}
public virtual bool CanChooseFiles
{
[Export("canChooseFiles")]
get
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
return Messaging.bool_objc_msgSend(base.Handle, selCanChooseFilesHandle);
}
return Messaging.bool_objc_msgSendSuper(base.SuperHandle, selCanChooseFilesHandle);
}
[Export("setCanChooseFiles:")]
set
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_bool(base.Handle, selSetCanChooseFiles_Handle, value);
}
else
{
Messaging.void_objc_msgSendSuper_bool(base.SuperHandle, selSetCanChooseFiles_Handle, value);
}
}
}
[Obsolete("On 10.6 and newer, use Uris", false)]
public virtual string[] Filenames
{
[Export("filenames")]
get
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
return NSArray.StringArrayFromHandle(Messaging.IntPtr_objc_msgSend(base.Handle, selFilenamesHandle));
}
return NSArray.StringArrayFromHandle(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selFilenamesHandle));
}
}
public void BeginSheet(string directory, string fileName, string[] fileTypes, NSWindow modalForWindow)
{
BeginSheet(directory, fileName, fileTypes, modalForWindow, null, null, IntPtr.Zero);
}
public void BeginSheet(string directory, string fileName, string[] fileTypes, NSWindow modalForWindow, NSAction onEnded)
{
NSObject modalDelegate = OneShotTracker.Create(onEnded);
BeginSheet(directory, fileName, fileTypes, modalForWindow, modalDelegate, NSActionDispatcher.Selector, IntPtr.Zero);
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
[Export("init")]
public NSOpenPanel()
: 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 NSOpenPanel(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 NSOpenPanel(NSObjectFlag t)
: base(t)
{
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
public NSOpenPanel(IntPtr handle)
: base(handle)
{
}
[Export("beginSheetForDirectory:file:types:modalForWindow:modalDelegate:didEndSelector:contextInfo:")]
[Obsolete("On 10.6 and newer use runModalForWindow:", false)]
public virtual void BeginSheet(string directory, string fileName, string[] fileTypes, NSWindow modalForWindow, NSObject modalDelegate, Selector didEndSelector, IntPtr contextInfo)
{
NSApplication.EnsureUIThread();
IntPtr intPtr = NSString.CreateNative(directory);
IntPtr intPtr2 = NSString.CreateNative(fileName);
NSArray nSArray = (fileTypes == null) ? null : NSArray.FromStrings(fileTypes);
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_IntPtr_IntPtr_IntPtr_IntPtr_IntPtr_IntPtr_IntPtr(base.Handle, selBeginSheetForDirectoryFileTypesModalForWindowModalDelegateDidEndSelectorContextInfo_Handle, intPtr, intPtr2, nSArray?.Handle ?? IntPtr.Zero, modalForWindow?.Handle ?? IntPtr.Zero, modalDelegate?.Handle ?? IntPtr.Zero, (didEndSelector == null) ? IntPtr.Zero : didEndSelector.Handle, contextInfo);
}
else
{
Messaging.void_objc_msgSendSuper_IntPtr_IntPtr_IntPtr_IntPtr_IntPtr_IntPtr_IntPtr(base.SuperHandle, selBeginSheetForDirectoryFileTypesModalForWindowModalDelegateDidEndSelectorContextInfo_Handle, intPtr, intPtr2, nSArray?.Handle ?? IntPtr.Zero, modalForWindow?.Handle ?? IntPtr.Zero, modalDelegate?.Handle ?? IntPtr.Zero, (didEndSelector == null) ? IntPtr.Zero : didEndSelector.Handle, contextInfo);
}
NSString.ReleaseNative(intPtr);
NSString.ReleaseNative(intPtr2);
nSArray?.Dispose();
}
[Export("beginForDirectory:file:types:modelessDelegate:didEndSelector:contextInfo:")]
[Obsolete("On 10.6 and newer use runWithCompletionHandler:", false)]
public virtual void Begin(string directory, string fileName, string[] fileTypes, NSObject modelessDelegate, Selector didEndSelector, IntPtr contextInfo)
{
NSApplication.EnsureUIThread();
IntPtr intPtr = NSString.CreateNative(directory);
IntPtr intPtr2 = NSString.CreateNative(fileName);
NSArray nSArray = (fileTypes == null) ? null : NSArray.FromStrings(fileTypes);
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_IntPtr_IntPtr_IntPtr_IntPtr_IntPtr_IntPtr(base.Handle, selBeginForDirectoryFileTypesModelessDelegateDidEndSelectorContextInfo_Handle, intPtr, intPtr2, nSArray?.Handle ?? IntPtr.Zero, modelessDelegate?.Handle ?? IntPtr.Zero, (didEndSelector == null) ? IntPtr.Zero : didEndSelector.Handle, contextInfo);
}
else
{
Messaging.void_objc_msgSendSuper_IntPtr_IntPtr_IntPtr_IntPtr_IntPtr_IntPtr(base.SuperHandle, selBeginForDirectoryFileTypesModelessDelegateDidEndSelectorContextInfo_Handle, intPtr, intPtr2, nSArray?.Handle ?? IntPtr.Zero, modelessDelegate?.Handle ?? IntPtr.Zero, (didEndSelector == null) ? IntPtr.Zero : didEndSelector.Handle, contextInfo);
}
NSString.ReleaseNative(intPtr);
NSString.ReleaseNative(intPtr2);
nSArray?.Dispose();
}
[Export("runModalForDirectory:file:types:")]
[Obsolete("On 10.6 and newer use runModal:", false)]
public virtual long RunModal(string directory, string fileName, string[] types)
{
NSApplication.EnsureUIThread();
IntPtr intPtr = NSString.CreateNative(directory);
IntPtr intPtr2 = NSString.CreateNative(fileName);
NSArray nSArray = (types == null) ? null : NSArray.FromStrings(types);
long result = (!IsDirectBinding) ? Messaging.Int64_objc_msgSendSuper_IntPtr_IntPtr_IntPtr(base.SuperHandle, selRunModalForDirectoryFileTypes_Handle, intPtr, intPtr2, nSArray?.Handle ?? IntPtr.Zero) : Messaging.Int64_objc_msgSend_IntPtr_IntPtr_IntPtr(base.Handle, selRunModalForDirectoryFileTypes_Handle, intPtr, intPtr2, nSArray?.Handle ?? IntPtr.Zero);
NSString.ReleaseNative(intPtr);
NSString.ReleaseNative(intPtr2);
nSArray?.Dispose();
return result;
}
[Export("runModalForTypes:")]
[Obsolete("On 10.6 and newer use runModal:", false)]
public virtual long RunModal(string[] types)
{
NSApplication.EnsureUIThread();
if (types == null)
{
throw new ArgumentNullException("types");
}
NSArray nSArray = NSArray.FromStrings(types);
long result = (!IsDirectBinding) ? Messaging.Int64_objc_msgSendSuper_IntPtr(base.SuperHandle, selRunModalForTypes_Handle, nSArray.Handle) : Messaging.Int64_objc_msgSend_IntPtr(base.Handle, selRunModalForTypes_Handle, nSArray.Handle);
nSArray.Dispose();
return result;
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (base.Handle == IntPtr.Zero)
{
__mt_Urls_var = null;
}
}
}
}