Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenhtmliframe.c
Go to the documentation of this file.
00001 /* 00002 * Copyright 2008 Jacek Caban for CodeWeavers 00003 * 00004 * This library is free software; you can redistribute it and/or 00005 * modify it under the terms of the GNU Lesser General Public 00006 * License as published by the Free Software Foundation; either 00007 * version 2.1 of the License, or (at your option) any later version. 00008 * 00009 * This library is distributed in the hope that it will be useful, 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 * Lesser General Public License for more details. 00013 * 00014 * You should have received a copy of the GNU Lesser General Public 00015 * License along with this library; if not, write to the Free Software 00016 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 00017 */ 00018 00019 #include <stdarg.h> 00020 00021 #define COBJMACROS 00022 00023 #include "windef.h" 00024 #include "winbase.h" 00025 #include "winuser.h" 00026 #include "ole2.h" 00027 00028 #include "mshtml_private.h" 00029 00030 #include "wine/debug.h" 00031 00032 WINE_DEFAULT_DEBUG_CHANNEL(mshtml); 00033 00034 typedef struct { 00035 HTMLFrameBase framebase; 00036 const IHTMLIFrameElementVtbl *lpIHTMLIFrameElementVtbl; 00037 } HTMLIFrame; 00038 00039 #define HTMLIFRAMEELEM(x) ((IHTMLIFrameElement*) &(x)->lpIHTMLIFrameElementVtbl) 00040 00041 #define HTMLIFRAME_THIS(iface) DEFINE_THIS(HTMLIFrame, IHTMLIFrameElement, iface) 00042 00043 static HRESULT WINAPI HTMLIFrameElement_QueryInterface(IHTMLIFrameElement *iface, 00044 REFIID riid, void **ppv) 00045 { 00046 HTMLIFrame *This = HTMLIFRAME_THIS(iface); 00047 00048 return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->framebase.element.node), riid, ppv); 00049 } 00050 00051 static ULONG WINAPI HTMLIFrameElement_AddRef(IHTMLIFrameElement *iface) 00052 { 00053 HTMLIFrame *This = HTMLIFRAME_THIS(iface); 00054 00055 return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This->framebase.element.node)); 00056 } 00057 00058 static ULONG WINAPI HTMLIFrameElement_Release(IHTMLIFrameElement *iface) 00059 { 00060 HTMLIFrame *This = HTMLIFRAME_THIS(iface); 00061 00062 return IHTMLDOMNode_Release(HTMLDOMNODE(&This->framebase.element.node)); 00063 } 00064 00065 static HRESULT WINAPI HTMLIFrameElement_GetTypeInfoCount(IHTMLIFrameElement *iface, UINT *pctinfo) 00066 { 00067 HTMLIFrame *This = HTMLIFRAME_THIS(iface); 00068 return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->framebase.element.node.dispex), pctinfo); 00069 } 00070 00071 static HRESULT WINAPI HTMLIFrameElement_GetTypeInfo(IHTMLIFrameElement *iface, UINT iTInfo, 00072 LCID lcid, ITypeInfo **ppTInfo) 00073 { 00074 HTMLIFrame *This = HTMLIFRAME_THIS(iface); 00075 return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->framebase.element.node.dispex), iTInfo, lcid, ppTInfo); 00076 } 00077 00078 static HRESULT WINAPI HTMLIFrameElement_GetIDsOfNames(IHTMLIFrameElement *iface, REFIID riid, 00079 LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) 00080 { 00081 HTMLIFrame *This = HTMLIFRAME_THIS(iface); 00082 return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->framebase.element.node.dispex), riid, rgszNames, cNames, lcid, rgDispId); 00083 } 00084 00085 static HRESULT WINAPI HTMLIFrameElement_Invoke(IHTMLIFrameElement *iface, DISPID dispIdMember, 00086 REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, 00087 VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) 00088 { 00089 HTMLIFrame *This = HTMLIFRAME_THIS(iface); 00090 return IDispatchEx_Invoke(DISPATCHEX(&This->framebase.element.node.dispex), dispIdMember, riid, 00091 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); 00092 } 00093 00094 static HRESULT WINAPI HTMLIFrameElement_put_vspace(IHTMLIFrameElement *iface, LONG v) 00095 { 00096 HTMLIFrame *This = HTMLIFRAME_THIS(iface); 00097 FIXME("(%p)->(%d)\n", This, v); 00098 return E_NOTIMPL; 00099 } 00100 00101 static HRESULT WINAPI HTMLIFrameElement_get_vspace(IHTMLIFrameElement *iface, LONG *p) 00102 { 00103 HTMLIFrame *This = HTMLIFRAME_THIS(iface); 00104 FIXME("(%p)->(%p)\n", This, p); 00105 return E_NOTIMPL; 00106 } 00107 00108 static HRESULT WINAPI HTMLIFrameElement_put_hspace(IHTMLIFrameElement *iface, LONG v) 00109 { 00110 HTMLIFrame *This = HTMLIFRAME_THIS(iface); 00111 FIXME("(%p)->(%d)\n", This, v); 00112 return E_NOTIMPL; 00113 } 00114 00115 static HRESULT WINAPI HTMLIFrameElement_get_hspace(IHTMLIFrameElement *iface, LONG *p) 00116 { 00117 HTMLIFrame *This = HTMLIFRAME_THIS(iface); 00118 FIXME("(%p)->(%p)\n", This, p); 00119 return E_NOTIMPL; 00120 } 00121 00122 static HRESULT WINAPI HTMLIFrameElement_put_align(IHTMLIFrameElement *iface, BSTR v) 00123 { 00124 HTMLIFrame *This = HTMLIFRAME_THIS(iface); 00125 FIXME("(%p)->(%s)\n", This, debugstr_w(v)); 00126 return E_NOTIMPL; 00127 } 00128 00129 static HRESULT WINAPI HTMLIFrameElement_get_align(IHTMLIFrameElement *iface, BSTR *p) 00130 { 00131 HTMLIFrame *This = HTMLIFRAME_THIS(iface); 00132 FIXME("(%p)->(%p)\n", This, p); 00133 return E_NOTIMPL; 00134 } 00135 00136 #undef HTMLIFRAME_THIS 00137 00138 static const IHTMLIFrameElementVtbl HTMLIFrameElementVtbl = { 00139 HTMLIFrameElement_QueryInterface, 00140 HTMLIFrameElement_AddRef, 00141 HTMLIFrameElement_Release, 00142 HTMLIFrameElement_GetTypeInfoCount, 00143 HTMLIFrameElement_GetTypeInfo, 00144 HTMLIFrameElement_GetIDsOfNames, 00145 HTMLIFrameElement_Invoke, 00146 HTMLIFrameElement_put_vspace, 00147 HTMLIFrameElement_get_vspace, 00148 HTMLIFrameElement_put_hspace, 00149 HTMLIFrameElement_get_hspace, 00150 HTMLIFrameElement_put_align, 00151 HTMLIFrameElement_get_align 00152 }; 00153 00154 #define HTMLIFRAME_NODE_THIS(iface) DEFINE_THIS2(HTMLIFrame, framebase.element.node, iface) 00155 00156 static HRESULT HTMLIFrame_QI(HTMLDOMNode *iface, REFIID riid, void **ppv) 00157 { 00158 HTMLIFrame *This = HTMLIFRAME_NODE_THIS(iface); 00159 00160 if(IsEqualGUID(&IID_IHTMLIFrameElement, riid)) { 00161 TRACE("(%p)->(IID_IHTMLIFrameElement %p)\n", This, ppv); 00162 *ppv = HTMLIFRAMEELEM(This); 00163 }else { 00164 return HTMLFrameBase_QI(&This->framebase, riid, ppv); 00165 } 00166 00167 IUnknown_AddRef((IUnknown*)*ppv); 00168 return S_OK; 00169 } 00170 00171 static void HTMLIFrame_destructor(HTMLDOMNode *iface) 00172 { 00173 HTMLIFrame *This = HTMLIFRAME_NODE_THIS(iface); 00174 00175 HTMLFrameBase_destructor(&This->framebase); 00176 } 00177 00178 static HRESULT HTMLIFrame_get_document(HTMLDOMNode *iface, IDispatch **p) 00179 { 00180 HTMLIFrame *This = HTMLIFRAME_NODE_THIS(iface); 00181 00182 if(!This->framebase.content_window || !This->framebase.content_window->doc) { 00183 *p = NULL; 00184 return S_OK; 00185 } 00186 00187 *p = (IDispatch*)HTMLDOC(&This->framebase.content_window->doc->basedoc); 00188 IDispatch_AddRef(*p); 00189 return S_OK; 00190 } 00191 00192 static HRESULT HTMLIFrame_get_dispid(HTMLDOMNode *iface, BSTR name, 00193 DWORD grfdex, DISPID *pid) 00194 { 00195 HTMLIFrame *This = HTMLIFRAME_NODE_THIS(iface); 00196 00197 if(!This->framebase.content_window) 00198 return DISP_E_UNKNOWNNAME; 00199 00200 return search_window_props(This->framebase.content_window, name, grfdex, pid); 00201 } 00202 00203 static HRESULT HTMLIFrame_invoke(HTMLDOMNode *iface, DISPID id, LCID lcid, 00204 WORD flags, DISPPARAMS *params, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller) 00205 { 00206 HTMLIFrame *This = HTMLIFRAME_NODE_THIS(iface); 00207 00208 if(!This->framebase.content_window) { 00209 ERR("no content window to invoke on\n"); 00210 return E_FAIL; 00211 } 00212 00213 return IDispatchEx_InvokeEx(DISPATCHEX(This->framebase.content_window), id, lcid, flags, params, res, ei, caller); 00214 } 00215 00216 static HRESULT HTMLIFrame_get_readystate(HTMLDOMNode *iface, BSTR *p) 00217 { 00218 HTMLIFrame *This = HTMLIFRAME_NODE_THIS(iface); 00219 00220 return IHTMLFrameBase2_get_readyState(HTMLFRAMEBASE2(&This->framebase), p); 00221 } 00222 00223 static HRESULT HTMLIFrame_bind_to_tree(HTMLDOMNode *iface) 00224 { 00225 HTMLIFrame *This = HTMLIFRAME_NODE_THIS(iface); 00226 nsIDOMDocument *nsdoc; 00227 nsresult nsres; 00228 HRESULT hres; 00229 00230 nsres = nsIDOMHTMLIFrameElement_GetContentDocument(This->framebase.nsiframe, &nsdoc); 00231 if(NS_FAILED(nsres) || !nsdoc) { 00232 ERR("GetContentDocument failed: %08x\n", nsres); 00233 return E_FAIL; 00234 } 00235 00236 hres = set_frame_doc(&This->framebase, nsdoc); 00237 nsIDOMDocument_Release(nsdoc); 00238 return hres; 00239 } 00240 00241 #undef HTMLIFRAME_NODE_THIS 00242 00243 static const NodeImplVtbl HTMLIFrameImplVtbl = { 00244 HTMLIFrame_QI, 00245 HTMLIFrame_destructor, 00246 NULL, 00247 NULL, 00248 NULL, 00249 NULL, 00250 HTMLIFrame_get_document, 00251 HTMLIFrame_get_readystate, 00252 HTMLIFrame_get_dispid, 00253 HTMLIFrame_invoke, 00254 HTMLIFrame_bind_to_tree 00255 }; 00256 00257 static const tid_t HTMLIFrame_iface_tids[] = { 00258 HTMLELEMENT_TIDS, 00259 IHTMLFrameBase_tid, 00260 IHTMLFrameBase2_tid, 00261 IHTMLIFrameElement_tid, 00262 0 00263 }; 00264 00265 static dispex_static_data_t HTMLIFrame_dispex = { 00266 NULL, 00267 DispHTMLIFrame_tid, 00268 NULL, 00269 HTMLIFrame_iface_tids 00270 }; 00271 00272 HTMLElement *HTMLIFrame_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem) 00273 { 00274 HTMLIFrame *ret; 00275 00276 ret = heap_alloc_zero(sizeof(HTMLIFrame)); 00277 00278 ret->lpIHTMLIFrameElementVtbl = &HTMLIFrameElementVtbl; 00279 ret->framebase.element.node.vtbl = &HTMLIFrameImplVtbl; 00280 00281 HTMLFrameBase_Init(&ret->framebase, doc, nselem, &HTMLIFrame_dispex); 00282 00283 return &ret->framebase.element; 00284 } Generated on Fri May 25 2012 04:23:04 for ReactOS by
1.7.6.1
|