]> git.saurik.com Git - wxWidgets.git/commitdiff
Use OLE helper macros in wxWebView to reduce the amount of duplicated code.
authorSteve Lamerton <steve.lamerton@gmail.com>
Thu, 22 Dec 2011 19:16:12 +0000 (19:16 +0000)
committerSteve Lamerton <steve.lamerton@gmail.com>
Thu, 22 Dec 2011 19:16:12 +0000 (19:16 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70096 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/webview_ie.h
src/msw/webview_ie.cpp

index d5304e2a7ef3356bfeb56b9b9f2768b56f0f8ccb..690f3d3b92fa5d16da1a18e24e823035d522fd27 100644 (file)
@@ -18,6 +18,7 @@
 #include "wx/webview.h"
 #include "wx/msw/ole/automtn.h"
 #include "wx/msw/ole/activex.h"
+#include "wx/msw/ole/oleutils.h"
 #include "wx/msw/wrapwin.h"
 #include "wx/msw/missing.h"
 #include "wx/sharedptr.h"
@@ -295,7 +296,6 @@ private:
 class VirtualProtocol : public wxIInternetProtocol
 {
 protected:
-    ULONG m_refCount;
     wxIInternetProtocolSink* m_protocolSink;
     wxString m_html;
     VOID * fileP;
@@ -305,12 +305,10 @@ protected:
 
 public:
     VirtualProtocol(wxSharedPtr<wxWebViewHandler> handler);
-    ~VirtualProtocol();
+    ~VirtualProtocol() {};
 
     //IUnknown
-    ULONG STDMETHODCALLTYPE AddRef();
-    HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject);
-    ULONG STDMETHODCALLTYPE Release();
+    DECLARE_IUNKNOWN_METHODS;
 
     //IInternetProtocolRoot
     HRESULT STDMETHODCALLTYPE Abort(HRESULT WXUNUSED(hrReason),
@@ -341,18 +339,17 @@ public:
 class ClassFactory : public IClassFactory
 {
 public:
-    ClassFactory(wxSharedPtr<wxWebViewHandler> handler) : m_refCount(0), m_handler(handler) {}
-    //IUnknown
-    ULONG STDMETHODCALLTYPE AddRef();
-    HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject);
-    ULONG STDMETHODCALLTYPE Release();
+    ClassFactory(wxSharedPtr<wxWebViewHandler> handler) : m_handler(handler) {}
 
     //IClassFactory
     HRESULT STDMETHODCALLTYPE CreateInstance(IUnknown* pUnkOuter,
                                              REFIID riid, void** ppvObject);
     HRESULT STDMETHODCALLTYPE LockServer(BOOL fLock);
+
+    //IUnknown
+    DECLARE_IUNKNOWN_METHODS;
+
 private:
-    ULONG m_refCount;
     wxSharedPtr<wxWebViewHandler> m_handler;
 };
 
index 1ddf1efc7e2c8d391418fe3f04785c0b8efac682..17e63ec3f3cf3b458e4e9c7c53e0a2571050bd07 100644 (file)
@@ -1051,50 +1051,17 @@ void wxWebViewIE::onActiveXEvent(wxActiveXEvent& evt)
 
 VirtualProtocol::VirtualProtocol(wxSharedPtr<wxWebViewHandler> handler)
 {
-    m_refCount = 0;
     m_file = NULL;
     m_handler = handler;
 }
 
-VirtualProtocol::~VirtualProtocol()
-{
-}
+BEGIN_IID_TABLE(VirtualProtocol)
+    ADD_IID(Unknown)
+    ADD_RAW_IID(wxIID_IInternetProtocolRoot)
+    ADD_RAW_IID(wxIID_IInternetProtocol)
+END_IID_TABLE;
 
-ULONG VirtualProtocol::AddRef()
-{
-    m_refCount++;
-    return m_refCount;
-}
-
-HRESULT VirtualProtocol::QueryInterface(REFIID riid, void **ppvObject)
-{
-    if(riid == IID_IUnknown || riid == wxIID_IInternetProtocolRoot ||
-       riid == wxIID_IInternetProtocol)
-    {
-        *ppvObject = (wxIInternetProtocol*)this;
-        AddRef();
-        return S_OK;
-    }
-    else
-    {
-        *ppvObject = NULL;
-        return E_POINTER;
-    }
-}
-
-ULONG VirtualProtocol::Release()
-{
-    m_refCount--;
-    if (m_refCount > 0)
-    {
-        return m_refCount;
-    }
-    else
-    {
-        delete this;
-        return 0;
-    }
-}
+IMPLEMENT_IUNKNOWN_METHODS(VirtualProtocol)
 
 HRESULT VirtualProtocol::Start(LPCWSTR szUrl, wxIInternetProtocolSink *pOIProtSink,
                                wxIInternetBindInfo *pOIBindInfo, DWORD grfPI,
@@ -1162,6 +1129,13 @@ HRESULT VirtualProtocol::Read(void *pv, ULONG cb, ULONG *pcbRead)
     }
 }
 
+BEGIN_IID_TABLE(ClassFactory)
+    ADD_IID(Unknown)
+    ADD_IID(ClassFactory)
+END_IID_TABLE;
+
+IMPLEMENT_IUNKNOWN_METHODS(ClassFactory)
+
 HRESULT ClassFactory::CreateInstance(IUnknown* pUnkOuter, REFIID riid,
                                      void ** ppvObject)
 {
@@ -1181,41 +1155,4 @@ STDMETHODIMP ClassFactory::LockServer(BOOL fLock)
     return S_OK;
 }
 
-ULONG ClassFactory::AddRef(void)
-{
-    m_refCount++;
-    return m_refCount;
-}
-
-HRESULT ClassFactory::QueryInterface(REFIID riid, void **ppvObject)
-{
-    if ((riid == IID_IUnknown) || (riid == IID_IClassFactory))
-    {
-        *ppvObject = this;
-        AddRef();
-        return S_OK;
-    }
-    else
-    {
-        *ppvObject = NULL;
-        return E_POINTER;
-    }
-
-}
-
-ULONG ClassFactory::Release(void)
-{
-    m_refCount--;
-    if (m_refCount > 0)
-    {
-        return m_refCount;
-    }
-    else
-    {
-        delete this;
-        return 0;
-    }
-
-}
-
 #endif // wxUSE_WEBVIEW && wxUSE_WEBVIEW_IE