Mercurial > projects > dwt-mac
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 |
rev | line source |
---|---|
0
380af2bdd8e5
Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff
changeset
|
1 /******************************************************************************* |
45 | 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 | 16 import java.util.Vector; |
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 | 20 import dwt.graphics.PaletteData; |
21 import dwt.internal.C; | |
22 import dwt.internal.cocoa.NSArray; | |
23 import dwt.internal.cocoa.NSAutoreleasePool; | |
24 import dwt.internal.cocoa.NSBitmapImageRep; | |
25 import dwt.internal.cocoa.NSBundle; | |
26 import dwt.internal.cocoa.NSDictionary; | |
27 import dwt.internal.cocoa.NSDirectoryEnumerator; | |
28 import dwt.internal.cocoa.NSEnumerator; | |
29 import dwt.internal.cocoa.NSFileManager; | |
30 import dwt.internal.cocoa.NSImage; | |
31 import dwt.internal.cocoa.NSImageRep; | |
32 import dwt.internal.cocoa.NSMutableSet; | |
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 | 37 import dwt.internal.cocoa.OS; |
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 | 44 * |
45 * @see <a href="http://www.eclipse.org/swt/snippets/#program">Program snippets</a> | |
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 | 49 String name, fullPath, identifier; |
50 | |
51 static final String PREFIX_FILE = "file://"; //$NON-NLS-1$ | |
52 static final String PREFIX_HTTP = "http://"; //$NON-NLS-1$ | |
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 | 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 | 77 if (extension.charAt(0) !is '.') extension = "." + extension; |
78 NSAutoreleasePool pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init(); | |
79 try { | |
80 NSWorkspace workspace = NSWorkspace.sharedWorkspace(); | |
81 int /*long*/ appName = OS.malloc(C.PTR_SIZEOF); | |
82 int /*long*/ type = OS.malloc(C.PTR_SIZEOF); | |
83 NSString temp = new NSString(OS.NSTemporaryDirectory()); | |
84 NSString fileName = NSString.stringWith("swt" + System.currentTimeMillis() + extension); | |
85 NSString fullPath = temp.stringByAppendingPathComponent(fileName); | |
86 NSFileManager fileManager = NSFileManager.defaultManager(); | |
87 fileManager.createFileAtPath(fullPath, null, null); | |
88 workspace.getInfoForFile(fullPath, appName, type); | |
89 fileManager.removeItemAtPath(fullPath, 0); | |
90 int /*long*/ [] buffer = new int /*long*/[1]; | |
91 OS.memmove(buffer, appName, C.PTR_SIZEOF); | |
92 OS.free(appName); | |
93 OS.free(type); | |
94 if (buffer [0] !is 0) { | |
95 NSString appPath = new NSString(buffer[0]); | |
96 NSBundle bundle = NSBundle.bundleWithPath(appPath); | |
97 if (bundle !is null) return getProgram(bundle); | |
98 } | |
99 return null; | |
100 } finally { | |
101 pool.release(); | |
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 | 113 NSAutoreleasePool pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init(); |
114 try { | |
115 NSMutableSet supportedDocumentTypes = (NSMutableSet)NSMutableSet.set(); | |
116 NSWorkspace workspace = NSWorkspace.sharedWorkspace(); | |
117 NSString CFBundleDocumentTypes = NSString.stringWith("CFBundleDocumentTypes"); | |
118 NSString CFBundleTypeExtensions = NSString.stringWith("CFBundleTypeExtensions"); | |
119 NSArray array = new NSArray(OS.NSSearchPathForDirectoriesInDomains(OS.NSAllApplicationsDirectory, OS.NSAllDomainsMask, true)); | |
120 int count = (int)/*64*/array.count(); | |
121 for (int i = 0; i < count; i++) { | |
122 NSString path = new NSString(array.objectAtIndex(i)); | |
123 NSFileManager fileManager = NSFileManager.defaultManager(); | |
124 NSDirectoryEnumerator enumerator = fileManager.enumeratorAtPath(path); | |
125 if (enumerator !is null) { | |
126 id id; | |
127 while ((id = enumerator.nextObject()) !is null) { | |
128 enumerator.skipDescendents(); | |
129 NSString filePath = new NSString(id.id); | |
130 NSString fullPath = path.stringByAppendingPathComponent(filePath); | |
131 if (workspace.isFilePackageAtPath(fullPath)) { | |
132 NSBundle bundle = NSBundle.bundleWithPath(fullPath); | |
133 id = bundle.infoDictionary().objectForKey(CFBundleDocumentTypes); | |
134 if (id !is null) { | |
135 NSDictionary documentTypes = new NSDictionary(id.id); | |
136 NSEnumerator documentTypesEnumerator = documentTypes.objectEnumerator(); | |
137 while ((id = documentTypesEnumerator.nextObject()) !is null) { | |
138 NSDictionary documentType = new NSDictionary(id.id); | |
139 id = documentType.objectForKey(CFBundleTypeExtensions); | |
140 if (id !is null) { | |
141 supportedDocumentTypes.addObjectsFromArray(new NSArray(id.id)); | |
142 } | |
143 } | |
144 } | |
145 } | |
146 } | |
147 } | |
148 } | |
149 int i = 0; | |
150 String[] exts = new String[(int)/*64*/supportedDocumentTypes.count()]; | |
151 NSEnumerator enumerator = supportedDocumentTypes.objectEnumerator(); | |
152 id id; | |
153 while ((id = enumerator.nextObject()) !is null) { | |
154 String ext = new NSString(id.id).getString(); | |
155 if (!ext.equals("*")) exts[i++] = "." + ext; | |
156 } | |
157 if (i !is exts.length) { | |
158 String[] temp = new String[i]; | |
159 System.arraycopy(exts, 0, temp, 0, i); | |
160 exts = temp; | |
161 } | |
162 return exts; | |
163 } finally { | |
164 pool.release(); | |
165 } | |
166 } | |
167 | |
168 static Program getProgram(NSBundle bundle) { | |
169 NSString CFBundleName = NSString.stringWith("CFBundleName"); | |
170 NSString CFBundleDisplayName = NSString.stringWith("CFBundleDisplayName"); | |
171 NSString fullPath = bundle.bundlePath(); | |
172 NSString identifier = bundle.bundleIdentifier(); | |
173 id bundleName = bundle.objectForInfoDictionaryKey(CFBundleDisplayName); | |
174 if (bundleName is null) { | |
175 bundleName = bundle.objectForInfoDictionaryKey(CFBundleName); | |
176 } | |
177 if (bundleName is null) { | |
178 bundleName = fullPath.lastPathComponent().stringByDeletingPathExtension(); | |
179 } | |
180 NSString name = new NSString(bundleName.id); | |
181 Program program = new Program(); | |
182 program.name = name.getString(); | |
183 program.fullPath = fullPath.getString(); | |
184 program.identifier = identifier !is null ? identifier.getString() : ""; | |
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 | 196 NSAutoreleasePool pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init(); |
197 try { | |
198 Vector vector = new Vector(); | |
199 NSWorkspace workspace = NSWorkspace.sharedWorkspace(); | |
200 NSArray array = new NSArray(OS.NSSearchPathForDirectoriesInDomains(OS.NSAllApplicationsDirectory, OS.NSAllDomainsMask, true)); | |
201 int count = (int)/*64*/array.count(); | |
202 for (int i = 0; i < count; i++) { | |
203 NSString path = new NSString(array.objectAtIndex(i)); | |
204 NSFileManager fileManager = NSFileManager.defaultManager(); | |
205 NSDirectoryEnumerator enumerator = fileManager.enumeratorAtPath(path); | |
206 if (enumerator !is null) { | |
207 id id; | |
208 while ((id = enumerator.nextObject()) !is null) { | |
209 enumerator.skipDescendents(); | |
210 NSString fullPath = path.stringByAppendingPathComponent(new NSString(id.id)); | |
211 if (workspace.isFilePackageAtPath(fullPath)) { | |
212 NSBundle bundle = NSBundle.bundleWithPath(fullPath); | |
213 vector.addElement(getProgram(bundle)); | |
214 } | |
215 } | |
216 } | |
217 } | |
218 Program[] programs = new Program[vector.size()]; | |
219 vector.copyInto(programs); | |
220 return programs; | |
221 } finally { | |
222 pool.release(); | |
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 | 227 * Launches the operating system executable associated with the file or |
228 * URL (http:// or https://). If the file is an executable then the | |
229 * executable is launched. Note that a <code>Display</code> must already | |
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 | 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 | 241 NSAutoreleasePool pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init(); |
242 try { | |
243 NSString unescapedStr = NSString.stringWith("%"); //$NON-NLS-1$ | |
244 if (fileName.indexOf(':') is -1) { | |
245 fileName = PREFIX_FILE + fileName; | |
246 } else { | |
247 String lowercaseName = fileName.toLowerCase (); | |
248 if (lowercaseName.startsWith (PREFIX_HTTP) || lowercaseName.startsWith (PREFIX_HTTPS)) { | |
249 unescapedStr = NSString.stringWith("%#"); //$NON-NLS-1$ | |
250 } | |
251 } | |
252 NSString fullPath = NSString.stringWith(fileName); | |
253 int /*long*/ ptr = OS.CFURLCreateStringByAddingPercentEscapes(0, fullPath.id, unescapedStr.id, 0, OS.kCFStringEncodingUTF8); | |
254 NSString escapedString = new NSString(ptr); | |
255 NSWorkspace workspace = NSWorkspace.sharedWorkspace(); | |
256 bool result = workspace.openURL(NSURL.URLWithString(escapedString)); | |
257 OS.CFRelease(ptr); | |
258 return result; | |
259 } finally { | |
260 pool.release(); | |
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 | 279 NSAutoreleasePool pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init(); |
280 try { | |
281 NSWorkspace workspace = NSWorkspace.sharedWorkspace(); | |
282 NSString fullPath = NSString.stringWith(fileName); | |
283 if (fileName.indexOf(':') is -1) { | |
284 return workspace.openFile(fullPath, NSString.stringWith(name)); | |
285 } | |
286 NSString unescapedStr = NSString.stringWith("%"); //$NON-NLS-1$ | |
287 String lowercaseName = fileName.toLowerCase (); | |
288 if (lowercaseName.startsWith (PREFIX_HTTP) || lowercaseName.startsWith (PREFIX_HTTPS)) { | |
289 unescapedStr = NSString.stringWith("%#"); //$NON-NLS-1$ | |
290 } | |
291 int /*long*/ ptr = OS.CFURLCreateStringByAddingPercentEscapes(0, fullPath.id, unescapedStr.id, 0, OS.kCFStringEncodingUTF8); | |
292 NSString escapedString = new NSString(ptr); | |
293 NSArray urls = NSArray.arrayWithObject(NSURL.URLWithString(escapedString)); | |
294 OS.CFRelease(ptr); | |
295 return workspace.openURLs(urls, NSString.stringWith(identifier), 0, null, 0); | |
296 } finally { | |
297 pool.release(); | |
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 | 309 NSAutoreleasePool pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init(); |
310 try { | |
311 NSWorkspace workspace = NSWorkspace.sharedWorkspace(); | |
312 NSString fullPath; | |
313 if (this.fullPath !is null) { | |
314 fullPath = NSString.stringWith(this.fullPath); | |
315 } else { | |
316 fullPath = workspace.fullPathForApplication(NSString.stringWith(name)); | |
317 } | |
318 if (fullPath !is null) { | |
319 NSImage nsImage = workspace.iconForFile(fullPath); | |
320 if (nsImage !is null) { | |
321 NSSize size = new NSSize(); | |
322 size.width = size.height = 16; | |
323 nsImage.setSize(size); | |
324 NSBitmapImageRep imageRep = null; | |
325 NSImageRep rep = nsImage.bestRepresentationForDevice(null); | |
326 if (rep.isKindOfClass(OS.class_NSBitmapImageRep)) { | |
327 imageRep = new NSBitmapImageRep(rep.id); | |
328 } | |
329 if (imageRep !is null) { | |
330 int width = (int)/*64*/imageRep.pixelsWide(); | |
331 int height = (int)/*64*/imageRep.pixelsHigh(); | |
332 int bpr = (int)/*64*/imageRep.bytesPerRow(); | |
333 int bpp = (int)/*64*/imageRep.bitsPerPixel(); | |
334 int dataSize = height * bpr; | |
335 byte[] srcData = new byte[dataSize]; | |
336 OS.memmove(srcData, imageRep.bitmapData(), dataSize); | |
337 //TODO check color info | |
338 PaletteData palette = new PaletteData(0xFF000000, 0xFF0000, 0xFF00); | |
339 ImageData data = new ImageData(width, height, bpp, palette, 4, srcData); | |
340 data.bytesPerLine = bpr; | |
341 data.alphaData = new byte[width * height]; | |
342 for (int i = 3, o = 0; i < srcData.length; i+= 4, o++) { | |
343 data.alphaData[o] = srcData[i]; | |
344 } | |
345 return data; | |
346 } | |
347 } | |
348 } | |
349 return null; | |
350 } finally { | |
351 pool.release(); | |
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 | 379 if (other instanceof Program) { |
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 } |