Mercurial > projects > dwt-mac
diff dwt/browser/HelperAppLauncherDialog_1_9.d @ 125:5583f8eeee6c
Synced mozilla with dwt-linux
author | Jacob Carlborg <doob@me.com> |
---|---|
date | Fri, 16 Jan 2009 12:49:08 +0100 |
parents | d8635bb48c7c |
children |
line wrap: on
line diff
--- a/dwt/browser/HelperAppLauncherDialog_1_9.d Fri Jan 16 12:19:08 2009 +0100 +++ b/dwt/browser/HelperAppLauncherDialog_1_9.d Fri Jan 16 12:49:08 2009 +0100 @@ -7,96 +7,68 @@ * * Contributors: * IBM Corporation - initial API and implementation + * Ported to the D Programming Language: + * John Reimer <terminal.node@gmail.com> *******************************************************************************/ module dwt.browser.HelperAppLauncherDialog_1_9; +import tango.text.convert.Utf; import dwt.dwthelper.utils; import dwt.DWT; -import dwt.internal.C; -import dwt.internal.mozilla.XPCOM; -import dwt.internal.mozilla.XPCOMObject; + +import dwt.internal.mozilla.Common; + +import XPCOM = dwt.internal.mozilla.XPCOM; + import dwt.internal.mozilla.nsEmbedString; import dwt.internal.mozilla.nsID; import dwt.internal.mozilla.nsIHelperAppLauncherDialog_1_9; import dwt.internal.mozilla.nsIHelperAppLauncher_1_9; +import dwt.internal.mozilla.nsILocalFile; import dwt.internal.mozilla.nsISupports; +import dwt.internal.mozilla.nsStringAPI; +import dwt.internal.mozilla.nsEmbedString; + import dwt.widgets.FileDialog; import dwt.widgets.Shell; -/** - * This class implements the nsIHelperAppLauncherDialog interface for mozilla - * versions >= 1.9. For mozilla versions 1.4 - 1.8.x this interface is - * implemented by class HelperAppLauncherDialog. HelperAppLauncherDialogFactory - * determines at runtime which of these classes to instantiate. - */ -class HelperAppLauncherDialog_1_9 { - XPCOMObject supports; - XPCOMObject helperAppLauncherDialog; +import dwt.browser.Mozilla; + +class HelperAppLauncherDialog_1_9 : nsIHelperAppLauncherDialog_1_9 { + int refCount = 0; -HelperAppLauncherDialog_1_9 () { - createCOMInterfaces (); +this () { } -int AddRef () { +extern(System) +nsrefcnt AddRef () { refCount++; return refCount; } -void createCOMInterfaces () { - /* Create each of the interfaces that this object implements */ - supports = new XPCOMObject (new int[] {2, 0, 0}) { - public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);} - public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();} - public int /*long*/ method2 (int /*long*/[] args) {return Release ();} - }; - - helperAppLauncherDialog = new XPCOMObject (new int[] {2, 0, 0, 3, 6}) { - public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);} - public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();} - public int /*long*/ method2 (int /*long*/[] args) {return Release ();} - public int /*long*/ method3 (int /*long*/[] args) {return Show (args[0], args[1], (int)/*64*/args[2]);} - public int /*long*/ method4 (int /*long*/[] args) {return PromptForSaveToFile (args[0], args[1], args[2], args[3], (int)/*64*/args[4], args[5]);} - }; -} +extern(System) +nsresult QueryInterface (nsID* riid, void** ppvObject) { + if (riid is null || ppvObject is null) return XPCOM.NS_ERROR_NO_INTERFACE; -void disposeCOMInterfaces () { - if (supports !is null) { - supports.dispose (); - supports = null; - } - if (helperAppLauncherDialog !is null) { - helperAppLauncherDialog.dispose (); - helperAppLauncherDialog = null; - } -} - -int /*long*/ getAddress () { - return helperAppLauncherDialog.getAddress (); -} - -int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) { - if (riid is 0 || ppvObject is 0) return XPCOM.NS_ERROR_NO_INTERFACE; - nsID guid = new nsID (); - XPCOM.memmove (guid, riid, nsID.sizeof); - - if (guid.Equals (nsISupports.NS_ISUPPORTS_IID)) { - XPCOM.memmove (ppvObject, new int /*long*/[] {supports.getAddress ()}, C.PTR_SIZEOF); + if (*riid is nsISupports.IID) { + *ppvObject = cast(void*)cast(nsIHelperAppLauncherDialog_1_9)this; AddRef (); return XPCOM.NS_OK; } - if (guid.Equals (nsIHelperAppLauncherDialog_1_9.NS_IHELPERAPPLAUNCHERDIALOG_IID)) { - XPCOM.memmove (ppvObject, new int /*long*/[] {helperAppLauncherDialog.getAddress ()}, C.PTR_SIZEOF); + if (*riid is nsIHelperAppLauncherDialog_1_9.IID) { + *ppvObject = cast(void*)cast(nsIHelperAppLauncherDialog_1_9)this; AddRef (); return XPCOM.NS_OK; } - XPCOM.memmove (ppvObject, new int /*long*/[] {0}, C.PTR_SIZEOF); + *ppvObject = null; return XPCOM.NS_ERROR_NO_INTERFACE; } - -int Release () { + +extern(System) +nsresult Release () { refCount--; /* * Note. This instance lives as long as the download it is bound to. @@ -105,48 +77,54 @@ * cancels the File Dialog, cancels or closes the Download Dialog * and when the Download Dialog goes away after the download is completed. */ - if (refCount is 0) disposeCOMInterfaces (); + if (refCount is 0) return 0; return refCount; } /* nsIHelperAppLauncherDialog */ - -int Show (int /*long*/ aLauncher, int /*long*/ aContext, int aReason) { - nsIHelperAppLauncher_1_9 helperAppLauncher = new nsIHelperAppLauncher_1_9 (aLauncher); - return helperAppLauncher.SaveToDisk (0, 0); +extern(System) +nsresult Show (nsIHelperAppLauncher_1_9 aLauncher, nsISupports aContext, PRUint32 aReason) { + return aLauncher.SaveToDisk (null, 0); } -int PromptForSaveToFile (int /*long*/ aLauncher, int /*long*/ aWindowContext, int /*long*/ aDefaultFileName, int /*long*/ aSuggestedFileExtension, int aForcePrompt, int /*long*/ _retval) { - int length = XPCOM.strlen_PRUnichar (aDefaultFileName); - char[] dest = new char[length]; - XPCOM.memmove (dest, aDefaultFileName, length * 2); - String defaultFile = new String (dest); +extern(System) +nsresult PromptForSaveToFile (nsIHelperAppLauncher_1_9 aLauncher, nsISupports aWindowContext, PRUnichar* aDefaultFileName, PRUnichar* aSuggestedFileExtension, PRBool aForcePrompt, nsILocalFile* _retval) { + //int length = XPCOM.strlen_PRUnichar (aDefaultFileName); + //char[] dest = new char[length]; + //XPCOM.memmove (dest, aDefaultFileName, length * 2); + String defaultFile = Utf.toString(fromString16z(aDefaultFileName)); - length = XPCOM.strlen_PRUnichar (aSuggestedFileExtension); - dest = new char[length]; - XPCOM.memmove (dest, aSuggestedFileExtension, length * 2); - String suggestedFileExtension = new String (dest); + //length = XPCOM.strlen_PRUnichar (aSuggestedFileExtension); + //dest = new char[length]; + //XPCOM.memmove (dest, aSuggestedFileExtension, length * 2); + String suggestedFileExtension = Utf.toString(fromString16z(aSuggestedFileExtension)); Shell shell = new Shell (); FileDialog fileDialog = new FileDialog (shell, DWT.SAVE); fileDialog.setFileName (defaultFile); - fileDialog.setFilterExtensions (new String[] {suggestedFileExtension}); + String[] tmp; + tmp ~= suggestedFileExtension; + fileDialog.setFilterExtensions (tmp); String name = fileDialog.open (); shell.close (); if (name is null) { - nsIHelperAppLauncher_1_9 launcher = new nsIHelperAppLauncher_1_9 (aLauncher); - int rc = launcher.Cancel (XPCOM.NS_BINDING_ABORTED); - if (rc !is XPCOM.NS_OK) Mozilla.error (rc); + //nsIHelperAppLauncher_1_9 launcher = new nsIHelperAppLauncher_1_9 (aLauncher); + int rc = aLauncher.Cancel (XPCOM.NS_BINDING_ABORTED); + if (rc !is XPCOM.NS_OK) Mozilla.error (rc,__FILE__,__LINE__); return XPCOM.NS_ERROR_FAILURE; } - nsEmbedString path = new nsEmbedString (name); - int /*long*/[] result = new int /*long*/[1]; - int rc = XPCOM.NS_NewLocalFile (path.getAddress (), 1, result); - path.dispose (); - if (rc !is XPCOM.NS_OK) Mozilla.error (rc); - if (result[0] is 0) Mozilla.error (XPCOM.NS_ERROR_NULL_POINTER); + scope auto path = new nsEmbedString (name.toString16()); + + nsILocalFile localFile; + int rc = XPCOM.NS_NewLocalFile (cast(nsAString*)path, 1, &localFile); + //path.dispose (); + if (rc !is XPCOM.NS_OK) Mozilla.error (rc,__FILE__,__LINE__); + if (localFile is null) Mozilla.error (XPCOM.NS_ERROR_NULL_POINTER,__FILE__,__LINE__); /* Our own nsIDownload has been registered during the Browser initialization. It will be invoked by Mozilla. */ - XPCOM.memmove (_retval, result, C.PTR_SIZEOF); + *_retval = localFile; + //XPCOM.memmove (_retval, result, C.PTR_SIZEOF); return XPCOM.NS_OK; } } + +