Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenhtmlframe.c
Go to the documentation of this file.
00001 /* 00002 * Copyright 2010 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 IHTMLFrameElement3Vtbl *lpIHTMLFrameElement3Vtbl; 00037 } HTMLFrameElement; 00038 00039 #define HTMLFRAMEELEM3(x) ((IHTMLFrameElement3*) &(x)->lpIHTMLFrameElement3Vtbl) 00040 00041 #define HTMLFRAME3_THIS(iface) DEFINE_THIS(HTMLFrameElement, IHTMLFrameElement3, iface) 00042 00043 static HRESULT WINAPI HTMLFrameElement3_QueryInterface(IHTMLFrameElement3 *iface, 00044 REFIID riid, void **ppv) 00045 { 00046 HTMLFrameElement *This = HTMLFRAME3_THIS(iface); 00047 00048 return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->framebase.element.node), riid, ppv); 00049 } 00050 00051 static ULONG WINAPI HTMLFrameElement3_AddRef(IHTMLFrameElement3 *iface) 00052 { 00053 HTMLFrameElement *This = HTMLFRAME3_THIS(iface); 00054 00055 return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This->framebase.element.node)); 00056 } 00057 00058 static ULONG WINAPI HTMLFrameElement3_Release(IHTMLFrameElement3 *iface) 00059 { 00060 HTMLFrameElement *This = HTMLFRAME3_THIS(iface); 00061 00062 return IHTMLDOMNode_Release(HTMLDOMNODE(&This->framebase.element.node)); 00063 } 00064 00065 static HRESULT WINAPI HTMLFrameElement3_GetTypeInfoCount(IHTMLFrameElement3 *iface, UINT *pctinfo) 00066 { 00067 HTMLFrameElement *This = HTMLFRAME3_THIS(iface); 00068 return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->framebase.element.node.dispex), pctinfo); 00069 } 00070 00071 static HRESULT WINAPI HTMLFrameElement3_GetTypeInfo(IHTMLFrameElement3 *iface, UINT iTInfo, 00072 LCID lcid, ITypeInfo **ppTInfo) 00073 { 00074 HTMLFrameElement *This = HTMLFRAME3_THIS(iface); 00075 return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->framebase.element.node.dispex), iTInfo, lcid, ppTInfo); 00076 } 00077 00078 static HRESULT WINAPI HTMLFrameElement3_GetIDsOfNames(IHTMLFrameElement3 *iface, REFIID riid, 00079 LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) 00080 { 00081 HTMLFrameElement *This = HTMLFRAME3_THIS(iface); 00082 return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->framebase.element.node.dispex), riid, rgszNames, cNames, lcid, rgDispId); 00083 } 00084 00085 static HRESULT WINAPI HTMLFrameElement3_Invoke(IHTMLFrameElement3 *iface, DISPID dispIdMember, 00086 REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, 00087 VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) 00088 { 00089 HTMLFrameElement *This = HTMLFRAME3_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 HTMLFrameElement3_get_contentDocument(IHTMLFrameElement3 *iface, IDispatch **p) 00095 { 00096 HTMLFrameElement *This = HTMLFRAME3_THIS(iface); 00097 IHTMLDocument2 *doc; 00098 HRESULT hres; 00099 00100 TRACE("(%p)->(%p)\n", This, p); 00101 00102 if(!This->framebase.content_window) { 00103 FIXME("NULL window\n"); 00104 return E_FAIL; 00105 } 00106 00107 hres = IHTMLWindow2_get_document(HTMLWINDOW2(This->framebase.content_window), &doc); 00108 if(FAILED(hres)) 00109 return hres; 00110 00111 *p = doc ? (IDispatch*)doc : NULL; 00112 return S_OK; 00113 } 00114 00115 static HRESULT WINAPI HTMLFrameElement3_put_src(IHTMLFrameElement3 *iface, BSTR v) 00116 { 00117 HTMLFrameElement *This = HTMLFRAME3_THIS(iface); 00118 FIXME("(%p)->(%s)\n", This, debugstr_w(v)); 00119 return E_NOTIMPL; 00120 } 00121 00122 static HRESULT WINAPI HTMLFrameElement3_get_src(IHTMLFrameElement3 *iface, BSTR *p) 00123 { 00124 HTMLFrameElement *This = HTMLFRAME3_THIS(iface); 00125 FIXME("(%p)->(%p)\n", This, p); 00126 return E_NOTIMPL; 00127 } 00128 00129 static HRESULT WINAPI HTMLFrameElement3_put_longDesc(IHTMLFrameElement3 *iface, BSTR v) 00130 { 00131 HTMLFrameElement *This = HTMLFRAME3_THIS(iface); 00132 FIXME("(%p)->(%s)\n", This, debugstr_w(v)); 00133 return E_NOTIMPL; 00134 } 00135 00136 static HRESULT WINAPI HTMLFrameElement3_get_longDesc(IHTMLFrameElement3 *iface, BSTR *p) 00137 { 00138 HTMLFrameElement *This = HTMLFRAME3_THIS(iface); 00139 FIXME("(%p)->(%p)\n", This, p); 00140 return E_NOTIMPL; 00141 } 00142 00143 static HRESULT WINAPI HTMLFrameElement3_put_frameBorder(IHTMLFrameElement3 *iface, BSTR v) 00144 { 00145 HTMLFrameElement *This = HTMLFRAME3_THIS(iface); 00146 FIXME("(%p)->(%s)\n", This, debugstr_w(v)); 00147 return E_NOTIMPL; 00148 } 00149 00150 static HRESULT WINAPI HTMLFrameElement3_get_frameBorder(IHTMLFrameElement3 *iface, BSTR *p) 00151 { 00152 HTMLFrameElement *This = HTMLFRAME3_THIS(iface); 00153 FIXME("(%p)->(%p)\n", This, p); 00154 return E_NOTIMPL; 00155 } 00156 00157 #undef HTMLFRAME3_THIS 00158 00159 static const IHTMLFrameElement3Vtbl HTMLFrameElement3Vtbl = { 00160 HTMLFrameElement3_QueryInterface, 00161 HTMLFrameElement3_AddRef, 00162 HTMLFrameElement3_Release, 00163 HTMLFrameElement3_GetTypeInfoCount, 00164 HTMLFrameElement3_GetTypeInfo, 00165 HTMLFrameElement3_GetIDsOfNames, 00166 HTMLFrameElement3_Invoke, 00167 HTMLFrameElement3_get_contentDocument, 00168 HTMLFrameElement3_put_src, 00169 HTMLFrameElement3_get_src, 00170 HTMLFrameElement3_put_longDesc, 00171 HTMLFrameElement3_get_longDesc, 00172 HTMLFrameElement3_put_frameBorder, 00173 HTMLFrameElement3_get_frameBorder 00174 }; 00175 00176 #define HTMLFRAME_NODE_THIS(iface) DEFINE_THIS2(HTMLFrameElement, framebase.element.node, iface) 00177 00178 static HRESULT HTMLFrameElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv) 00179 { 00180 HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface); 00181 00182 if(IsEqualGUID(&IID_IHTMLFrameElement3, riid)) { 00183 TRACE("(%p)->(IID_IHTMLFrameElement3 %p)\n", This, ppv); 00184 *ppv = HTMLFRAMEELEM3(This); 00185 }else { 00186 return HTMLFrameBase_QI(&This->framebase, riid, ppv); 00187 } 00188 00189 IUnknown_AddRef((IUnknown*)*ppv); 00190 return S_OK; 00191 } 00192 00193 static void HTMLFrameElement_destructor(HTMLDOMNode *iface) 00194 { 00195 HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface); 00196 00197 HTMLFrameBase_destructor(&This->framebase); 00198 } 00199 00200 static HRESULT HTMLFrameElement_get_document(HTMLDOMNode *iface, IDispatch **p) 00201 { 00202 HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface); 00203 00204 if(!This->framebase.content_window || !This->framebase.content_window->doc) { 00205 *p = NULL; 00206 return S_OK; 00207 } 00208 00209 *p = (IDispatch*)HTMLDOC(&This->framebase.content_window->doc->basedoc); 00210 IDispatch_AddRef(*p); 00211 return S_OK; 00212 } 00213 00214 static HRESULT HTMLFrameElement_get_dispid(HTMLDOMNode *iface, BSTR name, 00215 DWORD grfdex, DISPID *pid) 00216 { 00217 HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface); 00218 00219 if(!This->framebase.content_window) 00220 return DISP_E_UNKNOWNNAME; 00221 00222 return search_window_props(This->framebase.content_window, name, grfdex, pid); 00223 } 00224 00225 static HRESULT HTMLFrameElement_invoke(HTMLDOMNode *iface, DISPID id, LCID lcid, 00226 WORD flags, DISPPARAMS *params, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller) 00227 { 00228 HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface); 00229 00230 if(!This->framebase.content_window) { 00231 ERR("no content window to invoke on\n"); 00232 return E_FAIL; 00233 } 00234 00235 return IDispatchEx_InvokeEx(DISPATCHEX(This->framebase.content_window), id, lcid, flags, params, res, ei, caller); 00236 } 00237 00238 static HRESULT HTMLFrameElement_bind_to_tree(HTMLDOMNode *iface) 00239 { 00240 HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface); 00241 nsIDOMDocument *nsdoc; 00242 nsresult nsres; 00243 HRESULT hres; 00244 00245 nsres = nsIDOMHTMLFrameElement_GetContentDocument(This->framebase.nsframe, &nsdoc); 00246 if(NS_FAILED(nsres) || !nsdoc) { 00247 ERR("GetContentDocument failed: %08x\n", nsres); 00248 return E_FAIL; 00249 } 00250 00251 hres = set_frame_doc(&This->framebase, nsdoc); 00252 nsIDOMDocument_Release(nsdoc); 00253 return hres; 00254 } 00255 00256 #undef HTMLFRAME_NODE_THIS 00257 00258 static const NodeImplVtbl HTMLFrameElementImplVtbl = { 00259 HTMLFrameElement_QI, 00260 HTMLFrameElement_destructor, 00261 NULL, 00262 NULL, 00263 NULL, 00264 NULL, 00265 HTMLFrameElement_get_document, 00266 NULL, 00267 HTMLFrameElement_get_dispid, 00268 HTMLFrameElement_invoke, 00269 HTMLFrameElement_bind_to_tree 00270 }; 00271 00272 static const tid_t HTMLFrameElement_iface_tids[] = { 00273 HTMLELEMENT_TIDS, 00274 IHTMLFrameBase_tid, 00275 IHTMLFrameBase2_tid, 00276 IHTMLFrameElement3_tid, 00277 0 00278 }; 00279 00280 static dispex_static_data_t HTMLFrameElement_dispex = { 00281 NULL, 00282 DispHTMLFrameElement_tid, 00283 NULL, 00284 HTMLFrameElement_iface_tids 00285 }; 00286 00287 HTMLElement *HTMLFrameElement_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem) 00288 { 00289 HTMLFrameElement *ret; 00290 00291 ret = heap_alloc_zero(sizeof(HTMLFrameElement)); 00292 00293 ret->framebase.element.node.vtbl = &HTMLFrameElementImplVtbl; 00294 ret->lpIHTMLFrameElement3Vtbl = &HTMLFrameElement3Vtbl; 00295 00296 HTMLFrameBase_Init(&ret->framebase, doc, nselem, &HTMLFrameElement_dispex); 00297 00298 return &ret->framebase.element; 00299 } Generated on Mon May 28 2012 04:24:36 for ReactOS by
1.7.6.1
|