view dstep/appkit/NSApplication.d @ 16:19885b43130e

Huge update, the bridge actually works now
author Jacob Carlborg <doob@me.com>
date Sun, 03 Jan 2010 22:06:11 +0100
parents
children b9de51448c6b
line wrap: on
line source

/**
 * Copyright: Copyright (c) 2009 Jacob Carlborg.
 * Authors: Jacob Carlborg
 * Version: Initial created: Sep 24, 2009 
 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0)
 */
module dstep.appkit.NSApplication;

import dstep.appkit.AppKitDefines;
import dstep.appkit.NSColorPanel;
import dstep.appkit.NSDockTile;
import dstep.appkit.NSEvent;
import dstep.appkit.NSGraphicsContext;
import dstep.appkit.NSHelpManager;
import dstep.appkit.NSImage;
import dstep.appkit.NSMenu;
import dstep.appkit.NSPageLayout;
import dstep.appkit.NSPasteboard;
import dstep.appkit.NSResponder;
import dstep.appkit.NSUserInterfaceValidation;
import dstep.appkit.NSWindow;
import dstep.foundation.NSArray;
import dstep.foundation.NSDate;
import dstep.foundation.NSDictionary;
import dstep.foundation.NSError;
import dstep.foundation.NSException;
import dstep.foundation.NSNotification;
import dstep.foundation.NSObjCRuntime;
import dstep.foundation.NSString;
import dstep.internal.String;
import dstep.objc.bridge.Bridge;
import dstep.objc.objc;

import bindings = dstep.appkit.NSApplication_bindings;

struct _NSModalSession;
struct NSThreadPrivate;

alias _NSModalSession* NSModalSession;
alias NSThreadPrivate _NSThreadPrivate;
alias NSUInteger NSRequestUserAttentionType;
alias NSUInteger NSApplicationDelegateReply;
alias NSUInteger NSApplicationTerminateReply;
alias NSUInteger NSApplicationPrintReply;

extern (C)
{
	extern
	{
		const double NSAppKitVersionNumber;
	}
}

private
{
	NSString NSModalPanelRunLoopMode_;
	NSString NSEventTrackingRunLoopMode_;
	NSApplication NSApp_;
	NSString NSApplicationDidBecomeActiveNotification_;
	NSString NSApplicationDidHideNotification_;
	NSString NSApplicationDidFinishLaunchingNotification_;
	NSString NSApplicationDidResignActiveNotification_;
	NSString NSApplicationDidUnhideNotification_;
	NSString NSApplicationDidUpdateNotification_;
	NSString NSApplicationWillBecomeActiveNotification_;
	NSString NSApplicationWillHideNotification_;
	NSString NSApplicationWillFinishLaunchingNotification_;
	NSString NSApplicationWillResignActiveNotification_;
	NSString NSApplicationWillUnhideNotification_;
	NSString NSApplicationWillUpdateNotification_;
	NSString NSApplicationWillTerminateNotification_;
	NSString NSApplicationDidChangeScreenParametersNotification_;
}

NSString NSModalPanelRunLoopMode ()
{
	if (NSModalPanelRunLoopMode_)
		return NSModalPanelRunLoopMode_;

	return NSModalPanelRunLoopMode_ = new NSString(bindings.NSModalPanelRunLoopMode);
}

NSString NSEventTrackingRunLoopMode ()
{
	if (NSEventTrackingRunLoopMode_)
		return NSEventTrackingRunLoopMode_;

	return NSEventTrackingRunLoopMode_ = new NSString(bindings.NSEventTrackingRunLoopMode);
}

NSApplication NSApp ()
{
	if (NSApp_)
		return NSApp_;

	return NSApp_ = new NSApplication(bindings.NSApp);
}

NSString NSApplicationDidBecomeActiveNotification ()
{
	if (NSApplicationDidBecomeActiveNotification_)
		return NSApplicationDidBecomeActiveNotification_;

	return NSApplicationDidBecomeActiveNotification_ = new NSString(bindings.NSApplicationDidBecomeActiveNotification);
}

NSString NSApplicationDidHideNotification ()
{
	if (NSApplicationDidHideNotification_)
		return NSApplicationDidHideNotification_;

	return NSApplicationDidHideNotification_ = new NSString(bindings.NSApplicationDidHideNotification);
}

NSString NSApplicationDidFinishLaunchingNotification ()
{
	if (NSApplicationDidFinishLaunchingNotification_)
		return NSApplicationDidFinishLaunchingNotification_;

	return NSApplicationDidFinishLaunchingNotification_ = new NSString(bindings.NSApplicationDidFinishLaunchingNotification);
}

NSString NSApplicationDidResignActiveNotification ()
{
	if (NSApplicationDidResignActiveNotification_)
		return NSApplicationDidResignActiveNotification_;

	return NSApplicationDidResignActiveNotification_ = new NSString(bindings.NSApplicationDidResignActiveNotification);
}

NSString NSApplicationDidUnhideNotification ()
{
	if (NSApplicationDidUnhideNotification_)
		return NSApplicationDidUnhideNotification_;

	return NSApplicationDidUnhideNotification_ = new NSString(bindings.NSApplicationDidUnhideNotification);
}

NSString NSApplicationDidUpdateNotification ()
{
	if (NSApplicationDidUpdateNotification_)
		return NSApplicationDidUpdateNotification_;

	return NSApplicationDidUpdateNotification_ = new NSString(bindings.NSApplicationDidUpdateNotification);
}

NSString NSApplicationWillBecomeActiveNotification ()
{
	if (NSApplicationWillBecomeActiveNotification_)
		return NSApplicationWillBecomeActiveNotification_;

	return NSApplicationWillBecomeActiveNotification_ = new NSString(bindings.NSApplicationWillBecomeActiveNotification);
}

NSString NSApplicationWillHideNotification ()
{
	if (NSApplicationWillHideNotification_)
		return NSApplicationWillHideNotification_;

	return NSApplicationWillHideNotification_ = new NSString(bindings.NSApplicationWillHideNotification);
}

NSString NSApplicationWillFinishLaunchingNotification ()
{
	if (NSApplicationWillFinishLaunchingNotification_)
		return NSApplicationWillFinishLaunchingNotification_;

	return NSApplicationWillFinishLaunchingNotification_ = new NSString(bindings.NSApplicationWillFinishLaunchingNotification);
}

NSString NSApplicationWillResignActiveNotification ()
{
	if (NSApplicationWillResignActiveNotification_)
		return NSApplicationWillResignActiveNotification_;

	return NSApplicationWillResignActiveNotification_ = new NSString(bindings.NSApplicationWillResignActiveNotification);
}

NSString NSApplicationWillUnhideNotification ()
{
	if (NSApplicationWillUnhideNotification_)
		return NSApplicationWillUnhideNotification_;

	return NSApplicationWillUnhideNotification_ = new NSString(bindings.NSApplicationWillUnhideNotification);
}

NSString NSApplicationWillUpdateNotification ()
{
	if (NSApplicationWillUpdateNotification_)
		return NSApplicationWillUpdateNotification_;

	return NSApplicationWillUpdateNotification_ = new NSString(bindings.NSApplicationWillUpdateNotification);
}

NSString NSApplicationWillTerminateNotification ()
{
	if (NSApplicationWillTerminateNotification_)
		return NSApplicationWillTerminateNotification_;

	return NSApplicationWillTerminateNotification_ = new NSString(bindings.NSApplicationWillTerminateNotification);
}

NSString NSApplicationDidChangeScreenParametersNotification ()
{
	if (NSApplicationDidChangeScreenParametersNotification_)
		return NSApplicationDidChangeScreenParametersNotification_;

	return NSApplicationDidChangeScreenParametersNotification_ = new NSString(bindings.NSApplicationDidChangeScreenParametersNotification);
}

enum
{
	NSRunStoppedResponse = (-1000),
	NSRunAbortedResponse = (-1001),
	NSRunContinuesResponse = (-1002)
}

enum
{
	NSUpdateWindowsRunLoopOrdering = 500000
}

enum
{
	NSCriticalRequest = 0,
	NSInformationalRequest = 10
}

enum
{
	NSApplicationDelegateReplySuccess = 0,
	NSApplicationDelegateReplyCancel = 1,
	NSApplicationDelegateReplyFailure = 2
}

enum
{
	NSTerminateCancel = 0,
	NSTerminateNow = 1,
	NSTerminateLater = 2
}

enum
{
	NSPrintingCancelled = 0,
	NSPrintingSuccess = 1,
	NSPrintingFailure = 3,
	NSPrintingReplyLater = 2
}

const TNSServicesMenu = `

	void setServicesMenu (NSMenu aMenu)
	{
		return invokeObjcSelf!(void, "setServicesMenu:", NSMenu)(aMenu);
	}

	NSMenu servicesMenu ()
	{
		return invokeObjcSelf!(NSMenu, "servicesMenu");
	}

	void registerServicesMenuSendTypes (NSArray sendTypes, NSArray returnTypes)
	{
		return invokeObjcSelf!(void, "registerServicesMenuSendTypes:returnTypes:", NSArray, NSArray)(sendTypes, returnTypes);
	}

	//mixin ObjcBindMethod!(setServicesMenu, "setServicesMenu:");
	//mixin ObjcBindMethod!(servicesMenu, "servicesMenu");
	//mixin ObjcBindMethod!(registerServicesMenuSendTypes, "registerServicesMenuSendTypes:returnTypes:");

`;

const TNSServicesRequests = `

	bool writeSelectionToPasteboard (NSPasteboard pboard, NSArray types)
	{
		return invokeObjcSelf!(bool, "writeSelectionToPasteboard:types:", NSPasteboard, NSArray)(pboard, types);
	}

	bool readSelectionFromPasteboard (NSPasteboard pboard)
	{
		return invokeObjcSelf!(bool, "readSelectionFromPasteboard:", NSPasteboard)(pboard);
	}

	//mixin ObjcBindMethod!(writeSelectionToPasteboard, "writeSelectionToPasteboard:types:");
	//mixin ObjcBindMethod!(readSelectionFromPasteboard, "readSelectionFromPasteboard:");

`;

const TNSStandardAboutPanel = `

	void orderFrontStandardAboutPanel (Object sender)
	{
		return invokeObjcSelf!(void, "orderFrontStandardAboutPanel:", Object)(sender);
	}

	void orderFrontStandardAboutPanelWithOptions (NSDictionary optionsDictionary)
	{
		return invokeObjcSelf!(void, "orderFrontStandardAboutPanelWithOptions:", NSDictionary)(optionsDictionary);
	}

	//mixin ObjcBindMethod!(orderFrontStandardAboutPanel, "orderFrontStandardAboutPanel:");
	//mixin ObjcBindMethod!(orderFrontStandardAboutPanelWithOptions, "orderFrontStandardAboutPanelWithOptions:");

`;

const TNSWindowsMenu = `

	void setWindowsMenu (NSMenu aMenu)
	{
		return invokeObjcSelf!(void, "setWindowsMenu:", NSMenu)(aMenu);
	}

	NSMenu windowsMenu ()
	{
		return invokeObjcSelf!(NSMenu, "windowsMenu");
	}

	void arrangeInFront (Object sender)
	{
		return invokeObjcSelf!(void, "arrangeInFront:", Object)(sender);
	}

	void removeWindowsItem (NSWindow win)
	{
		return invokeObjcSelf!(void, "removeWindowsItem:", NSWindow)(win);
	}

	void addWindowsItem (NSWindow win, NSString aString, bool isFilename)
	{
		return invokeObjcSelf!(void, "addWindowsItem:title:filename:", NSWindow, NSString, bool)(win, aString, isFilename);
	}

	void changeWindowsItem (NSWindow win, NSString aString, bool isFilename)
	{
		return invokeObjcSelf!(void, "changeWindowsItem:title:filename:", NSWindow, NSString, bool)(win, aString, isFilename);
	}

	void updateWindowsItem (NSWindow win)
	{
		return invokeObjcSelf!(void, "updateWindowsItem:", NSWindow)(win);
	}

	void miniaturizeAll (Object sender)
	{
		return invokeObjcSelf!(void, "miniaturizeAll:", Object)(sender);
	}

	//mixin ObjcBindMethod!(setWindowsMenu, "setWindowsMenu:");
	//mixin ObjcBindMethod!(windowsMenu, "windowsMenu");
	//mixin ObjcBindMethod!(arrangeInFront, "arrangeInFront:");
	//mixin ObjcBindMethod!(removeWindowsItem, "removeWindowsItem:");
	//mixin ObjcBindMethod!(addWindowsItem, "addWindowsItem:title:filename:");
	//mixin ObjcBindMethod!(changeWindowsItem, "changeWindowsItem:title:filename:");
	//mixin ObjcBindMethod!(updateWindowsItem, "updateWindowsItem:");
	//mixin ObjcBindMethod!(miniaturizeAll, "miniaturizeAll:");

`;

const TNSApplicationDelegate = `

	uint applicationShouldTerminate (NSApplication sender)
	{
		return invokeObjcSelf!(uint, "applicationShouldTerminate:", NSApplication)(sender);
	}

	bool application (NSApplication sender, NSString filename)
	{
		return invokeObjcSelf!(bool, "application:openFile:", NSApplication, NSString)(sender, filename);
	}

	void application (NSApplication sender, NSArray filenames)
	{
		return invokeObjcSelf!(void, "application:openFiles:", NSApplication, NSArray)(sender, filenames);
	}

	bool application (NSApplication sender, NSString filename)
	{
		return invokeObjcSelf!(bool, "application:openTempFile:", NSApplication, NSString)(sender, filename);
	}

	bool applicationShouldOpenUntitledFile (NSApplication sender)
	{
		return invokeObjcSelf!(bool, "applicationShouldOpenUntitledFile:", NSApplication)(sender);
	}

	bool applicationOpenUntitledFile (NSApplication sender)
	{
		return invokeObjcSelf!(bool, "applicationOpenUntitledFile:", NSApplication)(sender);
	}

	bool application (Object sender, NSString filename)
	{
		return invokeObjcSelf!(bool, "application:openFileWithoutUI:", Object, NSString)(sender, filename);
	}

	bool application (NSApplication sender, NSString filename)
	{
		return invokeObjcSelf!(bool, "application:printFile:", NSApplication, NSString)(sender, filename);
	}

	uint application (NSApplication application, NSArray fileNames, NSDictionary printSettings, bool showPrintPanels)
	{
		return invokeObjcSelf!(uint, "application:printFiles:withSettings:showPrintPanels:", NSApplication, NSArray, NSDictionary, bool)(application, fileNames, printSettings, showPrintPanels);
	}

	void application (NSApplication sender, NSArray filenames)
	{
		return invokeObjcSelf!(void, "application:printFiles:", NSApplication, NSArray)(sender, filenames);
	}

	bool applicationShouldTerminateAfterLastWindowClosed (NSApplication sender)
	{
		return invokeObjcSelf!(bool, "applicationShouldTerminateAfterLastWindowClosed:", NSApplication)(sender);
	}

	bool applicationShouldHandleReopen (NSApplication sender, bool flag)
	{
		return invokeObjcSelf!(bool, "applicationShouldHandleReopen:hasVisibleWindows:", NSApplication, bool)(sender, flag);
	}

	NSMenu applicationDockMenu (NSApplication sender)
	{
		return invokeObjcSelf!(NSMenu, "applicationDockMenu:", NSApplication)(sender);
	}

	NSError application (NSApplication application, NSError error)
	{
		return invokeObjcSelf!(NSError, "application:willPresentError:", NSApplication, NSError)(application, error);
	}

	//mixin ObjcBindMethod!(applicationShouldTerminate, "applicationShouldTerminate:");
	//mixin ObjcBindMethod!(application, "application:openFile:");
	//mixin ObjcBindMethod!(application, "application:openFiles:");
	//mixin ObjcBindMethod!(application, "application:openTempFile:");
	//mixin ObjcBindMethod!(applicationShouldOpenUntitledFile, "applicationShouldOpenUntitledFile:");
	//mixin ObjcBindMethod!(applicationOpenUntitledFile, "applicationOpenUntitledFile:");
	//mixin ObjcBindMethod!(application, "application:openFileWithoutUI:");
	//mixin ObjcBindMethod!(application, "application:printFile:");
	//mixin ObjcBindMethod!(application, "application:printFiles:withSettings:showPrintPanels:");
	//mixin ObjcBindMethod!(application, "application:printFiles:");
	//mixin ObjcBindMethod!(applicationShouldTerminateAfterLastWindowClosed, "applicationShouldTerminateAfterLastWindowClosed:");
	//mixin ObjcBindMethod!(applicationShouldHandleReopen, "applicationShouldHandleReopen:hasVisibleWindows:");
	//mixin ObjcBindMethod!(applicationDockMenu, "applicationDockMenu:");
	//mixin ObjcBindMethod!(application, "application:willPresentError:");

`;

const TNSApplicationNotifications = `

	void applicationWillFinishLaunching (NSNotification notification)
	{
		return invokeObjcSelf!(void, "applicationWillFinishLaunching:", NSNotification)(notification);
	}

	void applicationDidFinishLaunching (NSNotification notification)
	{
		return invokeObjcSelf!(void, "applicationDidFinishLaunching:", NSNotification)(notification);
	}

	void applicationWillHide (NSNotification notification)
	{
		return invokeObjcSelf!(void, "applicationWillHide:", NSNotification)(notification);
	}

	void applicationDidHide (NSNotification notification)
	{
		return invokeObjcSelf!(void, "applicationDidHide:", NSNotification)(notification);
	}

	void applicationWillUnhide (NSNotification notification)
	{
		return invokeObjcSelf!(void, "applicationWillUnhide:", NSNotification)(notification);
	}

	void applicationDidUnhide (NSNotification notification)
	{
		return invokeObjcSelf!(void, "applicationDidUnhide:", NSNotification)(notification);
	}

	void applicationWillBecomeActive (NSNotification notification)
	{
		return invokeObjcSelf!(void, "applicationWillBecomeActive:", NSNotification)(notification);
	}

	void applicationDidBecomeActive (NSNotification notification)
	{
		return invokeObjcSelf!(void, "applicationDidBecomeActive:", NSNotification)(notification);
	}

	void applicationWillResignActive (NSNotification notification)
	{
		return invokeObjcSelf!(void, "applicationWillResignActive:", NSNotification)(notification);
	}

	void applicationDidResignActive (NSNotification notification)
	{
		return invokeObjcSelf!(void, "applicationDidResignActive:", NSNotification)(notification);
	}

	void applicationWillUpdate (NSNotification notification)
	{
		return invokeObjcSelf!(void, "applicationWillUpdate:", NSNotification)(notification);
	}

	void applicationDidUpdate (NSNotification notification)
	{
		return invokeObjcSelf!(void, "applicationDidUpdate:", NSNotification)(notification);
	}

	void applicationWillTerminate (NSNotification notification)
	{
		return invokeObjcSelf!(void, "applicationWillTerminate:", NSNotification)(notification);
	}

	void applicationDidChangeScreenParameters (NSNotification notification)
	{
		return invokeObjcSelf!(void, "applicationDidChangeScreenParameters:", NSNotification)(notification);
	}

	//mixin ObjcBindMethod!(applicationWillFinishLaunching, "applicationWillFinishLaunching:");
	//mixin ObjcBindMethod!(applicationDidFinishLaunching, "applicationDidFinishLaunching:");
	//mixin ObjcBindMethod!(applicationWillHide, "applicationWillHide:");
	//mixin ObjcBindMethod!(applicationDidHide, "applicationDidHide:");
	//mixin ObjcBindMethod!(applicationWillUnhide, "applicationWillUnhide:");
	//mixin ObjcBindMethod!(applicationDidUnhide, "applicationDidUnhide:");
	//mixin ObjcBindMethod!(applicationWillBecomeActive, "applicationWillBecomeActive:");
	//mixin ObjcBindMethod!(applicationDidBecomeActive, "applicationDidBecomeActive:");
	//mixin ObjcBindMethod!(applicationWillResignActive, "applicationWillResignActive:");
	//mixin ObjcBindMethod!(applicationDidResignActive, "applicationDidResignActive:");
	//mixin ObjcBindMethod!(applicationWillUpdate, "applicationWillUpdate:");
	//mixin ObjcBindMethod!(applicationDidUpdate, "applicationDidUpdate:");
	//mixin ObjcBindMethod!(applicationWillTerminate, "applicationWillTerminate:");
	//mixin ObjcBindMethod!(applicationDidChangeScreenParameters, "applicationDidChangeScreenParameters:");

`;

const TNSServicesHandling = `

	void setServicesProvider (Object provider)
	{
		return invokeObjcSelf!(void, "setServicesProvider:", Object)(provider);
	}

	Object servicesProvider ()
	{
		return invokeObjcSelf!(Object, "servicesProvider");
	}

	//mixin ObjcBindMethod!(setServicesProvider, "setServicesProvider:");
	//mixin ObjcBindMethod!(servicesProvider, "servicesProvider");

`;

class NSApplication : NSResponder, INSUserInterfaceValidations
{
	mixin (ObjcWrap);

	static NSApplication sharedApplication ()
	{
		return invokeObjcSelfClass!(NSApplication, "sharedApplication");
	}

	void setDelegate (Object anObject)
	{
		return invokeObjcSelf!(void, "setDelegate:", Object)(anObject);
	}

	Object delegate_ ()
	{
		return invokeObjcSelf!(Object, "delegate");
	}

	NSGraphicsContext context ()
	{
		return invokeObjcSelf!(NSGraphicsContext, "context");
	}

	void hide (Object sender)
	{
		return invokeObjcSelf!(void, "hide:", Object)(sender);
	}

	void unhide (Object sender)
	{
		return invokeObjcSelf!(void, "unhide:", Object)(sender);
	}

	void unhideWithoutActivation ()
	{
		return invokeObjcSelf!(void, "unhideWithoutActivation");
	}

	NSWindow windowWithWindowNumber (NSInteger windowNum)
	{
		return invokeObjcSelf!(NSWindow, "windowWithWindowNumber:", NSInteger)(windowNum);
	}

	NSWindow mainWindow ()
	{
		return invokeObjcSelf!(NSWindow, "mainWindow");
	}

	NSWindow keyWindow ()
	{
		return invokeObjcSelf!(NSWindow, "keyWindow");
	}

	bool isActive ()
	{
		return invokeObjcSelf!(bool, "isActive");
	}

	bool isHidden ()
	{
		return invokeObjcSelf!(bool, "isHidden");
	}

	bool isRunning ()
	{
		return invokeObjcSelf!(bool, "isRunning");
	}

	void deactivate ()
	{
		return invokeObjcSelf!(void, "deactivate");
	}

	void activateIgnoringOtherApps (bool flag)
	{
		return invokeObjcSelf!(void, "activateIgnoringOtherApps:", bool)(flag);
	}

	void hideOtherApplications (Object sender)
	{
		return invokeObjcSelf!(void, "hideOtherApplications:", Object)(sender);
	}

	void unhideAllApplications (Object sender)
	{
		return invokeObjcSelf!(void, "unhideAllApplications:", Object)(sender);
	}

	void finishLaunching ()
	{
		return invokeObjcSelf!(void, "finishLaunching");
	}

	void run ()
	{
		return invokeObjcSelf!(void, "run");
	}

	NSInteger runModalForWindow (NSWindow theWindow)
	{
		return invokeObjcSelf!(NSInteger, "runModalForWindow:", NSWindow)(theWindow);
	}

	void stop (Object sender)
	{
		return invokeObjcSelf!(void, "stop:", Object)(sender);
	}

	void stopModal ()
	{
		return invokeObjcSelf!(void, "stopModal");
	}

	void stopModalWithCode (NSInteger returnCode)
	{
		return invokeObjcSelf!(void, "stopModalWithCode:", NSInteger)(returnCode);
	}

	void abortModal ()
	{
		return invokeObjcSelf!(void, "abortModal");
	}

	NSWindow modalWindow ()
	{
		return invokeObjcSelf!(NSWindow, "modalWindow");
	}

	NSModalSession beginModalSessionForWindow (NSWindow theWindow)
	{
		return invokeObjcSelf!(NSModalSession, "beginModalSessionForWindow:", NSWindow)(theWindow);
	}

	NSInteger runModalSession (NSModalSession session)
	{
		return invokeObjcSelf!(NSInteger, "runModalSession:", NSModalSession)(session);
	}

	void endModalSession (NSModalSession session)
	{
		return invokeObjcSelf!(void, "endModalSession:", NSModalSession)(session);
	}

	void terminate (Object sender)
	{
		return invokeObjcSelf!(void, "terminate:", Object)(sender);
	}

	NSInteger requestUserAttention (uint requestType)
	{
		return invokeObjcSelf!(NSInteger, "requestUserAttention:", uint)(requestType);
	}

	void cancelUserAttentionRequest (NSInteger request)
	{
		return invokeObjcSelf!(void, "cancelUserAttentionRequest:", NSInteger)(request);
	}

	void beginSheet (NSWindow sheet, NSWindow docWindow, Object modalDelegate, SEL didEndSelector, void* contextInfo)
	{
		return invokeObjcSelf!(void, "beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:", NSWindow, NSWindow, Object, SEL, void*)(sheet, docWindow, modalDelegate, didEndSelector, contextInfo);
	}

	void endSheet (NSWindow sheet)
	{
		return invokeObjcSelf!(void, "endSheet:", NSWindow)(sheet);
	}

	void endSheet (NSWindow sheet, NSInteger returnCode)
	{
		return invokeObjcSelf!(void, "endSheet:returnCode:", NSWindow, NSInteger)(sheet, returnCode);
	}

	NSInteger runModalForWindow (NSWindow theWindow, NSWindow docWindow)
	{
		return invokeObjcSelf!(NSInteger, "runModalForWindow:relativeToWindow:", NSWindow, NSWindow)(theWindow, docWindow);
	}

	NSModalSession beginModalSessionForWindow (NSWindow theWindow, NSWindow docWindow)
	{
		return invokeObjcSelf!(NSModalSession, "beginModalSessionForWindow:relativeToWindow:", NSWindow, NSWindow)(theWindow, docWindow);
	}

	NSEvent nextEventMatchingMask (NSUInteger mask, NSDate expiration, NSString mode, bool deqFlag)
	{
		return invokeObjcSelf!(NSEvent, "nextEventMatchingMask:untilDate:inMode:dequeue:", NSUInteger, NSDate, NSString, bool)(mask, expiration, mode, deqFlag);
	}

	void discardEventsMatchingMask (NSUInteger mask, NSEvent lastEvent)
	{
		return invokeObjcSelf!(void, "discardEventsMatchingMask:beforeEvent:", NSUInteger, NSEvent)(mask, lastEvent);
	}

	void postEvent (NSEvent event, bool flag)
	{
		return invokeObjcSelf!(void, "postEvent:atStart:", NSEvent, bool)(event, flag);
	}

	NSEvent currentEvent ()
	{
		return invokeObjcSelf!(NSEvent, "currentEvent");
	}

	void sendEvent (NSEvent theEvent)
	{
		return invokeObjcSelf!(void, "sendEvent:", NSEvent)(theEvent);
	}

	void preventWindowOrdering ()
	{
		return invokeObjcSelf!(void, "preventWindowOrdering");
	}

	NSWindow makeWindowsPerform (SEL aSelector, bool flag)
	{
		return invokeObjcSelf!(NSWindow, "makeWindowsPerform:inOrder:", SEL, bool)(aSelector, flag);
	}

	NSArray windows ()
	{
		return invokeObjcSelf!(NSArray, "windows");
	}

	void setWindowsNeedUpdate (bool needUpdate)
	{
		return invokeObjcSelf!(void, "setWindowsNeedUpdate:", bool)(needUpdate);
	}

	void updateWindows ()
	{
		return invokeObjcSelf!(void, "updateWindows");
	}

	void setMainMenu (NSMenu aMenu)
	{
		return invokeObjcSelf!(void, "setMainMenu:", NSMenu)(aMenu);
	}

	NSMenu mainMenu ()
	{
		return invokeObjcSelf!(NSMenu, "mainMenu");
	}

	void setApplicationIconImage (NSImage image)
	{
		return invokeObjcSelf!(void, "setApplicationIconImage:", NSImage)(image);
	}

	NSImage applicationIconImage ()
	{
		return invokeObjcSelf!(NSImage, "applicationIconImage");
	}

	NSDockTile dockTile ()
	{
		return invokeObjcSelf!(NSDockTile, "dockTile");
	}

	bool sendAction (SEL theAction, Object theTarget, Object sender)
	{
		return invokeObjcSelf!(bool, "sendAction:to:from:", SEL, Object, Object)(theAction, theTarget, sender);
	}

	Object targetForAction (SEL theAction)
	{
		return invokeObjcSelf!(Object, "targetForAction:", SEL)(theAction);
	}

	Object targetForAction (SEL theAction, Object theTarget, Object sender)
	{
		return invokeObjcSelf!(Object, "targetForAction:to:from:", SEL, Object, Object)(theAction, theTarget, sender);
	}

	bool tryToPerform (SEL anAction, Object anObject)
	{
		return invokeObjcSelf!(bool, "tryToPerform:with:", SEL, Object)(anAction, anObject);
	}

	Object validRequestorForSendType (NSString sendType, NSString returnType)
	{
		return invokeObjcSelf!(Object, "validRequestorForSendType:returnType:", NSString, NSString)(sendType, returnType);
	}

	void reportException (NSException theException)
	{
		return invokeObjcSelf!(void, "reportException:", NSException)(theException);
	}

	static void detachDrawingThread (SEL selector, Object target, Object argument)
	{
		return invokeObjcSelfClass!(void, "detachDrawingThread:toTarget:withObject:", SEL, Object, Object)(selector, target, argument);
	}

	void replyToApplicationShouldTerminate (bool shouldTerminate)
	{
		return invokeObjcSelf!(void, "replyToApplicationShouldTerminate:", bool)(shouldTerminate);
	}

	void replyToOpenOrPrint (uint reply)
	{
		return invokeObjcSelf!(void, "replyToOpenOrPrint:", uint)(reply);
	}

	void orderFrontCharacterPalette (Object sender)
	{
		return invokeObjcSelf!(void, "orderFrontCharacterPalette:", Object)(sender);
	}

	bool validateUserInterfaceItem (INSValidatedUserInterfaceItem anItem)
	{
		return invokeObjcSelf!(bool, "validateUserInterfaceItem:", INSValidatedUserInterfaceItem)(anItem);
	}
	
	// NSServicesMenu
	void setServicesMenu (NSMenu aMenu)
	{
		return invokeObjcSelf!(void, "setServicesMenu:", NSMenu)(aMenu);
	}

	NSMenu servicesMenu ()
	{
		return invokeObjcSelf!(NSMenu, "servicesMenu");
	}

	void registerServicesMenuSendTypes (NSArray sendTypes, NSArray returnTypes)
	{
		return invokeObjcSelf!(void, "registerServicesMenuSendTypes:returnTypes:", NSArray, NSArray)(sendTypes, returnTypes);
	}
	
	// NSApplicationHelpExtension
	void activateContextHelpMode (Object sender)
	{
		return invokeObjcSelf!(void, "activateContextHelpMode:", Object)(sender);
	}

	void showHelp (Object sender)
	{
		return invokeObjcSelf!(void, "showHelp:", Object)(sender);
	}

	// NSStandardAboutPanel
	void orderFrontStandardAboutPanel (Object sender)
	{
		return invokeObjcSelf!(void, "orderFrontStandardAboutPanel:", Object)(sender);
	}

	void orderFrontStandardAboutPanelWithOptions (NSDictionary optionsDictionary)
	{
		return invokeObjcSelf!(void, "orderFrontStandardAboutPanelWithOptions:", NSDictionary)(optionsDictionary);
	}
	
	// NSWindowsMenu
	void setWindowsMenu (NSMenu aMenu)
	{
		return invokeObjcSelf!(void, "setWindowsMenu:", NSMenu)(aMenu);
	}

	NSMenu windowsMenu ()
	{
		return invokeObjcSelf!(NSMenu, "windowsMenu");
	}

	void arrangeInFront (Object sender)
	{
		return invokeObjcSelf!(void, "arrangeInFront:", Object)(sender);
	}

	void removeWindowsItem (NSWindow win)
	{
		return invokeObjcSelf!(void, "removeWindowsItem:", NSWindow)(win);
	}

	void addWindowsItem (NSWindow win, NSString aString, bool isFilename)
	{
		return invokeObjcSelf!(void, "addWindowsItem:title:filename:", NSWindow, NSString, bool)(win, aString, isFilename);
	}

	void changeWindowsItem (NSWindow win, NSString aString, bool isFilename)
	{
		return invokeObjcSelf!(void, "changeWindowsItem:title:filename:", NSWindow, NSString, bool)(win, aString, isFilename);
	}

	void updateWindowsItem (NSWindow win)
	{
		return invokeObjcSelf!(void, "updateWindowsItem:", NSWindow)(win);
	}

	void miniaturizeAll (Object sender)
	{
		return invokeObjcSelf!(void, "miniaturizeAll:", Object)(sender);
	}
	
	// NSPageLayoutPanel
	void runPageLayout (Object sender)
	{
		return invokeObjcSelf!(void, "runPageLayout:", Object)(sender);
	}
	
	// NSServicesHandling
	void setServicesProvider (Object provider)
	{
		return invokeObjcSelf!(void, "setServicesProvider:", Object)(provider);
	}

	Object servicesProvider ()
	{
		return invokeObjcSelf!(Object, "servicesProvider");
	}
	
	// NSColorPanel
	void orderFrontColorPanel (Object sender)
	{
		return invokeObjcSelf!(void, "orderFrontColorPanel:", Object)(sender);
	}
}

bool NSShowsServicesMenuItem (NSString itemName)
{
	return Bridge.invokeObjcFunction!(bool, bindings.NSShowsServicesMenuItem, NSString)(itemName);
}

NSInteger NSSetShowsServicesMenuItem (NSString itemName, bool enabled)
{
	return Bridge.invokeObjcFunction!(NSInteger, bindings.NSSetShowsServicesMenuItem, NSString, bool)(itemName, enabled);
}

bool NSPerformService (NSString itemName, NSPasteboard pboard)
{
	return Bridge.invokeObjcFunction!(bool, bindings.NSPerformService, NSString, NSPasteboard)(itemName, pboard);
}

void NSRegisterServicesProvider (Object provider, NSString name)
{
	return Bridge.invokeObjcFunction!(void, bindings.NSRegisterServicesProvider, Object, NSString)(provider, name);
}

void NSUnregisterServicesProvider (NSString name)
{
	return Bridge.invokeObjcFunction!(void, bindings.NSUnregisterServicesProvider, NSString)(name);
}

int NSApplicationMain (string[] args)
{
	if (args.length == 0)
		return NSApplicationMain(0, null);
	
	char*[] cArgs;
	cArgs.reserve(args.length);
	
	foreach (str ; args)
		cArgs ~= (str ~ '\0').ptr;
	
	return NSApplicationMain(cArgs.length, cArgs.ptr);
}

int NSApplicationMain ()
{
	return NSApplicationMain(0, null);
}

extern (C)
{
	int NSApplicationMain (int argc, char** argv);
	bool NSApplicationLoad ();
	void NSUpdateDynamicServices ();
}