Mercurial > projects > dwt2
annotate org.eclipse.swt.gtk.linux.x86/src/org/eclipse/swt/browser/Download_1_8.d @ 49:7a2dd761a8b2
more work until dmd 2.026 linux segfaults.
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Fri, 27 Mar 2009 12:59:54 +0100 |
parents | f589fc20a5f9 |
children | 7e78af7adab5 |
rev | line source |
---|---|
25 | 1 /******************************************************************************* |
2 * Copyright (c) 2003, 2007 IBM Corporation and others. | |
3 * All rights reserved. This program and the accompanying materials | |
4 * are made available under the terms of the Eclipse Public License v1.0 | |
5 * which accompanies this distribution, and is available at | |
6 * http://www.eclipse.org/legal/epl-v10.html | |
7 * | |
8 * Contributors: | |
9 * IBM Corporation - initial API and implementation | |
10 * Port to the D programming language: | |
11 * John Reimer <terminal.node@gmail.com> | |
12 *******************************************************************************/ | |
13 module org.eclipse.swt.browser.Download_1_8; | |
14 | |
15 import java.lang.all; | |
16 | |
17 import org.eclipse.swt.SWT; | |
18 | |
19 import XPCOM = org.eclipse.swt.internal.mozilla.XPCOM; | |
20 | |
21 import org.eclipse.swt.internal.mozilla.Common; | |
22 import org.eclipse.swt.internal.mozilla.prtime; | |
23 import org.eclipse.swt.internal.mozilla.nsICancelable; | |
24 import org.eclipse.swt.internal.mozilla.nsID; | |
25 import org.eclipse.swt.internal.mozilla.nsIDownload_1_8; | |
26 import org.eclipse.swt.internal.mozilla.nsIProgressDialog_1_8; | |
27 import org.eclipse.swt.internal.mozilla.nsISupports; | |
28 import org.eclipse.swt.internal.mozilla.nsIURI; | |
29 import org.eclipse.swt.internal.mozilla.nsIWebProgressListener; | |
30 import org.eclipse.swt.internal.mozilla.nsIMIMEInfo; | |
31 import org.eclipse.swt.internal.mozilla.nsIObserver; | |
32 import org.eclipse.swt.internal.mozilla.nsIDOMWindow; | |
33 import org.eclipse.swt.internal.mozilla.nsIWebProgress; | |
34 import org.eclipse.swt.internal.mozilla.nsIRequest; | |
35 import org.eclipse.swt.internal.mozilla.nsILocalFile; | |
36 import org.eclipse.swt.internal.mozilla.nsStringAPI; | |
37 import org.eclipse.swt.internal.mozilla.nsEmbedString; | |
38 | |
39 import org.eclipse.swt.browser.Mozilla; | |
40 | |
41 import org.eclipse.swt.layout.GridData; | |
42 import org.eclipse.swt.layout.GridLayout; | |
43 import org.eclipse.swt.widgets.Button; | |
44 import org.eclipse.swt.widgets.Event; | |
45 import org.eclipse.swt.widgets.Label; | |
46 import org.eclipse.swt.widgets.Listener; | |
47 import org.eclipse.swt.widgets.Shell; | |
48 | |
49 class Download_1_8 : nsIProgressDialog_1_8 { | |
50 nsICancelable cancelable; | |
51 int refCount = 0; | |
52 | |
53 Shell shell; | |
54 Label status; | |
55 Button cancel; | |
56 | |
49
7a2dd761a8b2
more work until dmd 2.026 linux segfaults.
Frank Benoit <benoit@tionex.de>
parents:
26
diff
changeset
|
57 //static const bool is32 = C.PTR_SIZEOF is 4; //determine if 32 or 64 bit platform? |
25 | 58 |
59 this () { | |
60 } | |
61 | |
62 extern(System) | |
63 nsrefcnt AddRef () { | |
64 refCount++; | |
65 return refCount; | |
66 } | |
67 | |
68 extern(System) | |
69 nsresult QueryInterface ( nsID* riid, void** ppvObject) { | |
70 if (riid is null || ppvObject is null) return XPCOM.NS_ERROR_NO_INTERFACE; | |
71 | |
72 if (*riid == nsISupports.IID) { | |
73 *ppvObject = cast(void*)cast(nsISupports)this; | |
74 AddRef(); | |
75 return XPCOM.NS_OK; | |
76 } | |
77 if (*riid == nsIDownload_1_8.IID) { | |
78 *ppvObject = cast(void*)cast(nsIDownload_1_8)this; | |
79 AddRef(); | |
80 return XPCOM.NS_OK; | |
81 } | |
82 if (*riid == nsIProgressDialog_1_8.IID) { | |
83 *ppvObject = cast(void*)cast(nsIProgressDialog_1_8)this; | |
84 AddRef(); | |
85 return XPCOM.NS_OK; | |
86 } | |
87 if (*riid == nsIWebProgressListener.IID) { | |
88 *ppvObject = cast(void*)cast(nsIWebProgressListener)this; | |
89 AddRef(); | |
90 return XPCOM.NS_OK; | |
91 } | |
92 *ppvObject = null; | |
93 return XPCOM.NS_ERROR_NO_INTERFACE; | |
94 } | |
95 | |
96 extern(System) | |
97 nsrefcnt Release () { | |
98 refCount--; | |
99 if (refCount is 0) return 0; | |
100 return refCount; | |
101 } | |
102 | |
103 /* nsIDownload */ | |
104 | |
105 /* Note. The argument startTime is defined as a PRInt64. This translates into two java ints. */ | |
106 extern(System) | |
107 nsresult Init_32 (nsIURI aSource, nsIURI aTarget, nsAString* aDisplayName, nsIMIMEInfo aMIMEInfo, PRInt32 startTime1, PRInt32 startTime2, nsILocalFile aTempFile, nsICancelable aCancelable) { | |
108 long startTime = (startTime2 << 32) + startTime1; | |
109 return Init (aSource, aTarget, aDisplayName, aMIMEInfo, startTime, aTempFile, aCancelable); | |
110 } | |
111 | |
112 // FIXME: I've hardcoded the string values in place of Compatibility.getMessage calls in | |
113 // the Init method; this will need fixing in future releases. -JJR | |
114 extern(System) | |
115 nsresult Init (nsIURI aSource, nsIURI aTarget, nsAString* aDisplayName, nsIMIMEInfo aMIMEInfo, PRTime startTime, nsILocalFile aTempFile, nsICancelable aCancelable) { | |
116 cancelable = aCancelable; | |
117 // nsIURI source = new nsIURI (aSource); | |
118 scope auto aSpec = new nsEmbedCString; | |
119 int rc = aSource.GetHost (cast(nsACString*)aSpec); | |
120 if (rc !is XPCOM.NS_OK) Mozilla.error(rc,__FILE__,__LINE__); | |
121 //int length = XPCOM.nsEmbedCString_Length (aSpec); | |
122 //int /*long*/ buffer = XPCOM.nsEmbedCString_get (aSpec); | |
123 //byte[] dest = new byte[length]; | |
124 //XPCOM.memmove (dest, buffer, length); | |
125 //XPCOM.nsEmbedCString_delete (aSpec); | |
126 String url = aSpec.toString; | |
127 | |
128 //nsIURI target = new nsIURI (aTarget); | |
129 scope auto aPath = new nsEmbedCString; | |
130 rc = aTarget.GetPath (cast(nsACString*)aPath); | |
131 if (rc !is XPCOM.NS_OK) Mozilla.error (rc); | |
132 //length = XPCOM.nsEmbedCString_Length (aPath); | |
133 //buffer = XPCOM.nsEmbedCString_get (aPath); | |
134 //dest = new byte[length]; | |
135 //XPCOM.memmove (dest, buffer, length); | |
136 //XPCOM.nsEmbedCString_delete (aPath); | |
137 String filename = aPath.toString; | |
138 //int separator = locatePrior(filename, System.getProperty ("file.separator")); | |
139 int separator = filename.lastIndexOf (System.getProperty ("file.separator")); //$NON-NLS-1$ | |
140 // NOTE: Not sure if this is correct; watch out for bugs here. -JJR | |
141 filename = filename.substring (separator + 1); | |
142 | |
143 Listener listener = new class() Listener { | |
144 public void handleEvent (Event event) { | |
145 if (event.widget is cancel) { | |
146 shell.close (); | |
147 } | |
148 if (cancelable !is null) { | |
149 int rc = cancelable.Cancel (XPCOM.NS_BINDING_ABORTED); | |
150 if (rc !is XPCOM.NS_OK) Mozilla.error (rc,__FILE__,__LINE__); | |
151 } | |
152 shell = null; | |
153 cancelable = null; | |
154 } | |
155 }; | |
156 shell = new Shell (SWT.DIALOG_TRIM); | |
157 // FIXME: A working Compatibility.getMessage has not been ported yet | |
158 // Strings hardcoded for now. | |
159 //String msg = Compatibility.getMessage ("SWT_Download_File", new Object[] {filename}); //$NON-NLS-1$ | |
160 shell.setText ("Download: " ~ filename); | |
161 GridLayout gridLayout = new GridLayout (); | |
162 gridLayout.marginHeight = 15; | |
163 gridLayout.marginWidth = 15; | |
164 gridLayout.verticalSpacing = 20; | |
165 shell.setLayout (gridLayout); | |
166 //msg = Compatibility.getMessage ("SWT_Download_Location", new Object[] {filename, url}); //$NON-NLS-1$ | |
167 auto lbl = new Label (shell, SWT.SIMPLE); | |
168 lbl.setText ("Saving " ~ filename ~ " from " ~ url ); | |
169 status = new Label (shell, SWT.SIMPLE); | |
170 //msg = Compatibility.getMessage ("SWT_Download_Started"); //$NON-NLS-1$ | |
171 status.setText ("Downloading..."); | |
172 GridData data = new GridData (); | |
173 data.grabExcessHorizontalSpace = true; | |
174 data.grabExcessVerticalSpace = true; | |
175 status.setLayoutData (data); | |
176 | |
177 cancel = new Button (shell, SWT.PUSH); | |
178 cancel.setText( "Cancel" ); | |
179 //cancel.setText (SWT.getMessage ("SWT_Cancel")); //$NON-NLS-1$ | |
180 data = new GridData (); | |
181 data.horizontalAlignment = GridData.CENTER; | |
182 cancel.setLayoutData (data); | |
183 cancel.addListener (SWT.Selection, listener); | |
184 shell.addListener (SWT.Close, listener); | |
185 shell.pack (); | |
186 shell.open (); | |
187 return XPCOM.NS_OK; | |
188 } | |
189 | |
190 extern(System) | |
191 nsresult GetAmountTransferred (PRUint64* arg0) { | |
192 return XPCOM.NS_ERROR_NOT_IMPLEMENTED; | |
193 } | |
194 | |
195 extern(System) | |
196 nsresult GetCancelable (nsICancelable* arg0) { | |
197 return XPCOM.NS_ERROR_NOT_IMPLEMENTED; | |
198 } | |
199 | |
200 extern(System) | |
201 nsresult GetDisplayName (PRUnichar** aDisplayName) { | |
202 return XPCOM.NS_ERROR_NOT_IMPLEMENTED; | |
203 } | |
204 | |
205 extern(System) | |
206 nsresult GetMIMEInfo (nsIMIMEInfo* aMIMEInfo) { | |
207 return XPCOM.NS_ERROR_NOT_IMPLEMENTED; | |
208 } | |
209 | |
210 extern(System) | |
211 nsresult GetPercentComplete (PRInt32* aPercentComplete) { | |
212 return XPCOM.NS_ERROR_NOT_IMPLEMENTED; | |
213 } | |
214 | |
215 extern(System) | |
216 nsresult GetSize (PRUint64* arg0) { | |
217 return XPCOM.NS_ERROR_NOT_IMPLEMENTED; | |
218 } | |
219 | |
220 extern(System) | |
221 nsresult GetSource (nsIURI* aSource) { | |
222 return XPCOM.NS_ERROR_NOT_IMPLEMENTED; | |
223 } | |
224 | |
225 extern(System) | |
226 nsresult GetStartTime (PRInt64* aStartTime) { | |
227 return XPCOM.NS_ERROR_NOT_IMPLEMENTED; | |
228 } | |
229 | |
230 extern(System) | |
231 nsresult GetTarget (nsIURI* aTarget) { | |
232 return XPCOM.NS_ERROR_NOT_IMPLEMENTED; | |
233 } | |
234 | |
235 extern(System) | |
236 nsresult GetTargetFile (nsILocalFile* arg0) { | |
237 return XPCOM.NS_ERROR_NOT_IMPLEMENTED; | |
238 } | |
239 | |
240 /* nsIProgressDialog */ | |
241 | |
242 extern(System) | |
243 nsresult GetCancelDownloadOnClose (PRBool* aCancelDownloadOnClose) { | |
244 return XPCOM.NS_ERROR_NOT_IMPLEMENTED; | |
245 } | |
246 | |
247 extern(System) | |
248 nsresult GetDialog (nsIDOMWindow* aDialog) { | |
249 return XPCOM.NS_ERROR_NOT_IMPLEMENTED; | |
250 } | |
251 | |
252 extern(System) | |
253 nsresult GetObserver (nsIObserver* aObserver) { | |
254 return XPCOM.NS_ERROR_NOT_IMPLEMENTED; | |
255 } | |
256 | |
257 extern(System) | |
258 nsresult Open (nsIDOMWindow aParent) { | |
259 return XPCOM.NS_ERROR_NOT_IMPLEMENTED; | |
260 } | |
261 | |
262 extern(System) | |
263 nsresult SetCancelDownloadOnClose (PRBool aCancelDownloadOnClose) { | |
264 return XPCOM.NS_ERROR_NOT_IMPLEMENTED; | |
265 } | |
266 | |
267 extern(System) | |
268 nsresult SetDialog (nsIDOMWindow aDialog) { | |
269 return XPCOM.NS_ERROR_NOT_IMPLEMENTED; | |
270 } | |
271 | |
272 extern(System) | |
273 nsresult SetObserver (nsIObserver aObserver) { | |
274 return XPCOM.NS_ERROR_NOT_IMPLEMENTED; | |
275 } | |
276 | |
277 /* nsIWebProgressListener */ | |
278 | |
279 extern(System) | |
280 nsresult OnLocationChange (nsIWebProgress aWebProgress, nsIRequest aRequest, nsIURI aLocation) { | |
281 return XPCOM.NS_OK; | |
282 } | |
283 | |
284 extern(System) | |
285 nsresult OnProgressChange (nsIWebProgress aWebProgress, nsIRequest aRequest, PRInt32 aCurSelfProgress, PRInt32 aMaxSelfProgress, PRInt32 aCurTotalProgress, PRInt32 aMaxTotalProgress) { | |
286 return OnProgressChange64 (aWebProgress, aRequest, aCurSelfProgress, aMaxSelfProgress, aCurTotalProgress, aMaxTotalProgress); | |
287 } | |
288 /++ | |
289 /* Note. The last 4 args in the original interface are defined as PRInt64. These each translate into two java ints. */ | |
290 nsresult OnProgressChange64_32 (int /*long*/ aWebProgress, int /*long*/ aRequest, int /*long*/ aCurSelfProgress1, int /*long*/ aCurSelfProgress2, int /*long*/ aMaxSelfProgress1, int /*long*/ aMaxSelfProgress2, int /*long*/ aCurTotalProgress1, int /*long*/ aCurTotalProgress2, int /*long*/ aMaxTotalProgress1, int /*long*/ aMaxTotalProgress2) { | |
291 long aCurSelfProgress = (aCurSelfProgress2 << 32) + aCurSelfProgress1; | |
292 long aMaxSelfProgress = (aMaxSelfProgress2 << 32) + aMaxSelfProgress1; | |
293 long aCurTotalProgress = (aCurTotalProgress2 << 32) + aCurTotalProgress1; | |
294 long aMaxTotalProgress = (aMaxTotalProgress2 << 32) + aMaxTotalProgress1; | |
295 return OnProgressChange64 (aWebProgress, aRequest, aCurSelfProgress, aMaxSelfProgress, aCurTotalProgress, aMaxTotalProgress); | |
296 } | |
297 ++/ | |
298 extern(System) | |
299 nsresult OnProgressChange64 (nsIWebProgress aWebProgress, nsIRequest aRequest, PRInt64 aCurSelfProgress, PRInt64 aMaxSelfProgress, PRInt64 aCurTotalProgress, PRInt64 aMaxTotalProgress) { | |
300 long currentKBytes = aCurTotalProgress / 1024; | |
301 long totalKBytes = aMaxTotalProgress / 1024; | |
302 if (shell !is null && !shell.isDisposed ()) { | |
303 //Object[] arguments = {new Long (currentKBytes), new Long (totalKBytes)}; | |
304 //String statusMsg = Compatibility.getMessage ("SWT_Download_Status", arguments); //$NON-NLS-1$ | |
305 String statusMsg = Format("Download: {0} KB of {1} KB", currentKBytes, totalKBytes); | |
306 status.setText (statusMsg); | |
307 shell.layout (true); | |
308 shell.getDisplay ().update (); | |
309 } | |
310 return XPCOM.NS_OK; | |
311 } | |
312 | |
313 extern(System) | |
314 nsresult OnSecurityChange (nsIWebProgress aWebProgress, nsIRequest aRequest, PRUint32 state) { | |
315 return XPCOM.NS_OK; | |
316 } | |
317 | |
318 extern(System) | |
319 nsresult OnStateChange (nsIWebProgress aWebProgress, nsIRequest aRequest, PRUint32 aStateFlags, nsresult aStatus) { | |
320 if ((aStateFlags & nsIWebProgressListener.STATE_STOP) !is 0) { | |
321 cancelable = null; | |
322 if (shell !is null && !shell.isDisposed ()) shell.dispose (); | |
323 shell = null; | |
324 } | |
325 return XPCOM.NS_OK; | |
326 } | |
327 | |
328 extern(System) | |
329 nsresult OnStatusChange (nsIWebProgress aWebProgress, nsIRequest aRequest, nsresult aStatus, PRUnichar* aMessage) { | |
330 return XPCOM.NS_OK; | |
331 } | |
332 } |