diff options
Diffstat (limited to 'core/sys/darwin/Foundation/NSApplication.odin')
| -rw-r--r-- | core/sys/darwin/Foundation/NSApplication.odin | 609 |
1 files changed, 609 insertions, 0 deletions
diff --git a/core/sys/darwin/Foundation/NSApplication.odin b/core/sys/darwin/Foundation/NSApplication.odin new file mode 100644 index 000000000..d332345f9 --- /dev/null +++ b/core/sys/darwin/Foundation/NSApplication.odin @@ -0,0 +1,609 @@ +package objc_Foundation + +foreign import "system:Foundation.framework" + +import "base:intrinsics" +import "base:runtime" +import "core:strings" + +RunLoopMode :: ^String + +@(link_prefix="NS") +foreign Foundation { + RunLoopCommonModes: RunLoopMode + DefaultRunLoopMode: RunLoopMode + EventTrackingRunLoopMode: RunLoopMode + ModalPanelRunLoopMode: RunLoopMode +} + +ActivationPolicy :: enum UInteger { + Regular = 0, + Accessory = 1, + Prohibited = 2, +} + +ApplicationTerminateReply :: enum UInteger { + TerminateCancel = 0, + TerminateNow = 1, + TerminateLater = 2, +} + +ApplicationPrintReply :: enum UInteger { + PrintingCancelled = 0, + PrintingSuccess = 1, + PrintingReplyLater = 2, + PrintingFailure = 3, +} + +ApplicationPresentationOptionFlag :: enum UInteger { + AutoHideDock = 0, + HideDock = 1, + AutoHideMenuBar = 2, + HideMenuBar = 3, + DisableAppleMenu = 4, + DisableProcessSwitching = 5, + DisableForceQuit = 6, + DisableSessionTermination = 7, + DisableHideApplication = 8, + DisableMenuBarTransparency = 9, + FullScreen = 10, + AutoHideToolbar = 11, + DisableCursorLocationAssistance = 12, +} +ApplicationPresentationOptions :: distinct bit_set[ApplicationPresentationOptionFlag; UInteger] +ApplicationPresentationOptionsDefault :: ApplicationPresentationOptions {} +ApplicationPresentationOptionsAutoHideDock :: ApplicationPresentationOptions {.AutoHideDock} +ApplicationPresentationOptionsHideDock :: ApplicationPresentationOptions {.HideDock} +ApplicationPresentationOptionsAutoHideMenuBar :: ApplicationPresentationOptions {.AutoHideMenuBar} +ApplicationPresentationOptionsHideMenuBar :: ApplicationPresentationOptions {.HideMenuBar} +ApplicationPresentationOptionsDisableAppleMenu :: ApplicationPresentationOptions {.DisableAppleMenu} +ApplicationPresentationOptionsDisableProcessSwitching :: ApplicationPresentationOptions {.DisableProcessSwitching} +ApplicationPresentationOptionsDisableForceQuit :: ApplicationPresentationOptions {.DisableForceQuit} +ApplicationPresentationOptionsDisableSessionTermination :: ApplicationPresentationOptions {.DisableSessionTermination} +ApplicationPresentationOptionsDisableHideApplication :: ApplicationPresentationOptions {.DisableHideApplication} +ApplicationPresentationOptionsDisableMenuBarTransparency :: ApplicationPresentationOptions {.DisableMenuBarTransparency} +ApplicationPresentationOptionsFullScreen :: ApplicationPresentationOptions {.FullScreen} +ApplicationPresentationOptionsAutoHideToolbar :: ApplicationPresentationOptions {.AutoHideToolbar} +ApplicationPresentationOptionsDisableCursorLocationAssistance :: ApplicationPresentationOptions {.DisableCursorLocationAssistance} + +@(objc_class="NSApplication") +Application :: struct {using _: Object} + +@(objc_type=Application, objc_name="sharedApplication", objc_is_class_method=true) +Application_sharedApplication :: proc "c" () -> ^Application { + return msgSend(^Application, Application, "sharedApplication") +} + +@(objc_type=Application, objc_name="setActivationPolicy") +Application_setActivationPolicy :: proc "c" (self: ^Application, activationPolicy: ActivationPolicy) -> BOOL { + return msgSend(BOOL, self, "setActivationPolicy:", activationPolicy) +} + +@(deprecated="Use NSApplication method activate instead.") +@(objc_type=Application, objc_name="activateIgnoringOtherApps") +Application_activateIgnoringOtherApps :: proc "c" (self: ^Application, ignoreOtherApps: BOOL) { + msgSend(nil, self, "activateIgnoringOtherApps:", ignoreOtherApps) +} + +@(objc_type=Application, objc_name="activate") +Application_activate :: proc "c" (self: ^Application) { + msgSend(nil, self, "activate") +} + +@(objc_type=Application, objc_name="setTitle") +Application_setTitle :: proc "c" (self: ^Application, title: ^String) { + msgSend(nil, self, "setTitle", title) +} + +@(objc_type=Application, objc_name="setMainMenu") +Application_setMainMenu :: proc "c" (self: ^Application, menu: ^Menu) { + msgSend(nil, self, "setMainMenu:", menu) +} + +@(objc_type=Application, objc_name="windows") +Application_windows :: proc "c" (self: ^Application) -> ^Array { + return msgSend(^Array, self, "windows") +} + +@(objc_type=Application, objc_name="run") +Application_run :: proc "c" (self: ^Application) { + msgSend(nil, self, "run") +} + +@(objc_type=Application, objc_name="terminate") +Application_terminate :: proc "c" (self: ^Application, sender: ^Object) { + msgSend(nil, self, "terminate:", sender) +} + +@(objc_type=Application, objc_name="isRunning") +Application_isRunning :: proc "c" (self: ^Application) -> BOOL { + return msgSend(BOOL, self, "isRunning") +} + +@(objc_type=Application, objc_name="currentEvent") +Application_currentEvent :: proc "c" (self: ^Application) -> ^Event { + return msgSend(^Event, self, "currentEvent") +} + +@(objc_type=Application, objc_name="nextEventMatchingMask") +Application_nextEventMatchingMask :: proc "c" (self: ^Application, mask: EventMask, expiration: ^Date, in_mode: RunLoopMode, dequeue: BOOL) -> ^Event { + return msgSend(^Event, self, "nextEventMatchingMask:untilDate:inMode:dequeue:", mask, expiration, in_mode, dequeue) +} + +@(objc_type=Application, objc_name="sendEvent") +Application_sendEvent :: proc "c" (self: ^Application, event: ^Event) { + msgSend(Event, self, "sendEvent:", event) +} +@(objc_type=Application, objc_name="updateWindows") +Application_updateWindows :: proc "c" (self: ^Application) { + msgSend(nil, self, "updateWindows") +} + + +@(objc_class="NSRunningApplication") +RunningApplication :: struct {using _: Object} + +@(objc_type=RunningApplication, objc_name="currentApplication", objc_is_class_method=true) +RunningApplication_currentApplication :: proc "c" () -> ^RunningApplication { + return msgSend(^RunningApplication, RunningApplication, "currentApplication") +} + +@(objc_type=RunningApplication, objc_name="localizedName") +RunningApplication_localizedName :: proc "c" (self: ^RunningApplication) -> ^String { + return msgSend(^String, self, "localizedName") +} + +ApplicationDelegateTemplate :: struct { + // Launching Applications + applicationWillFinishLaunching: proc(notification: ^Notification), + applicationDidFinishLaunching: proc(notification: ^Notification), + // Managing Active Status + applicationWillBecomeActive: proc(notification: ^Notification), + applicationDidBecomeActive: proc(notification: ^Notification), + applicationWillResignActive: proc(notification: ^Notification), + applicationDidResignActive: proc(notification: ^Notification), + // Terminating Applications + applicationShouldTerminate: proc(sender: ^Application) -> ApplicationTerminateReply, + applicationShouldTerminateAfterLastWindowClosed: proc(sender: ^Application) -> BOOL, + applicationWillTerminate: proc(notification: ^Notification), + // Hiding Applications + applicationWillHide: proc(notification: ^Notification), + applicationDidHide: proc(notification: ^Notification), + applicationWillUnhide: proc(notification: ^Notification), + applicationDidUnhide: proc(notification: ^Notification), + // Managing Windows + applicationWillUpdate: proc(notification: ^Notification), + applicationDidUpdate: proc(notification: ^Notification), + applicationShouldHandleReopenHasVisibleWindows: proc(sender: ^Application, flag: BOOL) -> BOOL, + // Managing the Dock Menu + applicationDockMenu: proc(sender: ^Application) -> ^Menu, + // Localizing Keyboard Shortcuts + applicationShouldAutomaticallyLocalizeKeyEquivalents: proc(application: ^Application) -> BOOL, + // Displaying Errors + applicationWillPresentError: proc(application: ^Application, error: ^Error) -> ^Error, + // Managing the Screen + applicationDidChangeScreenParameters: proc(notification: ^Notification), + // Continuing User Activities + applicationWillContinueUserActivityWithType: proc(application: ^Application, userActivityType: ^String) -> BOOL, + applicationContinueUserActivityRestorationHandler: proc(application: ^Application, userActivity: ^UserActivity, restorationHandler: ^Block) -> BOOL, + applicationDidFailToContinueUserActivityWithTypeError: proc(application: ^Application, userActivityType: ^String, error: ^Error), + applicationDidUpdateUserActivity: proc(application: ^Application, userActivity: ^UserActivity), + // Handling Push Notifications + applicationDidRegisterForRemoteNotificationsWithDeviceToken: proc(application: ^Application, deviceToken: ^Data), + applicationDidFailToRegisterForRemoteNotificationsWithError: proc(application: ^Application, error: ^Error), + applicationDidReceiveRemoteNotification: proc(application: ^Application, userInfo: ^Dictionary), + // Handling CloudKit Invitations + // TODO: if/when we have cloud kit bindings implement + // applicationUserDidAcceptCloudKitShareWithMetadata: proc(application: ^Application, metadata: ^CKShareMetadata), + // Handling SiriKit Intents + // TODO: if/when we have siri kit bindings implement + // applicationHandlerForIntent: proc(application: ^Application, intent: ^INIntent) -> id, + // Opening Files + applicationOpenURLs: proc(application: ^Application, urls: ^Array), + applicationOpenFile: proc(sender: ^Application, filename: ^String) -> BOOL, + applicationOpenFileWithoutUI: proc(sender: id, filename: ^String) -> BOOL, + applicationOpenTempFile: proc(sender: ^Application, filename: ^String) -> BOOL, + applicationOpenFiles: proc(sender: ^Application, filenames: ^Array), + applicationShouldOpenUntitledFile: proc(sender: ^Application) -> BOOL, + applicationOpenUntitledFile: proc(sender: ^Application) -> BOOL, + // Printing + applicationPrintFile: proc(sender: ^Application, filename: ^String) -> BOOL, + applicationPrintFilesWithSettingsShowPrintPanels: proc(application: ^Application, fileNames: ^Array, printSettings: ^Dictionary, showPrintPanels: BOOL) -> ApplicationPrintReply, + // Restoring Application State + applicationSupportsSecureRestorableState: proc(app: ^Application) -> BOOL, + applicationProtectedDataDidBecomeAvailable: proc(notification: ^Notification), + applicationProtectedDataWillBecomeUnavailable: proc(notification: ^Notification), + applicationWillEncodeRestorableState: proc(app: ^Application, coder: ^Coder), + applicationDidDecodeRestorableState: proc(app: ^Application, coder: ^Coder), + // Handling Changes to the Occlusion State + applicationDidChangeOcclusionState: proc(notification: ^Notification), + // Scripting Your App + applicationDelegateHandlesKey: proc(sender: ^Application, key: ^String) -> BOOL, +} + +ApplicationDelegate :: struct { using _: Object } +_ApplicationDelegateInternal :: struct { + using _: ApplicationDelegateTemplate, + _context: runtime.Context, +} + +application_delegate_register_and_alloc :: proc(template: ApplicationDelegateTemplate, class_name: string, delegate_context: Maybe(runtime.Context)) -> ^ApplicationDelegate { + class := objc_allocateClassPair(intrinsics.objc_find_class("NSObject"), strings.clone_to_cstring(class_name, context.temp_allocator), 0); if class == nil { + // Class already registered + return nil + } + if template.applicationWillFinishLaunching != nil { + applicationWillFinishLaunching :: proc "c" (self: id, notification: ^Notification) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationWillFinishLaunching(notification) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationWillFinishLaunching:"), auto_cast applicationWillFinishLaunching, "v@:@") + } + if template.applicationDidFinishLaunching != nil { + applicationDidFinishLaunching :: proc "c" (self: id, notification: ^Notification) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationDidFinishLaunching(notification) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationDidFinishLaunching:"), auto_cast applicationDidFinishLaunching, "v@:@") + } + if template.applicationWillBecomeActive != nil { + applicationWillBecomeActive :: proc "c" (self: id, notification: ^Notification) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationWillBecomeActive(notification) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationWillBecomeActive:"), auto_cast applicationWillBecomeActive, "v@:@") + } + if template.applicationDidBecomeActive != nil { + applicationDidBecomeActive :: proc "c" (self: id, notification: ^Notification) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationDidBecomeActive(notification) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationDidBecomeActive:"), auto_cast applicationDidBecomeActive, "v@:@") + } + if template.applicationWillResignActive != nil { + applicationWillResignActive :: proc "c" (self: id, notification: ^Notification) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationWillResignActive(notification) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationWillResignActive:"), auto_cast applicationWillResignActive, "v@:@") + } + if template.applicationDidResignActive != nil { + applicationDidResignActive :: proc "c" (self: id, notification: ^Notification) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationDidResignActive(notification) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationDidResignActive:"), auto_cast applicationDidResignActive, "v@:@") + } + if template.applicationShouldTerminate != nil { + applicationShouldTerminate :: proc "c" (self: id, sender: ^Application) -> ApplicationTerminateReply { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + return del.applicationShouldTerminate(sender) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationShouldTerminate:"), auto_cast applicationShouldTerminate, _UINTEGER_ENCODING+"@:@") + } + if template.applicationShouldTerminateAfterLastWindowClosed != nil { + applicationShouldTerminateAfterLastWindowClosed :: proc "c" (self: id, sender: ^Application) -> BOOL { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + return del.applicationShouldTerminateAfterLastWindowClosed(sender) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationShouldTerminateAfterLastWindowClosed:"), auto_cast applicationShouldTerminateAfterLastWindowClosed, "B@:@") + } + if template.applicationWillTerminate != nil { + applicationWillTerminate :: proc "c" (self: id, notification: ^Notification) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationWillTerminate(notification) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationWillTerminate:"), auto_cast applicationWillTerminate, "v@:@") + } + if template.applicationWillHide != nil { + applicationWillHide :: proc "c" (self: id, notification: ^Notification) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationWillHide(notification) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationWillHide:"), auto_cast applicationWillHide, "v@:@") + } + if template.applicationDidHide != nil { + applicationDidHide :: proc "c" (self: id, notification: ^Notification) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationDidHide(notification) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationDidHide:"), auto_cast applicationDidHide, "v@:@") + } + if template.applicationWillUnhide != nil { + applicationWillUnhide :: proc "c" (self: id, notification: ^Notification) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationWillUnhide(notification) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationWillUnhide:"), auto_cast applicationWillUnhide, "v@:@") + } + if template.applicationDidUnhide != nil { + applicationDidUnhide :: proc "c" (self: id, notification: ^Notification) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationDidUnhide(notification) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationDidUnhide:"), auto_cast applicationDidUnhide, "v@:@") + } + if template.applicationWillUpdate != nil { + applicationWillUpdate :: proc "c" (self: id, notification: ^Notification) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationWillUpdate(notification) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationWillUpdate:"), auto_cast applicationWillUpdate, "v@:@") + } + if template.applicationDidUpdate != nil { + applicationDidUpdate :: proc "c" (self: id, notification: ^Notification) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationDidUpdate(notification) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationDidUpdate:"), auto_cast applicationDidUpdate, "v@:@") + } + if template.applicationShouldHandleReopenHasVisibleWindows != nil { + applicationShouldHandleReopenHasVisibleWindows :: proc "c" (self: id, sender: ^Application, flag: BOOL) -> BOOL { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + return del.applicationShouldHandleReopenHasVisibleWindows(sender, flag) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationShouldHandleReopen:hasVisibleWindows:"), auto_cast applicationShouldHandleReopenHasVisibleWindows, "B@:@B") + } + if template.applicationDockMenu != nil { + applicationDockMenu :: proc "c" (self: id, sender: ^Application) -> ^Menu { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + return del.applicationDockMenu(sender) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationDockMenu:"), auto_cast applicationDockMenu, "@@:@") + } + if template.applicationShouldAutomaticallyLocalizeKeyEquivalents != nil { + applicationShouldAutomaticallyLocalizeKeyEquivalents :: proc "c" (self: id, application: ^Application) -> BOOL { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + return del.applicationShouldAutomaticallyLocalizeKeyEquivalents(application) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationShouldAutomaticallyLocalizeKeyEquivalents:"), auto_cast applicationShouldAutomaticallyLocalizeKeyEquivalents, "B@:@") + } + if template.applicationWillPresentError != nil { + applicationWillPresentError :: proc "c" (self: id, application: ^Application, error: ^Error) -> ^Error { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + return del.applicationWillPresentError(application, error) + } + class_addMethod(class, intrinsics.objc_find_selector("application:willPresentError:"), auto_cast applicationWillPresentError, "@@:@@") + } + if template.applicationDidChangeScreenParameters != nil { + applicationDidChangeScreenParameters :: proc "c" (self: id, notification: ^Notification) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationDidChangeScreenParameters(notification) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationDidChangeScreenParameters:"), auto_cast applicationDidChangeScreenParameters, "v@:@") + } + if template.applicationWillContinueUserActivityWithType != nil { + applicationWillContinueUserActivityWithType :: proc "c" (self: id, application: ^Application, userActivityType: ^String) -> BOOL { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + return del.applicationWillContinueUserActivityWithType(application, userActivityType) + } + class_addMethod(class, intrinsics.objc_find_selector("application:willContinueUserActivityWithType:"), auto_cast applicationWillContinueUserActivityWithType, "B@:@@") + } + if template.applicationContinueUserActivityRestorationHandler != nil { + applicationContinueUserActivityRestorationHandler :: proc "c" (self: id, application: ^Application, userActivity: ^UserActivity, restorationHandler: ^Block) -> BOOL { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + return del.applicationContinueUserActivityRestorationHandler(application, userActivity, restorationHandler) + } + class_addMethod(class, intrinsics.objc_find_selector("application:continueUserActivity:restorationHandler:"), auto_cast applicationContinueUserActivityRestorationHandler, "B@:@@?") + } + if template.applicationDidFailToContinueUserActivityWithTypeError != nil { + applicationDidFailToContinueUserActivityWithTypeError :: proc "c" (self: id, application: ^Application, userActivityType: ^String, error: ^Error) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationDidFailToContinueUserActivityWithTypeError(application, userActivityType, error) + } + class_addMethod(class, intrinsics.objc_find_selector("application:didFailToContinueUserActivityWithType:error:"), auto_cast applicationDidFailToContinueUserActivityWithTypeError, "v@:@@@") + } + if template.applicationDidUpdateUserActivity != nil { + applicationDidUpdateUserActivity :: proc "c" (self: id, application: ^Application, userActivity: ^UserActivity) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationDidUpdateUserActivity(application, userActivity) + } + class_addMethod(class, intrinsics.objc_find_selector("application:didUpdateUserActivity:"), auto_cast applicationDidUpdateUserActivity, "v@:@@") + } + if template.applicationDidRegisterForRemoteNotificationsWithDeviceToken != nil { + applicationDidRegisterForRemoteNotificationsWithDeviceToken :: proc "c" (self: id, application: ^Application, deviceToken: ^Data) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationDidRegisterForRemoteNotificationsWithDeviceToken(application, deviceToken) + } + class_addMethod(class, intrinsics.objc_find_selector("application:didRegisterForRemoteNotificationsWithDeviceToken:"), auto_cast applicationDidRegisterForRemoteNotificationsWithDeviceToken, "v@:@@") + } + if template.applicationDidFailToRegisterForRemoteNotificationsWithError != nil { + applicationDidFailToRegisterForRemoteNotificationsWithError :: proc "c" (self: id, application: ^Application, error: ^Error) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationDidFailToRegisterForRemoteNotificationsWithError(application, error) + } + class_addMethod(class, intrinsics.objc_find_selector("application:didFailToRegisterForRemoteNotificationsWithError:"), auto_cast applicationDidFailToRegisterForRemoteNotificationsWithError, "v@:@@") + } + if template.applicationDidReceiveRemoteNotification != nil { + applicationDidReceiveRemoteNotification :: proc "c" (self: id, application: ^Application, userInfo: ^Dictionary) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationDidReceiveRemoteNotification(application, userInfo) + } + class_addMethod(class, intrinsics.objc_find_selector("application:didReceiveRemoteNotification:"), auto_cast applicationDidReceiveRemoteNotification, "v@:@@") + } + // if template.applicationUserDidAcceptCloudKitShareWithMetadata != nil { + // applicationUserDidAcceptCloudKitShareWithMetadata :: proc "c" (self: id, application: ^Application, metadata: ^CKShareMetadata) { + // del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + // context = del._context + // del.applicationUserDidAcceptCloudKitShareWithMetadata(application, metadata) + // } + // class_addMethod(class, intrinsics.objc_find_selector("application:userDidAcceptCloudKitShareWithMetadata:"), auto_cast applicationUserDidAcceptCloudKitShareWithMetadata, "v@:@@") + // } + // if template.applicationHandlerForIntent != nil { + // applicationHandlerForIntent :: proc "c" (self: id, application: ^Application, intent: ^INIntent) -> id { + // del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + // context = del._context + // return del.applicationHandlerForIntent(application, intent) + // } + // class_addMethod(class, intrinsics.objc_find_selector("application:handlerForIntent:"), auto_cast applicationHandlerForIntent, "@@:@@") + // } + if template.applicationOpenURLs != nil { + applicationOpenURLs :: proc "c" (self: id, application: ^Application, urls: ^Array) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationOpenURLs(application, urls) + } + class_addMethod(class, intrinsics.objc_find_selector("application:openURLs:"), auto_cast applicationOpenURLs, "v@:@@") + } + if template.applicationOpenFile != nil { + applicationOpenFile :: proc "c" (self: id, sender: ^Application, filename: ^String) -> BOOL { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + return del.applicationOpenFile(sender, filename) + } + class_addMethod(class, intrinsics.objc_find_selector("application:openFile:"), auto_cast applicationOpenFile, "B@:@@") + } + if template.applicationOpenFileWithoutUI != nil { + applicationOpenFileWithoutUI :: proc "c" (self: id, sender: id, filename: ^String) -> BOOL { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + return del.applicationOpenFileWithoutUI(sender, filename) + } + class_addMethod(class, intrinsics.objc_find_selector("application:openFileWithoutUI:"), auto_cast applicationOpenFileWithoutUI, "B@:@@") + } + if template.applicationOpenTempFile != nil { + applicationOpenTempFile :: proc "c" (self: id, sender: ^Application, filename: ^String) -> BOOL { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + return del.applicationOpenTempFile(sender, filename) + } + class_addMethod(class, intrinsics.objc_find_selector("application:openTempFile:"), auto_cast applicationOpenTempFile, "B@:@@") + } + if template.applicationOpenFiles != nil { + applicationOpenFiles :: proc "c" (self: id, sender: ^Application, filenames: ^Array) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationOpenFiles(sender, filenames) + } + class_addMethod(class, intrinsics.objc_find_selector("application:openFiles:"), auto_cast applicationOpenFiles, "v@:@@") + } + if template.applicationShouldOpenUntitledFile != nil { + applicationShouldOpenUntitledFile :: proc "c" (self: id, sender: ^Application) -> BOOL { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + return del.applicationShouldOpenUntitledFile(sender) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationShouldOpenUntitledFile:"), auto_cast applicationShouldOpenUntitledFile, "B@:@") + } + if template.applicationOpenUntitledFile != nil { + applicationOpenUntitledFile :: proc "c" (self: id, sender: ^Application) -> BOOL { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + return del.applicationOpenUntitledFile(sender) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationOpenUntitledFile:"), auto_cast applicationOpenUntitledFile, "B@:@") + } + if template.applicationPrintFile != nil { + applicationPrintFile :: proc "c" (self: id, sender: ^Application, filename: ^String) -> BOOL { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + return del.applicationPrintFile(sender, filename) + } + class_addMethod(class, intrinsics.objc_find_selector("application:printFile:"), auto_cast applicationPrintFile, "B@:@@") + } + if template.applicationPrintFilesWithSettingsShowPrintPanels != nil { + applicationPrintFilesWithSettingsShowPrintPanels :: proc "c" (self: id, application: ^Application, fileNames: ^Array, printSettings: ^Dictionary, showPrintPanels: BOOL) -> ApplicationPrintReply { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + return del.applicationPrintFilesWithSettingsShowPrintPanels(application, fileNames, printSettings, showPrintPanels) + } + class_addMethod(class, intrinsics.objc_find_selector("application:printFiles:withSettings:showPrintPanels:"), auto_cast applicationPrintFilesWithSettingsShowPrintPanels, _UINTEGER_ENCODING+"@:@@@B") + } + if template.applicationSupportsSecureRestorableState != nil { + applicationSupportsSecureRestorableState :: proc "c" (self: id, app: ^Application) -> BOOL { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + return del.applicationSupportsSecureRestorableState(app) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationSupportsSecureRestorableState:"), auto_cast applicationSupportsSecureRestorableState, "B@:@") + } + if template.applicationProtectedDataDidBecomeAvailable != nil { + applicationProtectedDataDidBecomeAvailable :: proc "c" (self: id, notification: ^Notification) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationProtectedDataDidBecomeAvailable(notification) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationProtectedDataDidBecomeAvailable:"), auto_cast applicationProtectedDataDidBecomeAvailable, "v@:@") + } + if template.applicationProtectedDataWillBecomeUnavailable != nil { + applicationProtectedDataWillBecomeUnavailable :: proc "c" (self: id, notification: ^Notification) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationProtectedDataWillBecomeUnavailable(notification) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationProtectedDataWillBecomeUnavailable:"), auto_cast applicationProtectedDataWillBecomeUnavailable, "v@:@") + } + if template.applicationWillEncodeRestorableState != nil { + applicationWillEncodeRestorableState :: proc "c" (self: id, app: ^Application, coder: ^Coder) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationWillEncodeRestorableState(app, coder) + } + class_addMethod(class, intrinsics.objc_find_selector("application:willEncodeRestorableState:"), auto_cast applicationWillEncodeRestorableState, "v@:@@") + } + if template.applicationDidDecodeRestorableState != nil { + applicationDidDecodeRestorableState :: proc "c" (self: id, app: ^Application, coder: ^Coder) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationDidDecodeRestorableState(app, coder) + } + class_addMethod(class, intrinsics.objc_find_selector("application:didDecodeRestorableState:"), auto_cast applicationDidDecodeRestorableState, "v@:@@") + } + if template.applicationDidChangeOcclusionState != nil { + applicationDidChangeOcclusionState :: proc "c" (self: id, notification: ^Notification) { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + del.applicationDidChangeOcclusionState(notification) + } + class_addMethod(class, intrinsics.objc_find_selector("applicationDidChangeOcclusionState:"), auto_cast applicationDidChangeOcclusionState, "v@:@") + } + if template.applicationDelegateHandlesKey != nil { + applicationDelegateHandlesKey :: proc "c" (self: id, sender: ^Application, key: ^String) -> BOOL { + del := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(self) + context = del._context + return del.applicationDelegateHandlesKey(sender, key) + } + class_addMethod(class, intrinsics.objc_find_selector("application:delegateHandlesKey:"), auto_cast applicationDelegateHandlesKey, "B@:@@") + } + + objc_registerClassPair(class) + del := class_createInstance(class, size_of(_ApplicationDelegateInternal)) + del_internal := cast(^_ApplicationDelegateInternal)object_getIndexedIvars(del) + del_internal^ = { + template, + delegate_context.(runtime.Context) or_else runtime.default_context(), + } + return cast(^ApplicationDelegate)del +} + +@(objc_type=Application, objc_name="setDelegate") +Application_setDelegate :: proc "c" (self: ^Application, delegate: ^ApplicationDelegate) { + msgSend(nil, self, "setDelegate:", delegate) +} |