annotate dwt/program/Program.d @ 45:d8635bb48c7c

Merge with SWT 3.5
author Jacob Carlborg <doob@me.com>
date Mon, 01 Dec 2008 17:07:00 +0100
parents a9ab4c738ed8
children cfa563df4fdd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
1 /*******************************************************************************
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
2 * Copyright (c) 2000, 2008 IBM Corporation and others.
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
7 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
8 * Contributors:
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
10 *******************************************************************************/
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
11 module dwt.program.Program;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
12
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
13 import dwt.dwthelper.utils;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
14
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
15
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
16 import java.util.Vector;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
17
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
18 import dwt.DWT;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
19 import dwt.graphics.ImageData;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
20 import dwt.graphics.PaletteData;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
21 import dwt.internal.C;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
22 import dwt.internal.cocoa.NSArray;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
23 import dwt.internal.cocoa.NSAutoreleasePool;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
24 import dwt.internal.cocoa.NSBitmapImageRep;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
25 import dwt.internal.cocoa.NSBundle;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
26 import dwt.internal.cocoa.NSDictionary;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
27 import dwt.internal.cocoa.NSDirectoryEnumerator;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
28 import dwt.internal.cocoa.NSEnumerator;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
29 import dwt.internal.cocoa.NSFileManager;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
30 import dwt.internal.cocoa.NSImage;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
31 import dwt.internal.cocoa.NSImageRep;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
32 import dwt.internal.cocoa.NSMutableSet;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
33 import dwt.internal.cocoa.NSSize;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
34 import dwt.internal.cocoa.NSString;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
35 import dwt.internal.cocoa.NSURL;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
36 import dwt.internal.cocoa.NSWorkspace;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
37 import dwt.internal.cocoa.OS;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
38 import dwt.internal.cocoa.id;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
39
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
40 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
41 * Instances of this class represent programs and
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
42 * their associated file extensions in the operating
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
43 * system.
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
44 *
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
45 * @see <a href="http://www.eclipse.org/swt/snippets/#program">Program snippets</a>
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
46 * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
47 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
48 public final class Program {
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
49 String name, fullPath, identifier;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
50
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
51 static final String PREFIX_FILE = "file://"; //$NON-NLS-1$
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
52 static final String PREFIX_HTTP = "http://"; //$NON-NLS-1$
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
53 static final String PREFIX_HTTPS = "https://"; //$NON-NLS-1$
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
54
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
55 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
56 * Prevents uninitialized instances from being created outside the package.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
57 */
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
58 Program () {
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
59 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
60
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
61 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
62 * Finds the program that is associated with an extension.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
63 * The extension may or may not begin with a '.'. Note that
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
64 * a <code>Display</code> must already exist to guarantee that
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
65 * this method returns an appropriate result.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
66 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
67 * @param extension the program extension
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
68 * @return the program or <code>null</code>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
69 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
70 * @exception IllegalArgumentException <ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
71 * <li>ERROR_NULL_ARGUMENT when extension is null</li>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
72 * </ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
73 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
74 public static Program findProgram (String extension) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
75 if (extension is null) DWT.error (DWT.ERROR_NULL_ARGUMENT);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
76 if (extension.length () is 0) return null;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
77 if (extension.charAt(0) !is '.') extension = "." + extension;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
78 NSAutoreleasePool pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
79 try {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
80 NSWorkspace workspace = NSWorkspace.sharedWorkspace();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
81 int /*long*/ appName = OS.malloc(C.PTR_SIZEOF);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
82 int /*long*/ type = OS.malloc(C.PTR_SIZEOF);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
83 NSString temp = new NSString(OS.NSTemporaryDirectory());
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
84 NSString fileName = NSString.stringWith("swt" + System.currentTimeMillis() + extension);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
85 NSString fullPath = temp.stringByAppendingPathComponent(fileName);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
86 NSFileManager fileManager = NSFileManager.defaultManager();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
87 fileManager.createFileAtPath(fullPath, null, null);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
88 workspace.getInfoForFile(fullPath, appName, type);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
89 fileManager.removeItemAtPath(fullPath, 0);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
90 int /*long*/ [] buffer = new int /*long*/[1];
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
91 OS.memmove(buffer, appName, C.PTR_SIZEOF);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
92 OS.free(appName);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
93 OS.free(type);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
94 if (buffer [0] !is 0) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
95 NSString appPath = new NSString(buffer[0]);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
96 NSBundle bundle = NSBundle.bundleWithPath(appPath);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
97 if (bundle !is null) return getProgram(bundle);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
98 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
99 return null;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
100 } finally {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
101 pool.release();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
102 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
103 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
104
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
105 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
106 * Answer all program extensions in the operating system. Note
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
107 * that a <code>Display</code> must already exist to guarantee
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
108 * that this method returns an appropriate result.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
109 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
110 * @return an array of extensions
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
111 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
112 public static String [] getExtensions () {
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
113 NSAutoreleasePool pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
114 try {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
115 NSMutableSet supportedDocumentTypes = (NSMutableSet)NSMutableSet.set();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
116 NSWorkspace workspace = NSWorkspace.sharedWorkspace();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
117 NSString CFBundleDocumentTypes = NSString.stringWith("CFBundleDocumentTypes");
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
118 NSString CFBundleTypeExtensions = NSString.stringWith("CFBundleTypeExtensions");
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
119 NSArray array = new NSArray(OS.NSSearchPathForDirectoriesInDomains(OS.NSAllApplicationsDirectory, OS.NSAllDomainsMask, true));
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
120 int count = (int)/*64*/array.count();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
121 for (int i = 0; i < count; i++) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
122 NSString path = new NSString(array.objectAtIndex(i));
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
123 NSFileManager fileManager = NSFileManager.defaultManager();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
124 NSDirectoryEnumerator enumerator = fileManager.enumeratorAtPath(path);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
125 if (enumerator !is null) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
126 id id;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
127 while ((id = enumerator.nextObject()) !is null) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
128 enumerator.skipDescendents();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
129 NSString filePath = new NSString(id.id);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
130 NSString fullPath = path.stringByAppendingPathComponent(filePath);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
131 if (workspace.isFilePackageAtPath(fullPath)) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
132 NSBundle bundle = NSBundle.bundleWithPath(fullPath);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
133 id = bundle.infoDictionary().objectForKey(CFBundleDocumentTypes);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
134 if (id !is null) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
135 NSDictionary documentTypes = new NSDictionary(id.id);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
136 NSEnumerator documentTypesEnumerator = documentTypes.objectEnumerator();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
137 while ((id = documentTypesEnumerator.nextObject()) !is null) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
138 NSDictionary documentType = new NSDictionary(id.id);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
139 id = documentType.objectForKey(CFBundleTypeExtensions);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
140 if (id !is null) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
141 supportedDocumentTypes.addObjectsFromArray(new NSArray(id.id));
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
142 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
143 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
144 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
145 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
146 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
147 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
148 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
149 int i = 0;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
150 String[] exts = new String[(int)/*64*/supportedDocumentTypes.count()];
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
151 NSEnumerator enumerator = supportedDocumentTypes.objectEnumerator();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
152 id id;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
153 while ((id = enumerator.nextObject()) !is null) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
154 String ext = new NSString(id.id).getString();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
155 if (!ext.equals("*")) exts[i++] = "." + ext;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
156 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
157 if (i !is exts.length) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
158 String[] temp = new String[i];
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
159 System.arraycopy(exts, 0, temp, 0, i);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
160 exts = temp;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
161 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
162 return exts;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
163 } finally {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
164 pool.release();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
165 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
166 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
167
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
168 static Program getProgram(NSBundle bundle) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
169 NSString CFBundleName = NSString.stringWith("CFBundleName");
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
170 NSString CFBundleDisplayName = NSString.stringWith("CFBundleDisplayName");
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
171 NSString fullPath = bundle.bundlePath();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
172 NSString identifier = bundle.bundleIdentifier();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
173 id bundleName = bundle.objectForInfoDictionaryKey(CFBundleDisplayName);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
174 if (bundleName is null) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
175 bundleName = bundle.objectForInfoDictionaryKey(CFBundleName);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
176 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
177 if (bundleName is null) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
178 bundleName = fullPath.lastPathComponent().stringByDeletingPathExtension();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
179 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
180 NSString name = new NSString(bundleName.id);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
181 Program program = new Program();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
182 program.name = name.getString();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
183 program.fullPath = fullPath.getString();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
184 program.identifier = identifier !is null ? identifier.getString() : "";
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
185 return program;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
186 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
187
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
188 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
189 * Answers all available programs in the operating system. Note
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
190 * that a <code>Display</code> must already exist to guarantee
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
191 * that this method returns an appropriate result.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
192 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
193 * @return an array of programs
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
194 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
195 public static Program [] getPrograms () {
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
196 NSAutoreleasePool pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
197 try {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
198 Vector vector = new Vector();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
199 NSWorkspace workspace = NSWorkspace.sharedWorkspace();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
200 NSArray array = new NSArray(OS.NSSearchPathForDirectoriesInDomains(OS.NSAllApplicationsDirectory, OS.NSAllDomainsMask, true));
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
201 int count = (int)/*64*/array.count();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
202 for (int i = 0; i < count; i++) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
203 NSString path = new NSString(array.objectAtIndex(i));
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
204 NSFileManager fileManager = NSFileManager.defaultManager();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
205 NSDirectoryEnumerator enumerator = fileManager.enumeratorAtPath(path);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
206 if (enumerator !is null) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
207 id id;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
208 while ((id = enumerator.nextObject()) !is null) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
209 enumerator.skipDescendents();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
210 NSString fullPath = path.stringByAppendingPathComponent(new NSString(id.id));
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
211 if (workspace.isFilePackageAtPath(fullPath)) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
212 NSBundle bundle = NSBundle.bundleWithPath(fullPath);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
213 vector.addElement(getProgram(bundle));
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
214 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
215 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
216 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
217 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
218 Program[] programs = new Program[vector.size()];
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
219 vector.copyInto(programs);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
220 return programs;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
221 } finally {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
222 pool.release();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
223 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
224 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
225
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
226 /**
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
227 * Launches the operating system executable associated with the file or
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
228 * URL (http:// or https://). If the file is an executable then the
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
229 * executable is launched. Note that a <code>Display</code> must already
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
230 * exist to guarantee that this method returns an appropriate result.
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
231 *
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
232 * @param fileName the file or program name or URL (http:// or https://)
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
233 * @return <code>true</code> if the file is launched, otherwise <code>false</code>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
234 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
235 * @exception IllegalArgumentException <ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
236 * <li>ERROR_NULL_ARGUMENT when fileName is null</li>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
237 * </ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
238 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
239 public static bool launch (String fileName) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
240 if (fileName is null) DWT.error (DWT.ERROR_NULL_ARGUMENT);
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
241 NSAutoreleasePool pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
242 try {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
243 NSString unescapedStr = NSString.stringWith("%"); //$NON-NLS-1$
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
244 if (fileName.indexOf(':') is -1) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
245 fileName = PREFIX_FILE + fileName;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
246 } else {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
247 String lowercaseName = fileName.toLowerCase ();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
248 if (lowercaseName.startsWith (PREFIX_HTTP) || lowercaseName.startsWith (PREFIX_HTTPS)) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
249 unescapedStr = NSString.stringWith("%#"); //$NON-NLS-1$
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
250 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
251 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
252 NSString fullPath = NSString.stringWith(fileName);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
253 int /*long*/ ptr = OS.CFURLCreateStringByAddingPercentEscapes(0, fullPath.id, unescapedStr.id, 0, OS.kCFStringEncodingUTF8);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
254 NSString escapedString = new NSString(ptr);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
255 NSWorkspace workspace = NSWorkspace.sharedWorkspace();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
256 bool result = workspace.openURL(NSURL.URLWithString(escapedString));
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
257 OS.CFRelease(ptr);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
258 return result;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
259 } finally {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
260 pool.release();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
261 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
262 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
263
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
264 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
265 * Executes the program with the file as the single argument
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
266 * in the operating system. It is the responsibility of the
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
267 * programmer to ensure that the file contains valid data for
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
268 * this program.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
269 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
270 * @param fileName the file or program name
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
271 * @return <code>true</code> if the file is launched, otherwise <code>false</code>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
272 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
273 * @exception IllegalArgumentException <ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
274 * <li>ERROR_NULL_ARGUMENT when fileName is null</li>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
275 * </ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
276 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
277 public bool execute (String fileName) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
278 if (fileName is null) DWT.error(DWT.ERROR_NULL_ARGUMENT);
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
279 NSAutoreleasePool pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
280 try {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
281 NSWorkspace workspace = NSWorkspace.sharedWorkspace();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
282 NSString fullPath = NSString.stringWith(fileName);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
283 if (fileName.indexOf(':') is -1) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
284 return workspace.openFile(fullPath, NSString.stringWith(name));
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
285 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
286 NSString unescapedStr = NSString.stringWith("%"); //$NON-NLS-1$
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
287 String lowercaseName = fileName.toLowerCase ();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
288 if (lowercaseName.startsWith (PREFIX_HTTP) || lowercaseName.startsWith (PREFIX_HTTPS)) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
289 unescapedStr = NSString.stringWith("%#"); //$NON-NLS-1$
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
290 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
291 int /*long*/ ptr = OS.CFURLCreateStringByAddingPercentEscapes(0, fullPath.id, unescapedStr.id, 0, OS.kCFStringEncodingUTF8);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
292 NSString escapedString = new NSString(ptr);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
293 NSArray urls = NSArray.arrayWithObject(NSURL.URLWithString(escapedString));
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
294 OS.CFRelease(ptr);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
295 return workspace.openURLs(urls, NSString.stringWith(identifier), 0, null, 0);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
296 } finally {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
297 pool.release();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
298 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
299 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
300
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
301 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
302 * Returns the receiver's image data. This is the icon
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
303 * that is associated with the receiver in the operating
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
304 * system.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
305 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
306 * @return the image data for the program, may be null
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
307 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
308 public ImageData getImageData () {
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
309 NSAutoreleasePool pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
310 try {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
311 NSWorkspace workspace = NSWorkspace.sharedWorkspace();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
312 NSString fullPath;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
313 if (this.fullPath !is null) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
314 fullPath = NSString.stringWith(this.fullPath);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
315 } else {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
316 fullPath = workspace.fullPathForApplication(NSString.stringWith(name));
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
317 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
318 if (fullPath !is null) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
319 NSImage nsImage = workspace.iconForFile(fullPath);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
320 if (nsImage !is null) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
321 NSSize size = new NSSize();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
322 size.width = size.height = 16;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
323 nsImage.setSize(size);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
324 NSBitmapImageRep imageRep = null;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
325 NSImageRep rep = nsImage.bestRepresentationForDevice(null);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
326 if (rep.isKindOfClass(OS.class_NSBitmapImageRep)) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
327 imageRep = new NSBitmapImageRep(rep.id);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
328 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
329 if (imageRep !is null) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
330 int width = (int)/*64*/imageRep.pixelsWide();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
331 int height = (int)/*64*/imageRep.pixelsHigh();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
332 int bpr = (int)/*64*/imageRep.bytesPerRow();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
333 int bpp = (int)/*64*/imageRep.bitsPerPixel();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
334 int dataSize = height * bpr;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
335 byte[] srcData = new byte[dataSize];
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
336 OS.memmove(srcData, imageRep.bitmapData(), dataSize);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
337 //TODO check color info
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
338 PaletteData palette = new PaletteData(0xFF000000, 0xFF0000, 0xFF00);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
339 ImageData data = new ImageData(width, height, bpp, palette, 4, srcData);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
340 data.bytesPerLine = bpr;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
341 data.alphaData = new byte[width * height];
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
342 for (int i = 3, o = 0; i < srcData.length; i+= 4, o++) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
343 data.alphaData[o] = srcData[i];
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
344 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
345 return data;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
346 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
347 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
348 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
349 return null;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
350 } finally {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
351 pool.release();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
352 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
353 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
354
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
355 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
356 * Returns the receiver's name. This is as short and
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
357 * descriptive a name as possible for the program. If
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
358 * the program has no descriptive name, this string may
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
359 * be the executable name, path or empty.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
360 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
361 * @return the name of the program
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
362 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
363 public String getName () {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
364 return name;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
365 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
366
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
367 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
368 * Compares the argument to the receiver, and returns true
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
369 * if they represent the <em>same</em> object using a class
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
370 * specific comparison.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
371 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
372 * @param other the object to compare with this object
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
373 * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
374 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
375 * @see #hashCode()
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
376 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
377 public bool equals(Object other) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
378 if (this is other) return true;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
379 if (other instanceof Program) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
380 final Program program = (Program) other;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
381 return name.equals(program.name);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
382 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
383 return false;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
384 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
385
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
386 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
387 * Returns an integer hash code for the receiver. Any two
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
388 * objects that return <code>true</code> when passed to
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
389 * <code>equals</code> must return the same value for this
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
390 * method.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
391 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
392 * @return the receiver's hash
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
393 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
394 * @see #equals(Object)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
395 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
396 public int hashCode() {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
397 return name.hashCode();
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
398 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
399
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
400 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
401 * Returns a string containing a concise, human-readable
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
402 * description of the receiver.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
403 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
404 * @return a string representation of the program
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
405 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
406 public String toString () {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
407 return "Program {" + name + "}";
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
408 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
409
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
410 }