refeactor all IUnknown implementations using IComSrvBase
authorMartin Fuchs <fuchs.martin@gmail.com>
Sun, 25 Sep 2005 17:59:20 +0000 (17:59 +0000)
committerMartin Fuchs <fuchs.martin@gmail.com>
Sun, 25 Sep 2005 17:59:20 +0000 (17:59 +0000)
svn path=/trunk/; revision=18063

reactos/subsys/system/explorer/shell/shellbrowser.h
reactos/subsys/system/explorer/shell/webchild.h
reactos/subsys/system/explorer/utility/dragdropimpl.cpp
reactos/subsys/system/explorer/utility/dragdropimpl.h

index 43e3f52..7db8f6b 100644 (file)
@@ -58,8 +58,7 @@ struct BrowserCallback
  /// Implementation of IShellBrowserImpl interface in explorer child windows
 struct ShellBrowser : public IShellBrowserImpl
 #ifndef __MINGW32__    // IShellFolderViewCB missing in MinGW (as of 25.09.2005)
-       ,       public IComSrvBase<IShellFolderViewCB, ShellBrowser>,
-               public SimpleComObject
+       ,       public IComSrvBase<IShellFolderViewCB, ShellBrowser>, public SimpleComObject
 #endif
 {
        ShellBrowser(HWND hwnd, HWND left_hwnd, WindowHandle& right_hwnd, ShellPathInfo& create_info,
index 38c0658..4347dc7 100644 (file)
@@ -530,9 +530,9 @@ interface FixedDWebBrowserEvents2 : public IDispatch
 #endif
 };
 
-struct ANSUNC DWebBrowserEvents2Impl : public SimpleComObject,
                                      public IComSrvBase<FixedDWebBrowserEvents2, DWebBrowserEvents2Impl>,
-                                       public DWebBrowserEvents2IF
+struct ANSUNC DWebBrowserEvents2Impl
:     public IComSrvBase<FixedDWebBrowserEvents2, DWebBrowserEvents2Impl>, public SimpleComObject,
+       public DWebBrowserEvents2IF
 {
        typedef IComSrvBase<FixedDWebBrowserEvents2, DWebBrowserEvents2Impl> super;
 
index f763a47..92f7ed5 100644 (file)
@@ -22,7 +22,8 @@
 //////////////////////////////////////////////////////////////////////
 
 IDataObjectImpl::IDataObjectImpl(IDropSourceImpl* pDropSource)
- :     m_pDropSource(pDropSource),
+ :     super(IID_IDataObject),
+       m_pDropSource(pDropSource),
        m_cRefCount(0)
 {
 }
@@ -33,37 +34,6 @@ IDataObjectImpl::~IDataObjectImpl()
                ReleaseStgMedium(it->_medium);
 }
 
-STDMETHODIMP IDataObjectImpl::QueryInterface(/* [in] */ REFIID riid,
-/* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject)
-{
-       *ppvObject = NULL;
-       if (IID_IUnknown==riid || IID_IDataObject==riid)
-                        *ppvObject=this;
-       /*if (riid == IID_IAsyncOperation)
-               *ppvObject=(IAsyncOperation*)this;*/
-       if (NULL!=*ppvObject)
-       {
-               ((LPUNKNOWN)*ppvObject)->AddRef();
-               return S_OK;
-       }
-       return E_NOINTERFACE;
-}
-
-STDMETHODIMP_(ULONG) IDataObjectImpl::AddRef()
-{
-       return ++m_cRefCount;
-}
-
-STDMETHODIMP_(ULONG) IDataObjectImpl::Release()
-{
-   long nTemp = --m_cRefCount;
-
-   if (nTemp == 0)
-         delete this;
-
-   return nTemp;
-}
-
 STDMETHODIMP IDataObjectImpl::GetData(
        /* [unique][in] */ FORMATETC __RPC_FAR *pformatetcIn,
        /* [out] */ STGMEDIUM __RPC_FAR *pmedium)
@@ -255,38 +225,6 @@ HRESULT STDMETHODCALLTYPE IDataObjectImpl::EnumDAdvise(
 // IDropSourceImpl Class
 //////////////////////////////////////////////////////////////////////
 
-STDMETHODIMP IDropSourceImpl::QueryInterface(/* [in] */ REFIID riid,
-                                                                                /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject)
-{
-   *ppvObject = NULL;
-   if (IID_IUnknown==riid || IID_IDropSource==riid)
-          *ppvObject=this;
-
-       if (*ppvObject != NULL)
-       {
-          ((LPUNKNOWN)*ppvObject)->AddRef();
-               return S_OK;
-       }
-       return E_NOINTERFACE;
-}
-
-STDMETHODIMP_(ULONG) IDropSourceImpl::AddRef()
-{
-       return ++m_cRefCount;
-}
-
-STDMETHODIMP_(ULONG) IDropSourceImpl::Release()
-{
-   long nTemp = --m_cRefCount;
-
-   assert(nTemp >= 0);
-
-   if (nTemp == 0)
-         delete this;
-
-   return nTemp;
-}
-
 STDMETHODIMP IDropSourceImpl::QueryContinueDrag(
        /* [in] */ BOOL fEscapePressed,
        /* [in] */ DWORD grfKeyState)
@@ -314,7 +252,8 @@ STDMETHODIMP IDropSourceImpl::GiveFeedback(
 //////////////////////////////////////////////////////////////////////
 
 EnumFormatEtcImpl::EnumFormatEtcImpl(const FormatArray& ArrFE)
- :     m_cRefCount(0),
+ :     super(IID_IEnumFORMATETC),
+       m_cRefCount(0),
        m_iCur(0)
 {
    for(FormatArray::const_iterator it=ArrFE.begin(); it!=ArrFE.end(); ++it)
@@ -322,45 +261,15 @@ EnumFormatEtcImpl::EnumFormatEtcImpl(const FormatArray& ArrFE)
 }
 
 EnumFormatEtcImpl::EnumFormatEtcImpl(const StorageArray& ArrFE)
- :     m_cRefCount(0),
+ :     super(IID_IEnumFORMATETC),
+       m_cRefCount(0),
        m_iCur(0)
 {
    for(StorageArray::const_iterator it=ArrFE.begin(); it!=ArrFE.end(); ++it)
                m_pFmtEtc.push_back(*it->_format);
 }
 
-STDMETHODIMP EnumFormatEtcImpl::QueryInterface(REFIID refiid, void** ppv)
-{
-   *ppv = NULL;
-   if (IID_IUnknown==refiid || IID_IEnumFORMATETC==refiid)
-                        *ppv=this;
-
-       if (*ppv != NULL)
-       {
-               ((LPUNKNOWN)*ppv)->AddRef();
-               return S_OK;
-       }
-       return E_NOINTERFACE;
-}
-
-STDMETHODIMP_(ULONG) EnumFormatEtcImpl::AddRef(void)
-{
-   return ++m_cRefCount;
-}
-
-STDMETHODIMP_(ULONG) EnumFormatEtcImpl::Release(void)
-{
-   long nTemp = --m_cRefCount;
-
-   assert(nTemp >= 0);
-
-   if (nTemp == 0)
-        delete this;
-
-   return nTemp;
-}
-
-STDMETHODIMP EnumFormatEtcImpl::Next( ULONG celt,LPFORMATETC lpFormatEtc, ULONG* pceltFetched)
+STDMETHODIMP EnumFormatEtcImpl::Next(ULONG celt,LPFORMATETC lpFormatEtc, ULONG* pceltFetched)
 {
    if (pceltFetched != NULL)
           *pceltFetched=0;
index dac71b4..6a59c67 100644 (file)
@@ -4,7 +4,7 @@
    ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
    THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
    PARTICULAR PURPOSE.
-   Author: Leon Finker  11/2000
+   Author: Leon Finker 11/2000
    Modifications: replaced ATL by STL, Martin Fuchs 7/2003
 **************************************************************************/
 
@@ -24,60 +24,64 @@ typedef vector<DataStorage> StorageArray;
 
 
  /// implementation of IEnumFORMATETC interface
-class EnumFormatEtcImpl : public IEnumFORMATETC
+class EnumFormatEtcImpl
+ :     public IComSrvBase<IEnumFORMATETC, EnumFormatEtcImpl>, public SimpleComObject
 {
-   private:
-     ULONG                     m_cRefCount;
-     FormatArray       m_pFmtEtc;
-     size_t                    m_iCur;
+       typedef IComSrvBase<IEnumFORMATETC, EnumFormatEtcImpl> super;
 
-   public:
-     EnumFormatEtcImpl(const FormatArray& ArrFE);
+private:
+        ULONG                  m_cRefCount;
+        FormatArray    m_pFmtEtc;
+        size_t                 m_iCur;
+
+public:
+        EnumFormatEtcImpl(const FormatArray& ArrFE);
         EnumFormatEtcImpl(const StorageArray& ArrFE);
         virtual ~EnumFormatEtcImpl() {}
 
-     //IUnknown members
-     virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID, void**);
-     virtual ULONG STDMETHODCALLTYPE AddRef(void);
-     virtual ULONG STDMETHODCALLTYPE Release(void);
-
-     //IEnumFORMATETC members
-     virtual HRESULT STDMETHODCALLTYPE Next(ULONG, LPFORMATETC, ULONG*);
-     virtual HRESULT STDMETHODCALLTYPE Skip(ULONG);
-     virtual HRESULT STDMETHODCALLTYPE Reset(void);
-     virtual HRESULT STDMETHODCALLTYPE Clone(IEnumFORMATETC**);
+        //IEnumFORMATETC members
+        virtual HRESULT STDMETHODCALLTYPE Next(ULONG, LPFORMATETC, ULONG*);
+        virtual HRESULT STDMETHODCALLTYPE Skip(ULONG);
+        virtual HRESULT STDMETHODCALLTYPE Reset(void);
+        virtual HRESULT STDMETHODCALLTYPE Clone(IEnumFORMATETC**);
 };
 
  /// implementation of IDropSource interface
-class IDropSourceImpl : public IDropSource
+class IDropSourceImpl
+ :     public IComSrvBase<IDropSource, IDropSourceImpl>, public SimpleComObject
 {
+       typedef IComSrvBase<IDropSource, IDropSourceImpl> super;
+
        long m_cRefCount;
 
 public:
        bool m_bDropped;
 
-       IDropSourceImpl::IDropSourceImpl() : m_cRefCount(0), m_bDropped(false) {}
-       virtual ~IDropSourceImpl() {}
+       IDropSourceImpl()
+        :      super(IID_IDropSource),
+               m_cRefCount(0),
+               m_bDropped(false)
+       {
+       }
 
-       //IUnknown
-    virtual HRESULT STDMETHODCALLTYPE QueryInterface(
-            /* [in] */ REFIID riid,
-            /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
-    virtual ULONG STDMETHODCALLTYPE AddRef();
-    virtual ULONG STDMETHODCALLTYPE Release();
+       virtual ~IDropSourceImpl() {}
 
        //IDropSource
-    virtual HRESULT STDMETHODCALLTYPE QueryContinueDrag(
-        /* [in] */ BOOL fEscapePressed,
-        /* [in] */ DWORD grfKeyState);
+       virtual HRESULT STDMETHODCALLTYPE QueryContinueDrag(
+               /* [in] */ BOOL fEscapePressed,
+               /* [in] */ DWORD grfKeyState);
 
-    virtual HRESULT STDMETHODCALLTYPE GiveFeedback(
-        /* [in] */ DWORD dwEffect);
+       virtual HRESULT STDMETHODCALLTYPE GiveFeedback(
+               /* [in] */ DWORD dwEffect);
 };
 
  /// implementation of IDataObject interface
-class IDataObjectImpl : public IDataObject//,public IAsyncOperation
+class IDataObjectImpl
+ :     public IComSrvBase<IDataObject, IDataObjectImpl>, public SimpleComObject
+       //public IAsyncOperation
 {
+       typedef IComSrvBase<IDataObject, IDataObjectImpl> super;
+
        IDropSourceImpl* m_pDropSource;
        long m_cRefCount;
 
@@ -89,79 +93,72 @@ public:
 
        void CopyMedium(STGMEDIUM* pMedDest, STGMEDIUM* pMedSrc, FORMATETC* pFmtSrc);
 
-    //IUnknown
-    virtual HRESULT STDMETHODCALLTYPE QueryInterface(
-            /* [in] */ REFIID riid,
-            /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
-    virtual ULONG STDMETHODCALLTYPE AddRef();
-    virtual ULONG STDMETHODCALLTYPE Release();
-
        //IDataObject
        virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetData(
-        /* [unique][in] */ FORMATETC __RPC_FAR *pformatetcIn,
-        /* [out] */ STGMEDIUM __RPC_FAR *pmedium);
+               /* [unique][in] */ FORMATETC __RPC_FAR *pformatetcIn,
+               /* [out] */ STGMEDIUM __RPC_FAR *pmedium);
 
-    virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetDataHere(
-        /* [unique][in] */ FORMATETC __RPC_FAR *pformatetc,
-        /* [out][in] */ STGMEDIUM __RPC_FAR *pmedium);
+       virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetDataHere(
+               /* [unique][in] */ FORMATETC __RPC_FAR *pformatetc,
+               /* [out][in] */ STGMEDIUM __RPC_FAR *pmedium);
 
-    virtual HRESULT STDMETHODCALLTYPE QueryGetData(
-        /* [unique][in] */ FORMATETC __RPC_FAR *pformatetc);
+       virtual HRESULT STDMETHODCALLTYPE QueryGetData(
+               /* [unique][in] */ FORMATETC __RPC_FAR *pformatetc);
 
-    virtual HRESULT STDMETHODCALLTYPE GetCanonicalFormatEtc(
-        /* [unique][in] */ FORMATETC __RPC_FAR *pformatectIn,
-        /* [out] */ FORMATETC __RPC_FAR *pformatetcOut);
+       virtual HRESULT STDMETHODCALLTYPE GetCanonicalFormatEtc(
+               /* [unique][in] */ FORMATETC __RPC_FAR *pformatectIn,
+               /* [out] */ FORMATETC __RPC_FAR *pformatetcOut);
 
-    virtual /* [local] */ HRESULT STDMETHODCALLTYPE SetData(
-        /* [unique][in] */ FORMATETC __RPC_FAR *pformatetc,
-        /* [unique][in] */ STGMEDIUM __RPC_FAR *pmedium,
-        /* [in] */ BOOL fRelease);
+       virtual /* [local] */ HRESULT STDMETHODCALLTYPE SetData(
+               /* [unique][in] */ FORMATETC __RPC_FAR *pformatetc,
+               /* [unique][in] */ STGMEDIUM __RPC_FAR *pmedium,
+               /* [in] */ BOOL fRelease);
 
-    virtual HRESULT STDMETHODCALLTYPE EnumFormatEtc(
-        /* [in] */ DWORD dwDirection,
-        /* [out] */ IEnumFORMATETC __RPC_FAR *__RPC_FAR *ppenumFormatEtc);
+       virtual HRESULT STDMETHODCALLTYPE EnumFormatEtc(
+               /* [in] */ DWORD dwDirection,
+               /* [out] */ IEnumFORMATETC __RPC_FAR *__RPC_FAR *ppenumFormatEtc);
 
-    virtual HRESULT STDMETHODCALLTYPE DAdvise(
-        /* [in] */ FORMATETC __RPC_FAR *pformatetc,
-        /* [in] */ DWORD advf,
-        /* [unique][in] */ IAdviseSink __RPC_FAR *pAdvSink,
-        /* [out] */ DWORD __RPC_FAR *pdwConnection);
+       virtual HRESULT STDMETHODCALLTYPE DAdvise(
+               /* [in] */ FORMATETC __RPC_FAR *pformatetc,
+               /* [in] */ DWORD advf,
+               /* [unique][in] */ IAdviseSink __RPC_FAR *pAdvSink,
+               /* [out] */ DWORD __RPC_FAR *pdwConnection);
 
-    virtual HRESULT STDMETHODCALLTYPE DUnadvise(
-        /* [in] */ DWORD dwConnection);
+       virtual HRESULT STDMETHODCALLTYPE DUnadvise(
+               /* [in] */ DWORD dwConnection);
 
-    virtual HRESULT STDMETHODCALLTYPE EnumDAdvise(
-        /* [out] */ IEnumSTATDATA __RPC_FAR *__RPC_FAR *ppenumAdvise);
+       virtual HRESULT STDMETHODCALLTYPE EnumDAdvise(
+               /* [out] */ IEnumSTATDATA __RPC_FAR *__RPC_FAR *ppenumAdvise);
 
        //IAsyncOperation
-    //virtual HRESULT STDMETHODCALLTYPE SetAsyncMode(
-    //    /* [in] */ BOOL fDoOpAsync)
+       //virtual HRESULT STDMETHODCALLTYPE SetAsyncMode(
+       //        /* [in] */ BOOL fDoOpAsync)
        //{
        //      return E_NOTIMPL;
        //}
-    //
-    //virtual HRESULT STDMETHODCALLTYPE GetAsyncMode(
-    //    /* [out] */ BOOL __RPC_FAR *pfIsOpAsync)
+       //
+       //virtual HRESULT STDMETHODCALLTYPE GetAsyncMode(
+       //        /* [out] */ BOOL __RPC_FAR *pfIsOpAsync)
        //{
        //      return E_NOTIMPL;
        //}
-    //
-    //virtual HRESULT STDMETHODCALLTYPE StartOperation(
-    //    /* [optional][unique][in] */ IBindCtx __RPC_FAR *pbcReserved)
+       //
+       //virtual HRESULT STDMETHODCALLTYPE StartOperation(
+       //        /* [optional][unique][in] */ IBindCtx __RPC_FAR *pbcReserved)
        //{
        //      return E_NOTIMPL;
        //}
-    //
-    //virtual HRESULT STDMETHODCALLTYPE InOperation(
-    //    /* [out] */ BOOL __RPC_FAR *pfInAsyncOp)
+       //
+       //virtual HRESULT STDMETHODCALLTYPE InOperation(
+       //        /* [out] */ BOOL __RPC_FAR *pfInAsyncOp)
        //{
        //      return E_NOTIMPL;
        //}
-    //
-    //virtual HRESULT STDMETHODCALLTYPE EndOperation(
-    //    /* [in] */ HRESULT hResult,
-    //    /* [unique][in] */ IBindCtx __RPC_FAR *pbcReserved,
-    //    /* [in] */ DWORD dwEffects)
+       //
+       //virtual HRESULT STDMETHODCALLTYPE EndOperation(
+       //        /* [in] */ HRESULT hResult,
+       //        /* [unique][in] */ IBindCtx __RPC_FAR *pbcReserved,
+       //        /* [in] */ DWORD dwEffects)
        //{
        //      return E_NOTIMPL;
        //}*/
@@ -195,22 +192,22 @@ public:
        virtual ULONG STDMETHODCALLTYPE AddRef() {return ++m_cRefCount;}
        virtual ULONG STDMETHODCALLTYPE Release();
 
-    bool QueryDrop(DWORD grfKeyState, LPDWORD pdwEffect);
+       bool QueryDrop(DWORD grfKeyState, LPDWORD pdwEffect);
        virtual HRESULT STDMETHODCALLTYPE DragEnter(
-        /* [unique][in] */ IDataObject __RPC_FAR *pDataObj,
-        /* [in] */ DWORD grfKeyState,
-        /* [in] */ POINTL pt,
-        /* [out][in] */ DWORD __RPC_FAR *pdwEffect);
-    virtual HRESULT STDMETHODCALLTYPE DragOver(
-        /* [in] */ DWORD grfKeyState,
-        /* [in] */ POINTL pt,
-        /* [out][in] */ DWORD __RPC_FAR *pdwEffect);
-    virtual HRESULT STDMETHODCALLTYPE DragLeave();
-    virtual HRESULT STDMETHODCALLTYPE Drop(
-        /* [unique][in] */ IDataObject __RPC_FAR *pDataObj,
-        /* [in] */ DWORD grfKeyState,
-        /* [in] */ POINTL pt,
-        /* [out][in] */ DWORD __RPC_FAR *pdwEffect);
+               /* [unique][in] */ IDataObject __RPC_FAR *pDataObj,
+               /* [in] */ DWORD grfKeyState,
+               /* [in] */ POINTL pt,
+               /* [out][in] */ DWORD __RPC_FAR *pdwEffect);
+       virtual HRESULT STDMETHODCALLTYPE DragOver(
+               /* [in] */ DWORD grfKeyState,
+               /* [in] */ POINTL pt,
+               /* [out][in] */ DWORD __RPC_FAR *pdwEffect);
+       virtual HRESULT STDMETHODCALLTYPE DragLeave();
+       virtual HRESULT STDMETHODCALLTYPE Drop(
+               /* [unique][in] */ IDataObject __RPC_FAR *pDataObj,
+               /* [in] */ DWORD grfKeyState,
+               /* [in] */ POINTL pt,
+               /* [out][in] */ DWORD __RPC_FAR *pdwEffect);
 };
 
  /// implementation of IDragSourceHelper interface
@@ -222,10 +219,10 @@ public:
        DragSourceHelper()
        {
                if (FAILED(CoCreateInstance(CLSID_DragDropHelper,
-                        NULL,
-                        CLSCTX_INPROC_SERVER,
-                        IID_IDragSourceHelper,
-                        (void**)&pDragSourceHelper)))
+                                               NULL,
+                                               CLSCTX_INPROC_SERVER,
+                                               IID_IDragSourceHelper,
+                                               (void**)&pDragSourceHelper)))
                        pDragSourceHelper = NULL;
        }
 
@@ -239,7 +236,7 @@ public:
        }
 
        // IDragSourceHelper
-    HRESULT InitializeFromBitmap(HBITMAP hBitmap,
+       HRESULT InitializeFromBitmap(HBITMAP hBitmap,
                POINT& pt,      // cursor position in client coords of the window
                RECT& rc,       // selected item's bounding rect
                IDataObject* pDataObject,
@@ -249,19 +246,19 @@ public:
                if (pDragSourceHelper == NULL)
                        return E_FAIL;
 
-                   SHDRAGIMAGE di;
-            BITMAP      bm;
-            GetObject(hBitmap, sizeof(bm), &bm);
-            di.sizeDragImage.cx = bm.bmWidth;
-            di.sizeDragImage.cy = bm.bmHeight;
-            di.hbmpDragImage = hBitmap;
-            di.crColorKey = crColorKey;
-            di.ptOffset.x = pt.x - rc.left;
-            di.ptOffset.y = pt.y - rc.top;
-        return pDragSourceHelper->InitializeFromBitmap(&di, pDataObject);
+                       SHDRAGIMAGE di;
+                       BITMAP          bm;
+                       GetObject(hBitmap, sizeof(bm), &bm);
+                       di.sizeDragImage.cx = bm.bmWidth;
+                       di.sizeDragImage.cy = bm.bmHeight;
+                       di.hbmpDragImage = hBitmap;
+                       di.crColorKey = crColorKey;
+                       di.ptOffset.x = pt.x - rc.left;
+                       di.ptOffset.y = pt.y - rc.top;
+               return pDragSourceHelper->InitializeFromBitmap(&di, pDataObject);
        }
 
-    HRESULT InitializeFromWindow(HWND hwnd, POINT& pt,IDataObject* pDataObject)
+       HRESULT InitializeFromWindow(HWND hwnd, POINT& pt,IDataObject* pDataObject)
        {
                if (pDragSourceHelper == NULL)
                        return E_FAIL;