ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

htmliframe.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.