diff dwt/browser/Download_1_8.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 b0bd1789106b
line wrap: on
line diff
--- a/dwt/browser/Download_1_8.d	Thu Jul 31 21:56:03 2008 -0700
+++ b/dwt/browser/Download_1_8.d	Tue Aug 05 10:11:58 2008 -0700
@@ -7,16 +7,17 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ * Port to the D programming language:
+ *      John Reimer <terminal.node@gmail.com>
  *******************************************************************************/
 module dwt.browser.Download_1_8;
 
 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;
 import dwt.internal.mozilla.nsICancelable;
 import dwt.internal.mozilla.nsID;
 import dwt.internal.mozilla.nsIDownload_1_8;
@@ -32,11 +33,7 @@
 import dwt.widgets.Listener;
 import dwt.widgets.Shell;
 
-class Download_1_8 {
-    XPCOMObject supports;
-    XPCOMObject download;
-    XPCOMObject progressDialog;
-    XPCOMObject webProgressListener;
+class Download_1_8 : nsIProgressDialog_1_8 {
     nsICancelable cancelable;
     int refCount = 0;
 
@@ -44,10 +41,9 @@
     Label status;
     Button cancel;
 
-    static final bool is32 = C.PTR_SIZEOF is 4;
+    //static final bool is32 = C.PTR_SIZEOF is 4; //determine if 32 or 64 bit platform?
 
-Download_1_8 () {
-    createCOMInterfaces ();
+this () {
 }
 
 int AddRef () {
@@ -55,158 +51,36 @@
     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, 4, 6, 3, 4, 3, is32 ? 10 : 6, is32 ? 8 : 7, 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 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]);}
-        public int /*long*/ method8 (int /*long*/[] args) {
-            if (args.length is 10) {
-                return OnProgressChange64_32 (args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]);
-            } else {
-                return OnProgressChange64 (args[0], args[1], args[2], args[3], args[4], args[5]);
-            }
-        }
-        public int /*long*/ method9 (int /*long*/[] args) {
-            if (args.length is 8) {
-                return Init_32 (args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);
-            } else {
-                return Init (args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
-            }
-        }
-        public int /*long*/ method10 (int /*long*/[] args) {return GetTargetFile (args[0]);}
-        public int /*long*/ method11 (int /*long*/[] args) {return GetPercentComplete (args[0]);}
-        public int /*long*/ method12 (int /*long*/[] args) {return GetAmountTransferred (args[0]);}
-        public int /*long*/ method13 (int /*long*/[] args) {return GetSize (args[0]);}
-        public int /*long*/ method14 (int /*long*/[] args) {return GetSource (args[0]);}
-        public int /*long*/ method15 (int /*long*/[] args) {return GetTarget (args[0]);}
-        public int /*long*/ method16 (int /*long*/[] args) {return GetCancelable (args[0]);}
-        public int /*long*/ method17 (int /*long*/[] args) {return GetDisplayName (args[0]);}
-        public int /*long*/ method18 (int /*long*/[] args) {return GetStartTime (args[0]);}
-        public int /*long*/ method19 (int /*long*/[] args) {return GetMIMEInfo (args[0]);}
-    };
-
-    progressDialog = new XPCOMObject (new int[] {2, 0, 0, 4, 6, 3, 4, 3, is32 ? 10 : 6, is32 ? 8 : 7, 1, 1, 1, 1, 1, 1, 1, 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 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]);}
-        public int /*long*/ method8 (int /*long*/[] args) {
-            if (args.length is 10) {
-                return OnProgressChange64_32 (args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]);
-            } else {
-                return OnProgressChange64 (args[0], args[1], args[2], args[3], args[4], args[5]);
-            }
-        }
-        public int /*long*/ method9 (int /*long*/[] args) {
-            if (args.length is 8) {
-                return Init_32 (args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);
-            } else {
-                return Init (args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
-            }
-        }
-        public int /*long*/ method10 (int /*long*/[] args) {return GetTargetFile (args[0]);}
-        public int /*long*/ method11 (int /*long*/[] args) {return GetPercentComplete (args[0]);}
-        public int /*long*/ method12 (int /*long*/[] args) {return GetAmountTransferred (args[0]);}
-        public int /*long*/ method13 (int /*long*/[] args) {return GetSize (args[0]);}
-        public int /*long*/ method14 (int /*long*/[] args) {return GetSource (args[0]);}
-        public int /*long*/ method15 (int /*long*/[] args) {return GetTarget (args[0]);}
-        public int /*long*/ method16 (int /*long*/[] args) {return GetCancelable (args[0]);}
-        public int /*long*/ method17 (int /*long*/[] args) {return GetDisplayName (args[0]);}
-        public int /*long*/ method18 (int /*long*/[] args) {return GetStartTime (args[0]);}
-        public int /*long*/ method19 (int /*long*/[] args) {return GetMIMEInfo (args[0]);}
-        public int /*long*/ method20 (int /*long*/[] args) {return Open (args[0]);}
-        public int /*long*/ method21 (int /*long*/[] args) {return GetCancelDownloadOnClose (args[0]);}
-        public int /*long*/ method22 (int /*long*/[] args) {return SetCancelDownloadOnClose ((int)/*64*/args[0]);}
-        public int /*long*/ method23 (int /*long*/[] args) {return GetObserver (args[0]);}
-        public int /*long*/ method24 (int /*long*/[] args) {return SetObserver (args[0]);}
-        public int /*long*/ method25 (int /*long*/[] args) {return GetDialog (args[0]);}
-        public int /*long*/ method26 (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_1_8.NS_IDOWNLOAD_IID)) {
-        XPCOM.memmove (ppvObject, new int /*long*/[] {download.getAddress ()}, C.PTR_SIZEOF);
+    if (*riid == nsIDownload_1_8.IID)) {
+        *ppvObject = cast(void*)cast(nsIDownload_1_8)this;
         AddRef();
         return XPCOM.NS_OK;
     }
-    if (guid.Equals (nsIProgressDialog_1_8.NS_IPROGRESSDIALOG_IID)) {
-        XPCOM.memmove (ppvObject, new int /*long*/[] {progressDialog.getAddress ()}, C.PTR_SIZEOF);
+    if (*riid == nsIProgressDialog_1_8.IID) {
+        *ppvObject = cast(void*)cast(nsIProgressDialog_1_8)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;
 }