diff dwt/browser/Download.d @ 286:44258e0b6687

More fixes for xpcom
author John Reimer<terminal.node@gmail.com>
date Tue, 05 Aug 2008 10:11:58 -0700
parents 93409d9838c5
children eec6ddb07873
line wrap: on
line diff
--- a/dwt/browser/Download.d	Thu Jul 31 21:56:03 2008 -0700
+++ b/dwt/browser/Download.d	Tue Aug 05 10:11:58 2008 -0700
@@ -8,14 +8,14 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  * Port to the D programming language:
- *     John Reimer <terminal.node@gmail.com>
+ *      John Reimer <terminal.node@gmail.com>
  *******************************************************************************/
 module dwt.browser.Download;
 
 import dwt.dwthelper.utils;
 
 import dwt.DWT;
-import dwt.internal.C;
+
 import dwt.internal.Compatibility;
 import dwt.internal.mozilla.XPCOM;
 import dwt.internal.mozilla.XPCOMObject;
@@ -35,11 +35,7 @@
 import dwt.widgets.Listener;
 import dwt.widgets.Shell;
 
-class Download {
-    XPCOMObject supports;
-    XPCOMObject download;
-    XPCOMObject progressDialog;
-    XPCOMObject webProgressListener;
+class Download : nsIProgressDialog {
     nsIHelperAppLauncher helperAppLauncher;
     int refCount = 0;
 
@@ -47,8 +43,7 @@
     Label status;
     Button cancel;
     
-Download () {
-    createCOMInterfaces ();
+this () {
 }
 
 int AddRef () {
@@ -56,134 +51,46 @@
     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 ();}
-    };
-    
-    download = new XPCOMObject (new int[] {2, 0, 0, 7, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1}) {
-        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 Init (args[0], args[1], args[2], args[3], args[4], args[5], args[6]);}
-        public int /*long*/ method4 (int /*long*/[] args) {return GetSource (args[0]);}
-        public int /*long*/ method5 (int /*long*/[] args) {return GetTarget (args[0]);}
-        public int /*long*/ method6 (int /*long*/[] args) {return GetPersist (args[0]);}
-        public int /*long*/ method7 (int /*long*/[] args) {return GetPercentComplete (args[0]);}
-        public int /*long*/ method8 (int /*long*/[] args) {return GetDisplayName (args[0]);}
-        public int /*long*/ method9 (int /*long*/[] args) {return SetDisplayName (args[0]);}
-        public int /*long*/ method10 (int /*long*/[] args) {return GetStartTime (args[0]);}
-        public int /*long*/ method11 (int /*long*/[] args) {return GetMIMEInfo (args[0]);}
-        public int /*long*/ method12 (int /*long*/[] args) {return GetListener (args[0]);}
-        public int /*long*/ method13 (int /*long*/[] args) {return SetListener (args[0]);}
-        public int /*long*/ method14 (int /*long*/[] args) {return GetObserver (args[0]);}
-        public int /*long*/ method15 (int /*long*/[] args) {return SetObserver (args[0]);}
-    };
-    
-    progressDialog = new XPCOMObject (new int[] {2, 0, 0, 7, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}) {
-        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 Init (args[0], args[1], args[2], args[3], args[4], args[5], args[6]);}
-        public int /*long*/ method4 (int /*long*/[] args) {return GetSource (args[0]);}
-        public int /*long*/ method5 (int /*long*/[] args) {return GetTarget (args[0]);}
-        public int /*long*/ method6 (int /*long*/[] args) {return GetPersist (args[0]);}
-        public int /*long*/ method7 (int /*long*/[] args) {return GetPercentComplete (args[0]);}
-        public int /*long*/ method8 (int /*long*/[] args) {return GetDisplayName (args[0]);}
-        public int /*long*/ method9 (int /*long*/[] args) {return SetDisplayName (args[0]);}
-        public int /*long*/ method10 (int /*long*/[] args) {return GetStartTime (args[0]);}
-        public int /*long*/ method11 (int /*long*/[] args) {return GetMIMEInfo (args[0]);}
-        public int /*long*/ method12 (int /*long*/[] args) {return GetListener (args[0]);}
-        public int /*long*/ method13 (int /*long*/[] args) {return SetListener (args[0]);}
-        public int /*long*/ method14 (int /*long*/[] args) {return GetObserver (args[0]);}
-        public int /*long*/ method15 (int /*long*/[] args) {return SetObserver (args[0]);}
-        public int /*long*/ method16 (int /*long*/[] args) {return Open (args[0]);}
-        public int /*long*/ method17 (int /*long*/[] args) {return GetCancelDownloadOnClose (args[0]);}
-        public int /*long*/ method18 (int /*long*/[] args) {return SetCancelDownloadOnClose ((int)/*64*/args[0]);}
-        public int /*long*/ method19 (int /*long*/[] args) {return GetDialog (args[0]);}
-        public int /*long*/ method20 (int /*long*/[] args) {return SetDialog (args[0]);}
-    };
-    
-    webProgressListener = new XPCOMObject (new int[] {2, 0, 0, 4, 6, 3, 4, 3}) {
-        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 OnStateChange (args[0], args[1], (int)/*64*/args[2], (int)/*64*/args[3]);}
-        public int /*long*/ method4 (int /*long*/[] args) {return OnProgressChange (args[0], args[1], (int)/*64*/args[2], (int)/*64*/args[3], (int)/*64*/args[4], (int)/*64*/args[5]);}
-        public int /*long*/ method5 (int /*long*/[] args) {return OnLocationChange (args[0], args[1], args[2]);}
-        public int /*long*/ method6 (int /*long*/[] args) {return OnStatusChange (args[0], args[1], (int)/*64*/args[2], args[3]);}
-        public int /*long*/ method7 (int /*long*/[] args) {return OnSecurityChange (args[0], args[1], (int)/*64*/args[2]);}
-    };
-}
-
-void disposeCOMInterfaces () {
-    if (supports !is null) {
-        supports.dispose ();
-        supports = null;
-    }   
-    if (download !is null) {
-        download.dispose ();
-        download = null;    
-    }
-    if (progressDialog !is null) {
-        progressDialog.dispose ();
-        progressDialog = null;
-    }
-    if (webProgressListener !is null) {
-        webProgressListener.dispose ();
-        webProgressListener = null;
-    }
-}
-
-int /*long*/ getAddress () {
-    return progressDialog.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);
+int QueryInterface (nsID* riid, void** ppvObject) {
+    if (riid is null || ppvObject is null) return XPCOM.NS_ERROR_NO_INTERFACE;
+ 
+    if (*riid == nsISupports.IID)) {
+        *ppvObject = cast(void*)cast(nsISupports)this;
         AddRef();
         return XPCOM.NS_OK;
     }
-    if (guid.Equals (nsIDownload.NS_IDOWNLOAD_IID)) {
-        XPCOM.memmove (ppvObject, new int /*long*/[] {download.getAddress ()}, C.PTR_SIZEOF);
+    if (*riid == nsIDownload.IID) {
+        *ppvObject = cast(void*)cast(nsIDownload)this;
         AddRef();
         return XPCOM.NS_OK;
     }
-    if (guid.Equals (nsIProgressDialog.NS_IPROGRESSDIALOG_IID)) {
-        XPCOM.memmove (ppvObject, new int /*long*/[] {progressDialog.getAddress ()}, C.PTR_SIZEOF);
+    if (*riid == nsIProgressDialog.IID) {
+        *ppvObject = cast(void*)cast(nsIProgressDialog)this;
         AddRef();
         return XPCOM.NS_OK;
     }
-    if (guid.Equals (nsIWebProgressListener.NS_IWEBPROGRESSLISTENER_IID)) {
-        XPCOM.memmove (ppvObject, new int /*long*/[] {webProgressListener.getAddress ()}, C.PTR_SIZEOF);
+    if (*riid == nsIWebProgressListener.IID) {
+        *ppvObject = cast(void*)cast(nsIWebProgressListener)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 () {
     refCount--;
-    if (refCount is 0) disposeCOMInterfaces ();
+    if (refCount is 0) return 0;
     return refCount;
 }
 
 /* nsIDownload */
 
 /* Note. The argument startTime is defined as a PRInt64. This translates into two java ints. */
-int Init (int /*long*/ aSource, int /*long*/ aTarget, int /*long*/ aDisplayName, int /*long*/ aMIMEInfo, int /*long*/ startTime1, int /*long*/ startTime2, int /*long*/ aPersist) {
+int Init (nsIURI aSource, nsIURI aTarget, nsAString* aDisplayName, nsIMIMEInfo aMIMEInfo, PRTime startTime, PRBool aPersist) {
     nsIURI source = new nsIURI (aSource);
-    int /*long*/ aSpec = XPCOM.nsEmbedCString_new ();
-    int rc = source.GetHost (aSpec);
+    scope auto aSpec = new nsEmbedString;
+    int rc = source.GetHost (cast(nsAString*)aSpec);
     if (rc !is XPCOM.NS_OK) Mozilla.error (rc);
     int length = XPCOM.nsEmbedCString_Length (aSpec);
     int /*long*/ buffer = XPCOM.nsEmbedCString_get (aSpec);
@@ -280,7 +187,7 @@
     return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
 }
 
-int GetPersist (int /*long*/ aPersist) {
+int GetPersist (PRBool* aPersist) {
     return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
 }
 
@@ -312,11 +219,11 @@
     return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
 }
 
-int GetObserver (int /*long*/ aObserver) {
+nsresult GetObserver (nsIObserver* aObserver) {
     return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
 }
 
-int SetObserver (int /*long*/ aObserver) {
+nsresult SetObserver (nsIOBserver aObserver) {
     if (aObserver !is 0) {
         nsISupports supports = new nsISupports (aObserver);
         int /*long*/[] result = new int /*long*/[1];
@@ -329,7 +236,7 @@
 }
 
 /* nsIProgressDialog */
-int Open (int /*long*/ aParent) {
+nsresult Open (int /*long*/ aParent) {
     return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
 }