| /* |
| * Copyright 2005 Jacek Caban |
| * Copyright 2010 Ilya Shpigor |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
| */ |
| |
| #include "ieframe.h" |
| |
| #include "wine/debug.h" |
| |
| WINE_DEFAULT_DEBUG_CHANNEL(ieframe); |
| |
| /********************************************************************** |
| * Implement the IViewObject interface |
| */ |
| |
| static inline WebBrowser *impl_from_IViewObject2(IViewObject2 *iface) |
| { |
| return CONTAINING_RECORD(iface, WebBrowser, IViewObject2_iface); |
| } |
| |
| static HRESULT WINAPI ViewObject_QueryInterface(IViewObject2 *iface, REFIID riid, void **ppv) |
| { |
| WebBrowser *This = impl_from_IViewObject2(iface); |
| return IWebBrowser2_QueryInterface(&This->IWebBrowser2_iface, riid, ppv); |
| } |
| |
| static ULONG WINAPI ViewObject_AddRef(IViewObject2 *iface) |
| { |
| WebBrowser *This = impl_from_IViewObject2(iface); |
| return IWebBrowser2_AddRef(&This->IWebBrowser2_iface); |
| } |
| |
| static ULONG WINAPI ViewObject_Release(IViewObject2 *iface) |
| { |
| WebBrowser *This = impl_from_IViewObject2(iface); |
| return IWebBrowser2_Release(&This->IWebBrowser2_iface); |
| } |
| |
| static HRESULT WINAPI ViewObject_Draw(IViewObject2 *iface, DWORD dwDrawAspect, |
| LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hdcTargetDev, |
| HDC hdcDraw, LPCRECTL lprcBounds, LPCRECTL lprcWBounds, |
| BOOL (STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR), |
| ULONG_PTR dwContinue) |
| { |
| WebBrowser *This = impl_from_IViewObject2(iface); |
| FIXME("(%p)->(%d %d %p %p %p %p %p %p %p %08lx)\n", This, dwDrawAspect, lindex, |
| pvAspect, ptd, hdcTargetDev, hdcDraw, lprcBounds, lprcWBounds, pfnContinue, |
| dwContinue); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI ViewObject_GetColorSet(IViewObject2 *iface, DWORD dwAspect, |
| LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hicTargetDev, |
| LOGPALETTE **ppColorSet) |
| { |
| WebBrowser *This = impl_from_IViewObject2(iface); |
| FIXME("(%p)->(%d %d %p %p %p %p)\n", This, dwAspect, lindex, pvAspect, ptd, |
| hicTargetDev, ppColorSet); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI ViewObject_Freeze(IViewObject2 *iface, DWORD dwDrawAspect, LONG lindex, |
| void *pvAspect, DWORD *pdwFreeze) |
| { |
| WebBrowser *This = impl_from_IViewObject2(iface); |
| FIXME("(%p)->(%d %d %p %p)\n", This, dwDrawAspect, lindex, pvAspect, pdwFreeze); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI ViewObject_Unfreeze(IViewObject2 *iface, DWORD dwFreeze) |
| { |
| WebBrowser *This = impl_from_IViewObject2(iface); |
| FIXME("(%p)->(%d)\n", This, dwFreeze); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI ViewObject_SetAdvise(IViewObject2 *iface, DWORD aspects, DWORD advf, |
| IAdviseSink *pAdvSink) |
| { |
| WebBrowser *This = impl_from_IViewObject2(iface); |
| |
| TRACE("(%p)->(%d %08x %p)\n", This, aspects, advf, pAdvSink); |
| |
| if (aspects || advf) FIXME("aspects and/or flags not supported yet\n"); |
| |
| This->sink_aspects = aspects; |
| This->sink_flags = advf; |
| if (This->sink) IAdviseSink_Release(This->sink); |
| This->sink = pAdvSink; |
| if (This->sink) IAdviseSink_AddRef(This->sink); |
| |
| return S_OK; |
| } |
| |
| static HRESULT WINAPI ViewObject_GetAdvise(IViewObject2 *iface, DWORD *pAspects, |
| DWORD *pAdvf, IAdviseSink **ppAdvSink) |
| { |
| WebBrowser *This = impl_from_IViewObject2(iface); |
| |
| TRACE("(%p)->(%p %p %p)\n", This, pAspects, pAdvf, ppAdvSink); |
| |
| if (pAspects) *pAspects = This->sink_aspects; |
| if (pAdvf) *pAdvf = This->sink_flags; |
| if (ppAdvSink) |
| { |
| *ppAdvSink = This->sink; |
| if (*ppAdvSink) IAdviseSink_AddRef(*ppAdvSink); |
| } |
| |
| return S_OK; |
| } |
| |
| static HRESULT WINAPI ViewObject_GetExtent(IViewObject2 *iface, DWORD dwAspect, LONG lindex, |
| DVTARGETDEVICE *ptd, LPSIZEL lpsizel) |
| { |
| WebBrowser *This = impl_from_IViewObject2(iface); |
| FIXME("(%p)->(%d %d %p %p)\n", This, dwAspect, lindex, ptd, lpsizel); |
| return E_NOTIMPL; |
| } |
| |
| static const IViewObject2Vtbl ViewObjectVtbl = { |
| ViewObject_QueryInterface, |
| ViewObject_AddRef, |
| ViewObject_Release, |
| ViewObject_Draw, |
| ViewObject_GetColorSet, |
| ViewObject_Freeze, |
| ViewObject_Unfreeze, |
| ViewObject_SetAdvise, |
| ViewObject_GetAdvise, |
| ViewObject_GetExtent |
| }; |
| |
| /********************************************************************** |
| * Implement the IDataObject interface |
| */ |
| |
| static inline WebBrowser *impl_from_IDataObject(IDataObject *iface) |
| { |
| return CONTAINING_RECORD(iface, WebBrowser, IDataObject_iface); |
| } |
| |
| static HRESULT WINAPI DataObject_QueryInterface(LPDATAOBJECT iface, REFIID riid, LPVOID * ppvObj) |
| { |
| WebBrowser *This = impl_from_IDataObject(iface); |
| return IWebBrowser2_QueryInterface(&This->IWebBrowser2_iface, riid, ppvObj); |
| } |
| |
| static ULONG WINAPI DataObject_AddRef(LPDATAOBJECT iface) |
| { |
| WebBrowser *This = impl_from_IDataObject(iface); |
| return IWebBrowser2_AddRef(&This->IWebBrowser2_iface); |
| } |
| |
| static ULONG WINAPI DataObject_Release(LPDATAOBJECT iface) |
| { |
| WebBrowser *This = impl_from_IDataObject(iface); |
| return IWebBrowser2_Release(&This->IWebBrowser2_iface); |
| } |
| |
| static HRESULT WINAPI DataObject_GetData(LPDATAOBJECT iface, LPFORMATETC pformatetcIn, STGMEDIUM *pmedium) |
| { |
| WebBrowser *This = impl_from_IDataObject(iface); |
| FIXME("(%p)->()\n", This); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI DataObject_GetDataHere(LPDATAOBJECT iface, LPFORMATETC pformatetc, STGMEDIUM *pmedium) |
| { |
| WebBrowser *This = impl_from_IDataObject(iface); |
| FIXME("(%p)->()\n", This); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI DataObject_QueryGetData(LPDATAOBJECT iface, LPFORMATETC pformatetc) |
| { |
| WebBrowser *This = impl_from_IDataObject(iface); |
| FIXME("(%p)->()\n", This); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI DataObject_GetCanonicalFormatEtc(LPDATAOBJECT iface, LPFORMATETC pformatectIn, LPFORMATETC pformatetcOut) |
| { |
| WebBrowser *This = impl_from_IDataObject(iface); |
| FIXME("(%p)->()\n", This); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI DataObject_SetData(LPDATAOBJECT iface, LPFORMATETC pformatetc, STGMEDIUM *pmedium, BOOL fRelease) |
| { |
| WebBrowser *This = impl_from_IDataObject(iface); |
| FIXME("(%p)->()\n", This); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI DataObject_EnumFormatEtc(LPDATAOBJECT iface, DWORD dwDirection, IEnumFORMATETC **ppenumFormatEtc) |
| { |
| WebBrowser *This = impl_from_IDataObject(iface); |
| FIXME("(%p)->()\n", This); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI DataObject_DAdvise(LPDATAOBJECT iface, FORMATETC *pformatetc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection) |
| { |
| WebBrowser *This = impl_from_IDataObject(iface); |
| FIXME("(%p)->()\n", This); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI DataObject_DUnadvise(LPDATAOBJECT iface, DWORD dwConnection) |
| { |
| WebBrowser *This = impl_from_IDataObject(iface); |
| FIXME("(%p)->()\n", This); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI DataObject_EnumDAdvise(LPDATAOBJECT iface, IEnumSTATDATA **ppenumAdvise) |
| { |
| WebBrowser *This = impl_from_IDataObject(iface); |
| FIXME("(%p)->()\n", This); |
| return E_NOTIMPL; |
| } |
| |
| static const IDataObjectVtbl DataObjectVtbl = { |
| DataObject_QueryInterface, |
| DataObject_AddRef, |
| DataObject_Release, |
| DataObject_GetData, |
| DataObject_GetDataHere, |
| DataObject_QueryGetData, |
| DataObject_GetCanonicalFormatEtc, |
| DataObject_SetData, |
| DataObject_EnumFormatEtc, |
| DataObject_DAdvise, |
| DataObject_DUnadvise, |
| DataObject_EnumDAdvise |
| }; |
| |
| void WebBrowser_ViewObject_Init(WebBrowser *This) |
| { |
| This->IViewObject2_iface.lpVtbl = &ViewObjectVtbl; |
| This->IDataObject_iface.lpVtbl = &DataObjectVtbl; |
| } |