view dstep/appkit/NSWorkspace.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.NSWorkspace;

import dstep.appkit.AppKitDefines;
import dstep.foundation.NSArray;
import dstep.appkit.NSImage;
import dstep.appkit.NSView;
import dstep.foundation.NSAppleEventDescriptor;
import dstep.foundation.NSDictionary;
import dstep.foundation.NSError;
import dstep.foundation.NSGeometry;
import dstep.foundation.NSNotification;
import dstep.foundation.NSObjCRuntime;
import dstep.foundation.NSObject;
import dstep.foundation.NSString;
import dstep.foundation.NSURL;
import dstep.foundation.NSValue;
import dstep.objc.bridge.Bridge;
import dstep.objc.objc;

import bindings = dstep.appkit.NSWorkspace_bindings;

typedef NSUInteger NSWorkspaceLaunchOptions;
typedef NSUInteger NSWorkspaceIconCreationOptions;

private
{
	NSString NSWorkspaceDidLaunchApplicationNotification_;
	NSString NSWorkspaceDidMountNotification_;
	NSString NSWorkspaceDidPerformFileOperationNotification_;
	NSString NSWorkspaceDidTerminateApplicationNotification_;
	NSString NSWorkspaceDidUnmountNotification_;
	NSString NSWorkspaceWillLaunchApplicationNotification_;
	NSString NSWorkspaceWillPowerOffNotification_;
	NSString NSWorkspaceWillUnmountNotification_;
	NSString NSWorkspaceWillSleepNotification_;
	NSString NSWorkspaceDidWakeNotification_;
	NSString NSWorkspaceSessionDidBecomeActiveNotification_;
	NSString NSWorkspaceSessionDidResignActiveNotification_;
	NSString NSPlainFileType_;
	NSString NSDirectoryFileType_;
	NSString NSApplicationFileType_;
	NSString NSFilesystemFileType_;
	NSString NSShellCommandFileType_;
	NSString NSWorkspaceMoveOperation_;
	NSString NSWorkspaceCopyOperation_;
	NSString NSWorkspaceLinkOperation_;
	NSString NSWorkspaceCompressOperation_;
	NSString NSWorkspaceDecompressOperation_;
	NSString NSWorkspaceEncryptOperation_;
	NSString NSWorkspaceDecryptOperation_;
	NSString NSWorkspaceDestroyOperation_;
	NSString NSWorkspaceRecycleOperation_;
	NSString NSWorkspaceDuplicateOperation_;
}

NSString NSWorkspaceDidLaunchApplicationNotification ()
{
	if (NSWorkspaceDidLaunchApplicationNotification_)
		return NSWorkspaceDidLaunchApplicationNotification_;

	return NSWorkspaceDidLaunchApplicationNotification_ = new NSString(bindings.NSWorkspaceDidLaunchApplicationNotification);
}

NSString NSWorkspaceDidMountNotification ()
{
	if (NSWorkspaceDidMountNotification_)
		return NSWorkspaceDidMountNotification_;

	return NSWorkspaceDidMountNotification_ = new NSString(bindings.NSWorkspaceDidMountNotification);
}

NSString NSWorkspaceDidPerformFileOperationNotification ()
{
	if (NSWorkspaceDidPerformFileOperationNotification_)
		return NSWorkspaceDidPerformFileOperationNotification_;

	return NSWorkspaceDidPerformFileOperationNotification_ = new NSString(bindings.NSWorkspaceDidPerformFileOperationNotification);
}

NSString NSWorkspaceDidTerminateApplicationNotification ()
{
	if (NSWorkspaceDidTerminateApplicationNotification_)
		return NSWorkspaceDidTerminateApplicationNotification_;

	return NSWorkspaceDidTerminateApplicationNotification_ = new NSString(bindings.NSWorkspaceDidTerminateApplicationNotification);
}

NSString NSWorkspaceDidUnmountNotification ()
{
	if (NSWorkspaceDidUnmountNotification_)
		return NSWorkspaceDidUnmountNotification_;

	return NSWorkspaceDidUnmountNotification_ = new NSString(bindings.NSWorkspaceDidUnmountNotification);
}

NSString NSWorkspaceWillLaunchApplicationNotification ()
{
	if (NSWorkspaceWillLaunchApplicationNotification_)
		return NSWorkspaceWillLaunchApplicationNotification_;

	return NSWorkspaceWillLaunchApplicationNotification_ = new NSString(bindings.NSWorkspaceWillLaunchApplicationNotification);
}

NSString NSWorkspaceWillPowerOffNotification ()
{
	if (NSWorkspaceWillPowerOffNotification_)
		return NSWorkspaceWillPowerOffNotification_;

	return NSWorkspaceWillPowerOffNotification_ = new NSString(bindings.NSWorkspaceWillPowerOffNotification);
}

NSString NSWorkspaceWillUnmountNotification ()
{
	if (NSWorkspaceWillUnmountNotification_)
		return NSWorkspaceWillUnmountNotification_;

	return NSWorkspaceWillUnmountNotification_ = new NSString(bindings.NSWorkspaceWillUnmountNotification);
}

NSString NSWorkspaceWillSleepNotification ()
{
	if (NSWorkspaceWillSleepNotification_)
		return NSWorkspaceWillSleepNotification_;

	return NSWorkspaceWillSleepNotification_ = new NSString(bindings.NSWorkspaceWillSleepNotification);
}

NSString NSWorkspaceDidWakeNotification ()
{
	if (NSWorkspaceDidWakeNotification_)
		return NSWorkspaceDidWakeNotification_;

	return NSWorkspaceDidWakeNotification_ = new NSString(bindings.NSWorkspaceDidWakeNotification);
}

NSString NSWorkspaceSessionDidBecomeActiveNotification ()
{
	if (NSWorkspaceSessionDidBecomeActiveNotification_)
		return NSWorkspaceSessionDidBecomeActiveNotification_;

	return NSWorkspaceSessionDidBecomeActiveNotification_ = new NSString(bindings.NSWorkspaceSessionDidBecomeActiveNotification);
}

NSString NSWorkspaceSessionDidResignActiveNotification ()
{
	if (NSWorkspaceSessionDidResignActiveNotification_)
		return NSWorkspaceSessionDidResignActiveNotification_;

	return NSWorkspaceSessionDidResignActiveNotification_ = new NSString(bindings.NSWorkspaceSessionDidResignActiveNotification);
}

NSString NSPlainFileType ()
{
	if (NSPlainFileType_)
		return NSPlainFileType_;

	return NSPlainFileType_ = new NSString(bindings.NSPlainFileType);
}

NSString NSDirectoryFileType ()
{
	if (NSDirectoryFileType_)
		return NSDirectoryFileType_;

	return NSDirectoryFileType_ = new NSString(bindings.NSDirectoryFileType);
}

NSString NSApplicationFileType ()
{
	if (NSApplicationFileType_)
		return NSApplicationFileType_;

	return NSApplicationFileType_ = new NSString(bindings.NSApplicationFileType);
}

NSString NSFilesystemFileType ()
{
	if (NSFilesystemFileType_)
		return NSFilesystemFileType_;

	return NSFilesystemFileType_ = new NSString(bindings.NSFilesystemFileType);
}

NSString NSShellCommandFileType ()
{
	if (NSShellCommandFileType_)
		return NSShellCommandFileType_;

	return NSShellCommandFileType_ = new NSString(bindings.NSShellCommandFileType);
}

NSString NSWorkspaceMoveOperation ()
{
	if (NSWorkspaceMoveOperation_)
		return NSWorkspaceMoveOperation_;

	return NSWorkspaceMoveOperation_ = new NSString(bindings.NSWorkspaceMoveOperation);
}

NSString NSWorkspaceCopyOperation ()
{
	if (NSWorkspaceCopyOperation_)
		return NSWorkspaceCopyOperation_;

	return NSWorkspaceCopyOperation_ = new NSString(bindings.NSWorkspaceCopyOperation);
}

NSString NSWorkspaceLinkOperation ()
{
	if (NSWorkspaceLinkOperation_)
		return NSWorkspaceLinkOperation_;

	return NSWorkspaceLinkOperation_ = new NSString(bindings.NSWorkspaceLinkOperation);
}

NSString NSWorkspaceCompressOperation ()
{
	if (NSWorkspaceCompressOperation_)
		return NSWorkspaceCompressOperation_;

	return NSWorkspaceCompressOperation_ = new NSString(bindings.NSWorkspaceCompressOperation);
}

NSString NSWorkspaceDecompressOperation ()
{
	if (NSWorkspaceDecompressOperation_)
		return NSWorkspaceDecompressOperation_;

	return NSWorkspaceDecompressOperation_ = new NSString(bindings.NSWorkspaceDecompressOperation);
}

NSString NSWorkspaceEncryptOperation ()
{
	if (NSWorkspaceEncryptOperation_)
		return NSWorkspaceEncryptOperation_;

	return NSWorkspaceEncryptOperation_ = new NSString(bindings.NSWorkspaceEncryptOperation);
}

NSString NSWorkspaceDecryptOperation ()
{
	if (NSWorkspaceDecryptOperation_)
		return NSWorkspaceDecryptOperation_;

	return NSWorkspaceDecryptOperation_ = new NSString(bindings.NSWorkspaceDecryptOperation);
}

NSString NSWorkspaceDestroyOperation ()
{
	if (NSWorkspaceDestroyOperation_)
		return NSWorkspaceDestroyOperation_;

	return NSWorkspaceDestroyOperation_ = new NSString(bindings.NSWorkspaceDestroyOperation);
}

NSString NSWorkspaceRecycleOperation ()
{
	if (NSWorkspaceRecycleOperation_)
		return NSWorkspaceRecycleOperation_;

	return NSWorkspaceRecycleOperation_ = new NSString(bindings.NSWorkspaceRecycleOperation);
}

NSString NSWorkspaceDuplicateOperation ()
{
	if (NSWorkspaceDuplicateOperation_)
		return NSWorkspaceDuplicateOperation_;

	return NSWorkspaceDuplicateOperation_ = new NSString(bindings.NSWorkspaceDuplicateOperation);
}

enum
{
	NSWorkspaceLaunchAndPrint = 0x00000002,
	NSWorkspaceLaunchInhibitingBackgroundOnly = 0x00000080,
	NSWorkspaceLaunchWithoutAddingToRecents = 0x00000100,
	NSWorkspaceLaunchWithoutActivation = 0x00000200,
	NSWorkspaceLaunchAsync = 0x00010000,
	NSWorkspaceLaunchAllowingClassicStartup = 0x00020000,
	NSWorkspaceLaunchPreferringClassic = 0x00040000,
	NSWorkspaceLaunchNewInstance = 0x00080000,
	NSWorkspaceLaunchAndHide = 0x00100000,
	NSWorkspaceLaunchAndHideOthers = 0x00200000,
	NSWorkspaceLaunchDefault = NSWorkspaceLaunchAsync |
NSWorkspaceLaunchAllowingClassicStartup
}

enum
{
	NSExcludeQuickDrawElementsIconCreationOption = 1 << 1,
	NSExclude10_4ElementsIconCreationOption = 1 << 2
}

class NSWorkspace : NSObject
{
	mixin (ObjcWrap);

	static NSWorkspace sharedWorkspace ()
	{
		return invokeObjcSelfClass!(NSWorkspace, "sharedWorkspace");
	}

	NSNotificationCenter notificationCenter ()
	{
		return invokeObjcSelf!(NSNotificationCenter, "notificationCenter");
	}

	bool openFile (NSString fullPath)
	{
		return invokeObjcSelf!(bool, "openFile:", NSString)(fullPath);
	}

	bool openFile (NSString fullPath, NSString appName)
	{
		return invokeObjcSelf!(bool, "openFile:withApplication:", NSString, NSString)(fullPath, appName);
	}

	bool openFile (NSString fullPath, NSString appName, bool flag)
	{
		return invokeObjcSelf!(bool, "openFile:withApplication:andDeactivate:", NSString, NSString, bool)(fullPath, appName, flag);
	}

	bool openTempFile (NSString fullPath)
	{
		return invokeObjcSelf!(bool, "openTempFile:", NSString)(fullPath);
	}

	bool openFile (NSString fullPath, NSImage anImage, NSPoint point, NSView aView)
	{
		return invokeObjcSelf!(bool, "openFile:fromImage:at:inView:", NSString, NSImage, NSPoint, NSView)(fullPath, anImage, point, aView);
	}

	bool openURL (NSURL url)
	{
		return invokeObjcSelf!(bool, "openURL:", NSURL)(url);
	}

	bool launchApplication (NSString appName)
	{
		return invokeObjcSelf!(bool, "launchApplication:", NSString)(appName);
	}

	bool launchApplication (NSString appName, bool showIcon, bool autolaunch)
	{
		return invokeObjcSelf!(bool, "launchApplication:showIcon:autolaunch:", NSString, bool, bool)(appName, showIcon, autolaunch);
	}

	NSString fullPathForApplication (NSString appName)
	{
		return invokeObjcSelf!(NSString, "fullPathForApplication:", NSString)(appName);
	}

	bool selectFile (NSString fullPath, NSString rootFullpath)
	{
		return invokeObjcSelf!(bool, "selectFile:inFileViewerRootedAtPath:", NSString, NSString)(fullPath, rootFullpath);
	}

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

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

	void noteFileSystemChanged (NSString path)
	{
		return invokeObjcSelf!(void, "noteFileSystemChanged:", NSString)(path);
	}

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

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

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

	bool getInfoForFile (NSString fullPath, out NSString appName, ref NSString type)
	{
		id app;
		id t;
		
		if (type)
			t = type.objcObject;
		
		bool result = invokeObjcSelf!(bool, "getInfoForFile:application:type:", NSString, id*, id*)(fullPath, &app, &t);
		
		if (app)
			appName = new NSString(app);
		
		if (t)
			type = new NSString(t);
		
		return result;
	}

	bool isFilePackageAtPath (NSString fullPath)
	{
		return invokeObjcSelf!(bool, "isFilePackageAtPath:", NSString)(fullPath);
	}

	NSImage iconForFile (NSString fullPath)
	{
		return invokeObjcSelf!(NSImage, "iconForFile:", NSString)(fullPath);
	}

	NSImage iconForFiles (NSArray fullPaths)
	{
		return invokeObjcSelf!(NSImage, "iconForFiles:", NSArray)(fullPaths);
	}

	NSImage iconForFileType (NSString fileType)
	{
		return invokeObjcSelf!(NSImage, "iconForFileType:", NSString)(fileType);
	}

	bool setIcon (NSImage image, NSString fullPath, uint options)
	{
		return invokeObjcSelf!(bool, "setIcon:forFile:options:", NSImage, NSString, uint)(image, fullPath, options);
	}

	bool getFileSystemInfoForPath (NSString fullPath, bool* removableFlag, bool* writableFlag, bool* unmountableFlag, ref NSString description, ref NSString fileSystemType)
	{
		id desc;
		id fileSysType;
		
		if (description)
			desc = description.objcObject;
		
		if (fileSysType)
			fileSysType = fileSystemType.objcObject;
		
		bool result = invokeObjcSelf!(bool, "getFileSystemInfoForPath:isRemovable:isWritable:isUnmountable:description:type:", NSString, bool*, bool*, bool*, id*, id*)(fullPath, removableFlag, writableFlag, unmountableFlag, &desc, &fileSysType);
		
		if (desc)
			description = new NSString(desc);
		
		if (fileSysType)
			fileSystemType = new NSString(fileSysType);
		
		return result;
	}

	bool performFileOperation (NSString operation, NSString source, NSString destination, NSArray files, NSInteger* tag)
	{
		return invokeObjcSelf!(bool, "performFileOperation:source:destination:files:tag:", NSString, NSString, NSString, NSArray, NSInteger*)(operation, source, destination, files, tag);
	}

	bool unmountAndEjectDeviceAtPath (NSString path)
	{
		return invokeObjcSelf!(bool, "unmountAndEjectDeviceAtPath:", NSString)(path);
	}

	NSInteger extendPowerOffBy (NSInteger requested)
	{
		return invokeObjcSelf!(NSInteger, "extendPowerOffBy:", NSInteger)(requested);
	}

	void slideImage (NSImage image, NSPoint fromPoint, NSPoint toPoint)
	{
		return invokeObjcSelf!(void, "slideImage:from:to:", NSImage, NSPoint, NSPoint)(image, fromPoint, toPoint);
	}

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

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

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

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

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

	NSString absolutePathForAppBundleWithIdentifier (NSString bundleIdentifier)
	{
		return invokeObjcSelf!(NSString, "absolutePathForAppBundleWithIdentifier:", NSString)(bundleIdentifier);
	}

	bool launchAppWithBundleIdentifier (NSString bundleIdentifier, uint options, NSAppleEventDescriptor descriptor, ref NSNumber identifier)
	{
		id ident;
		
		if (identifier)
			ident = identifier.objcObject;
		
		bool result = invokeObjcSelf!(bool, "launchAppWithBundleIdentifier:options:additionalEventParamDescriptor:launchIdentifier:", NSString, uint, NSAppleEventDescriptor, id*)(bundleIdentifier, options, descriptor, &ident);
		
		if (ident)
			identifier = new NSNumber(ident);
		
		return result;
	}

	bool openURLs (NSArray urls, NSString bundleIdentifier, uint options, NSAppleEventDescriptor descriptor, ref NSArray identifiers)
	{
		id ident;
		
		if (identifiers)
			ident = identifiers.objcObject;
				
		bool result = invokeObjcSelf!(bool, "openURLs:withAppBundleIdentifier:options:additionalEventParamDescriptor:launchIdentifiers:", NSArray, NSString, uint, NSAppleEventDescriptor, id*)(urls, bundleIdentifier, options, descriptor, &ident);
		
		if (ident)
			identifiers = new NSArray(ident);
		
		return result;
	}

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

	NSDictionary activeApplication ()
	{
		return invokeObjcSelf!(NSDictionary, "activeApplication");
	}

	NSString typeOfFile (NSString absoluteFilePath, out NSError outError)
	{
		id error;
				
		NSString result = invokeObjcSelf!(NSString, "typeOfFile:error:", NSString, id*)(absoluteFilePath, &error);
		
		if (error)
			outError = new NSError(error);
		
		return result;
	}

	NSString localizedDescriptionForType (NSString typeName)
	{
		return invokeObjcSelf!(NSString, "localizedDescriptionForType:", NSString)(typeName);
	}

	NSString preferredFilenameExtensionForType (NSString typeName)
	{
		return invokeObjcSelf!(NSString, "preferredFilenameExtensionForType:", NSString)(typeName);
	}

	bool filenameExtension (NSString filenameExtension, NSString typeName)
	{
		return invokeObjcSelf!(bool, "filenameExtension:isValidForType:", NSString, NSString)(filenameExtension, typeName);
	}

	bool type (NSString firstTypeName, NSString secondTypeName)
	{
		return invokeObjcSelf!(bool, "type:conformsToType:", NSString, NSString)(firstTypeName, secondTypeName);
	}
}