From 91140222b5623273f88d1c9810b61ce0a7bc4638 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Thu, 14 Jan 2010 09:47:59 -0600 Subject: [PATCH] mshtml: Added IHTMLIFrameElement stub implementation. --- dlls/mshtml/htmliframe.c | 127 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 126 insertions(+), 1 deletion(-) diff --git a/dlls/mshtml/htmliframe.c b/dlls/mshtml/htmliframe.c index ddb32c80ab2..689b43262a3 100644 --- a/dlls/mshtml/htmliframe.c +++ b/dlls/mshtml/htmliframe.c @@ -33,15 +33,139 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml); typedef struct { HTMLFrameBase framebase; + const IHTMLIFrameElementVtbl *lpIHTMLIFrameElementVtbl; } HTMLIFrame; +#define HTMLIFRAMEELEM(x) ((IHTMLIFrameElement*) &(x)->lpIHTMLIFrameElementVtbl) + +#define HTMLIFRAME_THIS(iface) DEFINE_THIS(HTMLIFrame, IHTMLIFrameElement, iface) + +static HRESULT WINAPI HTMLIFrameElement_QueryInterface(IHTMLIFrameElement *iface, + REFIID riid, void **ppv) +{ + HTMLIFrame *This = HTMLIFRAME_THIS(iface); + + return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->framebase.element.node), riid, ppv); +} + +static ULONG WINAPI HTMLIFrameElement_AddRef(IHTMLIFrameElement *iface) +{ + HTMLIFrame *This = HTMLIFRAME_THIS(iface); + + return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This->framebase.element.node)); +} + +static ULONG WINAPI HTMLIFrameElement_Release(IHTMLIFrameElement *iface) +{ + HTMLIFrame *This = HTMLIFRAME_THIS(iface); + + return IHTMLDOMNode_Release(HTMLDOMNODE(&This->framebase.element.node)); +} + +static HRESULT WINAPI HTMLIFrameElement_GetTypeInfoCount(IHTMLIFrameElement *iface, UINT *pctinfo) +{ + HTMLIFrame *This = HTMLIFRAME_THIS(iface); + return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->framebase.element.node.dispex), pctinfo); +} + +static HRESULT WINAPI HTMLIFrameElement_GetTypeInfo(IHTMLIFrameElement *iface, UINT iTInfo, + LCID lcid, ITypeInfo **ppTInfo) +{ + HTMLIFrame *This = HTMLIFRAME_THIS(iface); + return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->framebase.element.node.dispex), iTInfo, lcid, ppTInfo); +} + +static HRESULT WINAPI HTMLIFrameElement_GetIDsOfNames(IHTMLIFrameElement *iface, REFIID riid, + LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) +{ + HTMLIFrame *This = HTMLIFRAME_THIS(iface); + return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->framebase.element.node.dispex), riid, rgszNames, cNames, lcid, rgDispId); +} + +static HRESULT WINAPI HTMLIFrameElement_Invoke(IHTMLIFrameElement *iface, DISPID dispIdMember, + REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, + VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +{ + HTMLIFrame *This = HTMLIFRAME_THIS(iface); + return IDispatchEx_Invoke(DISPATCHEX(&This->framebase.element.node.dispex), dispIdMember, riid, + lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); +} + +static HRESULT WINAPI HTMLIFrameElement_put_vspace(IHTMLIFrameElement *iface, LONG v) +{ + HTMLIFrame *This = HTMLIFRAME_THIS(iface); + FIXME("(%p)->(%d)\n", This, v); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLIFrameElement_get_vspace(IHTMLIFrameElement *iface, LONG *p) +{ + HTMLIFrame *This = HTMLIFRAME_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLIFrameElement_put_hspace(IHTMLIFrameElement *iface, LONG v) +{ + HTMLIFrame *This = HTMLIFRAME_THIS(iface); + FIXME("(%p)->(%d)\n", This, v); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLIFrameElement_get_hspace(IHTMLIFrameElement *iface, LONG *p) +{ + HTMLIFrame *This = HTMLIFRAME_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLIFrameElement_put_align(IHTMLIFrameElement *iface, BSTR v) +{ + HTMLIFrame *This = HTMLIFRAME_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLIFrameElement_get_align(IHTMLIFrameElement *iface, BSTR *p) +{ + HTMLIFrame *This = HTMLIFRAME_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +#undef HTMLIFRAME_THIS + +static const IHTMLIFrameElementVtbl HTMLIFrameElementVtbl = { + HTMLIFrameElement_QueryInterface, + HTMLIFrameElement_AddRef, + HTMLIFrameElement_Release, + HTMLIFrameElement_GetTypeInfoCount, + HTMLIFrameElement_GetTypeInfo, + HTMLIFrameElement_GetIDsOfNames, + HTMLIFrameElement_Invoke, + HTMLIFrameElement_put_vspace, + HTMLIFrameElement_get_vspace, + HTMLIFrameElement_put_hspace, + HTMLIFrameElement_get_hspace, + HTMLIFrameElement_put_align, + HTMLIFrameElement_get_align +}; + #define HTMLIFRAME_NODE_THIS(iface) DEFINE_THIS2(HTMLIFrame, framebase.element.node, iface) static HRESULT HTMLIFrame_QI(HTMLDOMNode *iface, REFIID riid, void **ppv) { HTMLIFrame *This = HTMLIFRAME_NODE_THIS(iface); - return HTMLFrameBase_QI(&This->framebase, riid, ppv); + if(IsEqualGUID(&IID_IHTMLIFrameElement, riid)) { + TRACE("(%p)->(IID_IHTMLIFrameElement %p)\n", This, ppv); + *ppv = HTMLIFRAMEELEM(This); + }else { + return HTMLFrameBase_QI(&This->framebase, riid, ppv); + } + + IUnknown_AddRef((IUnknown*)*ppv); + return S_OK; } static void HTMLIFrame_destructor(HTMLDOMNode *iface) @@ -154,6 +278,7 @@ HTMLElement *HTMLIFrame_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem) ret = heap_alloc_zero(sizeof(HTMLIFrame)); + ret->lpIHTMLIFrameElementVtbl = &HTMLIFrameElementVtbl; ret->framebase.element.node.vtbl = &HTMLIFrameImplVtbl; HTMLFrameBase_Init(&ret->framebase, doc, nselem, &HTMLIFrame_dispex);