From 93eb433ec2faf3950434aef50efc6537569b8e6e Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Mon, 11 Apr 2005 16:11:52 +0000 Subject: [PATCH] Stub implementation od IPersist, IPersistMoniker, IPersistFile, IMonikerProp. --- dlls/mshtml/Makefile.in | 3 +- dlls/mshtml/htmldoc.c | 31 +++-- dlls/mshtml/mshtml_private.h | 17 +++ dlls/mshtml/persist.c | 236 +++++++++++++++++++++++++++++++++++ 4 files changed, 274 insertions(+), 13 deletions(-) create mode 100644 dlls/mshtml/persist.c diff --git a/dlls/mshtml/Makefile.in b/dlls/mshtml/Makefile.in index 6e91fa77a92..96433102601 100644 --- a/dlls/mshtml/Makefile.in +++ b/dlls/mshtml/Makefile.in @@ -9,7 +9,8 @@ EXTRADEFS = -DCOM_NO_WINDOWS_H C_SRCS = \ htmldoc.c \ - main.c + main.c \ + persist.c @MAKE_DLL_RULES@ diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 54309727c84..15734b4d35b 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -37,32 +37,37 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml); -typedef struct { - IHTMLDocument2Vtbl *lpHTMLDocument2Vtbl; - ULONG ref; -} HTMLDocument; - -#define HTMLDOC(x) ((IHTMLDocument2*)&(x)->lpHTMLDocument2Vtbl) - - static HRESULT WINAPI HTMLDocument_QueryInterface(IHTMLDocument2 *iface, REFIID riid, void **ppvObject) { HTMLDocument *This = (HTMLDocument*)iface; *ppvObject = NULL; if(IsEqualGUID(&IID_IUnknown, riid)) { - TRACE("(%p)->(IID_IUnknown, %s)\n", This, debugstr_guid(riid)); + TRACE("(%p)->(IID_IUnknown, %p)\n", This, ppvObject); *ppvObject = HTMLDOC(This); }else if(IsEqualGUID(&IID_IDispatch, riid)) { - TRACE("(%p)->(IID_IDispatch, %s)\n", This, debugstr_guid(riid)); + TRACE("(%p)->(IID_IDispatch, %p)\n", This, ppvObject); *ppvObject = HTMLDOC(This); }else if(IsEqualGUID(&IID_IHTMLDocument, riid)) { - TRACE("(%p)->(IID_IHTMLDocument, %s)\n", This, debugstr_guid(riid)); + TRACE("(%p)->(IID_IHTMLDocument, %p)\n", This, ppvObject); *ppvObject = HTMLDOC(This); }else if(IsEqualGUID(&IID_IHTMLDocument2, riid)) { - TRACE("(%p)->(IID_IDocument2, %s)\n", This, debugstr_guid(riid)); + TRACE("(%p)->(IID_IDocument2, %p)\n", This, ppvObject); *ppvObject = HTMLDOC(This); + }else if(IsEqualGUID(&IID_IPersist, riid)) { + TRACE("(%p)->(IID_IPersist, %p)\n", This, ppvObject); + *ppvObject = PERSIST(This); + }else if(IsEqualGUID(&IID_IPersistMoniker, riid)) { + TRACE("(%p)->(IID_IPersistMoniker, %p)\n", This, ppvObject); + *ppvObject = PERSISTMON(This); + }else if(IsEqualGUID(&IID_IPersistFile, riid)) { + TRACE("(%p)->(IID_IPersistFile, %p)\n", This, ppvObject); + *ppvObject = PERSISTFILE(This); + }else if(IsEqualGUID(&IID_IMonikerProp, riid)) { + TRACE("(%p)->(IID_IMonikerProp, %p)\n", This, ppvObject); + *ppvObject = MONPROP(This); } + if(*ppvObject) { IHTMLDocument2_AddRef(iface); return S_OK; @@ -925,5 +930,7 @@ HRESULT HTMLDocument_Create(IUnknown *pUnkOuter, REFIID riid, void** ppvObject) if(FAILED(hres)) HeapFree(GetProcessHeap(), 0, ret); + HTMLDocument_Persist_Init(ret); + return hres; } diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index ac87f4ee0a2..e89cf12522f 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -16,4 +16,21 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +typedef struct { + IHTMLDocument2Vtbl *lpHTMLDocument2Vtbl; + IPersistMonikerVtbl *lpPersistMonikerVtbl; + IPersistFileVtbl *lpPersistFileVtbl; + IMonikerPropVtbl *lpMonikerPropVtbl; + + ULONG ref; +} HTMLDocument; + +#define HTMLDOC(x) ((IHTMLDocument2*) &(x)->lpHTMLDocument2Vtbl) +#define PERSIST(x) ((IPersist*) &(x)->lpPersistFileVtbl) +#define PERSISTMON(x) ((IPersistMoniker*) &(x)->lpPersistMonikerVtbl) +#define PERSISTFILE(x) ((IPersistFile*) &(x)->lpPersistFileVtbl) +#define MONPROP(x) ((IMonikerProp*) &(x)->lpMonikerPropVtbl) + HRESULT HTMLDocument_Create(IUnknown*,REFIID,void**); + +void HTMLDocument_Persist_Init(HTMLDocument*); diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c new file mode 100644 index 00000000000..ee2d0d99d76 --- /dev/null +++ b/dlls/mshtml/persist.c @@ -0,0 +1,236 @@ +/* + * Copyright 2005 Jacek Caban + * + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "config.h" + +#include +#include + +#define COBJMACROS + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "ole2.h" + +#include "mshtml.h" + +#include "wine/debug.h" + +#include "mshtml_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(mshtml); + +/********************************************************** + * IPersistMoniker implementation + */ + +#define PERSISTMON_THIS \ + HTMLDocument* const This=(HTMLDocument*)((char*)(iface)-offsetof(HTMLDocument,lpPersistMonikerVtbl)); + +static HRESULT WINAPI PersistMoniker_QueryInterface(IPersistMoniker *iface, REFIID riid, + void **ppvObject) +{ + PERSISTMON_THIS + return IHTMLDocument2_QueryInterface(HTMLDOC(This), riid, ppvObject); +} + +static ULONG WINAPI PersistMoniker_AddRef(IPersistMoniker *iface) +{ + PERSISTMON_THIS + return IHTMLDocument2_AddRef(HTMLDOC(This)); +} + +static ULONG WINAPI PersistMoniker_Release(IPersistMoniker *iface) +{ + PERSISTMON_THIS + return IHTMLDocument2_Release(HTMLDOC(This)); +} + +static HRESULT WINAPI PersistMoniker_GetClassID(IPersistMoniker *iface, CLSID *pClassID) +{ + PERSISTMON_THIS + return IPersist_GetClassID(PERSIST(This), pClassID); +} + +static HRESULT WINAPI PersistMoniker_IsDirty(IPersistMoniker *iface) +{ + FIXME("(%p)\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAvailable, + IMoniker *pimkName, LPBC pibc, DWORD grfMode) +{ + FIXME("(%p)->(%x %p %p %08lx)\n", iface, fFullyAvailable, pimkName, pibc, grfMode); + return S_OK; +} + +static HRESULT WINAPI PersistMoniker_Save(IPersistMoniker *iface, IMoniker *pimkName, + LPBC pbc, BOOL fRemember) +{ + FIXME("(%p)->(%p %p %x)\n", iface, pimkName, pbc, fRemember); + return E_NOTIMPL; +} + +static HRESULT WINAPI PersistMoniker_SaveCompleted(IPersistMoniker *iface, IMoniker *pimkName, LPBC pibc) +{ + FIXME("(%p)->(%p %p)\n", iface, pimkName, pibc); + return E_NOTIMPL; +} + +static HRESULT WINAPI PersistMoniker_GetCurMoniker(IPersistMoniker *iface, IMoniker **ppimkName) +{ + FIXME("(%p)->(%p)\n", iface, ppimkName); + return E_NOTIMPL; +} + +static IPersistMonikerVtbl PersistMonikerVtbl = { + PersistMoniker_QueryInterface, + PersistMoniker_AddRef, + PersistMoniker_Release, + PersistMoniker_GetClassID, + PersistMoniker_IsDirty, + PersistMoniker_Load, + PersistMoniker_Save, + PersistMoniker_SaveCompleted, + PersistMoniker_GetCurMoniker +}; + +/********************************************************** + * IMonikerProp implementation + */ + +#define MONPROP_THIS \ + HTMLDocument* const This=(HTMLDocument*)((char*)(iface)-offsetof(HTMLDocument,lpMonikerPropVtbl)); + +static HRESULT WINAPI MonikerProp_QueryInterface(IMonikerProp *iface, REFIID riid, void **ppvObject) +{ + MONPROP_THIS + return IHTMLDocument2_QueryInterface(HTMLDOC(This), riid, ppvObject); +} + +static ULONG WINAPI MonikerProp_AddRef(IMonikerProp *iface) +{ + MONPROP_THIS + return IHTMLDocument2_AddRef(HTMLDOC(This)); +} + +static ULONG WINAPI MonikerProp_Release(IMonikerProp *iface) +{ + MONPROP_THIS + return IHTMLDocument_Release(HTMLDOC(This)); +} + +static HRESULT WINAPI MonikerProp_PutProperty(IMonikerProp *iface, MONIKERPROPERTY mkp, LPCWSTR val) +{ + FIXME("(%p)->(%d %s)\n", iface, mkp, debugstr_w(val)); + return E_NOTIMPL; +} + +static IMonikerPropVtbl MonikerPropVtbl = { + MonikerProp_QueryInterface, + MonikerProp_AddRef, + MonikerProp_Release, + MonikerProp_PutProperty +}; + +/********************************************************** + * IPersistFile implementation + */ + +#define PERSISTFILE_THIS \ + HTMLDocument* const This=(HTMLDocument*)((char*)(iface)-offsetof(HTMLDocument,lpPersistFileVtbl)); + +static HRESULT WINAPI PersistFile_QueryInterface(IPersistFile *iface, REFIID riid, void **ppvObject) +{ + PERSISTFILE_THIS + return IHTMLDocument2_QueryInterface(HTMLDOC(This), riid, ppvObject); +} + +static ULONG WINAPI PersistFile_AddRef(IPersistFile *iface) +{ + PERSISTFILE_THIS + return IHTMLDocument2_AddRef(HTMLDOC(This)); +} + +static ULONG WINAPI PersistFile_Release(IPersistFile *iface) +{ + PERSISTFILE_THIS + return IHTMLDocument2_Release(HTMLDOC(This)); +} + +static HRESULT WINAPI PersistFile_GetClassID(IPersistFile *iface, CLSID *pClassID) +{ + TRACE("(%p)->(%p)\n", iface, pClassID); + + if(!pClassID) + return E_INVALIDARG; + + memcpy(pClassID, &CLSID_HTMLDocument, sizeof(CLSID)); + return S_OK; +} + +static HRESULT WINAPI PersistFile_IsDirty(IPersistFile *iface) +{ + FIXME("(%p)\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI PersistFile_Load(IPersistFile *iface, LPCOLESTR pszFileName, DWORD dwMode) +{ + FIXME("(%p)->(%s %08lx)\n", iface, debugstr_w(pszFileName), dwMode); + return E_NOTIMPL; +} + +static HRESULT WINAPI PersistFile_Save(IPersistFile *iface, LPCOLESTR pszFileName, BOOL fRemember) +{ + FIXME("(%p)->(%s %x)\n", iface, debugstr_w(pszFileName), fRemember); + return E_NOTIMPL; +} + +static HRESULT WINAPI PersistFile_SaveCompleted(IPersistFile *iface, LPCOLESTR pszFileName) +{ + FIXME("(%p)->(%s)\n", iface, debugstr_w(pszFileName)); + return E_NOTIMPL; +} + +static HRESULT WINAPI PersistFile_GetCurFile(IPersistFile *iface, LPOLESTR *pszFileName) +{ + FIXME("(%p)->(%p)\n", iface, pszFileName); + return E_NOTIMPL; +} + +static IPersistFileVtbl PersistFileVtbl = { + PersistFile_QueryInterface, + PersistFile_AddRef, + PersistFile_Release, + PersistFile_GetClassID, + PersistFile_IsDirty, + PersistFile_Load, + PersistFile_Save, + PersistFile_SaveCompleted, + PersistFile_GetCurFile +}; + +void HTMLDocument_Persist_Init(HTMLDocument *This) +{ + This->lpPersistMonikerVtbl = &PersistMonikerVtbl; + This->lpPersistFileVtbl = &PersistFileVtbl; + This->lpMonikerPropVtbl = &MonikerPropVtbl; +}