diff --git a/reactos/dll/win32/mshtml/Da.rc b/reactos/dll/win32/mshtml/Da.rc new file mode 100644 index 00000000000..40562dc36df --- /dev/null +++ b/reactos/dll/win32/mshtml/Da.rc @@ -0,0 +1,57 @@ +/* + * Danish language support + * + * Copyright (C) 2008 Jens Albretsen + * + * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + + +LANGUAGE LANG_DANISH, SUBLANG_DEFAULT + +STRINGTABLE DISCARDABLE +{ + IDS_HTMLDISABLED "HTML optegning er i шjeblikket deaktiveret." + IDS_HTMLDOCUMENT "HTML dokument" + IDS_DOWNLOADING "Henter..." + IDS_INSTALLING "Installerer..." +} + +ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 85 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Installere Wine Gecko" +FONT 8, "MS Shell Dlg" +{ + LTEXT "Dette program prшver at vise en HTML-side. Wine har brug for Gecko" \ + "(Mozillas HTML motor) for at vise denne siden. Vжlg Installer hvis " \ + "du vil have at Wine skal hente og installere Gecko automatisk.", ID_DWL_STATUS, 10, 10, 240, 30, SS_LEFT + CONTROL "Progress", ID_DWL_PROGRESS, PROGRESS_CLASSA, WS_BORDER|PBS_SMOOTH, 10, 40, 240, 12 + DEFPUSHBUTTON "&Installer", ID_DWL_INSTALL, 200, 60, 50, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Annuller", IDCANCEL, 140, 60, 50, 15, WS_GROUP | WS_TABSTOP +} + +IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 +STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Hyperlink" +FONT 8, "MS Shell Dlg" +{ + GROUPBOX "Information om Hyperlink'en", IDC_STATIC, 5, 5, 190, 55 + LTEXT "&Type:", IDC_STATIC, 10, 22, 20, 10 + COMBOBOX IDC_TYPE, 35, 20, 45, 100, WS_TABSTOP | WS_GROUP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_HASSTRINGS + LTEXT "&URL:", IDC_STATIC, 10, 42, 20, 10 + EDITTEXT IDC_URL, 35, 40, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "OK", IDOK, 200, 10, 45, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Annuller", IDCANCEL, 200, 28, 45, 14, WS_GROUP | WS_TABSTOP +} diff --git a/reactos/dll/win32/mshtml/Fi.rc b/reactos/dll/win32/mshtml/Fi.rc index 8ca063b06e8..d1d389a8ba5 100644 --- a/reactos/dll/win32/mshtml/Fi.rc +++ b/reactos/dll/win32/mshtml/Fi.rc @@ -25,4 +25,6 @@ STRINGTABLE DISCARDABLE { IDS_HTMLDISABLED "HTML:n nдyttдminen on tдllдhetkellд poistettu kдytцstд." IDS_HTMLDOCUMENT "HTML Dokumentti" + IDS_DOWNLOADING "Downloading..." + IDS_INSTALLING "Installing..." } diff --git a/reactos/dll/win32/mshtml/Hu.rc b/reactos/dll/win32/mshtml/Hu.rc index bb2d3308dc8..7f3d25446ad 100644 --- a/reactos/dll/win32/mshtml/Hu.rc +++ b/reactos/dll/win32/mshtml/Hu.rc @@ -23,4 +23,6 @@ STRINGTABLE DISCARDABLE { IDS_HTMLDISABLED "A HTML rajzolбs jelenleg le van tiltva." IDS_HTMLDOCUMENT "HTML Dokumentum" + IDS_DOWNLOADING "Downloading..." + IDS_INSTALLING "Installing..." } diff --git a/reactos/dll/win32/mshtml/No.rc b/reactos/dll/win32/mshtml/No.rc index 731459e9e83..463d2c6939f 100644 --- a/reactos/dll/win32/mshtml/No.rc +++ b/reactos/dll/win32/mshtml/No.rc @@ -25,8 +25,8 @@ STRINGTABLE DISCARDABLE { IDS_HTMLDISABLED "HTML-tegning er for шyeblikket deaktivert." IDS_HTMLDOCUMENT "HTML-dokument" - IDS_DOWNLOADING "Laster ned . . ." - IDS_INSTALLING "Installerer . . ." + IDS_DOWNLOADING "Laster ned..." + IDS_INSTALLING "Installerer..." } ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 85 diff --git a/reactos/dll/win32/mshtml/Ru.rc b/reactos/dll/win32/mshtml/Ru.rc index 3c8207f6669..a16273be30a 100644 --- a/reactos/dll/win32/mshtml/Ru.rc +++ b/reactos/dll/win32/mshtml/Ru.rc @@ -27,17 +27,17 @@ STRINGTABLE DISCARDABLE IDS_INSTALLING "Установка..." } -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 85 +ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 261, 85 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Установка Wine Gecko" FONT 8, "MS Shell Dlg" { LTEXT "Эта программа пытается отобразить HTML страницу. Для её отображения Wine необходимо " \ "установить Gecko (Mozilla HTML engine). Нажмите кнопку установить если вы хотите, что бы Wine " \ - "автоматически загрузил и установил Gecko.", ID_DWL_STATUS, 10, 10, 240, 30, SS_LEFT - CONTROL "Прогресс", ID_DWL_PROGRESS, PROGRESS_CLASSA, WS_BORDER|PBS_SMOOTH, 10, 40, 240, 12 - DEFPUSHBUTTON "&Установить", ID_DWL_INSTALL, 200, 60, 50, 15, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Отмена", IDCANCEL, 140, 60, 50, 15, WS_GROUP | WS_TABSTOP + "автоматически загрузил и установил Gecko.", ID_DWL_STATUS, 10, 10, 240, 33, SS_LEFT + CONTROL "Прогресс", ID_DWL_PROGRESS, PROGRESS_CLASSA, WS_BORDER|PBS_SMOOTH, 10, 46, 240, 12 + DEFPUSHBUTTON "&Установить", ID_DWL_INSTALL, 200, 63, 50, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Отмена", IDCANCEL, 140, 63, 50, 15, WS_GROUP | WS_TABSTOP } IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 diff --git a/reactos/dll/win32/mshtml/Sv.rc b/reactos/dll/win32/mshtml/Sv.rc index 1a93f0e4ed7..9f582cc27fe 100644 --- a/reactos/dll/win32/mshtml/Sv.rc +++ b/reactos/dll/win32/mshtml/Sv.rc @@ -17,7 +17,7 @@ */ -LANGUAGE LANG_SWEDISH, SUBLANG_DEFAULT +LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL STRINGTABLE DISCARDABLE { diff --git a/reactos/dll/win32/mshtml/dispex.c b/reactos/dll/win32/mshtml/dispex.c new file mode 100644 index 00000000000..4e44130e0ac --- /dev/null +++ b/reactos/dll/win32/mshtml/dispex.c @@ -0,0 +1,652 @@ +/* + * Copyright 2008 Jacek Caban for CodeWeavers + * + * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +#define COBJMACROS + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "ole2.h" + +#include "wine/debug.h" + +#include "mshtml_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(mshtml); + +typedef struct { + DISPID id; + BSTR name; + tid_t tid; +} func_info_t; + +struct dispex_data_t { + DWORD func_cnt; + func_info_t *funcs; + func_info_t **name_table; + + struct list entry; +}; + +typedef struct { + VARIANT var; + LPWSTR name; +} dynamic_prop_t; + +struct dispex_dynamic_data_t { + DWORD buf_size; + DWORD prop_cnt; + dynamic_prop_t *props; +}; + +#define DISPID_DYNPROP_0 0x50000000 +#define DISPID_DYNPROP_MAX 0x5fffffff + +static ITypeLib *typelib; +static ITypeInfo *typeinfos[LAST_tid]; +static struct list dispex_data_list = LIST_INIT(dispex_data_list); + +static REFIID tid_ids[] = { + &IID_NULL, + &DIID_DispDOMChildrenCollection, + &DIID_DispHTMLCommentElement, + &DIID_DispHTMLDocument, + &DIID_DispHTMLDOMTextNode, + &DIID_DispHTMLElementCollection, + &DIID_DispHTMLGenericElement, + &DIID_DispHTMLImg, + &DIID_DispHTMLInputElement, + &DIID_DispHTMLOptionElement, + &DIID_DispHTMLSelectElement, + &DIID_DispHTMLStyle, + &DIID_DispHTMLUnknownElement, + &DIID_DispHTMLWindow2, + &IID_IHTMLCommentElement, + &IID_IHTMLDocument2, + &IID_IHTMLDocument3, + &IID_IHTMLDocument4, + &IID_IHTMLDocument5, + &IID_IHTMLDOMChildrenCollection, + &IID_IHTMLDOMNode, + &IID_IHTMLDOMNode2, + &IID_IHTMLDOMTextNode, + &IID_IHTMLElement, + &IID_IHTMLElement2, + &IID_IHTMLElementCollection, + &IID_IHTMLGenericElement, + &IID_IHTMLImgElement, + &IID_IHTMLInputElement, + &IID_IHTMLOptionElement, + &IID_IHTMLSelectElement, + &IID_IHTMLStyle, + &IID_IHTMLWindow2, + &IID_IHTMLWindow3, + &IID_IOmNavigator +}; + +HRESULT get_typeinfo(tid_t tid, ITypeInfo **typeinfo) +{ + HRESULT hres; + + if(!typelib) { + ITypeLib *tl; + + hres = LoadRegTypeLib(&LIBID_MSHTML, 4, 0, LOCALE_SYSTEM_DEFAULT, &tl); + if(FAILED(hres)) { + ERR("LoadRegTypeLib failed: %08x\n", hres); + return hres; + } + + if(InterlockedCompareExchangePointer((void**)&typelib, tl, NULL)) + ITypeLib_Release(tl); + } + + if(!typeinfos[tid]) { + ITypeInfo *typeinfo; + + hres = ITypeLib_GetTypeInfoOfGuid(typelib, tid_ids[tid], &typeinfo); + if(FAILED(hres)) { + ERR("GetTypeInfoOfGuid(%s) failed: %08x\n", debugstr_guid(tid_ids[tid]), hres); + return hres; + } + + if(InterlockedCompareExchangePointer((void**)(typeinfos+tid), typeinfo, NULL)) + ITypeInfo_Release(typeinfo); + } + + *typeinfo = typeinfos[tid]; + return S_OK; +} + +void release_typelib(void) +{ + dispex_data_t *iter; + unsigned i; + + while(!list_empty(&dispex_data_list)) { + iter = LIST_ENTRY(list_head(&dispex_data_list), dispex_data_t, entry); + list_remove(&iter->entry); + + for(i=0; i < iter->func_cnt; i++) + SysFreeString(iter->funcs[i].name); + + heap_free(iter->funcs); + heap_free(iter->name_table); + heap_free(iter); + } + + if(!typelib) + return; + + for(i=0; i < sizeof(typeinfos)/sizeof(*typeinfos); i++) + if(typeinfos[i]) + ITypeInfo_Release(typeinfos[i]); + + ITypeLib_Release(typelib); +} + +static void add_func_info(dispex_data_t *data, DWORD *size, tid_t tid, DISPID id, ITypeInfo *dti) +{ + HRESULT hres; + + if(data->func_cnt && data->funcs[data->func_cnt-1].id == id) + return; + + if(data->func_cnt == *size) + data->funcs = heap_realloc(data->funcs, (*size <<= 1)*sizeof(func_info_t)); + + hres = ITypeInfo_GetDocumentation(dti, id, &data->funcs[data->func_cnt].name, NULL, NULL, NULL); + if(FAILED(hres)) + return; + + data->funcs[data->func_cnt].id = id; + data->funcs[data->func_cnt].tid = tid; + + data->func_cnt++; +} + +static int dispid_cmp(const void *p1, const void *p2) +{ + return ((func_info_t*)p1)->id - ((func_info_t*)p2)->id; +} + +static int func_name_cmp(const void *p1, const void *p2) +{ + return strcmpiW((*(func_info_t**)p1)->name, (*(func_info_t**)p2)->name); +} + +static dispex_data_t *preprocess_dispex_data(DispatchEx *This) +{ + const tid_t *tid = This->data->iface_tids; + FUNCDESC *funcdesc; + dispex_data_t *data; + DWORD size = 16, i; + ITypeInfo *ti, *dti; + HRESULT hres; + + TRACE("(%p)\n", This); + + hres = get_typeinfo(This->data->disp_tid, &dti); + if(FAILED(hres)) { + ERR("Could not get disp type info: %08x\n", hres); + return NULL; + } + + data = heap_alloc(sizeof(dispex_data_t)); + data->func_cnt = 0; + data->funcs = heap_alloc(size*sizeof(func_info_t)); + list_add_tail(&dispex_data_list, &data->entry); + + while(*tid) { + hres = get_typeinfo(*tid, &ti); + if(FAILED(hres)) + break; + + i=7; + while(1) { + hres = ITypeInfo_GetFuncDesc(ti, i++, &funcdesc); + if(FAILED(hres)) + break; + + add_func_info(data, &size, *tid, funcdesc->memid, dti); + ITypeInfo_ReleaseFuncDesc(ti, funcdesc); + } + + tid++; + } + + if(!data->func_cnt) { + heap_free(data->funcs); + data->funcs = NULL; + }else if(data->func_cnt != size) { + data->funcs = heap_realloc(data->funcs, data->func_cnt * sizeof(func_info_t)); + } + + qsort(data->funcs, data->func_cnt, sizeof(func_info_t), dispid_cmp); + + if(data->funcs) { + data->name_table = heap_alloc(data->func_cnt * sizeof(func_info_t*)); + for(i=0; i < data->func_cnt; i++) + data->name_table[i] = data->funcs+i; + qsort(data->name_table, data->func_cnt, sizeof(func_info_t*), func_name_cmp); + }else { + data->name_table = NULL; + } + + return data; +} + +static CRITICAL_SECTION cs_dispex_static_data; +static CRITICAL_SECTION_DEBUG cs_dispex_static_data_dbg = +{ + 0, 0, &cs_dispex_static_data, + { &cs_dispex_static_data_dbg.ProcessLocksList, &cs_dispex_static_data_dbg.ProcessLocksList }, + 0, 0, { (DWORD_PTR)(__FILE__ ": dispex_static_data") } +}; +static CRITICAL_SECTION cs_dispex_static_data = { &cs_dispex_static_data_dbg, -1, 0, 0, 0, 0 }; + + +static dispex_data_t *get_dispex_data(DispatchEx *This) +{ + if(This->data->data) + return This->data->data; + + EnterCriticalSection(&cs_dispex_static_data); + + if(!This->data->data) + This->data->data = preprocess_dispex_data(This); + + LeaveCriticalSection(&cs_dispex_static_data); + + return This->data->data; +} + +void call_disp_func(HTMLDocument *doc, IDispatch *disp) +{ + DISPID named_arg = DISPID_THIS; + VARIANTARG arg; + DISPPARAMS params = {&arg, &named_arg, 1, 1}; + EXCEPINFO ei; + IDispatchEx *dispex; + VARIANT res; + HRESULT hres; + + hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex); + if(FAILED(hres)) { + FIXME("Could not get IDispatchEx interface: %08x\n", hres); + return; + } + + V_VT(&arg) = VT_DISPATCH; + V_DISPATCH(&arg) = (IDispatch*)HTMLWINDOW2(doc->window); + VariantInit(&res); + memset(&ei, 0, sizeof(ei)); + + hres = IDispatchEx_InvokeEx(dispex, 0, GetUserDefaultLCID(), DISPATCH_METHOD, ¶ms, &res, &ei, NULL); + IDispatchEx_Release(dispex); + + TRACE("%p returned %08x\n", disp, hres); + + VariantClear(&res); +} + +static inline BOOL is_custom_dispid(DISPID id) +{ + return MSHTML_DISPID_CUSTOM_MIN <= id && id <= MSHTML_DISPID_CUSTOM_MAX; +} + +static inline BOOL is_dynamic_dispid(DISPID id) +{ + return DISPID_DYNPROP_0 <= id && id <= DISPID_DYNPROP_MAX; +} + +#define DISPATCHEX_THIS(iface) DEFINE_THIS(DispatchEx, IDispatchEx, iface) + +static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid, void **ppv) +{ + DispatchEx *This = DISPATCHEX_THIS(iface); + + return IUnknown_QueryInterface(This->outer, riid, ppv); +} + +static ULONG WINAPI DispatchEx_AddRef(IDispatchEx *iface) +{ + DispatchEx *This = DISPATCHEX_THIS(iface); + + return IUnknown_AddRef(This->outer); +} + +static ULONG WINAPI DispatchEx_Release(IDispatchEx *iface) +{ + DispatchEx *This = DISPATCHEX_THIS(iface); + + return IUnknown_Release(This->outer); +} + +static HRESULT WINAPI DispatchEx_GetTypeInfoCount(IDispatchEx *iface, UINT *pctinfo) +{ + DispatchEx *This = DISPATCHEX_THIS(iface); + + TRACE("(%p)->(%p)\n", This, pctinfo); + + *pctinfo = 1; + return S_OK; +} + +static HRESULT WINAPI DispatchEx_GetTypeInfo(IDispatchEx *iface, UINT iTInfo, + LCID lcid, ITypeInfo **ppTInfo) +{ + DispatchEx *This = DISPATCHEX_THIS(iface); + HRESULT hres; + + TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo); + + hres = get_typeinfo(This->data->disp_tid, ppTInfo); + if(FAILED(hres)) + return hres; + + ITypeInfo_AddRef(*ppTInfo); + return S_OK; +} + +static HRESULT WINAPI DispatchEx_GetIDsOfNames(IDispatchEx *iface, REFIID riid, + LPOLESTR *rgszNames, UINT cNames, + LCID lcid, DISPID *rgDispId) +{ + DispatchEx *This = DISPATCHEX_THIS(iface); + UINT i; + HRESULT hres; + + TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames, + lcid, rgDispId); + + for(i=0; i < cNames; i++) { + hres = IDispatchEx_GetDispID(DISPATCHEX(This), rgszNames[i], 0, rgDispId+i); + if(FAILED(hres)) + return hres; + } + + return S_OK; +} + +static HRESULT WINAPI DispatchEx_Invoke(IDispatchEx *iface, DISPID dispIdMember, + REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, + VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +{ + DispatchEx *This = DISPATCHEX_THIS(iface); + + TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), + lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); + + return IDispatchEx_InvokeEx(DISPATCHEX(This), dispIdMember, lcid, wFlags, + pDispParams, pVarResult, pExcepInfo, NULL); +} + +static HRESULT WINAPI DispatchEx_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid) +{ + DispatchEx *This = DISPATCHEX_THIS(iface); + dispex_data_t *data; + int min, max, n, c; + + TRACE("(%p)->(%s %x %p)\n", This, debugstr_w(bstrName), grfdex, pid); + + if(grfdex & ~(fdexNameCaseSensitive|fdexNameEnsure|fdexNameImplicit)) + FIXME("Unsupported grfdex %x\n", grfdex); + + data = get_dispex_data(This); + if(!data) + return E_FAIL; + + min = 0; + max = data->func_cnt-1; + + while(min <= max) { + n = (min+max)/2; + + c = strcmpiW(data->name_table[n]->name, bstrName); + if(!c) { + if((grfdex & fdexNameCaseSensitive) && strcmpW(data->name_table[n]->name, bstrName)) + break; + + *pid = data->name_table[n]->id; + return S_OK; + } + + if(c > 0) + max = n-1; + else + min = n+1; + } + + if(This->dynamic_data) { + unsigned i; + + for(i=0; i < This->dynamic_data->prop_cnt; i++) { + if(!strcmpW(This->dynamic_data->props[i].name, bstrName)) { + *pid = DISPID_DYNPROP_0 + i; + return S_OK; + } + } + } + + if(This->data->vtbl && This->data->vtbl->get_dispid) { + HRESULT hres; + + hres = This->data->vtbl->get_dispid(This->outer, bstrName, grfdex, pid); + if(hres != DISP_E_UNKNOWNNAME) + return hres; + } + + if(grfdex & fdexNameEnsure) { + TRACE("creating dynamic prop %s\n", debugstr_w(bstrName)); + + if(!This->dynamic_data) { + This->dynamic_data = heap_alloc_zero(sizeof(dispex_dynamic_data_t)); + This->dynamic_data->props = heap_alloc(This->dynamic_data->buf_size = 4); + }else if(This->dynamic_data->buf_size == This->dynamic_data->prop_cnt) { + This->dynamic_data->props = heap_realloc(This->dynamic_data->props, This->dynamic_data->buf_size<<=1); + } + + This->dynamic_data->props[This->dynamic_data->prop_cnt].name = heap_strdupW(bstrName); + VariantInit(&This->dynamic_data->props[This->dynamic_data->prop_cnt].var); + *pid = DISPID_DYNPROP_0 + This->dynamic_data->prop_cnt++; + + return S_OK; + } + + TRACE("not found %s\n", debugstr_w(bstrName)); + return DISP_E_UNKNOWNNAME; +} + +static HRESULT WINAPI DispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp, + VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller) +{ + DispatchEx *This = DISPATCHEX_THIS(iface); + IUnknown *unk; + ITypeInfo *ti; + dispex_data_t *data; + UINT argerr=0; + int min, max, n; + HRESULT hres; + + TRACE("(%p)->(%x %x %x %p %p %p %p)\n", This, id, lcid, wFlags, pdp, pvarRes, pei, pspCaller); + + if(is_custom_dispid(id) && This->data->vtbl && This->data->vtbl->invoke) + return This->data->vtbl->invoke(This->outer, id, lcid, wFlags, pdp, pvarRes, pei, pspCaller); + + if(wFlags == DISPATCH_CONSTRUCT) { + FIXME("DISPATCH_CONSTRUCT not implemented\n"); + return E_NOTIMPL; + } + + if(is_dynamic_dispid(id)) { + DWORD idx = id - DISPID_DYNPROP_0; + VARIANT *var; + + if(!This->dynamic_data || This->dynamic_data->prop_cnt <= idx) + return DISP_E_UNKNOWNNAME; + + var = &This->dynamic_data->props[idx].var; + + switch(wFlags) { + case INVOKE_PROPERTYGET: + return VariantCopy(pvarRes, var); + case INVOKE_PROPERTYPUT: + VariantClear(var); + return VariantCopy(var, pdp->rgvarg); + default: + FIXME("unhandled wFlags %x\n", wFlags); + return E_NOTIMPL; + } + } + + data = get_dispex_data(This); + if(!data) + return E_FAIL; + + min = 0; + max = data->func_cnt-1; + + while(min <= max) { + n = (min+max)/2; + + if(data->funcs[n].id == id) + break; + + if(data->funcs[n].id < id) + min = n+1; + else + max = n-1; + } + + if(min > max) { + WARN("invalid id %x\n", id); + return DISP_E_UNKNOWNNAME; + } + + hres = get_typeinfo(data->funcs[n].tid, &ti); + if(FAILED(hres)) { + ERR("Could not get type info: %08x\n", hres); + return hres; + } + + hres = IUnknown_QueryInterface(This->outer, tid_ids[data->funcs[n].tid], (void**)&unk); + if(FAILED(hres)) { + ERR("Could not get iface: %08x\n", hres); + return E_FAIL; + } + + hres = ITypeInfo_Invoke(ti, unk, id, wFlags, pdp, pvarRes, pei, &argerr); + + IUnknown_Release(unk); + return hres; +} + +static HRESULT WINAPI DispatchEx_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex) +{ + DispatchEx *This = DISPATCHEX_THIS(iface); + FIXME("(%p)->(%s %x)\n", This, debugstr_w(bstrName), grfdex); + return E_NOTIMPL; +} + +static HRESULT WINAPI DispatchEx_DeleteMemberByDispID(IDispatchEx *iface, DISPID id) +{ + DispatchEx *This = DISPATCHEX_THIS(iface); + FIXME("(%p)->(%x)\n", This, id); + return E_NOTIMPL; +} + +static HRESULT WINAPI DispatchEx_GetMemberProperties(IDispatchEx *iface, DISPID id, DWORD grfdexFetch, DWORD *pgrfdex) +{ + DispatchEx *This = DISPATCHEX_THIS(iface); + FIXME("(%p)->(%x %x %p)\n", This, id, grfdexFetch, pgrfdex); + return E_NOTIMPL; +} + +static HRESULT WINAPI DispatchEx_GetMemberName(IDispatchEx *iface, DISPID id, BSTR *pbstrName) +{ + DispatchEx *This = DISPATCHEX_THIS(iface); + FIXME("(%p)->(%x %p)\n", This, id, pbstrName); + return E_NOTIMPL; +} + +static HRESULT WINAPI DispatchEx_GetNextDispID(IDispatchEx *iface, DWORD grfdex, DISPID id, DISPID *pid) +{ + DispatchEx *This = DISPATCHEX_THIS(iface); + FIXME("(%p)->(%x %x %p)\n", This, grfdex, id, pid); + return E_NOTIMPL; +} + +static HRESULT WINAPI DispatchEx_GetNameSpaceParent(IDispatchEx *iface, IUnknown **ppunk) +{ + DispatchEx *This = DISPATCHEX_THIS(iface); + FIXME("(%p)->(%p)\n", This, ppunk); + return E_NOTIMPL; +} + +#undef DISPATCHEX_THIS + +static IDispatchExVtbl DispatchExVtbl = { + DispatchEx_QueryInterface, + DispatchEx_AddRef, + DispatchEx_Release, + DispatchEx_GetTypeInfoCount, + DispatchEx_GetTypeInfo, + DispatchEx_GetIDsOfNames, + DispatchEx_Invoke, + DispatchEx_GetDispID, + DispatchEx_InvokeEx, + DispatchEx_DeleteMemberByName, + DispatchEx_DeleteMemberByDispID, + DispatchEx_GetMemberProperties, + DispatchEx_GetMemberName, + DispatchEx_GetNextDispID, + DispatchEx_GetNameSpaceParent +}; + +BOOL dispex_query_interface(DispatchEx *This, REFIID riid, void **ppv) +{ + static const IID IID_UndocumentedScriptIface = + {0x719c3050,0xf9d3,0x11cf,{0xa4,0x93,0x00,0x40,0x05,0x23,0xa8,0xa0}}; + + if(IsEqualGUID(&IID_IDispatch, riid)) { + TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv); + *ppv = DISPATCHEX(This); + }else if(IsEqualGUID(&IID_IDispatchEx, riid)) { + TRACE("(%p)->(IID_IDispatchEx %p)\n", This, ppv); + *ppv = DISPATCHEX(This); + }else if(IsEqualGUID(&IID_UndocumentedScriptIface, riid)) { + TRACE("(%p)->(IID_UndocumentedScriptIface %p) returning NULL\n", This, ppv); + *ppv = NULL; + }else { + return FALSE; + } + + if(*ppv) + IUnknown_AddRef((IUnknown*)*ppv); + return TRUE; +} + +void init_dispex(DispatchEx *dispex, IUnknown *outer, dispex_static_data_t *data) +{ + dispex->lpIDispatchExVtbl = &DispatchExVtbl; + dispex->outer = outer; + dispex->data = data; +} diff --git a/reactos/dll/win32/mshtml/htmlanchor.c b/reactos/dll/win32/mshtml/htmlanchor.c index d404925a490..866329176eb 100644 --- a/reactos/dll/win32/mshtml/htmlanchor.c +++ b/reactos/dll/win32/mshtml/htmlanchor.c @@ -481,7 +481,7 @@ static const NodeImplVtbl HTMLAnchorElementImplVtbl = { HTMLElement *HTMLAnchorElement_Create(nsIDOMHTMLElement *nselem) { - HTMLAnchorElement *ret = heap_alloc(sizeof(HTMLAnchorElement)); + HTMLAnchorElement *ret = heap_alloc_zero(sizeof(HTMLAnchorElement)); HTMLElement_Init(&ret->element); diff --git a/reactos/dll/win32/mshtml/htmlbody.c b/reactos/dll/win32/mshtml/htmlbody.c index 2ca3f28bbc4..8e1f70c7e47 100644 --- a/reactos/dll/win32/mshtml/htmlbody.c +++ b/reactos/dll/win32/mshtml/htmlbody.c @@ -598,7 +598,7 @@ static const NodeImplVtbl HTMLBodyElementImplVtbl = { HTMLElement *HTMLBodyElement_Create(nsIDOMHTMLElement *nselem) { - HTMLBodyElement *ret = heap_alloc(sizeof(HTMLBodyElement)); + HTMLBodyElement *ret = heap_alloc_zero(sizeof(HTMLBodyElement)); nsresult nsres; TRACE("(%p)->(%p)\n", ret, nselem); diff --git a/reactos/dll/win32/mshtml/htmlcomment.c b/reactos/dll/win32/mshtml/htmlcomment.c new file mode 100644 index 00000000000..63db38274be --- /dev/null +++ b/reactos/dll/win32/mshtml/htmlcomment.c @@ -0,0 +1,205 @@ +/* + * Copyright 2008 Jacek Caban for CodeWeavers + * + * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + + +#include + +#define COBJMACROS + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "ole2.h" + +#include "mshtml_private.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(mshtml); + +typedef struct { + HTMLElement element; + const IHTMLCommentElementVtbl *lpIHTMLCommentElementVtbl; +} HTMLCommentElement; + +#define HTMLCOMMENT(x) ((IHTMLCommentElement*) &(x)->lpIHTMLCommentElementVtbl) + +#define HTMLCOMMENT_THIS(iface) DEFINE_THIS(HTMLCommentElement, IHTMLCommentElement, iface) + +static HRESULT WINAPI HTMLCommentElement_QueryInterface(IHTMLCommentElement *iface, + REFIID riid, void **ppv) +{ + HTMLCommentElement *This = HTMLCOMMENT_THIS(iface); + + return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->element.node), riid, ppv); +} + +static ULONG WINAPI HTMLCommentElement_AddRef(IHTMLCommentElement *iface) +{ + HTMLCommentElement *This = HTMLCOMMENT_THIS(iface); + + return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This->element.node)); +} + +static ULONG WINAPI HTMLCommentElement_Release(IHTMLCommentElement *iface) +{ + HTMLCommentElement *This = HTMLCOMMENT_THIS(iface); + + return IHTMLDOMNode_Release(HTMLDOMNODE(&This->element.node)); +} + +static HRESULT WINAPI HTMLCommentElement_GetTypeInfoCount(IHTMLCommentElement *iface, UINT *pctinfo) +{ + HTMLCommentElement *This = HTMLCOMMENT_THIS(iface); + FIXME("(%p)->(%p)\n", This, pctinfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLCommentElement_GetTypeInfo(IHTMLCommentElement *iface, UINT iTInfo, + LCID lcid, ITypeInfo **ppTInfo) +{ + HTMLCommentElement *This = HTMLCOMMENT_THIS(iface); + FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLCommentElement_GetIDsOfNames(IHTMLCommentElement *iface, REFIID riid, + LPOLESTR *rgszNames, UINT cNames, + LCID lcid, DISPID *rgDispId) +{ + HTMLCommentElement *This = HTMLCOMMENT_THIS(iface); + FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames, + lcid, rgDispId); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLCommentElement_Invoke(IHTMLCommentElement *iface, DISPID dispIdMember, + REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, + VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +{ + HTMLCommentElement *This = HTMLCOMMENT_THIS(iface); + FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), + lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLCommentElement_put_text(IHTMLCommentElement *iface, BSTR v) +{ + HTMLCommentElement *This = HTMLCOMMENT_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLCommentElement_get_text(IHTMLCommentElement *iface, BSTR *p) +{ + HTMLCommentElement *This = HTMLCOMMENT_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLCommentElement_put_atomic(IHTMLCommentElement *iface, long v) +{ + HTMLCommentElement *This = HTMLCOMMENT_THIS(iface); + FIXME("(%p)->(%ld)\n", This, v); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLCommentElement_get_atomic(IHTMLCommentElement *iface, long *p) +{ + HTMLCommentElement *This = HTMLCOMMENT_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +#undef HTMLCOMMENT_THIS + +static const IHTMLCommentElementVtbl HTMLCommentElementVtbl = { + HTMLCommentElement_QueryInterface, + HTMLCommentElement_AddRef, + HTMLCommentElement_Release, + HTMLCommentElement_GetTypeInfoCount, + HTMLCommentElement_GetTypeInfo, + HTMLCommentElement_GetIDsOfNames, + HTMLCommentElement_Invoke, + HTMLCommentElement_put_text, + HTMLCommentElement_get_text, + HTMLCommentElement_put_atomic, + HTMLCommentElement_get_atomic +}; + +#define HTMLCOMMENT_NODE_THIS(iface) DEFINE_THIS2(HTMLCommentElement, element.node, iface) + +HRESULT HTMLCommentElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv) +{ + HTMLCommentElement *This = HTMLCOMMENT_NODE_THIS(iface); + + *ppv = NULL; + + if(IsEqualGUID(&IID_IHTMLCommentElement, riid)) { + TRACE("(%p)->(IID_IHTMLCommentElement %p)\n", This, ppv); + *ppv = HTMLCOMMENT(This); + }else { + return HTMLElement_QI(&This->element.node, riid, ppv); + } + + IUnknown_AddRef((IUnknown*)*ppv); + return S_OK; +} + +void HTMLCommentElement_destructor(HTMLDOMNode *iface) +{ + HTMLCommentElement *This = HTMLCOMMENT_NODE_THIS(iface); + + HTMLElement_destructor(&This->element.node); +} + +#undef HTMLCOMMENT_NODE_THIS + +static const NodeImplVtbl HTMLCommentElementImplVtbl = { + HTMLCommentElement_QI, + HTMLCommentElement_destructor +}; + +static const tid_t HTMLCommentElement_iface_tids[] = { + IHTMLDOMNode_tid, + IHTMLDOMNode2_tid, + IHTMLElement_tid, + IHTMLElement2_tid, + IHTMLCommentElement_tid, + 0 +}; +static dispex_static_data_t HTMLCommentElement_dispex = { + NULL, + DispHTMLCommentElement_tid, + NULL, + HTMLCommentElement_iface_tids +}; + +HTMLElement *HTMLCommentElement_Create(HTMLDocument *doc, nsIDOMNode *nsnode) +{ + HTMLCommentElement *ret = heap_alloc_zero(sizeof(*ret)); + + ret->element.node.vtbl = &HTMLCommentElementImplVtbl; + ret->lpIHTMLCommentElementVtbl = &HTMLCommentElementVtbl; + + init_dispex(&ret->element.node.dispex, (IUnknown*)HTMLCOMMENT(ret), &HTMLCommentElement_dispex); + HTMLElement_Init(&ret->element); + HTMLDOMNode_Init(doc, &ret->element.node, nsnode); + + return &ret->element; +} diff --git a/reactos/dll/win32/mshtml/htmldoc.c b/reactos/dll/win32/mshtml/htmldoc.c index 92a7f9aab78..b77d69e4378 100644 --- a/reactos/dll/win32/mshtml/htmldoc.c +++ b/reactos/dll/win32/mshtml/htmldoc.c @@ -46,7 +46,10 @@ static HRESULT WINAPI HTMLDocument_QueryInterface(IHTMLDocument2 *iface, REFIID *ppvObject = HTMLDOC(This); }else if(IsEqualGUID(&IID_IDispatch, riid)) { TRACE("(%p)->(IID_IDispatch, %p)\n", This, ppvObject); - *ppvObject = HTMLDOC(This); + *ppvObject = DISPATCHEX(This); + }else if(IsEqualGUID(&IID_IDispatchEx, riid)) { + TRACE("(%p)->(IID_IDispatchEx, %p)\n", This, ppvObject); + *ppvObject = DISPATCHEX(This); }else if(IsEqualGUID(&IID_IHTMLDocument, riid)) { TRACE("(%p)->(IID_IHTMLDocument, %p)\n", This, ppvObject); *ppvObject = HTMLDOC(This); @@ -131,6 +134,11 @@ static HRESULT WINAPI HTMLDocument_QueryInterface(IHTMLDocument2 *iface, REFIID }else if(IsEqualGUID(&IID_IRunnableObject, riid)) { TRACE("(%p)->(IID_IRunnableObject %p) returning NULL\n", This, ppvObject); return E_NOINTERFACE; + }else if(IsEqualGUID(&IID_IPersistPropertyBag, riid)) { + TRACE("(%p)->(IID_IPersistPropertyBag %p) returning NULL\n", This, ppvObject); + return E_NOINTERFACE; + }else if(dispex_query_interface(&This->dispex, riid, ppvObject)) { + return *ppvObject ? S_OK : E_NOINTERFACE; } if(*ppvObject) { @@ -209,24 +217,26 @@ static ULONG WINAPI HTMLDocument_Release(IHTMLDocument2 *iface) static HRESULT WINAPI HTMLDocument_GetTypeInfoCount(IHTMLDocument2 *iface, UINT *pctinfo) { - FIXME("(%p)->(%p)\n", iface, pctinfo); - return E_NOTIMPL; + HTMLDocument *This = HTMLDOC_THIS(iface); + + return IDispatchEx_GetTypeInfoCount(DISPATCHEX(This), pctinfo); } static HRESULT WINAPI HTMLDocument_GetTypeInfo(IHTMLDocument2 *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) { - FIXME("(%p)->(%u %u %p)\n", iface, iTInfo, lcid, ppTInfo); - return E_NOTIMPL; + HTMLDocument *This = HTMLDOC_THIS(iface); + + return IDispatchEx_GetTypeInfo(DISPATCHEX(This), iTInfo, lcid, ppTInfo); } static HRESULT WINAPI HTMLDocument_GetIDsOfNames(IHTMLDocument2 *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) { - FIXME("(%p)->(%s %p %u %u %p)\n", iface, debugstr_guid(riid), rgszNames, cNames, - lcid, rgDispId); - return E_NOTIMPL; + HTMLDocument *This = HTMLDOC_THIS(iface); + + return IDispatchEx_GetIDsOfNames(DISPATCHEX(This), riid, rgszNames, cNames, lcid, rgDispId); } static HRESULT WINAPI HTMLDocument_Invoke(IHTMLDocument2 *iface, DISPID dispIdMember, @@ -235,28 +245,14 @@ static HRESULT WINAPI HTMLDocument_Invoke(IHTMLDocument2 *iface, DISPID dispIdMe { HTMLDocument *This = HTMLDOC_THIS(iface); - TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), - lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); - - switch(dispIdMember) { - case DISPID_READYSTATE: - if(!(wFlags & DISPATCH_PROPERTYGET)) - return E_INVALIDARG; - - V_VT(pVarResult) = VT_I4; - V_I4(pVarResult) = This->readystate; - return S_OK; - - default: - FIXME("Unsupported dispid %d\n", dispIdMember); - } - - return E_NOTIMPL; + return IDispatchEx_Invoke(DISPATCHEX(This), dispIdMember, riid, lcid, wFlags, pDispParams, + pVarResult, pExcepInfo, puArgErr); } static HRESULT WINAPI HTMLDocument_get_Script(IHTMLDocument2 *iface, IDispatch **p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } @@ -289,7 +285,7 @@ static HRESULT WINAPI HTMLDocument_get_all(IHTMLDocument2 *iface, IHTMLElementCo return S_OK; } - *p = create_all_collection(get_node(This, (nsIDOMNode*)nselem)); + *p = create_all_collection(get_node(This, (nsIDOMNode*)nselem, TRUE)); nsIDOMElement_Release(nselem); return S_OK; @@ -331,7 +327,7 @@ static HRESULT WINAPI HTMLDocument_get_body(IHTMLDocument2 *iface, IHTMLElement return S_OK; } - node = get_node(This, (nsIDOMNode*)nsbody); + node = get_node(This, (nsIDOMNode*)nsbody, TRUE); nsIDOMHTMLElement_Release(nsbody); IHTMLDOMNode_QueryInterface(HTMLDOMNODE(node), &IID_IHTMLElement, (void**)p); @@ -342,67 +338,78 @@ static HRESULT WINAPI HTMLDocument_get_body(IHTMLDocument2 *iface, IHTMLElement static HRESULT WINAPI HTMLDocument_get_activeElement(IHTMLDocument2 *iface, IHTMLElement **p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_images(IHTMLDocument2 *iface, IHTMLElementCollection **p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_applets(IHTMLDocument2 *iface, IHTMLElementCollection **p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_links(IHTMLDocument2 *iface, IHTMLElementCollection **p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_forms(IHTMLDocument2 *iface, IHTMLElementCollection **p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_anchors(IHTMLDocument2 *iface, IHTMLElementCollection **p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_title(IHTMLDocument2 *iface, BSTR v) { - FIXME("(%p)->(%s)\n", iface, debugstr_w(v)); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_title(IHTMLDocument2 *iface, BSTR *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_scripts(IHTMLDocument2 *iface, IHTMLElementCollection **p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_designMode(IHTMLDocument2 *iface, BSTR v) { - FIXME("(%p)->(%s)\n", iface, debugstr_w(v)); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_designMode(IHTMLDocument2 *iface, BSTR *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } @@ -456,85 +463,99 @@ static HRESULT WINAPI HTMLDocument_get_readyState(IHTMLDocument2 *iface, BSTR *p static HRESULT WINAPI HTMLDocument_get_frames(IHTMLDocument2 *iface, IHTMLFramesCollection2 **p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_embeds(IHTMLDocument2 *iface, IHTMLElementCollection **p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_plugins(IHTMLDocument2 *iface, IHTMLElementCollection **p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_alinkColor(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_alinkColor(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_bgColor(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_bgColor(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_fgColor(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_fgColor(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_linkColor(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)->()\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->()\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_linkColor(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_vlinkColor(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_vlinkColor(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_referrer(IHTMLDocument2 *iface, BSTR *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } @@ -555,13 +576,15 @@ static HRESULT WINAPI HTMLDocument_get_location(IHTMLDocument2 *iface, IHTMLLoca static HRESULT WINAPI HTMLDocument_get_lastModified(IHTMLDocument2 *iface, BSTR *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_URL(IHTMLDocument2 *iface, BSTR v) { - FIXME("(%p)->(%s)\n", iface, debugstr_w(v)); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); return E_NOTIMPL; } @@ -580,109 +603,127 @@ static HRESULT WINAPI HTMLDocument_get_URL(IHTMLDocument2 *iface, BSTR *p) static HRESULT WINAPI HTMLDocument_put_domain(IHTMLDocument2 *iface, BSTR v) { - FIXME("(%p)->(%s)\n", iface, debugstr_w(v)); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_domain(IHTMLDocument2 *iface, BSTR *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_cookie(IHTMLDocument2 *iface, BSTR v) { - FIXME("(%p)->(%s)\n", iface, debugstr_w(v)); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_cookie(IHTMLDocument2 *iface, BSTR *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_expando(IHTMLDocument2 *iface, VARIANT_BOOL v) { - FIXME("(%p)->(%x)\n", iface, v); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%x)\n", This, v); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_expando(IHTMLDocument2 *iface, VARIANT_BOOL *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_charset(IHTMLDocument2 *iface, BSTR v) { - FIXME("(%p)->(%s)\n", iface, debugstr_w(v)); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_charset(IHTMLDocument2 *iface, BSTR *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_defaultCharset(IHTMLDocument2 *iface, BSTR v) { - FIXME("(%p)->(%s)\n", iface, debugstr_w(v)); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_defaultCharset(IHTMLDocument2 *iface, BSTR *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_mimeType(IHTMLDocument2 *iface, BSTR *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_fileSize(IHTMLDocument2 *iface, BSTR *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_fileCreatedDate(IHTMLDocument2 *iface, BSTR *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_fileModifiedDate(IHTMLDocument2 *iface, BSTR *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_fileUpdatedDate(IHTMLDocument2 *iface, BSTR *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_security(IHTMLDocument2 *iface, BSTR *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_protocol(IHTMLDocument2 *iface, BSTR *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_nameProp(IHTMLDocument2 *iface, BSTR *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } @@ -747,300 +788,371 @@ static HRESULT WINAPI HTMLDocument_write(IHTMLDocument2 *iface, SAFEARRAY *psarr static HRESULT WINAPI HTMLDocument_writeln(IHTMLDocument2 *iface, SAFEARRAY *psarray) { - FIXME("(%p)->(%p)\n", iface, psarray); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, psarray); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_open(IHTMLDocument2 *iface, BSTR url, VARIANT name, VARIANT features, VARIANT replace, IDispatch **pomWindowResult) { - FIXME("(%p)->(%s %p)\n", iface, debugstr_w(url), pomWindowResult); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%s %p)\n", This, debugstr_w(url), pomWindowResult); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_close(IHTMLDocument2 *iface) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_clear(IHTMLDocument2 *iface) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_queryCommandSupported(IHTMLDocument2 *iface, BSTR cmdID, VARIANT_BOOL *pfRet) { - FIXME("(%p)->(%s %p)\n", iface, debugstr_w(cmdID), pfRet); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%s %p)\n", This, debugstr_w(cmdID), pfRet); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_queryCommandEnabled(IHTMLDocument2 *iface, BSTR cmdID, VARIANT_BOOL *pfRet) { - FIXME("(%p)->(%s %p)\n", iface, debugstr_w(cmdID), pfRet); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%s %p)\n", This, debugstr_w(cmdID), pfRet); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_queryCommandState(IHTMLDocument2 *iface, BSTR cmdID, VARIANT_BOOL *pfRet) { - FIXME("(%p)->(%s %p)\n", iface, debugstr_w(cmdID), pfRet); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%s %p)\n", This, debugstr_w(cmdID), pfRet); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_queryCommandIndeterm(IHTMLDocument2 *iface, BSTR cmdID, VARIANT_BOOL *pfRet) { - FIXME("(%p)->(%s %p)\n", iface, debugstr_w(cmdID), pfRet); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%s %p)\n", This, debugstr_w(cmdID), pfRet); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_queryCommandText(IHTMLDocument2 *iface, BSTR cmdID, BSTR *pfRet) { - FIXME("(%p)->(%s %p)\n", iface, debugstr_w(cmdID), pfRet); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%s %p)\n", This, debugstr_w(cmdID), pfRet); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_queryCommandValue(IHTMLDocument2 *iface, BSTR cmdID, VARIANT *pfRet) { - FIXME("(%p)->(%s %p)\n", iface, debugstr_w(cmdID), pfRet); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%s %p)\n", This, debugstr_w(cmdID), pfRet); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_execCommand(IHTMLDocument2 *iface, BSTR cmdID, VARIANT_BOOL showUI, VARIANT value, VARIANT_BOOL *pfRet) { - FIXME("(%p)->(%s %x %p)\n", iface, debugstr_w(cmdID), showUI, pfRet); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%s %x %p)\n", This, debugstr_w(cmdID), showUI, pfRet); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_execCommandShowHelp(IHTMLDocument2 *iface, BSTR cmdID, VARIANT_BOOL *pfRet) { - FIXME("(%p)->(%s %p)\n", iface, debugstr_w(cmdID), pfRet); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%s %p)\n", This, debugstr_w(cmdID), pfRet); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_createElement(IHTMLDocument2 *iface, BSTR eTag, IHTMLElement **newElem) { - FIXME("(%p)->(%s %p)\n", iface, debugstr_w(eTag), newElem); - return E_NOTIMPL; + HTMLDocument *This = HTMLDOC_THIS(iface); + nsIDOMDocument *nsdoc; + nsIDOMElement *nselem; + HTMLElement *elem; + nsAString tag_str; + nsresult nsres; + + TRACE("(%p)->(%s %p)\n", This, debugstr_w(eTag), newElem); + + nsIWebNavigation_GetDocument(This->nscontainer->navigation, &nsdoc); + + nsAString_Init(&tag_str, eTag); + nsres = nsIDOMDocument_CreateElement(nsdoc, &tag_str, &nselem); + nsAString_Finish(&tag_str); + nsIDOMDocument_Release(nsdoc); + if(NS_FAILED(nsres)) { + ERR("CreateElement failed: %08x\n", nsres); + return E_FAIL; + } + + elem = HTMLElement_Create(This, (nsIDOMNode*)nselem, TRUE); + nsIDOMElement_Release(nselem); + + *newElem = HTMLELEM(elem); + IHTMLElement_AddRef(HTMLELEM(elem)); + return S_OK; } static HRESULT WINAPI HTMLDocument_put_onhelp(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_onhelp(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_onclick(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_onclick(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_ondblclick(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_ondblclick(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_onkeyup(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_onkeyup(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_onkeydown(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_onkeydown(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_onkeypress(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_onkeypress(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_onmouseup(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_onmouseup(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_onmousedown(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_onmousedown(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_onmousemove(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_onmousemove(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_onmouseout(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_onmouseout(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_onmouseover(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_onmouseover(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_onreadystatechange(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_onreadystatechange(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_onafterupdate(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_onafterupdate(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_onrowexit(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_onrowexit(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_onrowenter(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_onrowenter(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_ondragstart(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_ondragstart(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_onselectstart(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_onselectstart(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_elementFromPoint(IHTMLDocument2 *iface, long x, long y, IHTMLElement **elementHit) { - FIXME("(%p)->(%ld %ld %p)\n", iface, x, y, elementHit); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%ld %ld %p)\n", This, x, y, elementHit); return E_NOTIMPL; } @@ -1094,31 +1206,36 @@ static HRESULT WINAPI HTMLDocument_get_styleSheets(IHTMLDocument2 *iface, static HRESULT WINAPI HTMLDocument_put_onbeforeupdate(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_onbeforeupdate(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_put_onerrorupdate(IHTMLDocument2 *iface, VARIANT v) { - FIXME("(%p)\n", iface); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)\n", This); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_get_onerrorupdate(IHTMLDocument2 *iface, VARIANT *p) { - FIXME("(%p)->(%p)\n", iface, p); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; } static HRESULT WINAPI HTMLDocument_toString(IHTMLDocument2 *iface, BSTR *String) { - FIXME("(%p)->(%p)\n", iface, String); + HTMLDocument *This = HTMLDOC_THIS(iface); + FIXME("(%p)->(%p)\n", This, String); return E_NOTIMPL; } @@ -1252,6 +1369,169 @@ static const IHTMLDocument2Vtbl HTMLDocumentVtbl = { HTMLDocument_createStyleSheet }; +#define DISPEX_THIS(iface) DEFINE_THIS(HTMLDocument, IDispatchEx, iface) + +static HRESULT WINAPI DocDispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid, void **ppv) +{ + HTMLDocument *This = DISPEX_THIS(iface); + + return IHTMLDocument2_QueryInterface(HTMLDOC(This), riid, ppv); +} + +static ULONG WINAPI DocDispatchEx_AddRef(IDispatchEx *iface) +{ + HTMLDocument *This = DISPEX_THIS(iface); + + return IHTMLDocument2_AddRef(HTMLDOC(This)); +} + +static ULONG WINAPI DocDispatchEx_Release(IDispatchEx *iface) +{ + HTMLDocument *This = DISPEX_THIS(iface); + + return IHTMLDocument2_Release(HTMLDOC(This)); +} + +static HRESULT WINAPI DocDispatchEx_GetTypeInfoCount(IDispatchEx *iface, UINT *pctinfo) +{ + HTMLDocument *This = DISPEX_THIS(iface); + + return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->dispex), pctinfo); +} + +static HRESULT WINAPI DocDispatchEx_GetTypeInfo(IDispatchEx *iface, UINT iTInfo, + LCID lcid, ITypeInfo **ppTInfo) +{ + HTMLDocument *This = DISPEX_THIS(iface); + + return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->dispex), iTInfo, lcid, ppTInfo); +} + +static HRESULT WINAPI DocDispatchEx_GetIDsOfNames(IDispatchEx *iface, REFIID riid, + LPOLESTR *rgszNames, UINT cNames, + LCID lcid, DISPID *rgDispId) +{ + HTMLDocument *This = DISPEX_THIS(iface); + + return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->dispex), riid, rgszNames, cNames, lcid, rgDispId); +} + +static HRESULT WINAPI DocDispatchEx_Invoke(IDispatchEx *iface, DISPID dispIdMember, + REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, + VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +{ + HTMLDocument *This = DISPEX_THIS(iface); + + TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), + lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); + + switch(dispIdMember) { + case DISPID_READYSTATE: + TRACE("DISPID_READYSTATE\n"); + + if(!(wFlags & DISPATCH_PROPERTYGET)) + return E_INVALIDARG; + + V_VT(pVarResult) = VT_I4; + V_I4(pVarResult) = This->readystate; + return S_OK; + } + + return IDispatchEx_Invoke(DISPATCHEX(&This->dispex), dispIdMember, riid, lcid, wFlags, pDispParams, + pVarResult, pExcepInfo, puArgErr); +} + +static HRESULT WINAPI DocDispatchEx_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid) +{ + HTMLDocument *This = DISPEX_THIS(iface); + + return IDispatchEx_GetDispID(DISPATCHEX(&This->dispex), bstrName, grfdex, pid); +} + +static HRESULT WINAPI DocDispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp, + VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller) +{ + HTMLDocument *This = DISPEX_THIS(iface); + + return IDispatchEx_InvokeEx(DISPATCHEX(&This->dispex), id, lcid, wFlags, pdp, pvarRes, pei, pspCaller); +} + +static HRESULT WINAPI DocDispatchEx_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex) +{ + HTMLDocument *This = DISPEX_THIS(iface); + + return IDispatchEx_DeleteMemberByName(DISPATCHEX(&This->dispex), bstrName, grfdex); +} + +static HRESULT WINAPI DocDispatchEx_DeleteMemberByDispID(IDispatchEx *iface, DISPID id) +{ + HTMLDocument *This = DISPEX_THIS(iface); + + return IDispatchEx_DeleteMemberByDispID(DISPATCHEX(&This->dispex), id); +} + +static HRESULT WINAPI DocDispatchEx_GetMemberProperties(IDispatchEx *iface, DISPID id, DWORD grfdexFetch, DWORD *pgrfdex) +{ + HTMLDocument *This = DISPEX_THIS(iface); + + return IDispatchEx_GetMemberProperties(DISPATCHEX(&This->dispex), id, grfdexFetch, pgrfdex); +} + +static HRESULT WINAPI DocDispatchEx_GetMemberName(IDispatchEx *iface, DISPID id, BSTR *pbstrName) +{ + HTMLDocument *This = DISPEX_THIS(iface); + + return IDispatchEx_GetMemberName(DISPATCHEX(&This->dispex), id, pbstrName); +} + +static HRESULT WINAPI DocDispatchEx_GetNextDispID(IDispatchEx *iface, DWORD grfdex, DISPID id, DISPID *pid) +{ + HTMLDocument *This = DISPEX_THIS(iface); + + return IDispatchEx_GetNextDispID(DISPATCHEX(&This->dispex), grfdex, id, pid); +} + +static HRESULT WINAPI DocDispatchEx_GetNameSpaceParent(IDispatchEx *iface, IUnknown **ppunk) +{ + HTMLDocument *This = DISPEX_THIS(iface); + + return IDispatchEx_GetNameSpaceParent(DISPATCHEX(&This->dispex), ppunk); +} + +#undef DISPEX_THIS + +static const IDispatchExVtbl DocDispatchExVtbl = { + DocDispatchEx_QueryInterface, + DocDispatchEx_AddRef, + DocDispatchEx_Release, + DocDispatchEx_GetTypeInfoCount, + DocDispatchEx_GetTypeInfo, + DocDispatchEx_GetIDsOfNames, + DocDispatchEx_Invoke, + DocDispatchEx_GetDispID, + DocDispatchEx_InvokeEx, + DocDispatchEx_DeleteMemberByName, + DocDispatchEx_DeleteMemberByDispID, + DocDispatchEx_GetMemberProperties, + DocDispatchEx_GetMemberName, + DocDispatchEx_GetNextDispID, + DocDispatchEx_GetNameSpaceParent +}; + +static const tid_t HTMLDocument_iface_tids[] = { + IHTMLDocument2_tid, + IHTMLDocument3_tid, + IHTMLDocument4_tid, + IHTMLDocument5_tid, + 0 +}; +static dispex_static_data_t HTMLDocument_dispex = { + NULL, + DispHTMLDocument_tid, + NULL, + HTMLDocument_iface_tids +}; + HRESULT HTMLDocument_Create(IUnknown *pUnkOuter, REFIID riid, void** ppvObject) { HTMLDocument *ret; @@ -1261,6 +1541,7 @@ HRESULT HTMLDocument_Create(IUnknown *pUnkOuter, REFIID riid, void** ppvObject) ret = heap_alloc_zero(sizeof(HTMLDocument)); ret->lpHTMLDocument2Vtbl = &HTMLDocumentVtbl; + ret->lpIDispatchExVtbl = &DocDispatchExVtbl; ret->ref = 0; ret->readystate = READYSTATE_UNINITIALIZED; @@ -1292,6 +1573,8 @@ HRESULT HTMLDocument_Create(IUnknown *pUnkOuter, REFIID riid, void** ppvObject) ConnectionPoint_Init(&ret->cp_htmldocevents, &ret->cp_container, &DIID_HTMLDocumentEvents); ConnectionPoint_Init(&ret->cp_htmldocevents2, &ret->cp_container, &DIID_HTMLDocumentEvents2); + init_dispex(&ret->dispex, (IUnknown*)HTMLDOC(ret), &HTMLDocument_dispex); + ret->nscontainer = NSContainer_Create(ret, NULL); ret->window = HTMLWindow_Create(ret); diff --git a/reactos/dll/win32/mshtml/htmldoc3.c b/reactos/dll/win32/mshtml/htmldoc3.c index 43880008280..92ed1cc3247 100644 --- a/reactos/dll/win32/mshtml/htmldoc3.c +++ b/reactos/dll/win32/mshtml/htmldoc3.c @@ -108,8 +108,31 @@ static HRESULT WINAPI HTMLDocument3_createTextNode(IHTMLDocument3 *iface, BSTR t IHTMLDOMNode **newTextNode) { HTMLDocument *This = HTMLDOC3_THIS(iface); - FIXME("(%p)->(%s %p)\n", This, debugstr_w(text), newTextNode); - return E_NOTIMPL; + nsIDOMDocument *nsdoc; + nsIDOMText *nstext; + HTMLDOMNode *node; + nsAString text_str; + nsresult nsres; + + TRACE("(%p)->(%s %p)\n", This, debugstr_w(text), newTextNode); + + nsIWebNavigation_GetDocument(This->nscontainer->navigation, &nsdoc); + + nsAString_Init(&text_str, text); + nsres = nsIDOMDocument_CreateTextNode(nsdoc, &text_str, &nstext); + nsAString_Finish(&text_str); + nsIDOMDocument_Release(nsdoc); + if(NS_FAILED(nsres)) { + ERR("CreateTextNode failed: %08x\n", nsres); + return E_FAIL; + } + + node = HTMLDOMTextNode_Create(This, (nsIDOMNode*)nstext); + nsIDOMElement_Release(nstext); + + *newTextNode = HTMLDOMNODE(node); + IHTMLDOMNode_AddRef(HTMLDOMNODE(node)); + return S_OK; } static HRESULT WINAPI HTMLDocument3_get_documentElement(IHTMLDocument3 *iface, IHTMLElement **p) @@ -137,7 +160,7 @@ static HRESULT WINAPI HTMLDocument3_get_documentElement(IHTMLDocument3 *iface, I ERR("GetDocumentElement failed: %08x\n", nsres); } if(nselem) { - node = get_node(This, (nsIDOMNode *)nselem); + node = get_node(This, (nsIDOMNode *)nselem, TRUE); nsIDOMDocument_Release(nsdoc); IHTMLDOMNode_QueryInterface(HTMLDOMNODE(node), &IID_IHTMLElement, (void**)p); @@ -407,8 +430,37 @@ static HRESULT WINAPI HTMLDocument3_getElementById(IHTMLDocument3 *iface, BSTR v IHTMLElement **pel) { HTMLDocument *This = HTMLDOC3_THIS(iface); - FIXME("(%p)->(%s %p)\n", This, debugstr_w(v), pel); - return E_NOTIMPL; + nsIDOMDocument *nsdoc = NULL; + nsIDOMElement *nselem = NULL; + HTMLDOMNode *node; + nsAString id_str; + nsresult nsres; + + TRACE("(%p)->(%s %p)\n", This, debugstr_w(v), pel); + + *pel = NULL; + + if(!This->nscontainer) + return S_OK; + + nsres = nsIWebNavigation_GetDocument(This->nscontainer->navigation, &nsdoc); + if(NS_FAILED(nsres) || !nsdoc) + return S_OK; + + nsAString_Init(&id_str, v); + nsIDOMDocument_GetElementById(nsdoc, &id_str, &nselem); + nsIDOMDocument_Release(nsdoc); + nsAString_Finish(&id_str); + + if(!nselem) { + *pel = NULL; + return S_OK; + } + + node = get_node(This, (nsIDOMNode*)nselem, TRUE); + nsIDOMElement_Release(nselem); + + return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(node), &IID_IHTMLElement, (void**)pel); } diff --git a/reactos/dll/win32/mshtml/htmlelem.c b/reactos/dll/win32/mshtml/htmlelem.c index b7fac23ea91..5f67356338b 100644 --- a/reactos/dll/win32/mshtml/htmlelem.c +++ b/reactos/dll/win32/mshtml/htmlelem.c @@ -65,6 +65,15 @@ static void elem_vector_normalize(elem_vector *buf) buf->size = buf->len; } +static BOOL is_elem_node(nsIDOMNode *node) +{ + PRUint16 type=0; + + nsIDOMNode_GetNodeType(node, &type); + + return type == ELEMENT_NODE || type == COMMENT_NODE; +} + #define HTMLELEM_THIS(iface) DEFINE_THIS(HTMLElement, HTMLElement, iface) #define HTMLELEM_NODE_THIS(iface) DEFINE_THIS2(HTMLElement, node, iface) @@ -138,6 +147,11 @@ static HRESULT WINAPI HTMLElement_setAttribute(IHTMLElement *iface, BSTR strAttr WARN("(%p)->(%s . %08x)\n", This, debugstr_w(strAttributeName), lFlags); + if(!This->nselem) { + FIXME("NULL nselem\n"); + return E_NOTIMPL; + } + VariantInit(&AttributeValueChanged); hres = VariantChangeType(&AttributeValueChanged, &AttributeValue, 0, VT_BSTR); @@ -178,7 +192,13 @@ static HRESULT WINAPI HTMLElement_getAttribute(IHTMLElement *iface, BSTR strAttr WARN("(%p)->(%s %08x %p)\n", This, debugstr_w(strAttributeName), lFlags, AttributeValue); - VariantInit(AttributeValue); + if(!This->nselem) { + FIXME("NULL nselem\n"); + V_VT(AttributeValue) = VT_NULL; + return S_OK; + } + + V_VT(AttributeValue) = VT_NULL; nsAString_Init(&attr_str, strAttributeName); nsAString_Init(&value_str, NULL); @@ -206,7 +226,7 @@ static HRESULT WINAPI HTMLElement_getAttribute(IHTMLElement *iface, BSTR strAttr TRACE("attr_value=%s\n", debugstr_w(V_BSTR(AttributeValue))); } } - }else { + }else if(*value) { V_VT(AttributeValue) = VT_BSTR; V_BSTR(AttributeValue) = SysAllocString(value); TRACE("attr_value=%s\n", debugstr_w(V_BSTR(AttributeValue))); @@ -232,8 +252,23 @@ static HRESULT WINAPI HTMLElement_removeAttribute(IHTMLElement *iface, BSTR strA static HRESULT WINAPI HTMLElement_put_className(IHTMLElement *iface, BSTR v) { HTMLElement *This = HTMLELEM_THIS(iface); - FIXME("(%p)->(%s)\n", This, debugstr_w(v)); - return E_NOTIMPL; + nsAString classname_str; + nsresult nsres; + + TRACE("(%p)->(%s)\n", This, debugstr_w(v)); + + if(!This->nselem) { + FIXME("NULL nselem\n"); + return E_NOTIMPL; + } + + nsAString_Init(&classname_str, v); + nsres = nsIDOMHTMLElement_SetClassName(This->nselem, &classname_str); + nsAString_Finish(&classname_str); + if(NS_FAILED(nsres)) + ERR("SetClassName failed: %08x\n", nsres); + + return S_OK; } static HRESULT WINAPI HTMLElement_get_className(IHTMLElement *iface, BSTR *p) @@ -245,13 +280,18 @@ static HRESULT WINAPI HTMLElement_get_className(IHTMLElement *iface, BSTR *p) TRACE("(%p)->(%p)\n", This, p); + if(!This->nselem) { + FIXME("NULL nselem\n"); + return E_NOTIMPL; + } + nsAString_Init(&class_str, NULL); nsres = nsIDOMHTMLElement_GetClassName(This->nselem, &class_str); if(NS_SUCCEEDED(nsres)) { const PRUnichar *class; nsAString_GetData(&class_str, &class); - *p = SysAllocString(class); + *p = *class ? SysAllocString(class) : NULL; }else { ERR("GetClassName failed: %08x\n", nsres); hres = E_FAIL; @@ -266,15 +306,50 @@ static HRESULT WINAPI HTMLElement_get_className(IHTMLElement *iface, BSTR *p) static HRESULT WINAPI HTMLElement_put_id(IHTMLElement *iface, BSTR v) { HTMLElement *This = HTMLELEM_THIS(iface); - FIXME("(%p)->(%s)\n", This, debugstr_w(v)); - return E_NOTIMPL; + nsAString id_str; + nsresult nsres; + + TRACE("(%p)->(%s)\n", This, debugstr_w(v)); + + if(!This->nselem) { + FIXME("nselem == NULL\n"); + return S_OK; + } + + nsAString_Init(&id_str, v); + nsres = nsIDOMHTMLElement_SetId(This->nselem, &id_str); + nsAString_Finish(&id_str); + if(NS_FAILED(nsres)) + ERR("SetId failed: %08x\n", nsres); + + return S_OK; } static HRESULT WINAPI HTMLElement_get_id(IHTMLElement *iface, BSTR *p) { HTMLElement *This = HTMLELEM_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + const PRUnichar *id; + nsAString id_str; + nsresult nsres; + + TRACE("(%p)->(%p)\n", This, p); + + *p = NULL; + + if(!This->nselem) + return S_OK; + + nsAString_Init(&id_str, NULL); + nsres = nsIDOMHTMLElement_GetId(This->nselem, &id_str); + nsAString_GetData(&id_str, &id); + + if(NS_FAILED(nsres)) + ERR("GetId failed: %08x\n", nsres); + else if(*id) + *p = SysAllocString(id); + + nsAString_Finish(&id_str); + return S_OK; } static HRESULT WINAPI HTMLElement_get_tagName(IHTMLElement *iface, BSTR *p) @@ -286,6 +361,15 @@ static HRESULT WINAPI HTMLElement_get_tagName(IHTMLElement *iface, BSTR *p) TRACE("(%p)->(%p)\n", This, p); + if(!This->nselem) { + static const WCHAR comment_tagW[] = {'!',0}; + + WARN("NULL nselem, assuming comment\n"); + + *p = SysAllocString(comment_tagW); + return S_OK; + } + nsAString_Init(&tag_str, NULL); nsres = nsIDOMHTMLElement_GetTagName(This->nselem, &tag_str); if(NS_SUCCEEDED(nsres)) { @@ -316,6 +400,11 @@ static HRESULT WINAPI HTMLElement_get_style(IHTMLElement *iface, IHTMLStyle **p) TRACE("(%p)->(%p)\n", This, p); + if(!This->nselem) { + FIXME("NULL nselem\n"); + return E_NOTIMPL; + } + nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMElementCSSInlineStyle, (void**)&nselemstyle); if(NS_FAILED(nsres)) { @@ -354,8 +443,10 @@ static HRESULT WINAPI HTMLElement_get_onhelp(IHTMLElement *iface, VARIANT *p) static HRESULT WINAPI HTMLElement_put_onclick(IHTMLElement *iface, VARIANT v) { HTMLElement *This = HTMLELEM_THIS(iface); - FIXME("(%p)->()\n", This); - return E_NOTIMPL; + + TRACE("(%p)->()\n", This); + + return set_node_event(&This->node, EVENTID_CLICK, &v); } static HRESULT WINAPI HTMLElement_get_onclick(IHTMLElement *iface, VARIANT *p) @@ -396,8 +487,10 @@ static HRESULT WINAPI HTMLElement_get_onkeydown(IHTMLElement *iface, VARIANT *p) static HRESULT WINAPI HTMLElement_put_onkeyup(IHTMLElement *iface, VARIANT v) { HTMLElement *This = HTMLELEM_THIS(iface); - FIXME("(%p)->()\n", This); - return E_NOTIMPL; + + TRACE("(%p)->()\n", This); + + return set_node_event(&This->node, EVENTID_KEYUP, &v); } static HRESULT WINAPI HTMLElement_get_onkeyup(IHTMLElement *iface, VARIANT *p) @@ -501,15 +594,41 @@ static HRESULT WINAPI HTMLElement_get_document(IHTMLElement *iface, IDispatch ** static HRESULT WINAPI HTMLElement_put_title(IHTMLElement *iface, BSTR v) { HTMLElement *This = HTMLELEM_THIS(iface); - FIXME("(%p)->(%s)\n", This, debugstr_w(v)); - return E_NOTIMPL; + nsAString title_str; + nsresult nsres; + + TRACE("(%p)->(%s)\n", This, debugstr_w(v)); + + nsAString_Init(&title_str, v); + nsres = nsIDOMHTMLElement_SetTitle(This->nselem, &title_str); + nsAString_Finish(&title_str); + if(NS_FAILED(nsres)) + ERR("SetTitle failed: %08x\n", nsres); + + return S_OK; } static HRESULT WINAPI HTMLElement_get_title(IHTMLElement *iface, BSTR *p) { HTMLElement *This = HTMLELEM_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + nsAString title_str; + nsresult nsres; + + TRACE("(%p)->(%p)\n", This, p); + + nsAString_Init(&title_str, NULL); + nsres = nsIDOMHTMLElement_GetTitle(This->nselem, &title_str); + if(NS_SUCCEEDED(nsres)) { + const PRUnichar *title; + + nsAString_GetData(&title_str, &title); + *p = *title ? SysAllocString(title) : NULL; + }else { + ERR("GetTitle failed: %08x\n", nsres); + return E_FAIL; + } + + return S_OK; } static HRESULT WINAPI HTMLElement_put_language(IHTMLElement *iface, BSTR v) @@ -593,8 +712,27 @@ static HRESULT WINAPI HTMLElement_get_offsetLeft(IHTMLElement *iface, long *p) static HRESULT WINAPI HTMLElement_get_offsetTop(IHTMLElement *iface, long *p) { HTMLElement *This = HTMLELEM_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + nsIDOMNSHTMLElement *nselem; + PRInt32 top = 0; + nsresult nsres; + + TRACE("(%p)->(%p)\n", This, p); + + nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem); + if(NS_FAILED(nsres)) { + ERR("Could not get nsIDOMNSHTMLElement: %08x\n", nsres); + return E_FAIL; + } + + nsres = nsIDOMNSHTMLElement_GetOffsetTop(nselem, &top); + nsIDOMNSHTMLElement_Release(nselem); + if(NS_FAILED(nsres)) { + ERR("GetOffsetTop failed: %08x\n", nsres); + return E_FAIL; + } + + *p = top; + return S_OK; } static HRESULT WINAPI HTMLElement_get_offsetWidth(IHTMLElement *iface, long *p) @@ -627,6 +765,11 @@ static HRESULT WINAPI HTMLElement_put_innerHTML(IHTMLElement *iface, BSTR v) TRACE("(%p)->(%s)\n", This, debugstr_w(v)); + if(!This->nselem) { + FIXME("NULL nselem\n"); + return E_NOTIMPL; + } + nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem); if(NS_FAILED(nsres)) { ERR("Could not get nsIDOMNSHTMLElement: %08x\n", nsres); @@ -702,6 +845,11 @@ static HRESULT HTMLElement_InsertAdjacentNode(HTMLElement *This, BSTR where, nsI static const WCHAR wszAfterEnd[] = {'a','f','t','e','r','E','n','d',0}; nsresult nsres; + if(!This->nselem) { + FIXME("NULL nselem\n"); + return E_NOTIMPL; + } + if (!strcmpiW(where, wszBeforeBegin)) { nsIDOMNode *unused; @@ -1042,7 +1190,6 @@ static void create_child_list(HTMLDocument *doc, HTMLElement *elem, elem_vector nsIDOMNodeList *nsnode_list; nsIDOMNode *iter; PRUint32 list_len = 0, i; - PRUint16 node_type; nsresult nsres; nsres = nsIDOMNode_GetChildNodes(elem->node.nsnode, &nsnode_list); @@ -1065,9 +1212,8 @@ static void create_child_list(HTMLDocument *doc, HTMLElement *elem, elem_vector continue; } - nsres = nsIDOMNode_GetNodeType(iter, &node_type); - if(NS_SUCCEEDED(nsres) && node_type == ELEMENT_NODE) - elem_vector_add(buf, HTMLELEM_NODE_THIS(get_node(doc, iter))); + if(is_elem_node(iter)) + elem_vector_add(buf, HTMLELEM_NODE_THIS(get_node(doc, iter, TRUE))); } } @@ -1089,7 +1235,6 @@ static void create_all_list(HTMLDocument *doc, HTMLDOMNode *elem, elem_vector *b nsIDOMNodeList *nsnode_list; nsIDOMNode *iter; PRUint32 list_len = 0, i; - PRUint16 node_type; nsresult nsres; nsres = nsIDOMNode_GetChildNodes(elem->nsnode, &nsnode_list); @@ -1109,9 +1254,8 @@ static void create_all_list(HTMLDocument *doc, HTMLDOMNode *elem, elem_vector *b continue; } - nsres = nsIDOMNode_GetNodeType(iter, &node_type); - if(NS_SUCCEEDED(nsres) && node_type == ELEMENT_NODE) { - HTMLDOMNode *node = get_node(doc, iter); + if(is_elem_node(iter)) { + HTMLDOMNode *node = get_node(doc, iter, TRUE); elem_vector_add(buf, HTMLELEM_NODE_THIS(node)); create_all_list(doc, node, buf); @@ -1282,17 +1426,34 @@ static const NodeImplVtbl HTMLElementImplVtbl = { HTMLElement_destructor }; +static const tid_t HTMLElement_iface_tids[] = { + IHTMLDOMNode_tid, + IHTMLDOMNode2_tid, + IHTMLElement_tid, + IHTMLElement2_tid, + 0 +}; + +static dispex_static_data_t HTMLElement_dispex = { + NULL, + DispHTMLUnknownElement_tid, + NULL, + HTMLElement_iface_tids +}; + void HTMLElement_Init(HTMLElement *This) { - This->node.vtbl = &HTMLElementImplVtbl; This->lpHTMLElementVtbl = &HTMLElementVtbl; ConnectionPointContainer_Init(&This->cp_container, (IUnknown*)HTMLELEM(This)); HTMLElement2_Init(This); + + if(!This->node.dispex.data) + init_dispex(&This->node.dispex, (IUnknown*)HTMLELEM(This), &HTMLElement_dispex); } -HTMLElement *HTMLElement_Create(nsIDOMNode *nsnode) +HTMLElement *HTMLElement_Create(HTMLDocument *doc, nsIDOMNode *nsnode, BOOL use_generic) { nsIDOMHTMLElement *nselem; HTMLElement *ret = NULL; @@ -1302,6 +1463,7 @@ HTMLElement *HTMLElement_Create(nsIDOMNode *nsnode) static const WCHAR wszA[] = {'A',0}; static const WCHAR wszBODY[] = {'B','O','D','Y',0}; + static const WCHAR wszIMG[] = {'I','M','G',0}; static const WCHAR wszINPUT[] = {'I','N','P','U','T',0}; static const WCHAR wszOPTION[] = {'O','P','T','I','O','N',0}; static const WCHAR wszSCRIPT[] = {'S','C','R','I','P','T',0}; @@ -1322,6 +1484,8 @@ HTMLElement *HTMLElement_Create(nsIDOMNode *nsnode) ret = HTMLAnchorElement_Create(nselem); else if(!strcmpW(class_name, wszBODY)) ret = HTMLBodyElement_Create(nselem); + else if(!strcmpW(class_name, wszIMG)) + ret = HTMLImgElement_Create(nselem); else if(!strcmpW(class_name, wszINPUT)) ret = HTMLInputElement_Create(nselem); else if(!strcmpW(class_name, wszOPTION)) @@ -1334,20 +1498,27 @@ HTMLElement *HTMLElement_Create(nsIDOMNode *nsnode) ret = HTMLTable_Create(nselem); else if(!strcmpW(class_name, wszTEXTAREA)) ret = HTMLTextAreaElement_Create(nselem); + else if(use_generic) + ret = HTMLGenericElement_Create(nselem); if(!ret) { - ret = heap_alloc(sizeof(HTMLElement)); + ret = heap_alloc_zero(sizeof(HTMLElement)); HTMLElement_Init(ret); + ret->node.vtbl = &HTMLElementImplVtbl; } + TRACE("%s ret %p\n", debugstr_w(class_name), ret); + nsAString_Finish(&class_name_str); ret->nselem = nselem; + HTMLDOMNode_Init(doc, &ret->node, (nsIDOMNode*)nselem); return ret; } typedef struct { + DispatchEx dispex; const IHTMLElementCollectionVtbl *lpHTMLElementCollectionVtbl; IUnknown *ref_unk; @@ -1371,12 +1542,11 @@ static HRESULT WINAPI HTMLElementCollection_QueryInterface(IHTMLElementCollectio if(IsEqualGUID(&IID_IUnknown, riid)) { TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); *ppv = HTMLELEMCOL(This); - }else if(IsEqualGUID(&IID_IDispatch, riid)) { - TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv); - *ppv = HTMLELEMCOL(This); }else if(IsEqualGUID(&IID_IHTMLElementCollection, riid)) { TRACE("(%p)->(IID_IHTMLElementCollection %p)\n", This, ppv); *ppv = HTMLELEMCOL(This); + }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + return *ppv ? S_OK : E_NOINTERFACE; } if(*ppv) { @@ -1493,6 +1663,9 @@ static BOOL is_elem_name(HTMLElement *elem, LPCWSTR name) static const PRUnichar nameW[] = {'n','a','m','e',0}; + if(!elem->nselem) + return FALSE; + nsAString_Init(&nsstr, NULL); nsIDOMHTMLElement_GetId(elem->nselem, &nsstr); nsAString_GetData(&nsstr, &str); @@ -1631,6 +1804,51 @@ static HRESULT WINAPI HTMLElementCollection_tags(IHTMLElementCollection *iface, return S_OK; } +#define DISPID_ELEMCOL_0 MSHTML_DISPID_CUSTOM_MIN + +static HRESULT HTMLElementCollection_get_dispid(IUnknown *iface, BSTR name, DWORD flags, DISPID *dispid) +{ + HTMLElementCollection *This = ELEMCOL_THIS(iface); + WCHAR *ptr; + DWORD idx=0; + + for(ptr = name; *ptr && isdigitW(*ptr); ptr++) + idx = idx*10 + (*ptr-'0'); + + if(*ptr || idx >= This->len) + return DISP_E_UNKNOWNNAME; + + *dispid = DISPID_ELEMCOL_0 + idx; + TRACE("ret %x\n", *dispid); + return S_OK; +} + +static HRESULT HTMLElementCollection_invoke(IUnknown *iface, DISPID id, LCID lcid, WORD flags, DISPPARAMS *params, + VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller) +{ + HTMLElementCollection *This = ELEMCOL_THIS(iface); + DWORD idx; + + TRACE("(%p)->(%x %x %x %p %p %p %p)\n", This, id, lcid, flags, params, res, ei, caller); + + idx = id - DISPID_ELEMCOL_0; + if(idx >= This->len) + return DISP_E_UNKNOWNNAME; + + switch(flags) { + case INVOKE_PROPERTYGET: + V_VT(res) = VT_DISPATCH; + V_DISPATCH(res) = (IDispatch*)HTMLELEM(This->elems[idx]); + IHTMLElement_AddRef(HTMLELEM(This->elems[idx])); + break; + default: + FIXME("unimplemented flags %x\n", flags); + return E_NOTIMPL; + } + + return S_OK; +} + #undef ELEMCOL_THIS static const IHTMLElementCollectionVtbl HTMLElementCollectionVtbl = { @@ -1649,6 +1867,22 @@ static const IHTMLElementCollectionVtbl HTMLElementCollectionVtbl = { HTMLElementCollection_tags }; +static const dispex_static_data_vtbl_t HTMLElementColection_dispex_vtbl = { + HTMLElementCollection_get_dispid, + HTMLElementCollection_invoke +}; + +static const tid_t HTMLElementCollection_iface_tids[] = { + IHTMLElementCollection_tid, + 0 +}; +static dispex_static_data_t HTMLElementCollection_dispex = { + &HTMLElementColection_dispex_vtbl, + DispHTMLElementCollection_tid, + NULL, + HTMLElementCollection_iface_tids +}; + IHTMLElementCollection *create_all_collection(HTMLDOMNode *node) { elem_vector buf = {NULL, 0, 8}; @@ -1665,13 +1899,15 @@ IHTMLElementCollection *create_all_collection(HTMLDOMNode *node) static IHTMLElementCollection *HTMLElementCollection_Create(IUnknown *ref_unk, HTMLElement **elems, DWORD len) { - HTMLElementCollection *ret = heap_alloc(sizeof(HTMLElementCollection)); + HTMLElementCollection *ret = heap_alloc_zero(sizeof(HTMLElementCollection)); ret->lpHTMLElementCollectionVtbl = &HTMLElementCollectionVtbl; ret->ref = 1; ret->elems = elems; ret->len = len; + init_dispex(&ret->dispex, (IUnknown*)HTMLELEMCOL(ret), &HTMLElementCollection_dispex); + IUnknown_AddRef(ref_unk); ret->ref_unk = ref_unk; diff --git a/reactos/dll/win32/mshtml/htmlelem2.c b/reactos/dll/win32/mshtml/htmlelem2.c index 01c88fa0e93..d12c60c9b6b 100644 --- a/reactos/dll/win32/mshtml/htmlelem2.c +++ b/reactos/dll/win32/mshtml/htmlelem2.c @@ -383,29 +383,82 @@ static HRESULT WINAPI HTMLElement2_removeExpression(IHTMLElement2 *iface, BSTR p static HRESULT WINAPI HTMLElement2_put_tabIndex(IHTMLElement2 *iface, short v) { HTMLElement *This = HTMLELEM2_THIS(iface); - FIXME("(%p)->(%d)\n", This, v); - return E_NOTIMPL; + nsIDOMNSHTMLElement *nselem; + nsresult nsres; + + TRACE("(%p)->(%d)\n", This, v); + + nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem); + if(NS_FAILED(nsres)) { + ERR("Could not get nsIDOMHTMLNSElement: %08x\n", nsres); + return S_OK; + } + + nsres = nsIDOMNSHTMLElement_SetTabIndex(nselem, v); + nsIDOMNSHTMLElement_Release(nselem); + if(NS_FAILED(nsres)) + ERR("GetTabIndex failed: %08x\n", nsres); + + return S_OK; } static HRESULT WINAPI HTMLElement2_get_tabIndex(IHTMLElement2 *iface, short *p) { HTMLElement *This = HTMLELEM2_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + nsIDOMNSHTMLElement *nselem; + PRInt32 index = 0; + nsresult nsres; + + TRACE("(%p)->(%p)\n", This, p); + + nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem); + if(NS_FAILED(nsres)) { + ERR("Could not get nsIDOMHTMLNSElement: %08x\n", nsres); + return E_FAIL; + } + + nsres = nsIDOMNSHTMLElement_GetTabIndex(nselem, &index); + nsIDOMNSHTMLElement_Release(nselem); + if(NS_FAILED(nsres)) { + ERR("GetTabIndex failed: %08x\n", nsres); + return E_FAIL; + } + + *p = index; + return S_OK; } static HRESULT WINAPI HTMLElement2_focus(IHTMLElement2 *iface) { HTMLElement *This = HTMLELEM2_THIS(iface); - FIXME("(%p)\n", This); - return E_NOTIMPL; + nsIDOMNSHTMLElement *nselem; + nsresult nsres; + + TRACE("(%p)\n", This); + + nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem); + if(NS_SUCCEEDED(nsres)) { + nsIDOMNSHTMLElement_focus(nselem); + nsIDOMNSHTMLElement_Release(nselem); + }else { + ERR("Could not get nsIDOMHTMLNSElement: %08x\n", nsres); + } + + return S_OK; } static HRESULT WINAPI HTMLElement2_put_accessKey(IHTMLElement2 *iface, BSTR v) { HTMLElement *This = HTMLELEM2_THIS(iface); - FIXME("(%p)->(%s)\n", This, debugstr_w(v)); - return E_NOTIMPL; + VARIANT var; + + static WCHAR accessKeyW[] = {'a','c','c','e','s','s','K','e','y',0}; + + TRACE("(%p)->(%s)\n", This, debugstr_w(v)); + + V_VT(&var) = VT_BSTR; + V_BSTR(&var) = v; + return IHTMLElement_setAttribute(HTMLELEM(This), accessKeyW, var, 0); } static HRESULT WINAPI HTMLElement2_get_accessKey(IHTMLElement2 *iface, BSTR *p) @@ -481,15 +534,43 @@ static HRESULT WINAPI HTMLElement2_removeFilter(IHTMLElement2 *iface, IUnknown * static HRESULT WINAPI HTMLElement2_get_clientHeight(IHTMLElement2 *iface, long *p) { HTMLElement *This = HTMLELEM2_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + nsIDOMNSHTMLElement *nselem; + PRInt32 height=0; + nsresult nsres; + + TRACE("(%p)->(%p)\n", This, p); + + nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem); + if(NS_SUCCEEDED(nsres)) { + nsIDOMNSHTMLElement_GetClientHeight(nselem, &height); + nsIDOMNSHTMLElement_Release(nselem); + }else { + ERR("Could not get nsIDOMHTMLNSElement: %08x\n", nsres); + } + + *p = height; + return S_OK; } static HRESULT WINAPI HTMLElement2_get_clientWidth(IHTMLElement2 *iface, long *p) { HTMLElement *This = HTMLELEM2_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + nsIDOMNSHTMLElement *nselem; + PRInt32 width=0; + nsresult nsres; + + TRACE("(%p)->(%p)\n", This, p); + + nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem); + if(NS_SUCCEEDED(nsres)) { + nsIDOMNSHTMLElement_GetClientWidth(nselem, &width); + nsIDOMNSHTMLElement_Release(nselem); + }else { + ERR("Could not get nsIDOMHTMLNSElement: %08x\n", nsres); + } + + *p = width; + return S_OK; } static HRESULT WINAPI HTMLElement2_get_clientTop(IHTMLElement2 *iface, long *p) @@ -651,6 +732,11 @@ static HRESULT WINAPI HTMLElement2_put_scrollTop(IHTMLElement2 *iface, long v) TRACE("(%p)->(%ld)\n", This, v); + if(!This->nselem) { + FIXME("NULL nselem\n"); + return E_NOTIMPL; + } + nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem); if(NS_SUCCEEDED(nsres)) { nsIDOMNSHTMLElement_SetScrollTop(nselem, v); @@ -677,6 +763,11 @@ static HRESULT WINAPI HTMLElement2_put_scrollLeft(IHTMLElement2 *iface, long v) TRACE("(%p)->(%ld)\n", This, v); + if(!This->nselem) { + FIXME("NULL nselem\n"); + return E_NOTIMPL; + } + nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem); if(NS_SUCCEEDED(nsres)) { nsIDOMNSHTMLElement_SetScrollLeft(nselem, v); diff --git a/reactos/dll/win32/mshtml/htmlevent.c b/reactos/dll/win32/mshtml/htmlevent.c new file mode 100644 index 00000000000..f98e3a15c53 --- /dev/null +++ b/reactos/dll/win32/mshtml/htmlevent.c @@ -0,0 +1,490 @@ +/* + * Copyright 2008 Jacek Caban for CodeWeavers + * + * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +#define COBJMACROS + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "ole2.h" + +#include "mshtml_private.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(mshtml); + +struct event_target_t { + IDispatch *event_table[EVENTID_LAST]; +}; + +static const WCHAR changeW[] = {'c','h','a','n','g','e',0}; +static const WCHAR onchangeW[] = {'o','n','c','h','a','n','g','e',0}; + +static const WCHAR clickW[] = {'c','l','i','c','k',0}; +static const WCHAR onclickW[] = {'o','n','c','l','i','c','k',0}; + +static const WCHAR keyupW[] = {'k','e','y','u','p',0}; +static const WCHAR onkeyupW[] = {'o','n','k','e','y','u','p',0}; + +static const WCHAR loadW[] = {'l','o','a','d',0}; +static const WCHAR onloadW[] = {'o','n','l','o','a','d',0}; + +typedef struct { + LPCWSTR name; + LPCWSTR attr_name; + DWORD flags; +} event_info_t; + +#define EVENT_DEFAULTLISTENER 0x0001 + +static const event_info_t event_info[] = { + {changeW, onchangeW, EVENT_DEFAULTLISTENER}, + {clickW, onclickW, EVENT_DEFAULTLISTENER}, + {keyupW, onkeyupW, EVENT_DEFAULTLISTENER}, + {loadW, onloadW, 0} +}; + +eventid_t str_to_eid(LPCWSTR str) +{ + int i; + + for(i=0; i < sizeof(event_info)/sizeof(event_info[0]); i++) { + if(!strcmpW(event_info[i].name, str)) + return i; + } + + ERR("unknown type %s\n", debugstr_w(str)); + return EVENTID_LAST; +} + +typedef struct { + const IHTMLEventObjVtbl *lpIHTMLEventObjVtbl; + LONG ref; +} HTMLEventObj; + +#define HTMLEVENTOBJ(x) ((IHTMLEventObj*) &(x)->lpIHTMLEventObjVtbl) + +#define HTMLEVENTOBJ_THIS(iface) DEFINE_THIS(HTMLEventObj, IHTMLEventObj, iface) + +static HRESULT WINAPI HTMLEventObj_QueryInterface(IHTMLEventObj *iface, REFIID riid, void **ppv) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + + *ppv = NULL; + + if(IsEqualGUID(&IID_IUnknown, riid)) { + TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); + *ppv = HTMLEVENTOBJ(This); + }else if(IsEqualGUID(&IID_IDispatch, riid)) { + TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv); + *ppv = HTMLEVENTOBJ(This); + }else if(IsEqualGUID(&IID_IHTMLEventObj, riid)) { + TRACE("(%p)->(IID_IHTMLEventObj %p)\n", This, ppv); + *ppv = HTMLEVENTOBJ(This); + } + + if(*ppv) { + IUnknown_AddRef((IUnknown*)*ppv); + return S_OK; + } + + WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv); + return E_NOINTERFACE; +} + +static ULONG WINAPI HTMLEventObj_AddRef(IHTMLEventObj *iface) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + LONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + return ref; +} + +static ULONG WINAPI HTMLEventObj_Release(IHTMLEventObj *iface) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + LONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + if(!ref) + heap_free(This); + + return ref; +} + +static HRESULT WINAPI HTMLEventObj_GetTypeInfoCount(IHTMLEventObj *iface, UINT *pctinfo) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%p)\n", This, pctinfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_GetTypeInfo(IHTMLEventObj *iface, UINT iTInfo, + LCID lcid, ITypeInfo **ppTInfo) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_GetIDsOfNames(IHTMLEventObj *iface, REFIID riid, + LPOLESTR *rgszNames, UINT cNames, + LCID lcid, DISPID *rgDispId) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames, + lcid, rgDispId); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_Invoke(IHTMLEventObj *iface, DISPID dispIdMember, + REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, + VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), + lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_get_srcElement(IHTMLEventObj *iface, IHTMLElement **p) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_get_altKey(IHTMLEventObj *iface, VARIANT_BOOL *p) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_get_ctrlKey(IHTMLEventObj *iface, VARIANT_BOOL *p) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_get_shiftKey(IHTMLEventObj *iface, VARIANT_BOOL *p) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_put_returnValue(IHTMLEventObj *iface, VARIANT v) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->()\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_get_returnValue(IHTMLEventObj *iface, VARIANT *p) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_put_cancelBubble(IHTMLEventObj *iface, VARIANT_BOOL v) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%x)\n", This, v); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_get_cancelBubble(IHTMLEventObj *iface, VARIANT_BOOL *p) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_get_fromElement(IHTMLEventObj *iface, IHTMLElement **p) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_get_toElement(IHTMLEventObj *iface, IHTMLElement **p) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_put_keyCode(IHTMLEventObj *iface, long v) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%ld)\n", This, v); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_get_keyCode(IHTMLEventObj *iface, long *p) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_get_button(IHTMLEventObj *iface, long *p) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_get_type(IHTMLEventObj *iface, BSTR *p) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_get_qualifier(IHTMLEventObj *iface, BSTR *p) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_get_reason(IHTMLEventObj *iface, long *p) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_get_x(IHTMLEventObj *iface, long *p) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_get_y(IHTMLEventObj *iface, long *p) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_get_clientX(IHTMLEventObj *iface, long *p) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_get_clientY(IHTMLEventObj *iface, long *p) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_get_offsetX(IHTMLEventObj *iface, long *p) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_get_offsetY(IHTMLEventObj *iface, long *p) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_get_screenX(IHTMLEventObj *iface, long *p) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_get_screenY(IHTMLEventObj *iface, long *p) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLEventObj_get_srcFilter(IHTMLEventObj *iface, IDispatch **p) +{ + HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +#undef HTMLEVENTOBJ_THIS + +static const IHTMLEventObjVtbl HTMLEventObjVtbl = { + HTMLEventObj_QueryInterface, + HTMLEventObj_AddRef, + HTMLEventObj_Release, + HTMLEventObj_GetTypeInfoCount, + HTMLEventObj_GetTypeInfo, + HTMLEventObj_GetIDsOfNames, + HTMLEventObj_Invoke, + HTMLEventObj_get_srcElement, + HTMLEventObj_get_altKey, + HTMLEventObj_get_ctrlKey, + HTMLEventObj_get_shiftKey, + HTMLEventObj_put_returnValue, + HTMLEventObj_get_returnValue, + HTMLEventObj_put_cancelBubble, + HTMLEventObj_get_cancelBubble, + HTMLEventObj_get_fromElement, + HTMLEventObj_get_toElement, + HTMLEventObj_put_keyCode, + HTMLEventObj_get_keyCode, + HTMLEventObj_get_button, + HTMLEventObj_get_type, + HTMLEventObj_get_qualifier, + HTMLEventObj_get_reason, + HTMLEventObj_get_x, + HTMLEventObj_get_y, + HTMLEventObj_get_clientX, + HTMLEventObj_get_clientY, + HTMLEventObj_get_offsetX, + HTMLEventObj_get_offsetY, + HTMLEventObj_get_screenX, + HTMLEventObj_get_screenY, + HTMLEventObj_get_srcFilter +}; + +static IHTMLEventObj *create_event(void) +{ + HTMLEventObj *ret; + + ret = heap_alloc(sizeof(*ret)); + ret->lpIHTMLEventObjVtbl = &HTMLEventObjVtbl; + ret->ref = 1; + + return HTMLEVENTOBJ(ret); +} + +void fire_event(HTMLDocument *doc, eventid_t eid, nsIDOMNode *target) +{ + HTMLDOMNode *node; + + node = get_node(doc, target, FALSE); + if(!node) + return; + + if(node->event_target && node->event_target->event_table[eid]) { + doc->window->event = create_event(); + + TRACE("%s >>>\n", debugstr_w(event_info[eid].name)); + call_disp_func(doc, node->event_target->event_table[eid]); + TRACE("%s <<<\n", debugstr_w(event_info[eid].name)); + + IHTMLEventObj_Release(doc->window->event); + doc->window->event = NULL; + } +} + +static HRESULT set_node_event_disp(HTMLDOMNode *node, eventid_t eid, IDispatch *disp) +{ + if(!node->event_target) + node->event_target = heap_alloc_zero(sizeof(event_target_t)); + else if(node->event_target->event_table[eid]) + IDispatch_Release(node->event_target->event_table[eid]); + + IDispatch_AddRef(disp); + node->event_target->event_table[eid] = disp; + + if((event_info[eid].flags & EVENT_DEFAULTLISTENER) && !node->doc->nscontainer->event_vector[eid]) { + node->doc->nscontainer->event_vector[eid] = TRUE; + add_nsevent_listener(node->doc->nscontainer, event_info[eid].name); + } + + return S_OK; +} + +HRESULT set_node_event(HTMLDOMNode *node, eventid_t eid, VARIANT *var) +{ + switch(V_VT(var)) { + case VT_DISPATCH: + return set_node_event_disp(node, eid, V_DISPATCH(var)); + + default: + FIXME("not supported vt=%d\n", V_VT(var)); + } + + return E_NOTIMPL; +} + +void check_event_attr(HTMLDocument *doc, nsIDOMElement *nselem) +{ + const PRUnichar *attr_value; + nsAString attr_name_str, attr_value_str; + IDispatch *disp; + HTMLDOMNode *node; + int i; + nsresult nsres; + + nsAString_Init(&attr_value_str, NULL); + nsAString_Init(&attr_name_str, NULL); + + for(i=0; i < EVENTID_LAST; i++) { + nsAString_SetData(&attr_name_str, event_info[i].attr_name); + nsres = nsIDOMElement_GetAttribute(nselem, &attr_name_str, &attr_value_str); + if(NS_SUCCEEDED(nsres)) { + nsAString_GetData(&attr_value_str, &attr_value); + if(!*attr_value) + continue; + + TRACE("%p.%s = %s\n", nselem, debugstr_w(event_info[i].attr_name), debugstr_w(attr_value)); + + disp = script_parse_event(doc, attr_value); + if(disp) { + node = get_node(doc, (nsIDOMNode*)nselem, TRUE); + set_node_event_disp(node, i, disp); + IDispatch_Release(disp); + } + } + } + + nsAString_Finish(&attr_value_str); + nsAString_Finish(&attr_name_str); +} + +void release_event_target(event_target_t *event_target) +{ + int i; + + for(i=0; i < EVENTID_LAST; i++) { + if(event_target->event_table[i]) + IDispatch_Release(event_target->event_table[i]); + } + + heap_free(event_target); +} diff --git a/reactos/dll/win32/mshtml/htmlgeneric.c b/reactos/dll/win32/mshtml/htmlgeneric.c new file mode 100644 index 00000000000..816c4aec0f6 --- /dev/null +++ b/reactos/dll/win32/mshtml/htmlgeneric.c @@ -0,0 +1,190 @@ +/* + * Copyright 2008 Jacek Caban for CodeWeavers + * + * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + + +#include + +#define COBJMACROS + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "ole2.h" + +#include "wine/debug.h" + +#include "mshtml_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(mshtml); + +typedef struct { + HTMLElement element; + + const IHTMLGenericElementVtbl *lpHTMLGenericElementVtbl; +} HTMLGenericElement; + +#define HTMLGENERIC(x) ((IHTMLGenericElement*) &(x)->lpHTMLGenericElementVtbl) + +#define HTMLGENERIC_THIS(iface) DEFINE_THIS(HTMLGenericElement, HTMLGenericElement, iface) + +static HRESULT WINAPI HTMLGenericElement_QueryInterface(IHTMLGenericElement *iface, REFIID riid, void **ppv) +{ + HTMLGenericElement *This = HTMLGENERIC_THIS(iface); + + return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->element.node), riid, ppv); +} + +static ULONG WINAPI HTMLGenericElement_AddRef(IHTMLGenericElement *iface) +{ + HTMLGenericElement *This = HTMLGENERIC_THIS(iface); + + return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This->element.node)); +} + +static ULONG WINAPI HTMLGenericElement_Release(IHTMLGenericElement *iface) +{ + HTMLGenericElement *This = HTMLGENERIC_THIS(iface); + + return IHTMLDOMNode_Release(HTMLDOMNODE(&This->element.node)); +} + +static HRESULT WINAPI HTMLGenericElement_GetTypeInfoCount(IHTMLGenericElement *iface, UINT *pctinfo) +{ + HTMLGenericElement *This = HTMLGENERIC_THIS(iface); + FIXME("(%p)->(%p)\n", This, pctinfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLGenericElement_GetTypeInfo(IHTMLGenericElement *iface, UINT iTInfo, + LCID lcid, ITypeInfo **ppTInfo) +{ + HTMLGenericElement *This = HTMLGENERIC_THIS(iface); + FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLGenericElement_GetIDsOfNames(IHTMLGenericElement *iface, REFIID riid, + LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) +{ + HTMLGenericElement *This = HTMLGENERIC_THIS(iface); + FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames, + lcid, rgDispId); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLGenericElement_Invoke(IHTMLGenericElement *iface, DISPID dispIdMember, + REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, + VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +{ + HTMLGenericElement *This = HTMLGENERIC_THIS(iface); + FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), + lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLGenericElement_get_recordset(IHTMLGenericElement *iface, IDispatch **p) +{ + HTMLGenericElement *This = HTMLGENERIC_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLGenericElement_namedRecordset(IHTMLGenericElement *iface, + BSTR dataMember, VARIANT *hierarchy, IDispatch **ppRecordset) +{ + HTMLGenericElement *This = HTMLGENERIC_THIS(iface); + FIXME("(%p)->(%s %p %p)\n", This, debugstr_w(dataMember), hierarchy, ppRecordset); + return E_NOTIMPL; +} + +static const IHTMLGenericElementVtbl HTMLGenericElementVtbl = { + HTMLGenericElement_QueryInterface, + HTMLGenericElement_AddRef, + HTMLGenericElement_Release, + HTMLGenericElement_GetTypeInfoCount, + HTMLGenericElement_GetTypeInfo, + HTMLGenericElement_GetIDsOfNames, + HTMLGenericElement_Invoke, + HTMLGenericElement_get_recordset, + HTMLGenericElement_namedRecordset +}; + +#define HTMLGENERIC_NODE_THIS(iface) DEFINE_THIS2(HTMLGenericElement, element.node, iface) + +static HRESULT HTMLGenericElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv) +{ + HTMLGenericElement *This = HTMLGENERIC_NODE_THIS(iface); + + *ppv = NULL; + + if(IsEqualGUID(&IID_IHTMLGenericElement, riid)) { + TRACE("(%p)->(IID_IHTMLGenericElement %p)\n", This, ppv); + *ppv = HTMLGENERIC(This); + }else { + return HTMLElement_QI(&This->element.node, riid, ppv); + } + + IUnknown_AddRef((IUnknown*)*ppv); + return S_OK; +} + +static void HTMLGenericElement_destructor(HTMLDOMNode *iface) +{ + HTMLGenericElement *This = HTMLGENERIC_NODE_THIS(iface); + + HTMLElement_destructor(&This->element.node); +} + +#undef HTMLGENERIC_NODE_THIS + +static const NodeImplVtbl HTMLGenericElementImplVtbl = { + HTMLGenericElement_QI, + HTMLGenericElement_destructor +}; + +static const tid_t HTMLGenericElement_iface_tids[] = { + IHTMLDOMNode_tid, + IHTMLDOMNode2_tid, + IHTMLElement_tid, + IHTMLElement2_tid, + IHTMLElement2_tid, + IHTMLGenericElement_tid, + 0 +}; + +static dispex_static_data_t HTMLGenericElement_dispex = { + NULL, + DispHTMLGenericElement_tid, + NULL, + HTMLGenericElement_iface_tids +}; + +HTMLElement *HTMLGenericElement_Create(nsIDOMHTMLElement *nselem) +{ + HTMLGenericElement *ret; + + ret = heap_alloc_zero(sizeof(HTMLGenericElement)); + + ret->lpHTMLGenericElementVtbl = &HTMLGenericElementVtbl; + ret->element.node.vtbl = &HTMLGenericElementImplVtbl; + + init_dispex(&ret->element.node.dispex, (IUnknown*)HTMLGENERIC(ret), &HTMLGenericElement_dispex); + HTMLElement_Init(&ret->element); + + return &ret->element; +} diff --git a/reactos/dll/win32/mshtml/htmlimg.c b/reactos/dll/win32/mshtml/htmlimg.c new file mode 100644 index 00000000000..e0c06194b97 --- /dev/null +++ b/reactos/dll/win32/mshtml/htmlimg.c @@ -0,0 +1,601 @@ +/* + * Copyright 2008 Jacek Caban for CodeWeavers + * + * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +#define COBJMACROS + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "ole2.h" + +#include "wine/debug.h" + +#include "mshtml_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(mshtml); + +typedef struct { + HTMLElement element; + + const IHTMLImgElementVtbl *lpHTMLImgElementVtbl; + + nsIDOMHTMLImageElement *nsimg; +} HTMLImgElement; + +#define HTMLIMG(x) ((IHTMLImgElement*) &(x)->lpHTMLImgElementVtbl) + +#define HTMLIMG_THIS(iface) DEFINE_THIS(HTMLImgElement, HTMLImgElement, iface) + +static HRESULT WINAPI HTMLImgElement_QueryInterface(IHTMLImgElement *iface, REFIID riid, void **ppv) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + + return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->element.node), riid, ppv); +} + +static ULONG WINAPI HTMLImgElement_AddRef(IHTMLImgElement *iface) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + + return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This->element.node)); +} + +static ULONG WINAPI HTMLImgElement_Release(IHTMLImgElement *iface) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + + return IHTMLDOMNode_Release(HTMLDOMNODE(&This->element.node)); +} + +static HRESULT WINAPI HTMLImgElement_GetTypeInfoCount(IHTMLImgElement *iface, UINT *pctinfo) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, pctinfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_GetTypeInfo(IHTMLImgElement *iface, UINT iTInfo, + LCID lcid, ITypeInfo **ppTInfo) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_GetIDsOfNames(IHTMLImgElement *iface, REFIID riid, + LPOLESTR *rgszNames, UINT cNames, + LCID lcid, DISPID *rgDispId) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames, + lcid, rgDispId); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_Invoke(IHTMLImgElement *iface, DISPID dispIdMember, + REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, + VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), + lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_put_isMap(IHTMLImgElement *iface, VARIANT_BOOL v) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%x)\n", This, v); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_isMap(IHTMLImgElement *iface, VARIANT_BOOL *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_put_useMap(IHTMLImgElement *iface, BSTR v) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_useMap(IHTMLImgElement *iface, BSTR *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_mimeType(IHTMLImgElement *iface, BSTR *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_fileSize(IHTMLImgElement *iface, BSTR *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_fileCreatedDate(IHTMLImgElement *iface, BSTR *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_fileModifiedDate(IHTMLImgElement *iface, BSTR *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_fileUpdatedDate(IHTMLImgElement *iface, BSTR *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_protocol(IHTMLImgElement *iface, BSTR *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_href(IHTMLImgElement *iface, BSTR *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_nameProp(IHTMLImgElement *iface, BSTR *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_put_border(IHTMLImgElement *iface, VARIANT v) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->()\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_border(IHTMLImgElement *iface, VARIANT *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_put_vspace(IHTMLImgElement *iface, long v) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%ld)\n", This, v); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_vspace(IHTMLImgElement *iface, long *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_put_hspace(IHTMLImgElement *iface, long v) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%ld)\n", This, v); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_hspace(IHTMLImgElement *iface, long *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_put_alt(IHTMLImgElement *iface, BSTR v) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + nsAString alt_str; + nsresult nsres; + + TRACE("(%p)->(%s)\n", This, debugstr_w(v)); + + nsAString_Init(&alt_str, v); + nsres = nsIDOMHTMLImageElement_SetAlt(This->nsimg, &alt_str); + nsAString_Finish(&alt_str); + if(NS_FAILED(nsres)) + ERR("SetAlt failed: %08x\n", nsres); + + return S_OK; +} + +static HRESULT WINAPI HTMLImgElement_get_alt(IHTMLImgElement *iface, BSTR *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + nsAString alt_str; + nsresult nsres; + + TRACE("(%p)->(%p)\n", This, p); + + nsAString_Init(&alt_str, NULL); + nsres = nsIDOMHTMLImageElement_GetAlt(This->nsimg, &alt_str); + if(NS_SUCCEEDED(nsres)) { + const PRUnichar *alt; + + nsAString_GetData(&alt_str, &alt); + *p = *alt ? SysAllocString(alt) : NULL; + }else { + ERR("GetAlt failed: %08x\n", nsres); + } + nsAString_Finish(&alt_str); + + return NS_SUCCEEDED(nsres) ? S_OK : E_FAIL; +} + +static HRESULT WINAPI HTMLImgElement_put_src(IHTMLImgElement *iface, BSTR v) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + nsAString src_str; + nsresult nsres; + + TRACE("(%p)->(%s)\n", This, debugstr_w(v)); + + nsAString_Init(&src_str, v); + nsres = nsIDOMHTMLImageElement_SetSrc(This->nsimg, &src_str); + nsAString_Finish(&src_str); + if(NS_FAILED(nsres)) + ERR("SetSrc failed: %08x\n", nsres); + + return NS_OK; +} + +static HRESULT WINAPI HTMLImgElement_get_src(IHTMLImgElement *iface, BSTR *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_put_lowsrc(IHTMLImgElement *iface, BSTR v) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_lowsrc(IHTMLImgElement *iface, BSTR *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_put_vrml(IHTMLImgElement *iface, BSTR v) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_vrml(IHTMLImgElement *iface, BSTR *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_put_dynsrc(IHTMLImgElement *iface, BSTR v) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_dynsrc(IHTMLImgElement *iface, BSTR *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_readyState(IHTMLImgElement *iface, BSTR *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_complete(IHTMLImgElement *iface, VARIANT_BOOL *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_put_loop(IHTMLImgElement *iface, VARIANT v) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->()\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_loop(IHTMLImgElement *iface, VARIANT *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_put_align(IHTMLImgElement *iface, BSTR v) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_align(IHTMLImgElement *iface, BSTR *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_put_onload(IHTMLImgElement *iface, VARIANT v) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->()\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_onload(IHTMLImgElement *iface, VARIANT *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_put_onerror(IHTMLImgElement *iface, VARIANT v) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->()\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_onerror(IHTMLImgElement *iface, VARIANT *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_put_onabort(IHTMLImgElement *iface, VARIANT v) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->()\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_onabort(IHTMLImgElement *iface, VARIANT *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_put_name(IHTMLImgElement *iface, BSTR v) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_name(IHTMLImgElement *iface, BSTR *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_put_width(IHTMLImgElement *iface, long v) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%ld)\n", This, v); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_width(IHTMLImgElement *iface, long *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_put_height(IHTMLImgElement *iface, long v) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%ld)\n", This, v); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_height(IHTMLImgElement *iface, long *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_put_start(IHTMLImgElement *iface, BSTR v) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->()\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLImgElement_get_start(IHTMLImgElement *iface, BSTR *p) +{ + HTMLImgElement *This = HTMLIMG_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +#undef HTMLIMG_THIS + +static const IHTMLImgElementVtbl HTMLImgElementVtbl = { + HTMLImgElement_QueryInterface, + HTMLImgElement_AddRef, + HTMLImgElement_Release, + HTMLImgElement_GetTypeInfoCount, + HTMLImgElement_GetTypeInfo, + HTMLImgElement_GetIDsOfNames, + HTMLImgElement_Invoke, + HTMLImgElement_put_isMap, + HTMLImgElement_get_isMap, + HTMLImgElement_put_useMap, + HTMLImgElement_get_useMap, + HTMLImgElement_get_mimeType, + HTMLImgElement_get_fileSize, + HTMLImgElement_get_fileCreatedDate, + HTMLImgElement_get_fileModifiedDate, + HTMLImgElement_get_fileUpdatedDate, + HTMLImgElement_get_protocol, + HTMLImgElement_get_href, + HTMLImgElement_get_nameProp, + HTMLImgElement_put_border, + HTMLImgElement_get_border, + HTMLImgElement_put_vspace, + HTMLImgElement_get_vspace, + HTMLImgElement_put_hspace, + HTMLImgElement_get_hspace, + HTMLImgElement_put_alt, + HTMLImgElement_get_alt, + HTMLImgElement_put_src, + HTMLImgElement_get_src, + HTMLImgElement_put_lowsrc, + HTMLImgElement_get_lowsrc, + HTMLImgElement_put_vrml, + HTMLImgElement_get_vrml, + HTMLImgElement_put_dynsrc, + HTMLImgElement_get_dynsrc, + HTMLImgElement_get_readyState, + HTMLImgElement_get_complete, + HTMLImgElement_put_loop, + HTMLImgElement_get_loop, + HTMLImgElement_put_align, + HTMLImgElement_get_align, + HTMLImgElement_put_onload, + HTMLImgElement_get_onload, + HTMLImgElement_put_onerror, + HTMLImgElement_get_onerror, + HTMLImgElement_put_onabort, + HTMLImgElement_get_onabort, + HTMLImgElement_put_name, + HTMLImgElement_get_name, + HTMLImgElement_put_width, + HTMLImgElement_get_width, + HTMLImgElement_put_height, + HTMLImgElement_get_height, + HTMLImgElement_put_start, + HTMLImgElement_get_start +}; + +#define HTMLIMG_NODE_THIS(iface) DEFINE_THIS2(HTMLImgElement, element.node, iface) + +static HRESULT HTMLImgElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv) +{ + HTMLImgElement *This = HTMLIMG_NODE_THIS(iface); + + *ppv = NULL; + + if(IsEqualGUID(&IID_IHTMLImgElement, riid)) { + TRACE("(%p)->(IID_IHTMLImgElement %p)\n", This, ppv); + *ppv = HTMLIMG(This); + }else { + return HTMLElement_QI(&This->element.node, riid, ppv); + } + + IUnknown_AddRef((IUnknown*)*ppv); + return S_OK; +} + +static void HTMLImgElement_destructor(HTMLDOMNode *iface) +{ + HTMLImgElement *This = HTMLIMG_NODE_THIS(iface); + + if(This->nsimg) + nsIDOMHTMLImageElement_Release(This->nsimg); + + HTMLElement_destructor(&This->element.node); +} + +#undef HTMLIMG_NODE_THIS + +static const NodeImplVtbl HTMLImgElementImplVtbl = { + HTMLImgElement_QI, + HTMLImgElement_destructor +}; + +static const tid_t HTMLImgElement_iface_tids[] = { + IHTMLDOMNode_tid, + IHTMLDOMNode2_tid, + IHTMLElement_tid, + IHTMLElement2_tid, + IHTMLImgElement_tid, + 0 +}; +static dispex_static_data_t HTMLImgElement_dispex = { + NULL, + DispHTMLImg_tid, + NULL, + HTMLImgElement_iface_tids +}; + +HTMLElement *HTMLImgElement_Create(nsIDOMHTMLElement *nselem) +{ + HTMLImgElement *ret = heap_alloc_zero(sizeof(HTMLImgElement)); + nsresult nsres; + + ret->lpHTMLImgElementVtbl = &HTMLImgElementVtbl; + ret->element.node.vtbl = &HTMLImgElementImplVtbl; + + nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLImageElement, (void**)&ret->nsimg); + if(NS_FAILED(nsres)) + ERR("Could not get nsIDOMHTMLImageElement: %08x\n", nsres); + + init_dispex(&ret->element.node.dispex, (IUnknown*)HTMLIMG(ret), &HTMLImgElement_dispex); + HTMLElement_Init(&ret->element); + + return &ret->element; +} diff --git a/reactos/dll/win32/mshtml/htmlinput.c b/reactos/dll/win32/mshtml/htmlinput.c index 9c390c85c50..f8a646650ac 100644 --- a/reactos/dll/win32/mshtml/htmlinput.c +++ b/reactos/dll/win32/mshtml/htmlinput.c @@ -70,16 +70,16 @@ static ULONG WINAPI HTMLInputElement_Release(IHTMLInputElement *iface) static HRESULT WINAPI HTMLInputElement_GetTypeInfoCount(IHTMLInputElement *iface, UINT *pctinfo) { HTMLInputElement *This = HTMLINPUT_THIS(iface); - FIXME("(%p)->(%p)\n", This, pctinfo); - return E_NOTIMPL; + + return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->element.node.dispex), pctinfo); } static HRESULT WINAPI HTMLInputElement_GetTypeInfo(IHTMLInputElement *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) { HTMLInputElement *This = HTMLINPUT_THIS(iface); - FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo); - return E_NOTIMPL; + + return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->element.node.dispex), iTInfo, lcid, ppTInfo); } static HRESULT WINAPI HTMLInputElement_GetIDsOfNames(IHTMLInputElement *iface, REFIID riid, @@ -87,9 +87,9 @@ static HRESULT WINAPI HTMLInputElement_GetIDsOfNames(IHTMLInputElement *iface, R LCID lcid, DISPID *rgDispId) { HTMLInputElement *This = HTMLINPUT_THIS(iface); - FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames, - lcid, rgDispId); - return E_NOTIMPL; + + return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->element.node.dispex), riid, rgszNames, + cNames, lcid, rgDispId); } static HRESULT WINAPI HTMLInputElement_Invoke(IHTMLInputElement *iface, DISPID dispIdMember, @@ -97,9 +97,9 @@ static HRESULT WINAPI HTMLInputElement_Invoke(IHTMLInputElement *iface, DISPID d VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) { HTMLInputElement *This = HTMLINPUT_THIS(iface); - FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), - lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); - return E_NOTIMPL; + + return IDispatchEx_Invoke(DISPATCHEX(&This->element.node.dispex), dispIdMember, riid, lcid, wFlags, + pDispParams, pVarResult, pExcepInfo, puArgErr); } static HRESULT WINAPI HTMLInputElement_put_type(IHTMLInputElement *iface, BSTR v) @@ -137,8 +137,18 @@ static HRESULT WINAPI HTMLInputElement_get_type(IHTMLInputElement *iface, BSTR * static HRESULT WINAPI HTMLInputElement_put_value(IHTMLInputElement *iface, BSTR v) { HTMLInputElement *This = HTMLINPUT_THIS(iface); - FIXME("(%p)->(%s)\n", This, debugstr_w(v)); - return E_NOTIMPL; + nsAString val_str; + nsresult nsres; + + TRACE("(%p)->(%s)\n", This, debugstr_w(v)); + + nsAString_Init(&val_str, v); + nsres = nsIDOMHTMLInputElement_SetValue(This->nsinput, &val_str); + nsAString_Finish(&val_str); + if(NS_FAILED(nsres)) + ERR("SetValue failed: %08x\n", nsres); + + return S_OK; } static HRESULT WINAPI HTMLInputElement_get_value(IHTMLInputElement *iface, BSTR *p) @@ -216,15 +226,28 @@ static HRESULT WINAPI HTMLInputElement_get_status(IHTMLInputElement *iface, VARI static HRESULT WINAPI HTMLInputElement_put_disabled(IHTMLInputElement *iface, VARIANT_BOOL v) { HTMLInputElement *This = HTMLINPUT_THIS(iface); - FIXME("(%p)->(%x)\n", This, v); - return E_NOTIMPL; + nsresult nsres; + + TRACE("(%p)->(%x)\n", This, v); + + nsres = nsIDOMHTMLInputElement_SetDisabled(This->nsinput, v != VARIANT_FALSE); + if(NS_FAILED(nsres)) + ERR("SetDisabled failed: %08x\n", nsres); + + return S_OK; } static HRESULT WINAPI HTMLInputElement_get_disabled(IHTMLInputElement *iface, VARIANT_BOOL *p) { HTMLInputElement *This = HTMLINPUT_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + PRBool disabled = FALSE; + + TRACE("(%p)->(%p)\n", This, p); + + nsIDOMHTMLInputElement_GetDisabled(This->nsinput, &disabled); + + *p = disabled ? VARIANT_TRUE : VARIANT_FALSE; + return S_OK; } static HRESULT WINAPI HTMLInputElement_get_form(IHTMLInputElement *iface, IHTMLFormElement **p) @@ -1053,16 +1076,32 @@ static const NodeImplVtbl HTMLInputElementImplVtbl = { HTMLInputElement_destructor }; +static const tid_t HTMLInputElement_iface_tids[] = { + IHTMLDOMNode_tid, + IHTMLDOMNode2_tid, + IHTMLElement_tid, + IHTMLElement2_tid, + IHTMLInputElement_tid, + 0 +}; +static dispex_static_data_t HTMLInputElement_dispex = { + NULL, + DispHTMLInputElement_tid, + NULL, + HTMLInputElement_iface_tids +}; + HTMLElement *HTMLInputElement_Create(nsIDOMHTMLElement *nselem) { - HTMLInputElement *ret = heap_alloc(sizeof(HTMLInputElement)); + HTMLInputElement *ret = heap_alloc_zero(sizeof(HTMLInputElement)); nsresult nsres; - HTMLElement_Init(&ret->element); - ret->lpHTMLInputElementVtbl = &HTMLInputElementVtbl; ret->element.node.vtbl = &HTMLInputElementImplVtbl; + init_dispex(&ret->element.node.dispex, (IUnknown*)HTMLINPUT(ret), &HTMLInputElement_dispex); + HTMLElement_Init(&ret->element); + nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLInputElement, (void**)&ret->nsinput); if(NS_FAILED(nsres)) diff --git a/reactos/dll/win32/mshtml/htmlnode.c b/reactos/dll/win32/mshtml/htmlnode.c index e098a83df1e..7c03a9647fa 100644 --- a/reactos/dll/win32/mshtml/htmlnode.c +++ b/reactos/dll/win32/mshtml/htmlnode.c @@ -31,7 +31,251 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml); -#define NSSUPPORTS(x) ((nsISupports*) &(x)->lpSupportsVtbl) +static HTMLDOMNode *get_node_obj(HTMLDocument*,IUnknown*); + +typedef struct { + DispatchEx dispex; + const IHTMLDOMChildrenCollectionVtbl *lpIHTMLDOMChildrenCollectionVtbl; + + LONG ref; + + /* FIXME: implement weak reference */ + HTMLDocument *doc; + + nsIDOMNodeList *nslist; +} HTMLDOMChildrenCollection; + +#define HTMLCHILDCOL(x) ((IHTMLDOMChildrenCollection*) &(x)->lpIHTMLDOMChildrenCollectionVtbl) + +#define HTMLCHILDCOL_THIS(iface) DEFINE_THIS(HTMLDOMChildrenCollection, IHTMLDOMChildrenCollection, iface) + +static HRESULT WINAPI HTMLDOMChildrenCollection_QueryInterface(IHTMLDOMChildrenCollection *iface, REFIID riid, void **ppv) +{ + HTMLDOMChildrenCollection *This = HTMLCHILDCOL_THIS(iface); + + *ppv = NULL; + + if(IsEqualGUID(&IID_IUnknown, riid)) { + TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); + *ppv = HTMLCHILDCOL(This); + }else if(IsEqualGUID(&IID_IHTMLDOMChildrenCollection, riid)) { + TRACE("(%p)->(IID_IHTMLDOMChildrenCollection %p)\n", This, ppv); + *ppv = HTMLCHILDCOL(This); + }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + return *ppv ? S_OK : E_NOINTERFACE; + } + + if(*ppv) { + IUnknown_AddRef((IUnknown*)*ppv); + return S_OK; + } + + WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv); + return E_NOINTERFACE; +} + +static ULONG WINAPI HTMLDOMChildrenCollection_AddRef(IHTMLDOMChildrenCollection *iface) +{ + HTMLDOMChildrenCollection *This = HTMLCHILDCOL_THIS(iface); + LONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + return ref; +} + +static ULONG WINAPI HTMLDOMChildrenCollection_Release(IHTMLDOMChildrenCollection *iface) +{ + HTMLDOMChildrenCollection *This = HTMLCHILDCOL_THIS(iface); + LONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + if(!ref) { + nsIDOMNodeList_Release(This->nslist); + heap_free(This); + } + + return ref; +} + +static HRESULT WINAPI HTMLDOMChildrenCollection_GetTypeInfoCount(IHTMLDOMChildrenCollection *iface, UINT *pctinfo) +{ + HTMLDOMChildrenCollection *This = HTMLCHILDCOL_THIS(iface); + FIXME("(%p)->(%p)\n", This, pctinfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMChildrenCollection_GetTypeInfo(IHTMLDOMChildrenCollection *iface, UINT iTInfo, + LCID lcid, ITypeInfo **ppTInfo) +{ + HTMLDOMChildrenCollection *This = HTMLCHILDCOL_THIS(iface); + FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMChildrenCollection_GetIDsOfNames(IHTMLDOMChildrenCollection *iface, REFIID riid, + LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) +{ + HTMLDOMChildrenCollection *This = HTMLCHILDCOL_THIS(iface); + FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames, + lcid, rgDispId); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMChildrenCollection_Invoke(IHTMLDOMChildrenCollection *iface, DISPID dispIdMember, + REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, + VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +{ + HTMLDOMChildrenCollection *This = HTMLCHILDCOL_THIS(iface); + FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), + lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMChildrenCollection_get_length(IHTMLDOMChildrenCollection *iface, long *p) +{ + HTMLDOMChildrenCollection *This = HTMLCHILDCOL_THIS(iface); + PRUint32 length=0; + + TRACE("(%p)->(%p)\n", This, p); + + nsIDOMNodeList_GetLength(This->nslist, &length); + *p = length; + return S_OK; +} + +static HRESULT WINAPI HTMLDOMChildrenCollection__newEnum(IHTMLDOMChildrenCollection *iface, IUnknown **p) +{ + HTMLDOMChildrenCollection *This = HTMLCHILDCOL_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMChildrenCollection_item(IHTMLDOMChildrenCollection *iface, long index, IDispatch **ppItem) +{ + HTMLDOMChildrenCollection *This = HTMLCHILDCOL_THIS(iface); + nsIDOMNode *nsnode = NULL; + PRUint32 length=0; + nsresult nsres; + + TRACE("(%p)->(%ld %p)\n", This, index, ppItem); + + nsIDOMNodeList_GetLength(This->nslist, &length); + if(index < 0 || index >= length) + return E_INVALIDARG; + + nsres = nsIDOMNodeList_Item(This->nslist, index, &nsnode); + if(NS_FAILED(nsres) || !nsnode) { + ERR("Item failed: %08x\n", nsres); + return E_FAIL; + } + + *ppItem = (IDispatch*)get_node(This->doc, nsnode, TRUE); + IDispatch_AddRef(*ppItem); + return S_OK; +} + +#define DISPID_CHILDCOL_0 MSHTML_DISPID_CUSTOM_MIN + +static HRESULT HTMLDOMChildrenCollection_get_dispid(IUnknown *iface, BSTR name, DWORD flags, DISPID *dispid) +{ + HTMLDOMChildrenCollection *This = HTMLCHILDCOL_THIS(iface); + WCHAR *ptr; + DWORD idx=0; + PRUint32 len = 0; + + for(ptr = name; *ptr && isdigitW(*ptr); ptr++) + idx = idx*10 + (*ptr-'0'); + if(*ptr) + return DISP_E_UNKNOWNNAME; + + nsIDOMNodeList_GetLength(This->nslist, &len); + if(idx >= len) + return DISP_E_UNKNOWNNAME; + + *dispid = DISPID_CHILDCOL_0 + idx; + TRACE("ret %x\n", *dispid); + return S_OK; +} + +static HRESULT HTMLDOMChildrenCollection_invoke(IUnknown *iface, DISPID id, LCID lcid, WORD flags, DISPPARAMS *params, + VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller) +{ + HTMLDOMChildrenCollection *This = HTMLCHILDCOL_THIS(iface); + + TRACE("(%p)->(%x %x %x %p %p %p %p)\n", This, id, lcid, flags, params, res, ei, caller); + + switch(flags) { + case INVOKE_PROPERTYGET: { + IDispatch *disp = NULL; + HRESULT hres; + + hres = IHTMLDOMChildrenCollection_item(HTMLCHILDCOL(This), id - DISPID_CHILDCOL_0, &disp); + if(0&&FAILED(hres)) + return hres; + + V_VT(res) = VT_DISPATCH; + V_DISPATCH(res) = disp; + break; + } + + default: + FIXME("unimplemented flags %x\n", flags); + return E_NOTIMPL; + } + + return S_OK; +} + +#undef HTMLCHILDCOL_THIS + +static const IHTMLDOMChildrenCollectionVtbl HTMLDOMChildrenCollectionVtbl = { + HTMLDOMChildrenCollection_QueryInterface, + HTMLDOMChildrenCollection_AddRef, + HTMLDOMChildrenCollection_Release, + HTMLDOMChildrenCollection_GetTypeInfoCount, + HTMLDOMChildrenCollection_GetTypeInfo, + HTMLDOMChildrenCollection_GetIDsOfNames, + HTMLDOMChildrenCollection_Invoke, + HTMLDOMChildrenCollection_get_length, + HTMLDOMChildrenCollection__newEnum, + HTMLDOMChildrenCollection_item +}; + +static const tid_t HTMLDOMChildrenCollection_iface_tids[] = { + IHTMLDOMChildrenCollection_tid, + 0 +}; + +static const dispex_static_data_vtbl_t HTMLDOMChildrenCollection_dispex_vtbl = { + HTMLDOMChildrenCollection_get_dispid, + HTMLDOMChildrenCollection_invoke +}; + +static dispex_static_data_t HTMLDOMChildrenCollection_dispex = { + &HTMLDOMChildrenCollection_dispex_vtbl, + DispDOMChildrenCollection_tid, + NULL, + HTMLDOMChildrenCollection_iface_tids +}; + +static IHTMLDOMChildrenCollection *create_child_collection(HTMLDocument *doc, nsIDOMNodeList *nslist) +{ + HTMLDOMChildrenCollection *ret; + + ret = heap_alloc_zero(sizeof(*ret)); + ret->lpIHTMLDOMChildrenCollectionVtbl = &HTMLDOMChildrenCollectionVtbl; + ret->ref = 1; + + nsIDOMNodeList_AddRef(nslist); + ret->nslist = nslist; + ret->doc = doc; + + init_dispex(&ret->dispex, (IUnknown*)HTMLCHILDCOL(ret), &HTMLDOMChildrenCollection_dispex); + + return HTMLCHILDCOL(ret); +} #define HTMLDOMNODE_THIS(iface) DEFINE_THIS(HTMLDOMNode, HTMLDOMNode, iface) @@ -106,29 +350,98 @@ static HRESULT WINAPI HTMLDOMNode_Invoke(IHTMLDOMNode *iface, DISPID dispIdMembe static HRESULT WINAPI HTMLDOMNode_get_nodeType(IHTMLDOMNode *iface, long *p) { HTMLDOMNode *This = HTMLDOMNODE_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + PRUint16 type = -1; + + TRACE("(%p)->(%p)\n", This, p); + + nsIDOMNode_GetNodeType(This->nsnode, &type); + + switch(type) { + case ELEMENT_NODE: + *p = 1; + break; + case TEXT_NODE: + *p = 3; + break; + case COMMENT_NODE: + *p = 8; + break; + case DOCUMENT_NODE: + *p = 9; + break; + default: + /* + * FIXME: + * According to MSDN only ELEMENT_NODE and TEXT_NODE are supported. + * It needs more tests. + */ + FIXME("type %u\n", type); + *p = 0; + } + + return S_OK; } static HRESULT WINAPI HTMLDOMNode_get_parentNode(IHTMLDOMNode *iface, IHTMLDOMNode **p) { HTMLDOMNode *This = HTMLDOMNODE_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + HTMLDOMNode *node; + nsIDOMNode *nsnode; + nsresult nsres; + + TRACE("(%p)->(%p)\n", This, p); + + nsres = nsIDOMNode_GetParentNode(This->nsnode, &nsnode); + if(NS_FAILED(nsres)) { + ERR("GetParentNode failed: %08x\n", nsres); + return E_FAIL; + } + + if(!nsnode) { + *p = NULL; + return S_OK; + } + + node = get_node(This->doc, nsnode, TRUE); + *p = HTMLDOMNODE(node); + IHTMLDOMNode_AddRef(*p); + return S_OK; } static HRESULT WINAPI HTMLDOMNode_hasChildNodes(IHTMLDOMNode *iface, VARIANT_BOOL *fChildren) { HTMLDOMNode *This = HTMLDOMNODE_THIS(iface); - FIXME("(%p)->(%p)\n", This, fChildren); - return E_NOTIMPL; + PRBool has_child = FALSE; + nsresult nsres; + + TRACE("(%p)->(%p)\n", This, fChildren); + + nsres = nsIDOMNode_HasChildNodes(This->nsnode, &has_child); + if(NS_FAILED(nsres)) + ERR("HasChildNodes failed: %08x\n", nsres); + + *fChildren = has_child ? VARIANT_TRUE : VARIANT_FALSE; + return S_OK; } static HRESULT WINAPI HTMLDOMNode_get_childNodes(IHTMLDOMNode *iface, IDispatch **p) { HTMLDOMNode *This = HTMLDOMNODE_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + nsIDOMNodeList *nslist; + nsresult nsres; + + TRACE("(%p)->(%p)\n", This, p); + + nsres = nsIDOMNode_GetChildNodes(This->nsnode, &nslist); + if(NS_FAILED(nsres)) { + ERR("GetChildNodes failed: %08x\n", nsres); + return E_FAIL; + } + + *p = (IDispatch*)create_child_collection(This->doc, nslist); + nsIDOMNodeList_Release(nslist); + + return S_OK; } static HRESULT WINAPI HTMLDOMNode_get_attributes(IHTMLDOMNode *iface, IDispatch **p) @@ -146,12 +459,30 @@ static HRESULT WINAPI HTMLDOMNode_insertBefore(IHTMLDOMNode *iface, IHTMLDOMNode return E_NOTIMPL; } -static HRESULT WINAPI HTMLDOMNode_removeChild(IHTMLDOMNode *iface, IHTMLDOMNode *newChild, +static HRESULT WINAPI HTMLDOMNode_removeChild(IHTMLDOMNode *iface, IHTMLDOMNode *oldChild, IHTMLDOMNode **node) { HTMLDOMNode *This = HTMLDOMNODE_THIS(iface); - FIXME("(%p)->(%p %p)\n", This, newChild, node); - return E_NOTIMPL; + HTMLDOMNode *node_obj; + nsIDOMNode *nsnode; + nsresult nsres; + + TRACE("(%p)->(%p %p)\n", This, oldChild, node); + + node_obj = get_node_obj(This->doc, (IUnknown*)oldChild); + if(!node_obj) + return E_FAIL; + + nsres = nsIDOMNode_RemoveChild(This->nsnode, node_obj->nsnode, &nsnode); + if(NS_FAILED(nsres)) { + ERR("RemoveChild failed: %08x\n", nsres); + return E_FAIL; + } + + /* FIXME: Make sure that node != newChild */ + *node = HTMLDOMNODE(get_node(This->doc, nsnode, TRUE)); + IHTMLDOMNode_AddRef(*node); + return S_OK; } static HRESULT WINAPI HTMLDOMNode_replaceChild(IHTMLDOMNode *iface, IHTMLDOMNode *newChild, @@ -198,8 +529,26 @@ static HRESULT WINAPI HTMLDOMNode_appendChild(IHTMLDOMNode *iface, IHTMLDOMNode IHTMLDOMNode **node) { HTMLDOMNode *This = HTMLDOMNODE_THIS(iface); - FIXME("(%p)->(%p %p)\n", This, newChild, node); - return E_NOTIMPL; + HTMLDOMNode *node_obj; + nsIDOMNode *nsnode; + nsresult nsres; + + TRACE("(%p)->(%p %p)\n", This, newChild, node); + + node_obj = get_node_obj(This->doc, (IUnknown*)newChild); + if(!node_obj) + return E_FAIL; + + nsres = nsIDOMNode_AppendChild(This->nsnode, node_obj->nsnode, &nsnode); + if(NS_FAILED(nsres)) { + ERR("AppendChild failed: %08x\n", nsres); + return E_FAIL; + } + + /* FIXME: Make sure that node != newChild */ + *node = HTMLDOMNODE(get_node(This->doc, nsnode, TRUE)); + IHTMLDOMNode_AddRef(*node); + return S_OK; } static HRESULT WINAPI HTMLDOMNode_get_nodeName(IHTMLDOMNode *iface, BSTR *p) @@ -234,29 +583,87 @@ static HRESULT WINAPI HTMLDOMNode_get_nodeName(IHTMLDOMNode *iface, BSTR *p) static HRESULT WINAPI HTMLDOMNode_put_nodeValue(IHTMLDOMNode *iface, VARIANT v) { HTMLDOMNode *This = HTMLDOMNODE_THIS(iface); - FIXME("(%p)->()\n", This); + + TRACE("(%p)->()\n", This); + + switch(V_VT(&v)) { + case VT_BSTR: { + nsAString val_str; + + TRACE("bstr %s\n", debugstr_w(V_BSTR(&v))); + + nsAString_Init(&val_str, V_BSTR(&v)); + nsIDOMNode_SetNodeValue(This->nsnode, &val_str); + nsAString_Finish(&val_str); + + return S_OK; + } + + default: + FIXME("unsupported vt %d\n", V_VT(&v)); + } + return E_NOTIMPL; } static HRESULT WINAPI HTMLDOMNode_get_nodeValue(IHTMLDOMNode *iface, VARIANT *p) { HTMLDOMNode *This = HTMLDOMNODE_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + const PRUnichar *val; + nsAString val_str; + + TRACE("(%p)->(%p)\n", This, p); + + nsAString_Init(&val_str, NULL); + nsIDOMNode_GetNodeValue(This->nsnode, &val_str); + nsAString_GetData(&val_str, &val); + + if(*val) { + V_VT(p) = VT_BSTR; + V_BSTR(p) = SysAllocString(val); + }else { + V_VT(p) = VT_NULL; + } + + nsAString_Finish(&val_str); + + return S_OK; } static HRESULT WINAPI HTMLDOMNode_get_firstChild(IHTMLDOMNode *iface, IHTMLDOMNode **p) { HTMLDOMNode *This = HTMLDOMNODE_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + nsIDOMNode *nschild = NULL; + + TRACE("(%p)->(%p)\n", This, p); + + nsIDOMNode_GetFirstChild(This->nsnode, &nschild); + if(nschild) { + *p = HTMLDOMNODE(get_node(This->doc, nschild, TRUE)); + IHTMLDOMNode_AddRef(*p); + }else { + *p = NULL; + } + + return S_OK; } static HRESULT WINAPI HTMLDOMNode_get_lastChild(IHTMLDOMNode *iface, IHTMLDOMNode **p) { HTMLDOMNode *This = HTMLDOMNODE_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + nsIDOMNode *nschild = NULL; + + TRACE("(%p)->(%p)\n", This, p); + + nsIDOMNode_GetLastChild(This->nsnode, &nschild); + if(nschild) { + *p = HTMLDOMNODE(get_node(This->doc, nschild, TRUE)); + IHTMLDOMNode_AddRef(*p); + }else { + *p = NULL; + } + + return S_OK; } static HRESULT WINAPI HTMLDOMNode_get_previousSibling(IHTMLDOMNode *iface, IHTMLDOMNode **p) @@ -273,6 +680,8 @@ static HRESULT WINAPI HTMLDOMNode_get_nextSibling(IHTMLDOMNode *iface, IHTMLDOMN return E_NOTIMPL; } +#undef HTMLDOMNODE_THIS + static const IHTMLDOMNodeVtbl HTMLDOMNodeVtbl = { HTMLDOMNode_QueryInterface, HTMLDOMNode_AddRef, @@ -303,6 +712,85 @@ static const IHTMLDOMNodeVtbl HTMLDOMNodeVtbl = { HTMLDOMNode_get_nextSibling }; +#define HTMLDOMNODE2_THIS(iface) DEFINE_THIS(HTMLDOMNode, HTMLDOMNode2, iface) + +static HRESULT WINAPI HTMLDOMNode2_QueryInterface(IHTMLDOMNode2 *iface, + REFIID riid, void **ppv) +{ + HTMLDOMNode *This = HTMLDOMNODE2_THIS(iface); + + return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(This), riid, ppv); +} + +static ULONG WINAPI HTMLDOMNode2_AddRef(IHTMLDOMNode2 *iface) +{ + HTMLDOMNode *This = HTMLDOMNODE2_THIS(iface); + + return IHTMLDOMNode_AddRef(HTMLDOMNODE(This)); +} + +static ULONG WINAPI HTMLDOMNode2_Release(IHTMLDOMNode2 *iface) +{ + HTMLDOMNode *This = HTMLDOMNODE2_THIS(iface); + + return IHTMLDOMNode_Release(HTMLDOMNODE(This)); +} + +static HRESULT WINAPI HTMLDOMNode2_GetTypeInfoCount(IHTMLDOMNode2 *iface, UINT *pctinfo) +{ + HTMLDOMNode *This = HTMLDOMNODE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, pctinfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMNode2_GetTypeInfo(IHTMLDOMNode2 *iface, UINT iTInfo, + LCID lcid, ITypeInfo **ppTInfo) +{ + HTMLDOMNode *This = HTMLDOMNODE2_THIS(iface); + FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMNode2_GetIDsOfNames(IHTMLDOMNode2 *iface, REFIID riid, + LPOLESTR *rgszNames, UINT cNames, + LCID lcid, DISPID *rgDispId) +{ + HTMLDOMNode *This = HTMLDOMNODE2_THIS(iface); + FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames, + lcid, rgDispId); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMNode2_Invoke(IHTMLDOMNode2 *iface, DISPID dispIdMember, + REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, + VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +{ + HTMLDOMNode *This = HTMLDOMNODE2_THIS(iface); + FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), + lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMNode2_get_ownerDocument(IHTMLDOMNode2 *iface, IDispatch **p) +{ + HTMLDOMNode *This = HTMLDOMNODE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +#undef HTMLDOMNODE2_THIS + +static const IHTMLDOMNode2Vtbl HTMLDOMNode2Vtbl = { + HTMLDOMNode2_QueryInterface, + HTMLDOMNode2_AddRef, + HTMLDOMNode2_Release, + HTMLDOMNode2_GetTypeInfoCount, + HTMLDOMNode2_GetTypeInfo, + HTMLDOMNode2_GetIDsOfNames, + HTMLDOMNode2_Invoke, + HTMLDOMNode2_get_ownerDocument +}; + HRESULT HTMLDOMNode_QI(HTMLDOMNode *This, REFIID riid, void **ppv) { *ppv = NULL; @@ -313,9 +801,22 @@ HRESULT HTMLDOMNode_QI(HTMLDOMNode *This, REFIID riid, void **ppv) }else if(IsEqualGUID(&IID_IDispatch, riid)) { TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv); *ppv = HTMLDOMNODE(This); + }else if(IsEqualGUID(&IID_IDispatchEx, riid)) { + if(This->dispex.data) { + TRACE("(%p)->(IID_IDispatchEx %p)\n", This, ppv); + *ppv = DISPATCHEX(&This->dispex); + }else { + FIXME("(%p)->(IID_IDispatchEx %p)\n", This, ppv); + return E_NOINTERFACE; + } }else if(IsEqualGUID(&IID_IHTMLDOMNode, riid)) { TRACE("(%p)->(IID_IHTMLDOMNode %p)\n", This, ppv); *ppv = HTMLDOMNODE(This); + }else if(IsEqualGUID(&IID_IHTMLDOMNode2, riid)) { + TRACE("(%p)->(IID_IHTMLDOMNode2 %p)\n", This, ppv); + *ppv = HTMLDOMNODE2(This); + }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + return *ppv ? S_OK : E_NOINTERFACE; } if(*ppv) { @@ -331,6 +832,8 @@ void HTMLDOMNode_destructor(HTMLDOMNode *This) { if(This->nsnode) nsIDOMNode_Release(This->nsnode); + if(This->event_target) + release_event_target(This->event_target); } static const NodeImplVtbl HTMLDOMNodeImplVtbl = { @@ -338,6 +841,20 @@ static const NodeImplVtbl HTMLDOMNodeImplVtbl = { HTMLDOMNode_destructor }; +void HTMLDOMNode_Init(HTMLDocument *doc, HTMLDOMNode *node, nsIDOMNode *nsnode) +{ + node->lpHTMLDOMNodeVtbl = &HTMLDOMNodeVtbl; + node->lpHTMLDOMNode2Vtbl = &HTMLDOMNode2Vtbl; + node->ref = 1; + node->doc = doc; + + nsIDOMNode_AddRef(nsnode); + node->nsnode = nsnode; + + node->next = doc->nodes; + doc->nodes = node; +} + static HTMLDOMNode *create_node(HTMLDocument *doc, nsIDOMNode *nsnode) { HTMLDOMNode *ret; @@ -347,19 +864,21 @@ static HTMLDOMNode *create_node(HTMLDocument *doc, nsIDOMNode *nsnode) switch(node_type) { case ELEMENT_NODE: - ret = &HTMLElement_Create(nsnode)->node; + ret = &HTMLElement_Create(doc, nsnode, FALSE)->node; + break; + case TEXT_NODE: + ret = HTMLDOMTextNode_Create(doc, nsnode); + break; + case COMMENT_NODE: + ret = &HTMLCommentElement_Create(doc, nsnode)->node; break; default: - ret = heap_alloc(sizeof(HTMLDOMNode)); + ret = heap_alloc_zero(sizeof(HTMLDOMNode)); ret->vtbl = &HTMLDOMNodeImplVtbl; + HTMLDOMNode_Init(doc, ret, nsnode); } - ret->lpHTMLDOMNodeVtbl = &HTMLDOMNodeVtbl; - ret->ref = 1; - ret->doc = doc; - - nsIDOMNode_AddRef(nsnode); - ret->nsnode = nsnode; + TRACE("type %d ret %p\n", node_type, ret); return ret; } @@ -370,9 +889,9 @@ static HTMLDOMNode *create_node(HTMLDocument *doc, nsIDOMNode *nsnode) * (better) find a way to store HTMLDOMelement pointer in nsIDOMNode. */ -HTMLDOMNode *get_node(HTMLDocument *This, nsIDOMNode *nsnode) +HTMLDOMNode *get_node(HTMLDocument *This, nsIDOMNode *nsnode, BOOL create) { - HTMLDOMNode *iter = This->nodes, *ret; + HTMLDOMNode *iter = This->nodes; while(iter) { if(iter->nsnode == nsnode) @@ -380,15 +899,33 @@ HTMLDOMNode *get_node(HTMLDocument *This, nsIDOMNode *nsnode) iter = iter->next; } - if(iter) + if(iter || !create) return iter; - ret = create_node(This, nsnode); + return create_node(This, nsnode); +} - ret->next = This->nodes; - This->nodes = ret; +/* + * FIXME + * We should use better way for getting node object (like private interface) + * or avoid it at all. + */ +static HTMLDOMNode *get_node_obj(HTMLDocument *This, IUnknown *iface) +{ + HTMLDOMNode *iter = This->nodes; + IHTMLDOMNode *node; - return ret; + IUnknown_QueryInterface(iface, &IID_IHTMLDOMNode, (void**)&node); + IHTMLDOMNode_Release(node); + + while(iter) { + if(HTMLDOMNODE(iter) == node) + return iter; + iter = iter->next; + } + + FIXME("Not found %p\n", iface); + return NULL; } void release_nodes(HTMLDocument *This) diff --git a/reactos/dll/win32/mshtml/htmloption.c b/reactos/dll/win32/mshtml/htmloption.c index 73af3b0cfbf..efb983031c2 100644 --- a/reactos/dll/win32/mshtml/htmloption.c +++ b/reactos/dll/win32/mshtml/htmloption.c @@ -331,16 +331,32 @@ static const NodeImplVtbl HTMLOptionElementImplVtbl = { HTMLOptionElement_destructor }; +static const tid_t HTMLOptionElement_iface_tids[] = { + IHTMLDOMNode_tid, + IHTMLDOMNode2_tid, + IHTMLElement_tid, + IHTMLElement2_tid, + IHTMLOptionElement_tid, + 0 +}; +static dispex_static_data_t HTMLOptionElement_dispex = { + NULL, + DispHTMLOptionElement_tid, + NULL, + HTMLOptionElement_iface_tids +}; + HTMLElement *HTMLOptionElement_Create(nsIDOMHTMLElement *nselem) { - HTMLOptionElement *ret = heap_alloc(sizeof(HTMLOptionElement)); + HTMLOptionElement *ret = heap_alloc_zero(sizeof(HTMLOptionElement)); nsresult nsres; - HTMLElement_Init(&ret->element); - ret->lpHTMLOptionElementVtbl = &HTMLOptionElementVtbl; ret->element.node.vtbl = &HTMLOptionElementImplVtbl; + HTMLElement_Init(&ret->element); + init_dispex(&ret->element.node.dispex, (IUnknown*)HTMLOPTION(ret), &HTMLOptionElement_dispex); + nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLOptionElement, (void**)&ret->nsoption); if(NS_FAILED(nsres)) ERR("Could not get nsIDOMHTMLOptionElement interface: %08x\n", nsres); @@ -469,7 +485,7 @@ static HRESULT WINAPI HTMLOptionElementFactory_create(IHTMLOptionElementFactory return E_FAIL; } - hres = IHTMLDOMNode_QueryInterface(HTMLDOMNODE(get_node(This->doc, (nsIDOMNode*)nselem)), + hres = IHTMLDOMNode_QueryInterface(HTMLDOMNODE(get_node(This->doc, (nsIDOMNode*)nselem, TRUE)), &IID_IHTMLOptionElement, (void**)optelem); nsIDOMElement_Release(nselem); diff --git a/reactos/dll/win32/mshtml/htmlscript.c b/reactos/dll/win32/mshtml/htmlscript.c index 6c49af559be..36512adc98c 100644 --- a/reactos/dll/win32/mshtml/htmlscript.c +++ b/reactos/dll/win32/mshtml/htmlscript.c @@ -288,7 +288,7 @@ static const NodeImplVtbl HTMLScriptElementImplVtbl = { HTMLElement *HTMLScriptElement_Create(nsIDOMHTMLElement *nselem) { - HTMLScriptElement *ret = heap_alloc(sizeof(HTMLScriptElement)); + HTMLScriptElement *ret = heap_alloc_zero(sizeof(HTMLScriptElement)); nsresult nsres; HTMLElement_Init(&ret->element); diff --git a/reactos/dll/win32/mshtml/htmlselect.c b/reactos/dll/win32/mshtml/htmlselect.c index 3718e8a8961..9c7cf71dcea 100644 --- a/reactos/dll/win32/mshtml/htmlselect.c +++ b/reactos/dll/win32/mshtml/htmlselect.c @@ -68,16 +68,16 @@ static ULONG WINAPI HTMLSelectElement_Release(IHTMLSelectElement *iface) static HRESULT WINAPI HTMLSelectElement_GetTypeInfoCount(IHTMLSelectElement *iface, UINT *pctinfo) { HTMLSelectElement *This = HTMLSELECT_THIS(iface); - FIXME("(%p)->(%p)\n", This, pctinfo); - return E_NOTIMPL; + + return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->element.node.dispex), pctinfo); } static HRESULT WINAPI HTMLSelectElement_GetTypeInfo(IHTMLSelectElement *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) { HTMLSelectElement *This = HTMLSELECT_THIS(iface); - FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo); - return E_NOTIMPL; + + return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->element.node.dispex), iTInfo, lcid, ppTInfo); } static HRESULT WINAPI HTMLSelectElement_GetIDsOfNames(IHTMLSelectElement *iface, REFIID riid, @@ -85,9 +85,8 @@ static HRESULT WINAPI HTMLSelectElement_GetIDsOfNames(IHTMLSelectElement *iface, LCID lcid, DISPID *rgDispId) { HTMLSelectElement *This = HTMLSELECT_THIS(iface); - FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames, - lcid, rgDispId); - return E_NOTIMPL; + + return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->element.node.dispex), riid, rgszNames, cNames, lcid, rgDispId); } static HRESULT WINAPI HTMLSelectElement_Invoke(IHTMLSelectElement *iface, DISPID dispIdMember, @@ -95,9 +94,9 @@ static HRESULT WINAPI HTMLSelectElement_Invoke(IHTMLSelectElement *iface, DISPID VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) { HTMLSelectElement *This = HTMLSELECT_THIS(iface); - FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), - lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); - return E_NOTIMPL; + + return IDispatchEx_Invoke(DISPATCHEX(&This->element.node.dispex), dispIdMember, riid, lcid, + wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); } static HRESULT WINAPI HTMLSelectElement_put_size(IHTMLSelectElement *iface, long v) @@ -177,8 +176,10 @@ static HRESULT WINAPI HTMLSelectElement_get_options(IHTMLSelectElement *iface, I static HRESULT WINAPI HTMLSelectElement_put_onchange(IHTMLSelectElement *iface, VARIANT v) { HTMLSelectElement *This = HTMLSELECT_THIS(iface); - FIXME("(%p)->()\n", This); - return E_NOTIMPL; + + TRACE("(%p)->()\n", This); + + return set_node_event(&This->element.node, EVENTID_CHANGE, &v); } static HRESULT WINAPI HTMLSelectElement_get_onchange(IHTMLSelectElement *iface, VARIANT *p) @@ -221,15 +222,43 @@ static HRESULT WINAPI HTMLSelectElement_get_selectedIndex(IHTMLSelectElement *if static HRESULT WINAPI HTMLSelectElement_get_type(IHTMLSelectElement *iface, BSTR *p) { HTMLSelectElement *This = HTMLSELECT_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + const PRUnichar *type; + nsAString type_str; + nsresult nsres; + HRESULT hres = S_OK; + + TRACE("(%p)->(%p)\n", This, p); + + nsAString_Init(&type_str, NULL); + nsres = nsIDOMHTMLSelectElement_GetType(This->nsselect, &type_str); + if(NS_SUCCEEDED(nsres)) { + nsAString_GetData(&type_str, &type); + *p = *type ? SysAllocString(type) : NULL; + }else { + ERR("GetType failed: %08x\n", nsres); + hres = E_FAIL; + } + + nsAString_Finish(&type_str); + + return hres; } static HRESULT WINAPI HTMLSelectElement_put_value(IHTMLSelectElement *iface, BSTR v) { HTMLSelectElement *This = HTMLSELECT_THIS(iface); - FIXME("(%p)->(%s)\n", This, debugstr_w(v)); - return E_NOTIMPL; + nsAString value_str; + nsresult nsres; + + TRACE("(%p)->(%s)\n", This, debugstr_w(v)); + + nsAString_Init(&value_str, v); + nsres = nsIDOMHTMLSelectElement_SetValue(This->nsselect, &value_str); + nsAString_Finish(&value_str); + if(NS_FAILED(nsres)) + ERR("SetValue failed: %08x\n", nsres); + + return S_OK; } static HRESULT WINAPI HTMLSelectElement_get_value(IHTMLSelectElement *iface, BSTR *p) @@ -246,7 +275,7 @@ static HRESULT WINAPI HTMLSelectElement_get_value(IHTMLSelectElement *iface, BST nsres = nsIDOMHTMLSelectElement_GetValue(This->nsselect, &value_str); if(NS_SUCCEEDED(nsres)) { nsAString_GetData(&value_str, &value); - *p = SysAllocString(value); + *p = *value ? SysAllocString(value) : NULL; }else { ERR("GetValue failed: %08x\n", nsres); } @@ -420,16 +449,33 @@ static const NodeImplVtbl HTMLSelectElementImplVtbl = { HTMLSelectElement_destructor }; +static const tid_t HTMLSelectElement_tids[] = { + IHTMLDOMNode_tid, + IHTMLDOMNode2_tid, + IHTMLElement_tid, + IHTMLElement2_tid, + IHTMLSelectElement_tid, + 0 +}; + +static dispex_static_data_t HTMLSelectElement_dispex = { + NULL, + DispHTMLSelectElement_tid, + NULL, + HTMLSelectElement_tids +}; + HTMLElement *HTMLSelectElement_Create(nsIDOMHTMLElement *nselem) { - HTMLSelectElement *ret = heap_alloc(sizeof(HTMLSelectElement)); + HTMLSelectElement *ret = heap_alloc_zero(sizeof(HTMLSelectElement)); nsresult nsres; - HTMLElement_Init(&ret->element); - ret->lpHTMLSelectElementVtbl = &HTMLSelectElementVtbl; ret->element.node.vtbl = &HTMLSelectElementImplVtbl; - + + init_dispex(&ret->element.node.dispex, (IUnknown*)HTMLSELECT(ret), &HTMLSelectElement_dispex); + HTMLElement_Init(&ret->element); + nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLSelectElement, (void**)&ret->nsselect); if(NS_FAILED(nsres)) diff --git a/reactos/dll/win32/mshtml/htmlstyle.c b/reactos/dll/win32/mshtml/htmlstyle.c index cb248315b5c..e4bc48329e3 100644 --- a/reactos/dll/win32/mshtml/htmlstyle.c +++ b/reactos/dll/win32/mshtml/htmlstyle.c @@ -33,6 +33,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml); typedef struct { + DispatchEx dispex; const IHTMLStyleVtbl *lpHTMLStyleVtbl; LONG ref; @@ -40,10 +41,14 @@ typedef struct { nsIDOMCSSStyleDeclaration *nsstyle; } HTMLStyle; -#define HTMLSTYLE(x) ((IHTMLStyle*) &(x)->lpHTMLStyleVtbl); +#define HTMLSTYLE(x) ((IHTMLStyle*) &(x)->lpHTMLStyleVtbl) +static const WCHAR attrBackground[] = + {'b','a','c','k','g','r','o','u','n','d',0}; static const WCHAR attrBackgroundColor[] = {'b','a','c','k','g','r','o','u','n','d','-','c','o','l','o','r',0}; +static const WCHAR attrBackgroundImage[] = + {'b','a','c','k','g','r','o','u','n','d','-','i','m','a','g','e',0}; static const WCHAR attrBorderLeft[] = {'b','o','r','d','e','r','-','l','e','f','t',0}; static const WCHAR attrColor[] = @@ -68,6 +73,8 @@ static const WCHAR attrTextDecoration[] = {'t','e','x','t','-','d','e','c','o','r','a','t','i','o','n',0}; static const WCHAR attrVisibility[] = {'v','i','s','i','b','i','l','i','t','y',0}; +static const WCHAR attrWidth[] = + {'w','i','d','t','h',0}; static const WCHAR valLineThrough[] = {'l','i','n','e','-','t','h','r','o','u','g','h',0}; @@ -113,7 +120,27 @@ static LPWSTR fix_px_value(LPCWSTR val) return NULL; } +static LPWSTR fix_url_value(LPCWSTR val) +{ + WCHAR *ret, *ptr; + + static const WCHAR urlW[] = {'u','r','l','('}; + + if(strncmpW(val, urlW, sizeof(urlW)/sizeof(WCHAR)) || !strchrW(val, '\\')) + return NULL; + + ret = heap_strdupW(val); + + for(ptr = ret; *ptr; ptr++) { + if(*ptr == '\\') + *ptr = '/'; + } + + return ret; +} + #define ATTR_FIX_PX 1 +#define ATTR_FIX_URL 2 static HRESULT set_style_attr(HTMLStyle *This, LPCWSTR name, LPCWSTR value, DWORD flags) { @@ -127,6 +154,8 @@ static HRESULT set_style_attr(HTMLStyle *This, LPCWSTR name, LPCWSTR value, DWOR if(flags & ATTR_FIX_PX) val = fix_px_value(value); + if(flags & ATTR_FIX_URL) + val = fix_url_value(value); nsAString_Init(&str_name, name); nsAString_Init(&str_value, val ? val : value); @@ -208,12 +237,11 @@ static HRESULT WINAPI HTMLStyle_QueryInterface(IHTMLStyle *iface, REFIID riid, v if(IsEqualGUID(&IID_IUnknown, riid)) { TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); *ppv = HTMLSTYLE(This); - }else if(IsEqualGUID(&IID_IDispatch, riid)) { - TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv); - *ppv = HTMLSTYLE(This); }else if(IsEqualGUID(&IID_IHTMLStyle, riid)) { TRACE("(%p)->(IID_IHTMLStyle %p)\n", This, ppv); *ppv = HTMLSTYLE(This); + }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + return *ppv ? S_OK : E_NOINTERFACE; } if(*ppv) { @@ -390,7 +418,18 @@ static HRESULT WINAPI HTMLStyle_get_font(IHTMLStyle *iface, BSTR *p) static HRESULT WINAPI HTMLStyle_put_color(IHTMLStyle *iface, VARIANT v) { HTMLStyle *This = HTMLSTYLE_THIS(iface); - FIXME("(%p)->(v%d)\n", This, V_VT(&v)); + + TRACE("(%p)->(v%d)\n", This, V_VT(&v)); + + switch(V_VT(&v)) { + case VT_BSTR: + TRACE("%s\n", debugstr_w(V_BSTR(&v))); + return set_style_attr(This, attrColor, V_BSTR(&v), 0); + + default: + FIXME("unsupported vt=%d\n", V_VT(&v)); + } + return E_NOTIMPL; } @@ -407,8 +446,10 @@ static HRESULT WINAPI HTMLStyle_get_color(IHTMLStyle *iface, VARIANT *p) static HRESULT WINAPI HTMLStyle_put_background(IHTMLStyle *iface, BSTR v) { HTMLStyle *This = HTMLSTYLE_THIS(iface); - FIXME("(%p)->(%s)\n", This, debugstr_w(v)); - return E_NOTIMPL; + + TRACE("(%p)->(%s)\n", This, debugstr_w(v)); + + return set_style_attr(This, attrBackground, v, 0); } static HRESULT WINAPI HTMLStyle_get_background(IHTMLStyle *iface, BSTR *p) @@ -451,8 +492,10 @@ static HRESULT WINAPI HTMLStyle_get_backgroundColor(IHTMLStyle *iface, VARIANT * static HRESULT WINAPI HTMLStyle_put_backgroundImage(IHTMLStyle *iface, BSTR v) { HTMLStyle *This = HTMLSTYLE_THIS(iface); - FIXME("(%p)->(%s)\n", This, debugstr_w(v)); - return E_NOTIMPL; + + TRACE("(%p)->(%s)\n", This, debugstr_w(v)); + + return set_style_attr(This, attrBackgroundImage, v, ATTR_FIX_URL); } static HRESULT WINAPI HTMLStyle_get_backgroundImage(IHTMLStyle *iface, BSTR *p) @@ -1196,15 +1239,28 @@ static HRESULT WINAPI HTMLStyle_get_borderLeftStyle(IHTMLStyle *iface, BSTR *p) static HRESULT WINAPI HTMLStyle_put_width(IHTMLStyle *iface, VARIANT v) { HTMLStyle *This = HTMLSTYLE_THIS(iface); - FIXME("(%p)->(v%d)\n", This, V_VT(&v)); + + TRACE("(%p)->(v%d)\n", This, V_VT(&v)); + + switch(V_VT(&v)) { + case VT_BSTR: + TRACE("%s\n", debugstr_w(V_BSTR(&v))); + return set_style_attr(This, attrWidth, V_BSTR(&v), 0); + default: + FIXME("unsupported vt %d\n", V_VT(&v)); + } + return E_NOTIMPL; } static HRESULT WINAPI HTMLStyle_get_width(IHTMLStyle *iface, VARIANT *p) { HTMLStyle *This = HTMLSTYLE_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + + TRACE("(%p)->(%p)\n", This, p); + + V_VT(p) = VT_BSTR; + return get_style_attr(This, attrWidth, &V_BSTR(p)); } static HRESULT WINAPI HTMLStyle_put_height(IHTMLStyle *iface, VARIANT v) @@ -1837,6 +1893,17 @@ static const IHTMLStyleVtbl HTMLStyleVtbl = { HTMLStyle_toString }; +static const tid_t HTMLStyle_iface_tids[] = { + IHTMLStyle_tid, + 0 +}; +static dispex_static_data_t HTMLStyle_dispex = { + NULL, + DispHTMLStyle_tid, + NULL, + HTMLStyle_iface_tids +}; + IHTMLStyle *HTMLStyle_Create(nsIDOMCSSStyleDeclaration *nsstyle) { HTMLStyle *ret = heap_alloc(sizeof(HTMLStyle)); @@ -1847,5 +1914,7 @@ IHTMLStyle *HTMLStyle_Create(nsIDOMCSSStyleDeclaration *nsstyle) nsIDOMCSSStyleDeclaration_AddRef(nsstyle); + init_dispex(&ret->dispex, (IUnknown*)HTMLSTYLE(ret), &HTMLStyle_dispex); + return HTMLSTYLE(ret); } diff --git a/reactos/dll/win32/mshtml/htmltable.c b/reactos/dll/win32/mshtml/htmltable.c index 66d55d06cfe..88f6e75cdf9 100644 --- a/reactos/dll/win32/mshtml/htmltable.c +++ b/reactos/dll/win32/mshtml/htmltable.c @@ -546,7 +546,7 @@ static const NodeImplVtbl HTMLTableImplVtbl = { HTMLElement *HTMLTable_Create(nsIDOMHTMLElement *nselem) { - HTMLTable *ret = heap_alloc(sizeof(HTMLTable)); + HTMLTable *ret = heap_alloc_zero(sizeof(HTMLTable)); HTMLElement_Init(&ret->element); diff --git a/reactos/dll/win32/mshtml/htmltextarea.c b/reactos/dll/win32/mshtml/htmltextarea.c index 64245e72430..6e94174c98e 100644 --- a/reactos/dll/win32/mshtml/htmltextarea.c +++ b/reactos/dll/win32/mshtml/htmltextarea.c @@ -402,7 +402,7 @@ static const NodeImplVtbl HTMLTextAreaElementImplVtbl = { HTMLElement *HTMLTextAreaElement_Create(nsIDOMHTMLElement *nselem) { - HTMLTextAreaElement *ret = heap_alloc(sizeof(HTMLTextAreaElement)); + HTMLTextAreaElement *ret = heap_alloc_zero(sizeof(HTMLTextAreaElement)); nsresult nsres; HTMLElement_Init(&ret->element); diff --git a/reactos/dll/win32/mshtml/htmltextnode.c b/reactos/dll/win32/mshtml/htmltextnode.c new file mode 100644 index 00000000000..69c287d02be --- /dev/null +++ b/reactos/dll/win32/mshtml/htmltextnode.c @@ -0,0 +1,213 @@ +/* + * Copyright 2008 Jacek Caban for CodeWeavers + * + * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + + +#include + +#define COBJMACROS + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "ole2.h" + +#include "mshtml_private.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(mshtml); + +typedef struct { + HTMLDOMNode node; + const IHTMLDOMTextNodeVtbl *lpIHTMLDOMTextNodeVtbl; +} HTMLDOMTextNode; + +#define HTMLTEXT(x) ((IHTMLDOMTextNode*) &(x)->lpIHTMLDOMTextNodeVtbl) + +#define HTMLTEXT_THIS(iface) DEFINE_THIS(HTMLDOMTextNode, IHTMLDOMTextNode, iface) + +#define HTMLTEXT_NODE_THIS(iface) DEFINE_THIS2(HTMLDOMTextNode, node, iface) + +static HRESULT WINAPI HTMLDOMTextNode_QueryInterface(IHTMLDOMTextNode *iface, + REFIID riid, void **ppv) +{ + HTMLDOMTextNode *This = HTMLTEXT_THIS(iface); + + return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->node), riid, ppv); +} + +static ULONG WINAPI HTMLDOMTextNode_AddRef(IHTMLDOMTextNode *iface) +{ + HTMLDOMTextNode *This = HTMLTEXT_THIS(iface); + + return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This->node)); +} + +static ULONG WINAPI HTMLDOMTextNode_Release(IHTMLDOMTextNode *iface) +{ + HTMLDOMTextNode *This = HTMLTEXT_THIS(iface); + + return IHTMLDOMNode_Release(HTMLDOMNODE(&This->node)); +} + +static HRESULT WINAPI HTMLDOMTextNode_GetTypeInfoCount(IHTMLDOMTextNode *iface, UINT *pctinfo) +{ + HTMLDOMTextNode *This = HTMLTEXT_THIS(iface); + FIXME("(%p)->(%p)\n", This, pctinfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMTextNode_GetTypeInfo(IHTMLDOMTextNode *iface, UINT iTInfo, + LCID lcid, ITypeInfo **ppTInfo) +{ + HTMLDOMTextNode *This = HTMLTEXT_THIS(iface); + FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMTextNode_GetIDsOfNames(IHTMLDOMTextNode *iface, REFIID riid, + LPOLESTR *rgszNames, UINT cNames, + LCID lcid, DISPID *rgDispId) +{ + HTMLDOMTextNode *This = HTMLTEXT_THIS(iface); + FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames, + lcid, rgDispId); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMTextNode_Invoke(IHTMLDOMTextNode *iface, DISPID dispIdMember, + REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, + VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +{ + HTMLDOMTextNode *This = HTMLTEXT_THIS(iface); + FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), + lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMTextNode_put_data(IHTMLDOMTextNode *iface, BSTR v) +{ + HTMLDOMTextNode *This = HTMLTEXT_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMTextNode_get_data(IHTMLDOMTextNode *iface, BSTR *p) +{ + HTMLDOMTextNode *This = HTMLTEXT_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMTextNode_toString(IHTMLDOMTextNode *iface, BSTR *String) +{ + HTMLDOMTextNode *This = HTMLTEXT_THIS(iface); + FIXME("(%p)->(%p)\n", This, String); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMTextNode_get_length(IHTMLDOMTextNode *iface, long *p) +{ + HTMLDOMTextNode *This = HTMLTEXT_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMTextNode_splitText(IHTMLDOMTextNode *iface, long offset, IHTMLDOMNode **pRetNode) +{ + HTMLDOMTextNode *This = HTMLTEXT_THIS(iface); + FIXME("(%p)->(%ld %p)\n", This, offset, pRetNode); + return E_NOTIMPL; +} + +#undef HTMLTEXT_THIS + +static const IHTMLDOMTextNodeVtbl HTMLDOMTextNodeVtbl = { + HTMLDOMTextNode_QueryInterface, + HTMLDOMTextNode_AddRef, + HTMLDOMTextNode_Release, + HTMLDOMTextNode_GetTypeInfoCount, + HTMLDOMTextNode_GetTypeInfo, + HTMLDOMTextNode_GetIDsOfNames, + HTMLDOMTextNode_Invoke, + HTMLDOMTextNode_put_data, + HTMLDOMTextNode_get_data, + HTMLDOMTextNode_toString, + HTMLDOMTextNode_get_length, + HTMLDOMTextNode_splitText +}; + +#define HTMLTEXT_NODE_THIS(iface) DEFINE_THIS2(HTMLDOMTextNode, node, iface) + +HRESULT HTMLDOMTextNode_QI(HTMLDOMNode *iface, REFIID riid, void **ppv) +{ + HTMLDOMTextNode *This = HTMLTEXT_NODE_THIS(iface); + + *ppv = NULL; + + if(IsEqualGUID(&IID_IHTMLDOMTextNode, riid)) { + TRACE("(%p)->(IID_IHTMLDOMTextNode %p)\n", This, ppv); + *ppv = HTMLTEXT(This); + }else { + return HTMLDOMNode_QI(&This->node, riid, ppv); + } + + IUnknown_AddRef((IUnknown*)*ppv); + return S_OK; +} + +void HTMLDOMTextNode_destructor(HTMLDOMNode *iface) +{ + HTMLDOMTextNode *This = HTMLTEXT_NODE_THIS(iface); + + HTMLDOMNode_destructor(&This->node); +} + +#undef HTMLTEXT_NODE_THIS + +static const NodeImplVtbl HTMLDOMTextNodeImplVtbl = { + HTMLDOMTextNode_QI, + HTMLDOMTextNode_destructor +}; + +static const tid_t HTMLDOMTextNode_iface_tids[] = { + IHTMLDOMNode_tid, + IHTMLDOMNode2_tid, + IHTMLDOMTextNode_tid, + 0 +}; +static dispex_static_data_t HTMLDOMTextNode_dispex = { + NULL, + DispHTMLDOMTextNode_tid, + 0, + HTMLDOMTextNode_iface_tids +}; + +HTMLDOMNode *HTMLDOMTextNode_Create(HTMLDocument *doc, nsIDOMNode *nsnode) +{ + HTMLDOMTextNode *ret ; + + ret = heap_alloc_zero(sizeof(*ret)); + ret->node.vtbl = &HTMLDOMTextNodeImplVtbl; + ret->lpIHTMLDOMTextNodeVtbl = &HTMLDOMTextNodeVtbl; + + init_dispex(&ret->node.dispex, (IUnknown*)HTMLTEXT(ret), &HTMLDOMTextNode_dispex); + HTMLDOMNode_Init(doc, &ret->node, nsnode); + + return &ret->node; +} diff --git a/reactos/dll/win32/mshtml/htmlwindow.c b/reactos/dll/win32/mshtml/htmlwindow.c index 0f57069cf3b..043e4e979ec 100644 --- a/reactos/dll/win32/mshtml/htmlwindow.c +++ b/reactos/dll/win32/mshtml/htmlwindow.c @@ -33,10 +33,10 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml); -#define HTMLWINDOW2_THIS(iface) DEFINE_THIS(HTMLWindow, HTMLWindow2, iface) - static struct list window_list = LIST_INIT(window_list); +#define HTMLWINDOW2_THIS(iface) DEFINE_THIS(HTMLWindow, HTMLWindow2, iface) + static HRESULT WINAPI HTMLWindow2_QueryInterface(IHTMLWindow2 *iface, REFIID riid, void **ppv) { HTMLWindow *This = HTMLWINDOW2_THIS(iface); @@ -49,12 +49,20 @@ static HRESULT WINAPI HTMLWindow2_QueryInterface(IHTMLWindow2 *iface, REFIID rii }else if(IsEqualGUID(&IID_IDispatch, riid)) { TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv); *ppv = HTMLWINDOW2(This); + }else if(IsEqualGUID(&IID_IDispatchEx, riid)) { + TRACE("(%p)->(IID_IDispatchEx %p)\n", This, ppv); + *ppv = DISPATCHEX(This); }else if(IsEqualGUID(&IID_IHTMLFramesCollection2, riid)) { TRACE("(%p)->(IID_IHTMLFramesCollection2 %p)\n", This, ppv); *ppv = HTMLWINDOW2(This); }else if(IsEqualGUID(&IID_IHTMLWindow2, riid)) { TRACE("(%p)->(IID_IHTMLWindow2 %p)\n", This, ppv); *ppv = HTMLWINDOW2(This); + }else if(IsEqualGUID(&IID_IHTMLWindow3, riid)) { + TRACE("(%p)->(IID_IHTMLWindow2 %p)\n", This, ppv); + *ppv = HTMLWINDOW3(This); + }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + return *ppv ? S_OK : E_NOINTERFACE; } if(*ppv) { @@ -95,25 +103,15 @@ static HRESULT WINAPI HTMLWindow2_GetTypeInfoCount(IHTMLWindow2 *iface, UINT *pc { HTMLWindow *This = HTMLWINDOW2_THIS(iface); - TRACE("(%p)->(%p)\n", This, pctinfo); - - *pctinfo = 1; - return S_OK; + return IDispatchEx_GetTypeInfoCount(DISPATCHEX(This), pctinfo); } static HRESULT WINAPI HTMLWindow2_GetTypeInfo(IHTMLWindow2 *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) { HTMLWindow *This = HTMLWINDOW2_THIS(iface); - HRESULT hres; - TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo); - - hres = get_typeinfo(IHTMLWindow2_tid, ppTInfo); - if(SUCCEEDED(hres)) - ITypeInfo_AddRef(*ppTInfo); - - return hres; + return IDispatchEx_GetTypeInfo(DISPATCHEX(This), iTInfo, lcid, ppTInfo); } static HRESULT WINAPI HTMLWindow2_GetIDsOfNames(IHTMLWindow2 *iface, REFIID riid, @@ -121,17 +119,8 @@ static HRESULT WINAPI HTMLWindow2_GetIDsOfNames(IHTMLWindow2 *iface, REFIID riid LCID lcid, DISPID *rgDispId) { HTMLWindow *This = HTMLWINDOW2_THIS(iface); - ITypeInfo *typeinfo; - HRESULT hres; - TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames, - lcid, rgDispId); - - hres = get_typeinfo(IHTMLWindow2_tid, &typeinfo); - if(SUCCEEDED(hres)) - hres = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId); - - return hres; + return IDispatchEx_GetIDsOfNames(DISPATCHEX(This), riid, rgszNames, cNames, lcid, rgDispId); } static HRESULT WINAPI HTMLWindow2_Invoke(IHTMLWindow2 *iface, DISPID dispIdMember, @@ -139,18 +128,9 @@ static HRESULT WINAPI HTMLWindow2_Invoke(IHTMLWindow2 *iface, DISPID dispIdMembe VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) { HTMLWindow *This = HTMLWINDOW2_THIS(iface); - ITypeInfo *typeinfo; - HRESULT hres; - TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), - lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); - - hres = get_typeinfo(IHTMLWindow2_tid, &typeinfo); - if(SUCCEEDED(hres)) - hres = ITypeInfo_Invoke(typeinfo, HTMLWINDOW2(This), dispIdMember, wFlags, pDispParams, - pVarResult, pExcepInfo, puArgErr); - - return hres; + return IDispatchEx_Invoke(DISPATCHEX(This), dispIdMember, riid, lcid, wFlags, pDispParams, + pVarResult, pExcepInfo, puArgErr); } static HRESULT WINAPI HTMLWindow2_item(IHTMLWindow2 *iface, VARIANT *pvarIndex, VARIANT *pvarResult) @@ -206,15 +186,23 @@ static HRESULT WINAPI HTMLWindow2_setTimeout(IHTMLWindow2 *iface, BSTR expressio long msec, VARIANT *language, long *timerID) { HTMLWindow *This = HTMLWINDOW2_THIS(iface); - FIXME("(%p)->(%s %ld %p %p)\n", This, debugstr_w(expression), msec, language, timerID); - return E_NOTIMPL; + VARIANT expr_var; + + TRACE("(%p)->(%s %ld %p %p)\n", This, debugstr_w(expression), msec, language, timerID); + + V_VT(&expr_var) = VT_BSTR; + V_BSTR(&expr_var) = expression; + + return IHTMLWindow3_setTimeout(HTMLWINDOW3(This), &expr_var, msec, language, timerID); } static HRESULT WINAPI HTMLWindow2_clearTimeout(IHTMLWindow2 *iface, long timerID) { HTMLWindow *This = HTMLWINDOW2_THIS(iface); - FIXME("(%p)->(%ld)\n", This, timerID); - return E_NOTIMPL; + + TRACE("(%p)->(%ld)\n", This, timerID); + + return clear_task_timer(This->doc, FALSE, timerID); } static HRESULT WINAPI HTMLWindow2_alert(IHTMLWindow2 *iface, BSTR message) @@ -335,8 +323,13 @@ static HRESULT WINAPI HTMLWindow2_open(IHTMLWindow2 *iface, BSTR url, BSTR name, static HRESULT WINAPI HTMLWindow2_get_self(IHTMLWindow2 *iface, IHTMLWindow2 **p) { HTMLWindow *This = HTMLWINDOW2_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + + TRACE("(%p)->(%p)\n", This, p); + + /* FIXME: We should return kind of proxy window here. */ + IHTMLWindow2_AddRef(HTMLWINDOW2(This)); + *p = HTMLWINDOW2(This); + return S_OK; } static HRESULT WINAPI HTMLWindow2_get_top(IHTMLWindow2 *iface, IHTMLWindow2 **p) @@ -349,8 +342,13 @@ static HRESULT WINAPI HTMLWindow2_get_top(IHTMLWindow2 *iface, IHTMLWindow2 **p) static HRESULT WINAPI HTMLWindow2_get_window(IHTMLWindow2 *iface, IHTMLWindow2 **p) { HTMLWindow *This = HTMLWINDOW2_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + + TRACE("(%p)->(%p)\n", This, p); + + /* FIXME: We should return kind of proxy window here. */ + IHTMLWindow2_AddRef(HTMLWINDOW2(This)); + *p = HTMLWINDOW2(This); + return S_OK; } static HRESULT WINAPI HTMLWindow2_navigate(IHTMLWindow2 *iface, BSTR url) @@ -489,8 +487,18 @@ static HRESULT WINAPI HTMLWindow2_get_onscroll(IHTMLWindow2 *iface, VARIANT *p) static HRESULT WINAPI HTMLWindow2_get_document(IHTMLWindow2 *iface, IHTMLDocument2 **p) { HTMLWindow *This = HTMLWINDOW2_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + + TRACE("(%p)->(%p)\n", This, p); + + if(This->doc) { + /* FIXME: We should return a wrapper object here */ + *p = HTMLDOC(This->doc); + IHTMLDocument2_AddRef(*p); + }else { + *p = NULL; + } + + return S_OK; } static HRESULT WINAPI HTMLWindow2_get_event(IHTMLWindow2 *iface, IHTMLEventObj **p) @@ -584,15 +592,22 @@ static HRESULT WINAPI HTMLWindow2_setInterval(IHTMLWindow2 *iface, BSTR expressi long msec, VARIANT *language, long *timerID) { HTMLWindow *This = HTMLWINDOW2_THIS(iface); - FIXME("(%p)->(%s %ld %p %p)\n", This, debugstr_w(expression), msec, language, timerID); - return E_NOTIMPL; + VARIANT expr; + + TRACE("(%p)->(%s %ld %p %p)\n", This, debugstr_w(expression), msec, language, timerID); + + V_VT(&expr) = VT_BSTR; + V_BSTR(&expr) = expression; + return IHTMLWindow3_setInterval(HTMLWINDOW3(This), &expr, msec, language, timerID); } static HRESULT WINAPI HTMLWindow2_clearInterval(IHTMLWindow2 *iface, long timerID) { HTMLWindow *This = HTMLWINDOW2_THIS(iface); - FIXME("(%p)->(%ld)\n", This, timerID); - return E_NOTIMPL; + + TRACE("(%p)->(%ld)\n", This, timerID); + + return clear_task_timer(This->doc, TRUE, timerID); } static HRESULT WINAPI HTMLWindow2_put_offscreenBuffering(IHTMLWindow2 *iface, VARIANT v) @@ -627,15 +642,29 @@ static HRESULT WINAPI HTMLWindow2_toString(IHTMLWindow2 *iface, BSTR *String) static HRESULT WINAPI HTMLWindow2_scrollBy(IHTMLWindow2 *iface, long x, long y) { HTMLWindow *This = HTMLWINDOW2_THIS(iface); - FIXME("(%p)->(%ld %ld)\n", This, x, y); - return E_NOTIMPL; + nsresult nsres; + + TRACE("(%p)->(%ld %ld)\n", This, x, y); + + nsres = nsIDOMWindow_ScrollBy(This->nswindow, x, y); + if(NS_FAILED(nsres)) + ERR("ScrollBy failed: %08x\n", nsres); + + return S_OK; } static HRESULT WINAPI HTMLWindow2_scrollTo(IHTMLWindow2 *iface, long x, long y) { HTMLWindow *This = HTMLWINDOW2_THIS(iface); - FIXME("(%p)->(%ld %ld)\n", This, x, y); - return E_NOTIMPL; + nsresult nsres; + + TRACE("(%p)->(%ld %ld)\n", This, x, y); + + nsres = nsIDOMWindow_ScrollTo(This->nswindow, x, y); + if(NS_FAILED(nsres)) + ERR("ScrollTo failed: %08x\n", nsres); + + return S_OK; } static HRESULT WINAPI HTMLWindow2_moveTo(IHTMLWindow2 *iface, long x, long y) @@ -762,6 +791,392 @@ static const IHTMLWindow2Vtbl HTMLWindow2Vtbl = { HTMLWindow2_get_external }; +#define HTMLWINDOW3_THIS(iface) DEFINE_THIS(HTMLWindow, HTMLWindow3, iface) + +static HRESULT WINAPI HTMLWindow3_QueryInterface(IHTMLWindow3 *iface, REFIID riid, void **ppv) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + + return IHTMLWindow2_QueryInterface(HTMLWINDOW2(This), riid, ppv); +} + +static ULONG WINAPI HTMLWindow3_AddRef(IHTMLWindow3 *iface) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + + return IHTMLWindow2_AddRef(HTMLWINDOW2(This)); +} + +static ULONG WINAPI HTMLWindow3_Release(IHTMLWindow3 *iface) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + + return IHTMLWindow2_Release(HTMLWINDOW2(This)); +} + +static HRESULT WINAPI HTMLWindow3_GetTypeInfoCount(IHTMLWindow3 *iface, UINT *pctinfo) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + + return IDispatchEx_GetTypeInfoCount(DISPATCHEX(This), pctinfo); +} + +static HRESULT WINAPI HTMLWindow3_GetTypeInfo(IHTMLWindow3 *iface, UINT iTInfo, + LCID lcid, ITypeInfo **ppTInfo) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + + return IDispatchEx_GetTypeInfo(DISPATCHEX(This), iTInfo, lcid, ppTInfo); +} + +static HRESULT WINAPI HTMLWindow3_GetIDsOfNames(IHTMLWindow3 *iface, REFIID riid, + LPOLESTR *rgszNames, UINT cNames, + LCID lcid, DISPID *rgDispId) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + + return IDispatchEx_GetIDsOfNames(DISPATCHEX(This), riid, rgszNames, cNames, lcid, rgDispId); +} + +static HRESULT WINAPI HTMLWindow3_Invoke(IHTMLWindow3 *iface, DISPID dispIdMember, + REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, + VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + + return IDispatchEx_Invoke(DISPATCHEX(This), dispIdMember, riid, lcid, wFlags, pDispParams, + pVarResult, pExcepInfo, puArgErr); +} + +static HRESULT WINAPI HTMLWindow3_get_screenLeft(IHTMLWindow3 *iface, long *p) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_get_screenTop(IHTMLWindow3 *iface, long *p) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_attachEvent(IHTMLWindow3 *iface, BSTR event, IDispatch *pDisp, VARIANT_BOOL *pfResult) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->(%s %p %p)\n", This, debugstr_w(event), pDisp, pfResult); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_detachEvent(IHTMLWindow3 *iface, BSTR event, IDispatch *pDisp) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->()\n", This); + return E_NOTIMPL; +} + +static HRESULT window_set_timer(HTMLWindow *This, VARIANT *expr, long msec, VARIANT *language, + BOOL interval, long *timer_id) +{ + IDispatch *disp = NULL; + + switch(V_VT(expr)) { + case VT_DISPATCH: + disp = V_DISPATCH(expr); + IDispatch_AddRef(disp); + break; + + case VT_BSTR: + disp = script_parse_event(This->doc, V_BSTR(expr)); + break; + + default: + FIXME("unimplemented vt=%d\n", V_VT(expr)); + return E_NOTIMPL; + } + + if(!disp) + return E_FAIL; + + *timer_id = set_task_timer(This->doc, msec, interval, disp); + IDispatch_Release(disp); + + return S_OK; +} + +static HRESULT WINAPI HTMLWindow3_setTimeout(IHTMLWindow3 *iface, VARIANT *expression, long msec, + VARIANT *language, long *timerID) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + + TRACE("(%p)->(%p(%d) %ld %p %p)\n", This, expression, V_VT(expression), msec, language, timerID); + + return window_set_timer(This, expression, msec, language, FALSE, timerID); +} + +static HRESULT WINAPI HTMLWindow3_setInterval(IHTMLWindow3 *iface, VARIANT *expression, long msec, + VARIANT *language, long *timerID) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + + TRACE("(%p)->(%p %ld %p %p)\n", This, expression, msec, language, timerID); + + return window_set_timer(This, expression, msec, language, TRUE, timerID); +} + +static HRESULT WINAPI HTMLWindow3_print(IHTMLWindow3 *iface) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_put_onbeforeprint(IHTMLWindow3 *iface, VARIANT v) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->()\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_get_onbeforeprint(IHTMLWindow3 *iface, VARIANT *p) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_put_onafterprint(IHTMLWindow3 *iface, VARIANT v) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->()\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_get_onafterprint(IHTMLWindow3 *iface, VARIANT *p) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_get_clipboardData(IHTMLWindow3 *iface, IHTMLDataTransfer **p) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_showModelessDialog(IHTMLWindow3 *iface, BSTR url, + VARIANT *varArgIn, VARIANT *options, IHTMLWindow2 **pDialog) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->(%s %p %p %p)\n", This, debugstr_w(url), varArgIn, options, pDialog); + return E_NOTIMPL; +} + +#undef HTMLWINDOW3_THIS + +static const IHTMLWindow3Vtbl HTMLWindow3Vtbl = { + HTMLWindow3_QueryInterface, + HTMLWindow3_AddRef, + HTMLWindow3_Release, + HTMLWindow3_GetTypeInfoCount, + HTMLWindow3_GetTypeInfo, + HTMLWindow3_GetIDsOfNames, + HTMLWindow3_Invoke, + HTMLWindow3_get_screenLeft, + HTMLWindow3_get_screenTop, + HTMLWindow3_attachEvent, + HTMLWindow3_detachEvent, + HTMLWindow3_setTimeout, + HTMLWindow3_setInterval, + HTMLWindow3_print, + HTMLWindow3_put_onbeforeprint, + HTMLWindow3_get_onbeforeprint, + HTMLWindow3_put_onafterprint, + HTMLWindow3_get_onafterprint, + HTMLWindow3_get_clipboardData, + HTMLWindow3_showModelessDialog +}; + +#define DISPEX_THIS(iface) DEFINE_THIS(HTMLWindow, IDispatchEx, iface) + +static HRESULT WINAPI WindowDispEx_QueryInterface(IDispatchEx *iface, REFIID riid, void **ppv) +{ + HTMLWindow *This = DISPEX_THIS(iface); + + return IHTMLWindow2_QueryInterface(HTMLWINDOW2(This), riid, ppv); +} + +static ULONG WINAPI WindowDispEx_AddRef(IDispatchEx *iface) +{ + HTMLWindow *This = DISPEX_THIS(iface); + + return IHTMLWindow2_AddRef(HTMLWINDOW2(This)); +} + +static ULONG WINAPI WindowDispEx_Release(IDispatchEx *iface) +{ + HTMLWindow *This = DISPEX_THIS(iface); + + return IHTMLWindow2_Release(HTMLWINDOW2(This)); +} + +static HRESULT WINAPI WindowDispEx_GetTypeInfoCount(IDispatchEx *iface, UINT *pctinfo) +{ + HTMLWindow *This = DISPEX_THIS(iface); + + TRACE("(%p)->(%p)\n", This, pctinfo); + + return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->dispex), pctinfo); +} + +static HRESULT WINAPI WindowDispEx_GetTypeInfo(IDispatchEx *iface, UINT iTInfo, + LCID lcid, ITypeInfo **ppTInfo) +{ + HTMLWindow *This = DISPEX_THIS(iface); + + TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo); + + return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->dispex), iTInfo, lcid, ppTInfo); +} + +static HRESULT WINAPI WindowDispEx_GetIDsOfNames(IDispatchEx *iface, REFIID riid, + LPOLESTR *rgszNames, UINT cNames, + LCID lcid, DISPID *rgDispId) +{ + HTMLWindow *This = DISPEX_THIS(iface); + + TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames, + lcid, rgDispId); + + /* FIXME: Use script dispatch */ + + return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->dispex), riid, rgszNames, cNames, lcid, rgDispId); +} + +static HRESULT WINAPI WindowDispEx_Invoke(IDispatchEx *iface, DISPID dispIdMember, + REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, + VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +{ + HTMLWindow *This = DISPEX_THIS(iface); + + TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), + lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); + + /* FIXME: Use script dispatch */ + + return IDispatchEx_Invoke(DISPATCHEX(&This->dispex), dispIdMember, riid, lcid, wFlags, pDispParams, + pVarResult, pExcepInfo, puArgErr); +} + +static HRESULT WINAPI WindowDispEx_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid) +{ + HTMLWindow *This = DISPEX_THIS(iface); + + TRACE("(%p)->(%s %x %p)\n", This, debugstr_w(bstrName), grfdex, pid); + + return IDispatchEx_GetDispID(DISPATCHEX(&This->dispex), bstrName, grfdex, pid); +} + +static HRESULT WINAPI WindowDispEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp, + VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller) +{ + HTMLWindow *This = DISPEX_THIS(iface); + + TRACE("(%p)->(%x %x %x %p %p %p %p)\n", This, id, lcid, wFlags, pdp, pvarRes, pei, pspCaller); + + return IDispatchEx_InvokeEx(DISPATCHEX(&This->dispex), id, lcid, wFlags, pdp, pvarRes, pei, pspCaller); +} + +static HRESULT WINAPI WindowDispEx_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex) +{ + HTMLWindow *This = DISPEX_THIS(iface); + + TRACE("(%p)->(%s %x)\n", This, debugstr_w(bstrName), grfdex); + + return IDispatchEx_DeleteMemberByName(DISPATCHEX(&This->dispex), bstrName, grfdex); +} + +static HRESULT WINAPI WindowDispEx_DeleteMemberByDispID(IDispatchEx *iface, DISPID id) +{ + HTMLWindow *This = DISPEX_THIS(iface); + + TRACE("(%p)->(%x)\n", This, id); + + return IDispatchEx_DeleteMemberByDispID(DISPATCHEX(&This->dispex), id); +} + +static HRESULT WINAPI WindowDispEx_GetMemberProperties(IDispatchEx *iface, DISPID id, DWORD grfdexFetch, DWORD *pgrfdex) +{ + HTMLWindow *This = DISPEX_THIS(iface); + + TRACE("(%p)->(%x %x %p)\n", This, id, grfdexFetch, pgrfdex); + + return IDispatchEx_GetMemberProperties(DISPATCHEX(&This->dispex), id, grfdexFetch, pgrfdex); +} + +static HRESULT WINAPI WindowDispEx_GetMemberName(IDispatchEx *iface, DISPID id, BSTR *pbstrName) +{ + HTMLWindow *This = DISPEX_THIS(iface); + + TRACE("(%p)->(%x %p)\n", This, id, pbstrName); + + return IDispatchEx_GetMemberName(DISPATCHEX(&This->dispex), id, pbstrName); +} + +static HRESULT WINAPI WindowDispEx_GetNextDispID(IDispatchEx *iface, DWORD grfdex, DISPID id, DISPID *pid) +{ + HTMLWindow *This = DISPEX_THIS(iface); + + TRACE("(%p)->(%x %x %p)\n", This, grfdex, id, pid); + + return IDispatchEx_GetNextDispID(DISPATCHEX(&This->dispex), grfdex, id, pid); +} + +static HRESULT WINAPI WindowDispEx_GetNameSpaceParent(IDispatchEx *iface, IUnknown **ppunk) +{ + HTMLWindow *This = DISPEX_THIS(iface); + + TRACE("(%p)->(%p)\n", This, ppunk); + + *ppunk = NULL; + return S_OK; +} + +#undef DISPEX_THIS + +static const IDispatchExVtbl WindowDispExVtbl = { + WindowDispEx_QueryInterface, + WindowDispEx_AddRef, + WindowDispEx_Release, + WindowDispEx_GetTypeInfoCount, + WindowDispEx_GetTypeInfo, + WindowDispEx_GetIDsOfNames, + WindowDispEx_Invoke, + WindowDispEx_GetDispID, + WindowDispEx_InvokeEx, + WindowDispEx_DeleteMemberByName, + WindowDispEx_DeleteMemberByDispID, + WindowDispEx_GetMemberProperties, + WindowDispEx_GetMemberName, + WindowDispEx_GetNextDispID, + WindowDispEx_GetNameSpaceParent +}; + +static const tid_t HTMLWindow_iface_tids[] = { + IHTMLWindow2_tid, + IHTMLWindow3_tid, + 0 +}; +static dispex_static_data_t HTMLWindow_dispex = { + NULL, + DispHTMLWindow2_tid, + NULL, + HTMLWindow_iface_tids +}; + static const char wineConfig_func[] = "window.__defineGetter__(\"external\",function() {\n" " return window.__wineWindow__.external;\n" @@ -869,10 +1284,13 @@ HTMLWindow *HTMLWindow_Create(HTMLDocument *doc) HTMLWindow *ret = heap_alloc(sizeof(HTMLWindow)); ret->lpHTMLWindow2Vtbl = &HTMLWindow2Vtbl; + ret->lpHTMLWindow3Vtbl = &HTMLWindow3Vtbl; + ret->lpIDispatchExVtbl = &WindowDispExVtbl; ret->ref = 1; - ret->nswindow = NULL; ret->doc = doc; + init_dispex(&ret->dispex, (IUnknown*)HTMLWINDOW2(ret), &HTMLWindow_dispex); + if(doc->nscontainer) { nsresult nsres; diff --git a/reactos/dll/win32/mshtml/install.c b/reactos/dll/win32/mshtml/install.c index b991c4958bb..605fa055cb1 100644 --- a/reactos/dll/win32/mshtml/install.c +++ b/reactos/dll/win32/mshtml/install.c @@ -93,7 +93,7 @@ static void set_registry(LPCSTR install_dir) WCHAR mshtml_key[100]; LPWSTR gecko_path; HKEY hkey; - DWORD res, len, size; + DWORD res, len; static const WCHAR wszGeckoPath[] = {'G','e','c','k','o','P','a','t','h',0}; static const WCHAR wszWineGecko[] = {'w','i','n','e','_','g','e','c','k','o',0}; @@ -120,7 +120,6 @@ static void set_registry(LPCSTR install_dir) memcpy(gecko_path+len, wszWineGecko, sizeof(wszWineGecko)); - size = len*sizeof(WCHAR)+sizeof(wszWineGecko); res = RegSetValueExW(hkey, wszGeckoPath, 0, REG_SZ, (LPVOID)gecko_path, len*sizeof(WCHAR)+sizeof(wszWineGecko)); heap_free(gecko_path); @@ -203,7 +202,7 @@ static BOOL install_from_unix_file(const char *file_name) } dos_file_name = wine_get_dos_file_name(file_name); - if(!file_name) { + if(!dos_file_name) { ERR("Could not get dos file name of %s\n", debugstr_a(file_name)); return FALSE; } diff --git a/reactos/dll/win32/mshtml/main.c b/reactos/dll/win32/mshtml/main.c index 0389833d0d7..1c52c5a07be 100644 --- a/reactos/dll/win32/mshtml/main.c +++ b/reactos/dll/win32/mshtml/main.c @@ -49,47 +49,6 @@ DWORD mshtml_tls = 0; static HINSTANCE shdoclc = NULL; -static ITypeLib *typelib; -static ITypeInfo *typeinfos[LAST_tid]; - -static REFIID tid_ids[] = { - &IID_IHTMLWindow2 -}; - -HRESULT get_typeinfo(enum tid_t tid, ITypeInfo **typeinfo) -{ - HRESULT hres; - - if(!typelib) { - ITypeLib *tl; - - hres = LoadRegTypeLib(&LIBID_MSHTML, 4, 0, LOCALE_SYSTEM_DEFAULT, &tl); - if(FAILED(hres)) { - ERR("LoadRegTypeLib failed: %08x\n", hres); - return hres; - } - - if(InterlockedCompareExchangePointer((void**)&typelib, tl, NULL)) - ITypeLib_Release(tl); - } - - if(!typeinfos[tid]) { - ITypeInfo *typeinfo; - - hres = ITypeLib_GetTypeInfoOfGuid(typelib, tid_ids[tid], &typeinfo); - if(FAILED(hres)) { - ERR("GetTypeInfoOfGuid failed: %08x\n", hres); - return hres; - } - - if(InterlockedCompareExchangePointer((void**)(typeinfos+tid), typeinfo, NULL)) - ITypeInfo_Release(typeinfo); - } - - *typeinfo = typeinfos[tid]; - return S_OK; -} - static void thread_detach(void) { thread_data_t *thread_data; @@ -107,16 +66,7 @@ static void thread_detach(void) static void process_detach(void) { close_gecko(); - - if(typelib) { - unsigned i; - - for(i=0; i < sizeof(typeinfos)/sizeof(*typeinfos); i++) - if(typeinfos[i]) - ITypeInfo_Release(typeinfos[i]); - - ITypeLib_Release(typelib); - } + release_typelib(); if(shdoclc) FreeLibrary(shdoclc); diff --git a/reactos/dll/win32/mshtml/mshtml.inf b/reactos/dll/win32/mshtml/mshtml.inf index e0098ce4652..f2882362054 100644 --- a/reactos/dll/win32/mshtml/mshtml.inf +++ b/reactos/dll/win32/mshtml/mshtml.inf @@ -290,7 +290,7 @@ HKCR,"MIME\Database\Content Type\image/gif","CLSID",,"%CLSID_HTMLDocument%" HKCR,"MIME\Database\Content Type\image/gif","Extension",,".gif" HKCR,"MIME\Database\Content Type\image/gif","Image Filter CLSID",,"%CLSID_IImageDecodeFilter%" HKCR,"MIME\Database\Content Type\image/gif\Bits","0",1,04,00,00,00,FF,FF,FF,FF,47,49,46,38 -HKCR,".gif",,,"giffile" +HKCR,".gif",,2,"giffile" HKCR,".gif","Content Type",,"image/gif" HKCR,"giffile",,,"GIF Image" HKCR,"giffile\CLSID",,,"%CLSID_HTMLDocument%" @@ -329,7 +329,7 @@ HKCR,"MIME\Database\Content Type\image/x-icon","Image Filter CLSID",,"%CLSID_IIm HKCR,".ico","Content Type",,"image/x-icon" ;; JPE -HKCR,".jpe",,,"jpegfile" +HKCR,".jpe",,2,"jpegfile" HKCR,".jpe","Content Type",,"image/jpeg" HKCR,"jpegfile",,,"JPEG Image" HKCR,"jpegfile\CLSID",,,"%CLSID_HTMLDocument%" @@ -344,7 +344,7 @@ HKCR,"MIME\Database\Content Type\image/jpeg","CLSID",,"%CLSID_HTMLDocument%" HKCR,"MIME\Database\Content Type\image/jpeg","Extension",,".jpg" HKCR,"MIME\Database\Content Type\image/jpeg\Bits","0",1,02,00,00,00,FF,FF,FF,D8 HKCR,"MIME\Database\Content Type\image/jpeg","Image Filter CLSID",,"%CLSID_IImageDecodeFilter%" -HKCR,".jpeg",,,"jpegfile" +HKCR,".jpeg",,2,"jpegfile" HKCR,".jpeg","Content Type",,"image/jpeg" HKCR,"jpegfile",,,"JPEG Image" HKCR,"jpegfile\CLSID",,,"%CLSID_HTMLDocument%" @@ -355,7 +355,7 @@ HKCR,"jpegfile\shell\open\ddeexec\Topic",,,"WWW_OpenURL" ;; HKCR,"jpegfile\DefaultIcon",,,"%IEXPLORE%,8" ;; JPG -HKCR,".jpg",,,"jpegfile" +HKCR,".jpg",,2,"jpegfile" HKCR,".jpg","Content Type",,"image/jpeg" HKCR,"jpegfile",,,"JPEG Image" HKCR,"jpegfile\CLSID",,,"%CLSID_HTMLDocument%" @@ -367,9 +367,9 @@ HKCR,"jpegfile\shell\open\ddeexec\Topic",,,"WWW_OpenURL" ;; MHTML HKCR,"MIME\Database\Content Type\message/rfc822","CLSID",,"%CLSID_MHTMLDocument%" -HKCR,".mhtml",,,"mhtmlfile" +HKCR,".mhtml",,2,"mhtmlfile" HKCR,".mhtml","Content Type",,"message/rfc822" -HKCR,".mht",,,"mhtmlfile" +HKCR,".mht",,2,"mhtmlfile" HKCR,".mht","Content Type",,"message/rfc822" HKCR,"mhtmlfile",,,"MHTML Document" HKCR,"mhtmlfile\BrowseInPlace",,,"" @@ -380,7 +380,7 @@ HKCR,"MIME\Database\Content Type\image/pjpeg","CLSID",,"%CLSID_HTMLDocument%" HKCR,"MIME\Database\Content Type\image/pjpeg","Extension",,".jpg" HKCR,"MIME\Database\Content Type\image/pjpeg\Bits","0",1,02,00,00,00,FF,FF,FF,D8 HKCR,"MIME\Database\Content Type\image/pjpeg","Image Filter CLSID",,"%CLSID_IImageDecodeFilter%" -HKCR,".jfif",,,"pjpegfile" +HKCR,".jfif",,2,"pjpegfile" HKCR,".jfif","Content Type",,"image/jpeg" HKCR,"pjpegfile",,,"JPEG Image" HKCR,"pjpegfile\CLSID",,,"%CLSID_HTMLDocument%" @@ -393,7 +393,7 @@ HKCR,"pjpegfile\shell\open\ddeexec\Topic",,,"WWW_OpenURL" ;; PNG HKCR,"MIME\Database\Content Type\image/png","Extension",,".png" HKCR,"MIME\Database\Content Type\image/x-png","Extension",,".png" -HKCR,".png",,,"pngfile" +HKCR,".png",,2,"pngfile" HKCR,".png","Content Type",,"image/png" HKCR,"pngfile",,,"PNG Image" HKCR,"pngfile\CLSID",,,"%CLSID_HTMLDocument%" diff --git a/reactos/dll/win32/mshtml/mshtml.rbuild b/reactos/dll/win32/mshtml/mshtml.rbuild index 04e148df242..5db3ddd01a1 100644 --- a/reactos/dll/win32/mshtml/mshtml.rbuild +++ b/reactos/dll/win32/mshtml/mshtml.rbuild @@ -2,7 +2,7 @@ - + . include/reactos/wine @@ -10,15 +10,20 @@ 0x600 0x600 conpoint.c + dispex.c editor.c hlink.c htmlanchor.c htmlbody.c + htmlcomment.c htmldoc.c htmldoc3.c htmldoc5.c htmlelem.c htmlelem2.c + htmlevent.c + htmlgeneric.c + htmlimg.c htmlinput.c htmllocation.c htmlnode.c @@ -28,8 +33,9 @@ htmlstyle.c htmlstylesheet.c htmltable.c - htmltextcont.c htmltextarea.c + htmltextcont.c + htmltextnode.c htmlwindow.c install.c loadopts.c @@ -52,10 +58,11 @@ txtrange.c view.c rsrc.rc - nsiface.idl . mshtml.spec wine + strmiids + uuid urlmon shlwapi ole32 @@ -64,7 +71,10 @@ gdi32 advapi32 kernel32 - uuid ntdll + mshtml_nsiface_header + + + nsiface.idl diff --git a/reactos/dll/win32/mshtml/mshtml_private.h b/reactos/dll/win32/mshtml/mshtml_private.h index 2976fa84b2c..ef7868df0bc 100644 --- a/reactos/dll/win32/mshtml/mshtml_private.h +++ b/reactos/dll/win32/mshtml/mshtml_private.h @@ -1,5 +1,5 @@ /* - * Copyright 2005-2006 Jacek Caban for CodeWeavers + * Copyright 2005-2008 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -21,6 +21,7 @@ #include "mshtml.h" #include "mshtmhst.h" #include "hlink.h" +#include "dispex.h" #include "wine/list.h" #include "wine/unicode.h" @@ -55,15 +56,99 @@ typedef struct HTMLDOMNode HTMLDOMNode; typedef struct ConnectionPoint ConnectionPoint; typedef struct BSCallback BSCallback; typedef struct nsChannelBSC nsChannelBSC; +typedef struct event_target_t event_target_t; + +/* NOTE: make sure to keep in sync with dispex.c */ +typedef enum { + NULL_tid, + DispDOMChildrenCollection_tid, + DispHTMLCommentElement_tid, + DispHTMLDocument_tid, + DispHTMLDOMTextNode_tid, + DispHTMLElementCollection_tid, + DispHTMLGenericElement_tid, + DispHTMLImg_tid, + DispHTMLInputElement_tid, + DispHTMLOptionElement_tid, + DispHTMLSelectElement_tid, + DispHTMLStyle_tid, + DispHTMLUnknownElement_tid, + DispHTMLWindow2_tid, + IHTMLCommentElement_tid, + IHTMLDocument2_tid, + IHTMLDocument3_tid, + IHTMLDocument4_tid, + IHTMLDocument5_tid, + IHTMLDOMChildrenCollection_tid, + IHTMLDOMNode_tid, + IHTMLDOMNode2_tid, + IHTMLDOMTextNode_tid, + IHTMLElement_tid, + IHTMLElement2_tid, + IHTMLElementCollection_tid, + IHTMLGenericElement_tid, + IHTMLImgElement_tid, + IHTMLInputElement_tid, + IHTMLOptionElement_tid, + IHTMLSelectElement_tid, + IHTMLStyle_tid, + IHTMLWindow2_tid, + IHTMLWindow3_tid, + IOmNavigator_tid, + LAST_tid +} tid_t; + +typedef enum { + EVENTID_CHANGE, + EVENTID_CLICK, + EVENTID_KEYUP, + EVENTID_LOAD, + EVENTID_LAST +} eventid_t; + +typedef struct dispex_data_t dispex_data_t; +typedef struct dispex_dynamic_data_t dispex_dynamic_data_t; + +#define MSHTML_DISPID_CUSTOM_MIN 0x60000000 +#define MSHTML_DISPID_CUSTOM_MAX 0x6fffffff typedef struct { + HRESULT (*get_dispid)(IUnknown*,BSTR,DWORD,DISPID*); + HRESULT (*invoke)(IUnknown*,DISPID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,IServiceProvider*); +} dispex_static_data_vtbl_t; + +typedef struct { + const dispex_static_data_vtbl_t *vtbl; + const tid_t disp_tid; + dispex_data_t *data; + const tid_t* const iface_tids; +} dispex_static_data_t; + +typedef struct { + const IDispatchExVtbl *lpIDispatchExVtbl; + + IUnknown *outer; + + dispex_static_data_t *data; + dispex_dynamic_data_t *dynamic_data; +} DispatchEx; + +void init_dispex(DispatchEx*,IUnknown*,dispex_static_data_t*); +BOOL dispex_query_interface(DispatchEx*,REFIID,void**); + +typedef struct { + DispatchEx dispex; const IHTMLWindow2Vtbl *lpHTMLWindow2Vtbl; + const IHTMLWindow3Vtbl *lpHTMLWindow3Vtbl; + const IDispatchExVtbl *lpIDispatchExVtbl; LONG ref; HTMLDocument *doc; nsIDOMWindow *nswindow; + IHTMLEventObj *event; + struct list entry; } HTMLWindow; @@ -114,6 +199,7 @@ typedef struct { } HTMLOptionElementFactory; struct HTMLDocument { + DispatchEx dispex; const IHTMLDocument2Vtbl *lpHTMLDocument2Vtbl; const IHTMLDocument3Vtbl *lpHTMLDocument3Vtbl; const IHTMLDocument4Vtbl *lpHTMLDocument4Vtbl; @@ -133,6 +219,7 @@ struct HTMLDocument { const IHlinkTargetVtbl *lpHlinkTargetVtbl; const IPersistStreamInitVtbl *lpPersistStreamInitVtbl; const ICustomDocVtbl *lpCustomDocVtbl; + const IDispatchExVtbl *lpIDispatchExVtbl; LONG ref; @@ -205,6 +292,7 @@ struct NSContainer { nsEventListener keypress_listener; nsEventListener load_listener; nsEventListener node_insert_listener; + nsEventListener htmlevent_listener; nsIWebBrowser *webbrowser; nsIWebNavigation *navigation; @@ -225,6 +313,8 @@ struct NSContainer { nsChannelBSC *bscallback; /* hack */ HWND reset_focus; /* hack */ + + BOOL event_vector[EVENTID_LAST]; }; typedef struct { @@ -251,13 +341,16 @@ typedef struct { } NodeImplVtbl; struct HTMLDOMNode { - const IHTMLDOMNodeVtbl *lpHTMLDOMNodeVtbl; + DispatchEx dispex; + const IHTMLDOMNodeVtbl *lpHTMLDOMNodeVtbl; + const IHTMLDOMNode2Vtbl *lpHTMLDOMNode2Vtbl; const NodeImplVtbl *vtbl; LONG ref; nsIDOMNode *nsnode; HTMLDocument *doc; + event_target_t *event_target; HTMLDOMNode *next; }; @@ -281,6 +374,7 @@ typedef struct { } HTMLTextContainer; #define HTMLWINDOW2(x) ((IHTMLWindow2*) &(x)->lpHTMLWindow2Vtbl) +#define HTMLWINDOW3(x) ((IHTMLWindow3*) &(x)->lpHTMLWindow3Vtbl) #define HTMLDOC(x) ((IHTMLDocument2*) &(x)->lpHTMLDocument2Vtbl) #define HTMLDOC3(x) ((IHTMLDocument3*) &(x)->lpHTMLDocument3Vtbl) @@ -328,12 +422,15 @@ typedef struct { #define HTMLELEM(x) ((IHTMLElement*) &(x)->lpHTMLElementVtbl) #define HTMLELEM2(x) ((IHTMLElement2*) &(x)->lpHTMLElement2Vtbl) #define HTMLDOMNODE(x) ((IHTMLDOMNode*) &(x)->lpHTMLDOMNodeVtbl) +#define HTMLDOMNODE2(x) ((IHTMLDOMNode2*) &(x)->lpHTMLDOMNode2Vtbl) #define HTMLTEXTCONT(x) ((IHTMLTextContainer*) &(x)->lpHTMLTextContainerVtbl) #define HTMLOPTFACTORY(x) ((IHTMLOptionElementFactory*) &(x)->lpHTMLOptionElementFactoryVtbl) #define HTMLLOCATION(x) ((IHTMLLocation*) &(x)->lpHTMLLocationVtbl) +#define DISPATCHEX(x) ((IDispatchEx*) &(x)->lpIDispatchExVtbl) + #define DEFINE_THIS2(cls,ifc,iface) ((cls*)((BYTE*)(iface)-offsetof(cls,ifc))) #define DEFINE_THIS(cls,ifc,iface) DEFINE_THIS2(cls,lp ## ifc ## Vtbl,iface) @@ -405,13 +502,20 @@ nsIWritableVariant *create_nsvariant(void); void nsnode_to_nsstring(nsIDOMNode*,nsAString*); void get_editor_controller(NSContainer*); void init_nsevents(NSContainer*); +void add_nsevent_listener(NSContainer*,LPCWSTR); nsresult get_nsinterface(nsISupports*,REFIID,void**); +void check_event_attr(HTMLDocument*,nsIDOMElement*); +void release_event_target(event_target_t*); +void fire_event(HTMLDocument*,eventid_t,nsIDOMNode*); +HRESULT set_node_event(HTMLDOMNode*,eventid_t,VARIANT*); +eventid_t str_to_eid(LPCWSTR); + void set_document_bscallback(HTMLDocument*,nsChannelBSC*); void set_current_mon(HTMLDocument*,IMoniker*); HRESULT start_binding(HTMLDocument*,BSCallback*,IBindCtx*); -HRESULT bind_mon_to_buffer(HTMLDocument*,IMoniker*,void**); +HRESULT bind_mon_to_buffer(HTMLDocument*,IMoniker*,void**,DWORD*); nsChannelBSC *create_channelbsc(IMoniker*); HRESULT channelbsc_load_stream(nsChannelBSC*,IStream*); @@ -427,16 +531,22 @@ IHTMLStyleSheetsCollection *HTMLStyleSheetsCollection_Create(nsIDOMStyleSheetLis void detach_selection(HTMLDocument*); void detach_ranges(HTMLDocument*); -HTMLElement *HTMLElement_Create(nsIDOMNode*); +HTMLDOMNode *HTMLDOMTextNode_Create(HTMLDocument*,nsIDOMNode*); + +HTMLElement *HTMLElement_Create(HTMLDocument*,nsIDOMNode*,BOOL); +HTMLElement *HTMLCommentElement_Create(HTMLDocument*,nsIDOMNode*); HTMLElement *HTMLAnchorElement_Create(nsIDOMHTMLElement*); HTMLElement *HTMLBodyElement_Create(nsIDOMHTMLElement*); +HTMLElement *HTMLImgElement_Create(nsIDOMHTMLElement*); HTMLElement *HTMLInputElement_Create(nsIDOMHTMLElement*); HTMLElement *HTMLOptionElement_Create(nsIDOMHTMLElement*); HTMLElement *HTMLScriptElement_Create(nsIDOMHTMLElement*); HTMLElement *HTMLSelectElement_Create(nsIDOMHTMLElement*); HTMLElement *HTMLTable_Create(nsIDOMHTMLElement*); HTMLElement *HTMLTextAreaElement_Create(nsIDOMHTMLElement*); +HTMLElement *HTMLGenericElement_Create(nsIDOMHTMLElement*); +void HTMLDOMNode_Init(HTMLDocument*,HTMLDOMNode*,nsIDOMNode*); void HTMLElement_Init(HTMLElement*); void HTMLElement2_Init(HTMLElement*); void HTMLTextContainer_Init(HTMLTextContainer*); @@ -447,12 +557,13 @@ void HTMLDOMNode_destructor(HTMLDOMNode*); HRESULT HTMLElement_QI(HTMLDOMNode*,REFIID,void**); void HTMLElement_destructor(HTMLDOMNode*); -HTMLDOMNode *get_node(HTMLDocument*,nsIDOMNode*); +HTMLDOMNode *get_node(HTMLDocument*,nsIDOMNode*,BOOL); void release_nodes(HTMLDocument*); void release_script_hosts(HTMLDocument*); void connect_scripts(HTMLDocument*); void doc_insert_script(HTMLDocument*,nsIDOMHTMLScriptElement*); +IDispatch *script_parse_event(HTMLDocument*,LPCWSTR); IHTMLElementCollection *create_all_collection(HTMLDOMNode*); @@ -506,20 +617,19 @@ typedef struct { HWND thread_hwnd; task_t *task_queue_head; task_t *task_queue_tail; + struct list timer_list; } thread_data_t; thread_data_t *get_thread_data(BOOL); HWND get_thread_hwnd(void); void push_task(task_t*); void remove_doc_tasks(const HTMLDocument*); +DWORD set_task_timer(HTMLDocument*,DWORD,BOOL,IDispatch*); +HRESULT clear_task_timer(HTMLDocument*,BOOL,DWORD); -/* typelibs */ -enum tid_t { - IHTMLWindow2_tid, - LAST_tid -}; - -HRESULT get_typeinfo(enum tid_t, ITypeInfo**); +HRESULT get_typeinfo(tid_t,ITypeInfo**); +void release_typelib(void); +void call_disp_func(HTMLDocument*,IDispatch*); DEFINE_GUID(CLSID_AboutProtocol, 0x3050F406, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B); DEFINE_GUID(CLSID_JSProtocol, 0x3050F3B2, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B); diff --git a/reactos/dll/win32/mshtml/navigate.c b/reactos/dll/win32/mshtml/navigate.c index 9ed1dea3a28..78ae19d88ab 100644 --- a/reactos/dll/win32/mshtml/navigate.c +++ b/reactos/dll/win32/mshtml/navigate.c @@ -807,7 +807,7 @@ static BufferBSC *create_bufferbsc(IMoniker *mon) return ret; } -HRESULT bind_mon_to_buffer(HTMLDocument *doc, IMoniker *mon, void **buf) +HRESULT bind_mon_to_buffer(HTMLDocument *doc, IMoniker *mon, void **buf, DWORD *size) { BufferBSC *bsc = create_bufferbsc(mon); HRESULT hres; @@ -820,6 +820,7 @@ HRESULT bind_mon_to_buffer(HTMLDocument *doc, IMoniker *mon, void **buf) if(SUCCEEDED(hres)) { *buf = bsc->buf; bsc->buf = NULL; + *size = bsc->bsc.readed; bsc->size = 0; } } diff --git a/reactos/dll/win32/mshtml/nsembed.c b/reactos/dll/win32/mshtml/nsembed.c index e46b8fa05ec..78563d3994d 100644 --- a/reactos/dll/win32/mshtml/nsembed.c +++ b/reactos/dll/win32/mshtml/nsembed.c @@ -301,6 +301,65 @@ static void set_lang(nsIPrefBranch *pref) ERR("SetCharPref failed: %08x\n", nsres); } +static void set_proxy(nsIPrefBranch *pref) +{ + char proxy[512]; + char * proxy_port; + int proxy_port_num; + DWORD enabled = 0, res, size, type; + HKEY hkey; + nsresult nsres; + + static const WCHAR proxy_keyW[] = + {'S','o','f','t','w','a','r','e', + '\\','M','i','c','r','o','s','o','f','t', + '\\','W','i','n','d','o','w','s', + '\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n', + '\\','I','n','t','e','r','n','e','t',' ','S','e','t','t','i','n','g','s',0}; + + res = RegOpenKeyW(HKEY_CURRENT_USER, proxy_keyW, &hkey); + if(res != ERROR_SUCCESS) + return; + + size = sizeof(enabled); + res = RegQueryValueExA(hkey, "ProxyEnable", 0, &type, (LPBYTE)&enabled, &size); + if(res != ERROR_SUCCESS || type != REG_DWORD || enabled == 0) + { + RegCloseKey(hkey); + return; + } + + size = sizeof(proxy); + res = RegQueryValueExA(hkey, "ProxyServer", 0, &type, (LPBYTE)proxy, &size); + RegCloseKey(hkey); + if(res != ERROR_SUCCESS || type != REG_SZ) + return; + + proxy_port = strchr(proxy, ':'); + if (!proxy_port) + return; + + *proxy_port = 0; + proxy_port_num = atoi(proxy_port + 1); + TRACE("Setting proxy to %s, port %d\n", debugstr_a(proxy), proxy_port_num); + + nsres = nsIPrefBranch_SetIntPref(pref, "network.proxy.type", 1); + if(NS_FAILED(nsres)) + ERR("SetIntPref network.proxy.type failed: %08x\n", nsres); + nsres = nsIPrefBranch_SetCharPref(pref, "network.proxy.http", proxy); + if(NS_FAILED(nsres)) + ERR("SetCharPref network.proxy.http failed: %08x\n", nsres); + nsres = nsIPrefBranch_SetIntPref(pref, "network.proxy.http_port", proxy_port_num); + if(NS_FAILED(nsres)) + ERR("SetIntPref network.proxy.http_port failed: %08x\n", nsres); + nsres = nsIPrefBranch_SetCharPref(pref, "network.proxy.ssl", proxy); + if(NS_FAILED(nsres)) + ERR("SetCharPref network.proxy.ssl failed: %08x\n", nsres); + nsres = nsIPrefBranch_SetIntPref(pref, "network.proxy.ssl_port", proxy_port_num); + if(NS_FAILED(nsres)) + ERR("SetIntPref network.proxy.ssl_port failed: %08x\n", nsres); +} + static void set_bool_pref(nsIPrefBranch *pref, const char *pref_name, BOOL val) { nsresult nsres; @@ -347,6 +406,7 @@ static void set_profile(void) } set_lang(pref); + set_proxy(pref); set_bool_pref(pref, "security.warn_entering_secure", FALSE); set_bool_pref(pref, "security.warn_submit_insecure", FALSE); @@ -1073,7 +1133,7 @@ static nsresult NSAPI nsContextMenuListener_OnShowContextMenu(nsIContextMenuList FIXME("aContextFlags=%08x\n", aContextFlags); }; - show_context_menu(This->doc, dwID, &pt, (IDispatch*)HTMLDOMNODE(get_node(This->doc, aNode))); + show_context_menu(This->doc, dwID, &pt, (IDispatch*)HTMLDOMNODE(get_node(This->doc, aNode, TRUE))); return NS_OK; } @@ -1418,7 +1478,7 @@ static nsrefcnt NSAPI nsTooltipListener_AddRef(nsITooltipListener *iface) static nsrefcnt NSAPI nsTooltipListener_Release(nsITooltipListener *iface) { NSContainer *This = NSTOOLTIP_THIS(iface); - return nsIWebBrowserChrome_AddRef(NSWBCHROME(This)); + return nsIWebBrowserChrome_Release(NSWBCHROME(This)); } static nsresult NSAPI nsTooltipListener_OnShowTooltip(nsITooltipListener *iface, @@ -1583,7 +1643,7 @@ NSContainer *NSContainer_Create(HTMLDocument *doc, NSContainer *parent) if(!load_gecko(FALSE)) return NULL; - ret = heap_alloc(sizeof(NSContainer)); + ret = heap_alloc_zero(sizeof(NSContainer)); ret->lpWebBrowserChromeVtbl = &nsWebBrowserChromeVtbl; ret->lpContextMenuListenerVtbl = &nsContextMenuListenerVtbl; @@ -1596,11 +1656,6 @@ NSContainer *NSContainer_Create(HTMLDocument *doc, NSContainer *parent) ret->doc = doc; ret->ref = 1; - ret->bscallback = NULL; - ret->content_listener = NULL; - ret->editor_controller = NULL; - ret->editor = NULL; - ret->reset_focus = NULL; nsres = nsIComponentManager_CreateInstanceByContractID(pCompMgr, NS_WEBBROWSER_CONTRACTID, NULL, &IID_nsIWebBrowser, (void**)&ret->webbrowser); @@ -1693,6 +1748,8 @@ void NSContainer_Release(NSContainer *This) { TRACE("(%p)\n", This); + This->doc = NULL; + ShowWindow(This->hwnd, SW_HIDE); SetParent(This->hwnd, NULL); diff --git a/reactos/dll/win32/mshtml/nsevents.c b/reactos/dll/win32/mshtml/nsevents.c index 7e428ce52fe..d0f5079a666 100644 --- a/reactos/dll/win32/mshtml/nsevents.c +++ b/reactos/dll/win32/mshtml/nsevents.c @@ -129,6 +129,9 @@ static nsresult NSAPI handle_keypress(nsIDOMEventListener *iface, static nsresult NSAPI handle_load(nsIDOMEventListener *iface, nsIDOMEvent *event) { NSContainer *This = NSEVENTLIST_THIS(iface)->This; + nsIDOMHTMLDocument *nshtmldoc; + nsIDOMHTMLElement *nsbody = NULL; + nsIDOMDocument *nsdoc; task_t *task; TRACE("(%p)\n", This); @@ -159,6 +162,19 @@ static nsresult NSAPI handle_load(nsIDOMEventListener *iface, nsIDOMEvent *event */ push_task(task); + + nsIWebNavigation_GetDocument(This->navigation, &nsdoc); + nsIDOMDocument_QueryInterface(nsdoc, &IID_nsIDOMHTMLDocument, (void**)&nshtmldoc); + nsIDOMDocument_Release(nsdoc); + + nsIDOMHTMLDocument_GetBody(nshtmldoc, &nsbody); + nsIDOMHTMLDocument_Release(nshtmldoc); + + if(nsbody) { + fire_event(This->doc, EVENTID_LOAD, (nsIDOMNode*)nsbody); + nsIDOMHTMLElement_Release(nsbody); + } + return NS_OK; } @@ -167,6 +183,7 @@ static nsresult NSAPI handle_node_insert(nsIDOMEventListener *iface, nsIDOMEvent NSContainer *This = NSEVENTLIST_THIS(iface)->This; nsIDOMHTMLScriptElement *script; nsIDOMEventTarget *target; + nsIDOMElement *elem; nsresult nsres; TRACE("(%p %p)\n", This, event); @@ -174,16 +191,59 @@ static nsresult NSAPI handle_node_insert(nsIDOMEventListener *iface, nsIDOMEvent nsres = nsIDOMEvent_GetTarget(event, &target); if(NS_FAILED(nsres)) { ERR("GetTarget failed: %08x\n", nsres); - return nsres; + return NS_OK; } - nsres = nsISupports_QueryInterface(target, &IID_nsIDOMHTMLScriptElement, (void**)&script); + nsres = nsIDOMEventTarget_QueryInterface(target, &IID_nsIDOMElement, (void**)&elem); + nsIDOMEventTarget_Release(target); + if(NS_FAILED(nsres)) + return NS_OK; + + nsres = nsIDOMElement_QueryInterface(elem, &IID_nsIDOMHTMLScriptElement, (void**)&script); if(SUCCEEDED(nsres)) { doc_insert_script(This->doc, script); nsIDOMHTMLScriptElement_Release(script); } - nsIDOMEventTarget_Release(target); + check_event_attr(This->doc, elem); + + nsIDOMNode_Release(elem); + return NS_OK; +} + +static nsresult NSAPI handle_htmlevent(nsIDOMEventListener *iface, nsIDOMEvent *event) +{ + NSContainer *This = NSEVENTLIST_THIS(iface)->This; + const PRUnichar *type; + nsIDOMEventTarget *event_target; + nsIDOMNode *nsnode; + nsAString type_str; + eventid_t eid; + nsresult nsres; + + nsAString_Init(&type_str, NULL); + nsIDOMEvent_GetType(event, &type_str); + nsAString_GetData(&type_str, &type); + eid = str_to_eid(type); + nsAString_Finish(&type_str); + + nsres = nsIDOMEvent_GetTarget(event, &event_target); + if(NS_FAILED(nsres) || !event_target) { + ERR("GetEventTarget failed: %08x\n", nsres); + return NS_OK; + } + + nsres = nsIDOMEventTarget_QueryInterface(event_target, &IID_nsIDOMNode, (void**)&nsnode); + nsIDOMEventTarget_Release(event_target); + if(NS_FAILED(nsres)) { + ERR("Could not get nsIDOMNode: %08x\n", nsres); + return NS_OK; + } + + fire_event(This->doc, eid, nsnode); + + nsIDOMNode_Release(nsnode); + return NS_OK; } @@ -202,6 +262,7 @@ static const nsIDOMEventListenerVtbl focus_vtbl = EVENTLISTENER_VTBL(handle_ static const nsIDOMEventListenerVtbl keypress_vtbl = EVENTLISTENER_VTBL(handle_keypress); static const nsIDOMEventListenerVtbl load_vtbl = EVENTLISTENER_VTBL(handle_load); static const nsIDOMEventListenerVtbl node_insert_vtbl = EVENTLISTENER_VTBL(handle_node_insert); +static const nsIDOMEventListenerVtbl htmlevent_vtbl = EVENTLISTENER_VTBL(handle_htmlevent); static void init_event(nsIDOMEventTarget *target, const PRUnichar *type, nsIDOMEventListener *listener, BOOL capture) @@ -224,6 +285,29 @@ static void init_listener(nsEventListener *This, NSContainer *container, This->This = container; } +void add_nsevent_listener(NSContainer *container, LPCWSTR type) +{ + nsIDOMWindow *dom_window; + nsIDOMEventTarget *target; + nsresult nsres; + + nsres = nsIWebBrowser_GetContentDOMWindow(container->webbrowser, &dom_window); + if(NS_FAILED(nsres)) { + ERR("GetContentDOMWindow failed: %08x\n", nsres); + return; + } + + nsres = nsIDOMWindow_QueryInterface(dom_window, &IID_nsIDOMEventTarget, (void**)&target); + nsIDOMWindow_Release(dom_window); + if(NS_FAILED(nsres)) { + ERR("Could not get nsIDOMEventTarget interface: %08x\n", nsres); + return; + } + + init_event(target, type, NSEVENTLIST(&container->htmlevent_listener), TRUE); + nsIDOMEventTarget_Release(target); +} + void init_nsevents(NSContainer *This) { nsIDOMWindow *dom_window; @@ -242,6 +326,7 @@ void init_nsevents(NSContainer *This) init_listener(&This->keypress_listener, This, &keypress_vtbl); init_listener(&This->load_listener, This, &load_vtbl); init_listener(&This->node_insert_listener, This, &node_insert_vtbl); + init_listener(&This->htmlevent_listener, This, &htmlevent_vtbl); nsres = nsIWebBrowser_GetContentDOMWindow(This->webbrowser, &dom_window); if(NS_FAILED(nsres)) { diff --git a/reactos/dll/win32/mshtml/nsiface.idl b/reactos/dll/win32/mshtml/nsiface.idl index 03115d9a04e..42e6eb00632 100644 --- a/reactos/dll/win32/mshtml/nsiface.idl +++ b/reactos/dll/win32/mshtml/nsiface.idl @@ -18,9 +18,9 @@ /* * NOTE: - * This file is not an usual idl file. Interfaces in this file are XPCOM interfaces - * (NOT MSCOM!), but we generate the header file with WIDL compatibile with XPCOM, - * useable in C code. + * This file is not a typical idl file. Interfaces in this file are XPCOM + * interfaces (NOT MSCOM!), but we generate the header file with WIDL + * compatible with XPCOM, usable in C code. */ cpp_quote("#define GECKO_VERSION \"0.1.0\"") @@ -1295,6 +1295,39 @@ interface nsIDOMHTMLScriptElement : nsIDOMHTMLElement nsresult SetType(const nsAString *aType); } +[ + object, + uuid(a6cf90ab-15b3-11d2-932e-00805f8add32), + local +] +interface nsIDOMHTMLImageElement : nsIDOMHTMLElement +{ + nsresult GetName(nsAString *aName); + nsresult SetName(const nsAString *aName); + nsresult GetAlign(nsAString *aAlign); + nsresult SetAlign(const nsAString *aAlign); + nsresult GetAlt(nsAString *aAlt); + nsresult SetAlt(const nsAString *aAlt); + nsresult GetBorder(nsAString *aBorder); + nsresult SetBorder(const nsAString *aBorder); + nsresult GetHeight(PRInt32 *aHeight); + nsresult SetHeight(PRInt32 aHeight); + nsresult GetHspace(PRInt32 *aHspace); + nsresult SetHspace(PRInt32 aHspace); + nsresult GetIsMap(PRBool *aIsMap); + nsresult SetIsMap(PRBool aIsMap); + nsresult GetLongDesc(nsAString *aLongDesc); + nsresult SetLongDesc(const nsAString *aLongDesc); + nsresult GetSrc(nsAString *aSrc); + nsresult SetSrc(const nsAString *aSrc); + nsresult GetUseMap(nsAString *aUseMap); + nsresult SetUseMap(const nsAString *aUseMap); + nsresult GetVspace(PRInt32 *aVspace); + nsresult SetVspace(PRInt32 aVspace); + nsresult GetWidth(PRInt32 *aWidth); + nsresult SetWidth(PRInt32 aWidth); +} + [ object, uuid(94928ab3-8b63-11d3-989d-001083010e9b), diff --git a/reactos/dll/win32/mshtml/nsio.c b/reactos/dll/win32/mshtml/nsio.c index 53ad33e334e..f23254ab195 100644 --- a/reactos/dll/win32/mshtml/nsio.c +++ b/reactos/dll/win32/mshtml/nsio.c @@ -2040,7 +2040,6 @@ static nsresult NSAPI nsIOService_NewURI(nsIIOService *iface, const nsACString * const char *aOriginCharset, nsIURI *aBaseURI, nsIURI **_retval) { const char *spec = NULL; - nsACString spec_str; NSContainer *nscontainer = NULL; nsIURI *uri = NULL; LPCWSTR base_wine_url = NULL; @@ -2078,9 +2077,7 @@ static nsresult NSAPI nsIOService_NewURI(nsIIOService *iface, const nsACString * nsACString_Finish(&base_uri_str); } - nsACString_Init(&spec_str, spec); - nsres = nsIIOService_NewURI(nsio, &spec_str, aOriginCharset, aBaseURI, &uri); - nsACString_Finish(&spec_str); + nsres = nsIIOService_NewURI(nsio, aSpec, aOriginCharset, aBaseURI, &uri); if(NS_FAILED(nsres)) TRACE("NewURI failed: %08x\n", nsres); diff --git a/reactos/dll/win32/mshtml/oleobj.c b/reactos/dll/win32/mshtml/oleobj.c index 5e7181c28d6..0b1dd6bd31c 100644 --- a/reactos/dll/win32/mshtml/oleobj.c +++ b/reactos/dll/win32/mshtml/oleobj.c @@ -61,6 +61,32 @@ static ULONG WINAPI OleObject_Release(IOleObject *iface) return IHTMLDocument2_Release(HTMLDOC(This)); } +static void update_hostinfo(HTMLDocument *This, DOCHOSTUIINFO *hostinfo) +{ + nsIScrollable *scrollable; + nsresult nsres; + + if(!This->nscontainer) + return; + + nsres = nsIWebBrowser_QueryInterface(This->nscontainer->webbrowser, &IID_nsIScrollable, (void**)&scrollable); + if(NS_SUCCEEDED(nsres)) { + nsres = nsIScrollable_SetDefaultScrollbarPreferences(scrollable, ScrollOrientation_Y, + (hostinfo->dwFlags & DOCHOSTUIFLAG_SCROLL_NO) ? Scrollbar_Never : Scrollbar_Always); + if(NS_FAILED(nsres)) + ERR("Could not set default Y scrollbar prefs: %08x\n", nsres); + + nsres = nsIScrollable_SetDefaultScrollbarPreferences(scrollable, ScrollOrientation_X, + hostinfo->dwFlags & DOCHOSTUIFLAG_SCROLL_NO ? Scrollbar_Never : Scrollbar_Auto); + if(NS_FAILED(nsres)) + ERR("Could not set default X scrollbar prefs: %08x\n", nsres); + + nsIScrollable_Release(scrollable); + }else { + ERR("Could not get nsIScrollable: %08x\n", nsres); + } +} + static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite *pClientSite) { HTMLDocument *This = OLEOBJ_THIS(iface); @@ -103,6 +129,7 @@ static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite TRACE("hostinfo = {%u %08x %08x %s %s}\n", hostinfo.cbSize, hostinfo.dwFlags, hostinfo.dwDoubleClick, debugstr_w(hostinfo.pchHostCss), debugstr_w(hostinfo.pchHostNS)); + update_hostinfo(This, &hostinfo); This->hostinfo = hostinfo; } diff --git a/reactos/dll/win32/mshtml/omnavigator.c b/reactos/dll/win32/mshtml/omnavigator.c index d1bcdca7310..a579333e82e 100644 --- a/reactos/dll/win32/mshtml/omnavigator.c +++ b/reactos/dll/win32/mshtml/omnavigator.c @@ -32,6 +32,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml); typedef struct { + DispatchEx dispex; const IOmNavigatorVtbl *lpIOmNavigatorVtbl; LONG ref; @@ -50,12 +51,11 @@ static HRESULT WINAPI OmNavigator_QueryInterface(IOmNavigator *iface, REFIID rii if(IsEqualGUID(&IID_IUnknown, riid)) { TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); *ppv = OMNAVIGATOR(This); - }else if(IsEqualGUID(&IID_IDispatch, riid)) { - TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv); - *ppv = OMNAVIGATOR(This); }else if(IsEqualGUID(&IID_IOmNavigator, riid)) { TRACE("(%p)->(IID_IOmNavigator %p)\n", This, ppv); *ppv = OMNAVIGATOR(This); + }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + return *ppv ? S_OK : E_NOINTERFACE; } if(*ppv) { @@ -101,8 +101,8 @@ static HRESULT WINAPI OmNavigator_GetTypeInfo(IOmNavigator *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) { OmNavigator *This = OMNAVIGATOR_THIS(iface); - FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo); - return E_NOTIMPL; + + return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->dispex), iTInfo, lcid, ppTInfo); } static HRESULT WINAPI OmNavigator_GetIDsOfNames(IOmNavigator *iface, REFIID riid, @@ -110,9 +110,8 @@ static HRESULT WINAPI OmNavigator_GetIDsOfNames(IOmNavigator *iface, REFIID riid LCID lcid, DISPID *rgDispId) { OmNavigator *This = OMNAVIGATOR_THIS(iface); - FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames, - lcid, rgDispId); - return E_NOTIMPL; + + return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->dispex), riid, rgszNames, cNames, lcid, rgDispId); } static HRESULT WINAPI OmNavigator_Invoke(IOmNavigator *iface, DISPID dispIdMember, @@ -120,9 +119,9 @@ static HRESULT WINAPI OmNavigator_Invoke(IOmNavigator *iface, DISPID dispIdMembe VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) { OmNavigator *This = OMNAVIGATOR_THIS(iface); - FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), - lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); - return E_NOTIMPL; + + return IDispatchEx_Invoke(DISPATCHEX(&This->dispex), dispIdMember, riid, lcid, wFlags, pDispParams, + pVarResult, pExcepInfo, puArgErr); } static HRESULT WINAPI OmNavigator_get_appCodeName(IOmNavigator *iface, BSTR *p) @@ -297,13 +296,26 @@ static const IOmNavigatorVtbl OmNavigatorVtbl = { OmNavigator_get_userProfile }; +static const tid_t OmNavigator_iface_tids[] = { + IOmNavigator_tid, + 0 +}; +static dispex_static_data_t OmNavigator_dispex = { + NULL, + IOmNavigator_tid, + NULL, + OmNavigator_iface_tids +}; + IOmNavigator *OmNavigator_Create(void) { OmNavigator *ret; - ret = heap_alloc(sizeof(*ret)); + ret = heap_alloc_zero(sizeof(*ret)); ret->lpIOmNavigatorVtbl = &OmNavigatorVtbl; ret->ref = 1; + init_dispex(&ret->dispex, (IUnknown*)OMNAVIGATOR(ret), &OmNavigator_dispex); + return OMNAVIGATOR(ret); } diff --git a/reactos/dll/win32/mshtml/protocol.c b/reactos/dll/win32/mshtml/protocol.c index 0b502ba9cfa..ff319ac45df 100644 --- a/reactos/dll/win32/mshtml/protocol.c +++ b/reactos/dll/win32/mshtml/protocol.c @@ -483,6 +483,9 @@ static HRESULT WINAPI AboutProtocolInfo_QueryInfo(IInternetProtocolInfo *iface, case QUERY_IS_SAFE: FIXME("Unsupported option QUERY_IS_SAFE\n"); return E_NOTIMPL; + case QUERY_USES_HISTORYFOLDER: + FIXME("Unsupported option QUERY_USES_HISTORYFOLDER\n"); + return E_FAIL; default: return E_FAIL; } diff --git a/reactos/dll/win32/mshtml/rsrc.rc b/reactos/dll/win32/mshtml/rsrc.rc index 1e696976d7f..fb917d9deb6 100644 --- a/reactos/dll/win32/mshtml/rsrc.rc +++ b/reactos/dll/win32/mshtml/rsrc.rc @@ -34,6 +34,7 @@ #include "wine/wine_common_ver.rc" #include "Bg.rc" +#include "Da.rc" #include "De.rc" #include "En.rc" #include "Es.rc" diff --git a/reactos/dll/win32/mshtml/script.c b/reactos/dll/win32/mshtml/script.c index 15a939ca47d..de7606247f1 100644 --- a/reactos/dll/win32/mshtml/script.c +++ b/reactos/dll/win32/mshtml/script.c @@ -27,6 +27,7 @@ #include "winuser.h" #include "ole2.h" #include "activscp.h" +#include "activdbg.h" #include "objsafe.h" #include "wine/debug.h" @@ -36,6 +37,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml); static const WCHAR windowW[] = {'w','i','n','d','o','w',0}; +static const WCHAR emptyW[] = {0}; static const CLSID CLSID_JScript = {0xf414c260,0x6ac0,0x11cf,{0xb6,0xd1,0x00,0xaa,0x00,0xbb,0xbb,0x58}}; @@ -44,11 +46,13 @@ typedef struct { const IActiveScriptSiteVtbl *lpIActiveScriptSiteVtbl; const IActiveScriptSiteInterruptPollVtbl *lpIActiveScriptSiteInterruptPollVtbl; const IActiveScriptSiteWindowVtbl *lpIActiveScriptSiteWindowVtbl; + const IActiveScriptSiteDebug32Vtbl *lpIActiveScriptSiteDebug32Vtbl; LONG ref; IActiveScript *script; IActiveScriptParse *parse; + IActiveScriptParseProcedure *parse_proc; SCRIPTSTATE script_state; @@ -61,6 +65,7 @@ typedef struct { #define ACTSCPSITE(x) ((IActiveScriptSite*) &(x)->lpIActiveScriptSiteVtbl) #define ACTSCPPOLL(x) ((IActiveScriptSiteInterruptPoll*) &(x)->lpIActiveScriptSiteInterruptPollVtbl) #define ACTSCPWIN(x) ((IActiveScriptSiteWindow*) &(x)->lpIActiveScriptSiteWindowVtbl) +#define ACTSCPDBG32(x) ((IActiveScriptSiteDebug32*) &(x)->lpIActiveScriptSiteDebug32Vtbl) static BOOL init_script_engine(ScriptHost *script_host) { @@ -144,7 +149,12 @@ static BOOL init_script_engine(ScriptHost *script_host) if(FAILED(hres)) WARN("AddNamedItem failed: %08x\n", hres); - /* FIXME: QI for IActiveScriptParseProcedure2 and IActiveScriptParseProcedure */ + hres = IActiveScript_QueryInterface(script_host->script, &IID_IActiveScriptParseProcedure2, + (void**)&script_host->parse_proc); + if(FAILED(hres)) { + /* FIXME: QI for IActiveScriptParseProcedure */ + WARN("Could not get IActiveScriptParseProcedure iface: %08x\n", hres); + } return TRUE; } @@ -164,6 +174,11 @@ static void release_script_engine(ScriptHost *This) IActiveScript_Close(This->script); default: + if(This->parse_proc) { + IActiveScriptParseProcedure_Release(This->parse_proc); + This->parse_proc = NULL; + } + if(This->parse) { IActiveScriptParse_Release(This->parse); This->parse = NULL; @@ -205,6 +220,9 @@ static HRESULT WINAPI ActiveScriptSite_QueryInterface(IActiveScriptSite *iface, }else if(IsEqualGUID(&IID_IActiveScriptSiteWindow, riid)) { TRACE("(%p)->(IID_IActiveScriptSiteWindow %p)\n", This, ppv); *ppv = ACTSCPWIN(This); + }else if(IsEqualGUID(&IID_IActiveScriptSiteDebug32, riid)) { + TRACE("(%p)->(IID_IActiveScriptSiteDebug32 %p)\n", This, ppv); + *ppv = ACTSCPDBG32(This); }else { FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv); return E_NOINTERFACE; @@ -368,8 +386,10 @@ static ULONG WINAPI ActiveScriptSiteInterruptPoll_Release(IActiveScriptSiteInter static HRESULT WINAPI ActiveScriptSiteInterruptPoll_QueryContinue(IActiveScriptSiteInterruptPoll *iface) { ScriptHost *This = ACTSCPPOLL_THIS(iface); - FIXME("(%p)\n", This); - return E_NOTIMPL; + + TRACE("(%p)\n", This); + + return S_OK; } #undef ACTSCPPOLL_THIS @@ -426,7 +446,71 @@ static const IActiveScriptSiteWindowVtbl ActiveScriptSiteWindowVtbl = { ActiveScriptSiteWindow_EnableModeless }; -static ScriptHost *create_script_host(HTMLDocument *doc, GUID *guid) +#define ACTSCPDBG32_THIS(iface) DEFINE_THIS(ScriptHost, IActiveScriptSiteDebug32, iface) + +static HRESULT WINAPI ActiveScriptSiteDebug32_QueryInterface(IActiveScriptSiteDebug32 *iface, + REFIID riid, void **ppv) +{ + ScriptHost *This = ACTSCPDBG32_THIS(iface); + return IActiveScriptSite_QueryInterface(ACTSCPSITE(This), riid, ppv); +} + +static ULONG WINAPI ActiveScriptSiteDebug32_AddRef(IActiveScriptSiteDebug32 *iface) +{ + ScriptHost *This = ACTSCPDBG32_THIS(iface); + return IActiveScriptSite_AddRef(ACTSCPSITE(This)); +} + +static ULONG WINAPI ActiveScriptSiteDebug32_Release(IActiveScriptSiteDebug32 *iface) +{ + ScriptHost *This = ACTSCPDBG32_THIS(iface); + return IActiveScriptSite_Release(ACTSCPSITE(This)); +} + +static HRESULT WINAPI ActiveScriptSiteDebug32_GetDocumentContextFromPosition(IActiveScriptSiteDebug32 *iface, + DWORD dwSourceContext, ULONG uCharacterOffset, ULONG uNumChars, IDebugDocumentContext **ppsc) +{ + ScriptHost *This = ACTSCPDBG32_THIS(iface); + FIXME("(%p)->(%x %u %u %p)\n", This, dwSourceContext, uCharacterOffset, uNumChars, ppsc); + return E_NOTIMPL; +} + +static HRESULT WINAPI ActiveScriptSiteDebug32_GetApplication(IActiveScriptSiteDebug32 *iface, IDebugApplication32 **ppda) +{ + ScriptHost *This = ACTSCPDBG32_THIS(iface); + FIXME("(%p)->(%p)\n", This, ppda); + return E_NOTIMPL; +} + +static HRESULT WINAPI ActiveScriptSiteDebug32_GetRootApplicationNode(IActiveScriptSiteDebug32 *iface, + IDebugApplicationNode **ppdanRoot) +{ + ScriptHost *This = ACTSCPDBG32_THIS(iface); + FIXME("(%p)->(%p)\n", This, ppdanRoot); + return E_NOTIMPL; +} + +static HRESULT WINAPI ActiveScriptSiteDebug32_OnScriptErrorDebug(IActiveScriptSiteDebug32 *iface, + IActiveScriptErrorDebug *pErrorDebug, BOOL *pfEnterDebugger, BOOL *pfCallOnScriptErrorWhenContinuing) +{ + ScriptHost *This = ACTSCPDBG32_THIS(iface); + FIXME("(%p)->(%p %p %p)\n", This, pErrorDebug, pfEnterDebugger, pfCallOnScriptErrorWhenContinuing); + return E_NOTIMPL; +} + +#undef ACTSCPDBG32_THIS + +static const IActiveScriptSiteDebug32Vtbl ActiveScriptSiteDebug32Vtbl = { + ActiveScriptSiteDebug32_QueryInterface, + ActiveScriptSiteDebug32_AddRef, + ActiveScriptSiteDebug32_Release, + ActiveScriptSiteDebug32_GetDocumentContextFromPosition, + ActiveScriptSiteDebug32_GetApplication, + ActiveScriptSiteDebug32_GetRootApplicationNode, + ActiveScriptSiteDebug32_OnScriptErrorDebug +}; + +static ScriptHost *create_script_host(HTMLDocument *doc, const GUID *guid) { ScriptHost *ret; HRESULT hres; @@ -435,6 +519,7 @@ static ScriptHost *create_script_host(HTMLDocument *doc, GUID *guid) ret->lpIActiveScriptSiteVtbl = &ActiveScriptSiteVtbl; ret->lpIActiveScriptSiteInterruptPollVtbl = &ActiveScriptSiteInterruptPollVtbl; ret->lpIActiveScriptSiteWindowVtbl = &ActiveScriptSiteWindowVtbl; + ret->lpIActiveScriptSiteDebug32Vtbl = &ActiveScriptSiteDebug32Vtbl; ret->ref = 1; ret->doc = doc; ret->script_state = SCRIPTSTATE_UNINITIALIZED; @@ -477,6 +562,7 @@ static void parse_extern_script(ScriptHost *script_host, LPCWSTR src) IMoniker *mon; char *buf; WCHAR *text; + DWORD len, size=0; HRESULT hres; static const WCHAR wine_schemaW[] = {'w','i','n','e',':'}; @@ -488,13 +574,16 @@ static void parse_extern_script(ScriptHost *script_host, LPCWSTR src) if(FAILED(hres)) return; - hres = bind_mon_to_buffer(script_host->doc, mon, (void**)&buf); + hres = bind_mon_to_buffer(script_host->doc, mon, (void**)&buf, &size); IMoniker_Release(mon); if(FAILED(hres)) return; - text = heap_strdupAtoW(buf); + len = MultiByteToWideChar(CP_ACP, 0, buf, size, NULL, 0); + text = heap_alloc((len+1)*sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, buf, size, text, len); heap_free(buf); + text[len] = 0; parse_text(script_host, text); @@ -619,34 +708,34 @@ static BOOL get_script_guid(nsIDOMHTMLScriptElement *nsscript, GUID *guid) return ret; } -static ScriptHost *get_script_host(HTMLDocument *doc, nsIDOMHTMLScriptElement *nsscript) +static ScriptHost *get_script_host(HTMLDocument *doc, const GUID *guid) { ScriptHost *iter; - GUID guid; - if(!get_script_guid(nsscript, &guid)) { - WARN("Could not find script GUID\n"); - return NULL; - } - - if(IsEqualGUID(&CLSID_JScript, &guid)) { + if(IsEqualGUID(&CLSID_JScript, guid)) { FIXME("Ignoring JScript\n"); return NULL; } LIST_FOR_EACH_ENTRY(iter, &doc->script_hosts, ScriptHost, entry) { - if(IsEqualGUID(&guid, &iter->guid)) + if(IsEqualGUID(guid, &iter->guid)) return iter; } - return create_script_host(doc, &guid); + return create_script_host(doc, guid); } void doc_insert_script(HTMLDocument *doc, nsIDOMHTMLScriptElement *nsscript) { ScriptHost *script_host; + GUID guid; - script_host = get_script_host(doc, nsscript); + if(!get_script_guid(nsscript, &guid)) { + WARN("Could not find script GUID\n"); + return; + } + + script_host = get_script_host(doc, &guid); if(!script_host) return; @@ -654,6 +743,55 @@ void doc_insert_script(HTMLDocument *doc, nsIDOMHTMLScriptElement *nsscript) parse_script_elem(script_host, nsscript); } +IDispatch *script_parse_event(HTMLDocument *doc, LPCWSTR text) +{ + ScriptHost *script_host; + GUID guid = CLSID_JScript; + const WCHAR *ptr; + IDispatch *disp; + HRESULT hres; + + static const WCHAR delimiterW[] = {'\"',0}; + + for(ptr = text; isalnumW(*ptr); ptr++); + if(*ptr == ':') { + LPWSTR language; + BOOL b; + + language = heap_alloc((ptr-text+1)*sizeof(WCHAR)); + memcpy(language, text, (ptr-text)*sizeof(WCHAR)); + language[ptr-text] = 0; + + b = get_guid_from_language(language, &guid); + + heap_free(language); + + if(!b) { + WARN("Could not find language\n"); + return NULL; + } + + ptr++; + }else { + ptr = text; + } + + script_host = get_script_host(doc, &guid); + if(!script_host || !script_host->parse_proc) + return NULL; + + hres = IActiveScriptParseProcedure_ParseProcedureText(script_host->parse_proc, ptr, NULL, emptyW, + NULL, NULL, delimiterW, 0 /* FIXME */, 0, + SCRIPTPROC_HOSTMANAGESSOURCE|SCRIPTPROC_IMPLICIT_THIS|SCRIPTPROC_IMPLICIT_PARENTS, &disp); + if(FAILED(hres)) { + WARN("ParseProcedureText failed: %08x\n", hres); + return NULL; + } + + TRACE("ret %p\n", disp); + return disp; +} + void release_script_hosts(HTMLDocument *doc) { ScriptHost *iter; diff --git a/reactos/dll/win32/mshtml/task.c b/reactos/dll/win32/mshtml/task.c index 3bb99cc490c..d863fba2f5a 100644 --- a/reactos/dll/win32/mshtml/task.c +++ b/reactos/dll/win32/mshtml/task.c @@ -28,6 +28,7 @@ #include "winuser.h" #include "ole2.h" #include "mshtmcid.h" +#include "shlguid.h" #include "wine/debug.h" @@ -36,6 +37,17 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml); #define WM_PROCESSTASK 0x8008 +#define TIMER_ID 0x3000 + +typedef struct { + HTMLDocument *doc; + DWORD id; + DWORD time; + DWORD interval; + IDispatch *disp; + + struct list entry; +} task_timer_t; void push_task(task_t *task) { @@ -66,11 +78,33 @@ static task_t *pop_task(void) return task; } +static void release_task_timer(HWND thread_hwnd, task_timer_t *timer) +{ + list_remove(&timer->entry); + + IDispatch_Release(timer->disp); + + heap_free(timer); +} + void remove_doc_tasks(const HTMLDocument *doc) { thread_data_t *thread_data = get_thread_data(FALSE); + struct list *liter, *ltmp; + task_timer_t *timer; task_t *iter, *tmp; + LIST_FOR_EACH_SAFE(liter, ltmp, &thread_data->timer_list) { + timer = LIST_ENTRY(liter, task_timer_t, entry); + if(timer->doc == doc) + release_task_timer(thread_data->thread_hwnd, timer); + } + + if(!list_empty(&thread_data->timer_list)) { + timer = LIST_ENTRY(list_head(&thread_data->timer_list), task_timer_t, entry); + SetTimer(thread_data->thread_hwnd, TIMER_ID, timer->time - GetTickCount(), NULL); + } + if(!thread_data) return; @@ -90,6 +124,70 @@ void remove_doc_tasks(const HTMLDocument *doc) } } +static BOOL queue_timer(thread_data_t *thread_data, task_timer_t *timer) +{ + task_timer_t *iter; + + if(list_empty(&thread_data->timer_list) + || LIST_ENTRY(list_head(&thread_data->timer_list), task_timer_t, entry)->time > timer->time) { + + list_add_head(&thread_data->timer_list, &timer->entry); + return TRUE; + } + + LIST_FOR_EACH_ENTRY(iter, &thread_data->timer_list, task_timer_t, entry) { + if(iter->time > timer->time) { + list_add_tail(&iter->entry, &timer->entry); + return FALSE; + } + } + + list_add_tail(&thread_data->timer_list, &timer->entry); + return FALSE; +} + +DWORD set_task_timer(HTMLDocument *doc, DWORD msec, BOOL interval, IDispatch *disp) +{ + thread_data_t *thread_data = get_thread_data(TRUE); + task_timer_t *timer; + DWORD tc = GetTickCount(); + + static DWORD id_cnt = 0x20000000; + + timer = heap_alloc(sizeof(task_timer_t)); + timer->id = id_cnt++; + timer->doc = doc; + timer->time = tc + msec; + timer->interval = interval ? msec : 0; + + IDispatch_AddRef(disp); + timer->disp = disp; + + if(queue_timer(thread_data, timer)) + SetTimer(thread_data->thread_hwnd, TIMER_ID, msec, NULL); + + return timer->id; +} + +HRESULT clear_task_timer(HTMLDocument *doc, BOOL interval, DWORD id) +{ + thread_data_t *thread_data = get_thread_data(FALSE); + task_timer_t *iter; + + if(!thread_data) + return S_OK; + + LIST_FOR_EACH_ENTRY(iter, &thread_data->timer_list, task_timer_t, entry) { + if(iter->id == id && iter->doc == doc && (iter->interval == 0) == !interval) { + release_task_timer(thread_data->thread_hwnd, iter); + return S_OK; + } + } + + WARN("timet not found\n"); + return S_OK; +} + static void set_downloading(HTMLDocument *doc) { IOleCommandTarget *olecmd; @@ -126,6 +224,27 @@ static void set_downloading(HTMLDocument *doc) } } +/* Calls undocumented 69 cmd of CGID_Explorer */ +static void call_explorer_69(HTMLDocument *doc) +{ + IOleCommandTarget *olecmd; + VARIANT var; + HRESULT hres; + + if(!doc->client) + return; + + hres = IOleClientSite_QueryInterface(doc->client, &IID_IOleCommandTarget, (void**)&olecmd); + if(FAILED(hres)) + return; + + VariantInit(&var); + hres = IOleCommandTarget_Exec(olecmd, &CGID_Explorer, 69, 0, NULL, &var); + IOleCommandTarget_Release(olecmd); + if(SUCCEEDED(hres) && V_VT(&var) != VT_NULL) + FIXME("handle result\n"); +} + static void set_parsecomplete(HTMLDocument *doc) { IOleCommandTarget *olecmd = NULL; @@ -135,7 +254,9 @@ static void set_parsecomplete(HTMLDocument *doc) if(doc->usermode == EDITMODE) init_editor(doc); + call_explorer_69(doc); call_property_onchanged(&doc->cp_propnotif, 1005); + call_explorer_69(doc); doc->readystate = READYSTATE_INTERACTIVE; call_property_onchanged(&doc->cp_propnotif, DISPID_READYSTATE); @@ -156,6 +277,7 @@ static void set_parsecomplete(HTMLDocument *doc) IOleCommandTarget_Exec(olecmd, NULL, OLECMDID_SETDOWNLOADSTATE, OLECMDEXECOPT_DONTPROMPTUSER, &state, NULL); + IOleCommandTarget_Exec(olecmd, &CGID_ShellDocView, 103, 0, NULL, NULL); IOleCommandTarget_Exec(olecmd, &CGID_MSHTML, IDM_PARSECOMPLETE, 0, NULL, NULL); IOleCommandTarget_Exec(olecmd, NULL, OLECMDID_HTTPEQUIV_DONE, 0, NULL, NULL); @@ -238,6 +360,40 @@ static void process_task(task_t *task) } } +static LRESULT process_timer(void) +{ + thread_data_t *thread_data = get_thread_data(TRUE); + DWORD tc; + task_timer_t *timer; + + TRACE("\n"); + + while(!list_empty(&thread_data->timer_list)) { + timer = LIST_ENTRY(list_head(&thread_data->timer_list), task_timer_t, entry); + + tc = GetTickCount(); + if(timer->time > tc) { + SetTimer(thread_data->thread_hwnd, TIMER_ID, timer->time-tc, NULL); + return 0; + } + + list_remove(&timer->entry); + list_init(&timer->entry); + + call_disp_func(timer->doc, timer->disp); + + if(timer->interval) { + timer->time += timer->interval; + queue_timer(thread_data, timer); + }else { + release_task_timer(thread_data->thread_hwnd, timer); + } + } + + KillTimer(thread_data->thread_hwnd, TIMER_ID); + return 0; +} + static LRESULT WINAPI hidden_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { @@ -252,6 +408,8 @@ static LRESULT WINAPI hidden_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPa } return 0; + case WM_TIMER: + return process_timer(); } if(msg > WM_USER) @@ -307,6 +465,7 @@ thread_data_t *get_thread_data(BOOL create) if(!thread_data && create) { thread_data = heap_alloc_zero(sizeof(thread_data_t)); TlsSetValue(mshtml_tls, thread_data); + list_init(&thread_data->timer_list); } return thread_data; diff --git a/reactos/dll/win32/mshtml/txtrange.c b/reactos/dll/win32/mshtml/txtrange.c index 72b9ce050de..9d96405889d 100644 --- a/reactos/dll/win32/mshtml/txtrange.c +++ b/reactos/dll/win32/mshtml/txtrange.c @@ -202,11 +202,6 @@ static void wstrbuf_append_len(wstrbuf_t *buf, LPCWSTR str, int len) buf->buf[buf->len] = 0; } -static inline void wstrbuf_append(wstrbuf_t *buf, LPCWSTR str) -{ - wstrbuf_append_len(buf, str, strlenW(str)); -} - static void wstrbuf_append_nodetxt(wstrbuf_t *buf, LPCWSTR str, int len) { const WCHAR *s = str; @@ -616,6 +611,7 @@ static WCHAR next_char(const dompos_t *pos, dompos_t *new_pos) case TEXT_NODE: tmp_pos.node = iter; tmp_pos.type = TEXT_NODE; + tmp_pos.off = 0; dompos_addref(&tmp_pos); p = tmp_pos.p; @@ -731,6 +727,7 @@ static WCHAR prev_char(HTMLTxtRange *This, const dompos_t *pos, dompos_t *new_po tmp_pos.node = iter; tmp_pos.type = TEXT_NODE; + tmp_pos.off = 0; dompos_addref(&tmp_pos); p = tmp_pos.p + strlenW(tmp_pos.p)-1; @@ -1183,7 +1180,7 @@ static HRESULT WINAPI HTMLTxtRange_parentElement(IHTMLTxtRange *iface, IHTMLElem return S_OK; } - node = get_node(This->doc, nsnode); + node = get_node(This->doc, nsnode, TRUE); nsIDOMNode_Release(nsnode); return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(node), &IID_IHTMLElement, (void**)parent); diff --git a/reactos/include/psdk/activaut.idl b/reactos/include/psdk/activaut.idl new file mode 100644 index 00000000000..56900a7bc6c --- /dev/null +++ b/reactos/include/psdk/activaut.idl @@ -0,0 +1,29 @@ +/* + * Copyright 2008 Jacek Caban for CodeWeavers + * + * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef DO_NO_IMPORTS +import "ocidl.idl"; +import "oleidl.idl"; +import "oaidl.idl"; +#endif + +cpp_quote("#ifndef _NO_AUTHOR_GUIDS") + +cpp_quote("DEFINE_GUID(CATID_ActiveScriptAuthor, 0xaee2a92,0xbcbb,0x11d0,0x8c,0x72,0x0,0xc0,0x4f,0xc2,0xb0,0x85);") + +cpp_quote("#endif") diff --git a/reactos/include/psdk/activdbg.idl b/reactos/include/psdk/activdbg.idl new file mode 100644 index 00000000000..a572a51c4ab --- /dev/null +++ b/reactos/include/psdk/activdbg.idl @@ -0,0 +1,383 @@ +/* + * Copyright 2008 Jacek Caban for CodeWeavers + * + * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +import "ocidl.idl"; +import "activscp.idl"; +/* import "dbgprop.idl"; */ + +interface IDebugDocumentContext; +interface IRemoteDebugApplication; + +/* FIXME: */ +interface IEnumDebugStackFrames; +interface IDebugStackFrame; +interface IApplicationDebugger; +interface IEnumRemoteDebugApplicationThreads; +interface IDebugApplicationNode; +interface IEnumDebugExpressionContexts; +interface IDebugApplicationThread; +interface IDebugSyncOperation; +interface IDebugAsyncOperation; +interface IDebugStackFrameSniffer; +interface IDebugThreadCall32; +interface IActiveScriptErrorDebug; +interface IProvideExpressionContexts; + +typedef enum tagBREAKPOINT_STATE { + BREAKPOINT_DELETED, + BREAKPOINT_DISABLED, + BREAKPOINT_ENABLED +} BREAKPOINT_STATE; + +typedef DWORD APPBREAKFLAGS; + +typedef enum tagBREAKREASON { + BREAKREASON_STEP, + BREAKREASON_BREAKPOINT, + BREAKREASON_DEBUGGER_BLOCK, + BREAKREASON_HOST_INITIATED, + BREAKREASON_LANGUAGE_INITIATED, + BREAKREASON_DEBUGGER_HALT, + BREAKREASON_ERROR, + BREAKREASON_JIT +} BREAKREASON; + +typedef enum tagBREAKRESUME_ACTION { + BREAKRESUMEACTION_ABORT, + BREAKRESUMEACTION_CONTINUE, + BREAKRESUMEACTION_STEP_INTO, + BREAKRESUMEACTION_STEP_OVER, + BREAKRESUMEACTION_STEP_OUT, + BREAKRESUMEACTION_IGNORE +} BREAKRESUMEACTION; + +typedef enum tagDOCUMENTNAMETYPE { + DOCUMENTNAMETYPE_APPNODE, + DOCUMENTNAMETYPE_TITLE, + DOCUMENTNAMETYPE_FILE_TAIL, + DOCUMENTNAMETYPE_URL +} DOCUMENTNAMETYPE; + +typedef enum tagERRORRESUMEACTION { + ERRORRESUMEACTION_ReexecuteErrorStatement, + ERRORRESUMEACTION_AbortCallAndReturnErrorToCaller, + ERRORRESUMEACTION_SkipErrorStatement, +} ERRORRESUMEACTION; + +/************************************************************ + * interface IDebugDocumentInfo + */ +[ + object, + uuid(51973c1f-cb0c-11d0-b5c9-00a0244a0e7a), + pointer_default(unique) +] +interface IDebugDocumentInfo : IUnknown +{ + HRESULT GetName( + [in] DOCUMENTNAMETYPE dnt, + [out] BSTR *pbstrName); + + HRESULT GetDocumentClassId( + [out] CLSID *pclsidDocument); +} + +/************************************************************ + * interface IDebugDocument + */ +[ + object, + uuid(51973c21-cb0c-11d0-b5c9-00a0244a0e7a), + pointer_default(unique) +] +interface IDebugDocument : IDebugDocumentInfo +{ +} + +/************************************************************ + * interface IDebugCodeContext + */ +[ + object, + uuid(51973c13-cb0c-11d0-b5c9-00a0244a0e7a), + pointer_default(unique) +] +interface IDebugCodeContext : IUnknown +{ + HRESULT GetDocumentContext( + [out] IDebugDocumentContext **ppsc); + + HRESULT SetBreakPoint( + [in] BREAKPOINT_STATE bps); +} + +/************************************************************ + * interface IEnumDebugCodeContexts + */ +[ + object, + uuid(51973c1d-cb0c-11d0-b5c9-00a0244a0e7a), + pointer_default(unique) +] +interface IEnumDebugCodeContexts : IUnknown +{ + HRESULT Next( + [in] ULONG celt, + [out] IDebugCodeContext **pscc, + [out] ULONG *pceltFetched); + + HRESULT Skip( + [in] ULONG celt); + + HRESULT Reset(); + + HRESULT Clone( + [out] IEnumDebugCodeContexts **ppescc); +} + +/************************************************************ + * interface IDebugDocumentContext + */ +[ + object, + uuid(51973c28-cb0c-11d0-b5c9-00a0244a0e7a), + pointer_default(unique) +] +interface IDebugDocumentContext : IUnknown +{ + HRESULT GetDocument( + [out] IDebugDocument **ppsd); + + HRESULT EnumCodeContexts( + [out] IEnumDebugCodeContexts **ppescc); +} + +/************************************************************ + * interface IRemoteDebugApplicationThread + */ +[ + object, + uuid(51973c37-cb0c-11d0-b5c9-00a0244a0e7a), + pointer_default(unique) +] +interface IRemoteDebugApplicationThread : IUnknown +{ + HRESULT GetSystemThreadId( + [out] DWORD *dwThreadId); + + HRESULT GetApplication( + [out] IRemoteDebugApplication **pprda); + + HRESULT EnumStackFrames( + [out] IEnumDebugStackFrames **ppedsf); + + HRESULT GetDescription( + [out] BSTR *pbstrDescription, + [out] BSTR *pbstrState); + + HRESULT SetNextStatement( + [in] IDebugStackFrame *pStackFrame, + [in] IDebugCodeContext *pCodeContext); + + HRESULT GetState( + [out] DWORD *pState); + + HRESULT Suspend( + [out] DWORD *pdwCount); + + HRESULT Resume( + [out] DWORD *pdwCount); + + HRESULT GetSuspendCount( + [out] DWORD *pdwCount); +} + +/************************************************************ + * interface IRemoteDebugApplication + */ +[ + object, + uuid(51973c30-cb0c-11d0-b5c9-00a0244Aae7a), + pointer_default(unique) +] +interface IRemoteDebugApplication : IUnknown +{ + HRESULT ResumeFromBreakPoint( + [in] IRemoteDebugApplicationThread *prptFocus, + [in] BREAKRESUMEACTION bra, + [in] ERRORRESUMEACTION era); + + HRESULT CauseBreak(); + + HRESULT ConnectDebugger( + [in] IApplicationDebugger *pad); + + HRESULT DisconnectDebugger(); + + HRESULT GetDebugger( + [out] IApplicationDebugger **pad); + + HRESULT CreateInstanceAtApplication( + [in] REFCLSID rclsid, + [in] IUnknown *pUnkOuter, + [in] DWORD dwClsContext, + [in] REFIID riid, + [out, iid_is(riid)] IUnknown **ppvObject); + + HRESULT QueryAlive(); + + HRESULT EnumThreads( + [out] IEnumRemoteDebugApplicationThreads **pperdat); + + HRESULT GetName( + [out] BSTR *pbstrName); + + HRESULT GetRootNode( + [out] IDebugApplicationNode **ppdanRoot); + + HRESULT EnumGlobalExpressionContexts( + [out] IEnumDebugExpressionContexts **ppedec); +} + +/************************************************************ + * interface IDebugApplication32 + */ +[ + object, + uuid(51973c32-cb0c-11d0-b5c9-00a0244a0e7a), + pointer_default(unique), + local +] +interface IDebugApplication32 : IRemoteDebugApplication +{ + HRESULT SetName( + [in] LPCOLESTR pstrName); + + HRESULT StepOutComplete(); + + HRESULT DebugOutput( + [in] LPCOLESTR pstr); + + HRESULT StartDebugSession(); + + HRESULT HandleBreakPoint( + [in] BREAKREASON br, + [out] BREAKRESUMEACTION *pbra); + + HRESULT Close(); + + HRESULT GetBreakFlags( + [out] APPBREAKFLAGS *pabf, + [out] IRemoteDebugApplicationThread **pprdatSteppingThread); + + HRESULT GetCurrentThread( + [out] IDebugApplicationThread **pat); + + HRESULT CreateAsyncDebugOperation( + [in] IDebugSyncOperation *psdo, + [out] IDebugAsyncOperation **ppado); + + HRESULT AddStackFrameSniffer( + [in] IDebugStackFrameSniffer *pdsfs, + [out] DWORD *pdwCookie); + + HRESULT RemoveStackFrameSniffer( + [in] DWORD dwCookie); + + HRESULT QueryCurrentThreadIsDebuggerThread(); + + HRESULT SynchronousCallInDebuggerThread( + [in] IDebugThreadCall32 *pptc, + [in] DWORD dwParam1, + [in] DWORD dwParam2, + [in] DWORD dwParam3); + + HRESULT CreateApplicationNode( + [out] IDebugApplicationNode **ppdanNew); + + HRESULT FireDebuggerEvent( + [in] REFGUID riid, + [in] IUnknown *punk); + + HRESULT HandleRuntimeError( + [in] IActiveScriptErrorDebug *pErrorDebug, + [in] IActiveScriptSite *pScriptSite, + [out] BREAKRESUMEACTION *pbra, + [out] ERRORRESUMEACTION *perra, + [out] BOOL *pfCallOnScriptError); + + BOOL FCanJitDebug(); + + BOOL FIsAutoJitDebugEnabled(); + + HRESULT AddGlobalExpressionContextProvider( + [in] IProvideExpressionContexts *pdsfs, + [out] DWORD *pdwCookie); + + HRESULT RemoveGlobalExpressionContextProvider( + [in] DWORD dwCookie); +} + +/************************************************************ + * interface IActiveScriptSiteDebug32 + */ +[ + object, + uuid(51973c11-cb0c-11d0-b5c9-00a0244a0e7a), + pointer_default(unique), + local +] +interface IActiveScriptSiteDebug32 : IUnknown +{ + HRESULT GetDocumentContextFromPosition( + [in] DWORD dwSourceContext, + [in] ULONG uCharacterOffset, + [in] ULONG uNumChars, + [out] IDebugDocumentContext **ppsc); + + HRESULT GetApplication( + [out] IDebugApplication32 **ppda); + + HRESULT GetRootApplicationNode( + [out] IDebugApplicationNode **ppdanRoot); + + HRESULT OnScriptErrorDebug( + [in] IActiveScriptErrorDebug *pErrorDebug, + [out] BOOL *pfEnterDebugger, + [out] BOOL *pfCallOnScriptErrorWhenContinuing); +} + +cpp_quote("#ifndef DISABLE_ACTIVDBG_INTERFACE_WRAPPERS") +cpp_quote("#ifdef _WIN64") + +cpp_quote("#define IActiveScriptSiteDebug IActiveScriptSiteDebug64") +cpp_quote("#define IID_IActiveScriptSiteDebug IID_IActiveScriptSiteDebug64") + +cpp_quote("#define IDebugApplication IDebugApplication64") +cpp_quote("#define IID_IDebugApplication IID_IDebugApplication64") + +cpp_quote("#else") + +cpp_quote("#define IActiveScriptSiteDebug IActiveScriptSiteDebug32") +cpp_quote("#define IID_IActiveScriptSiteDebug IID_IActiveScriptSiteDebug32") + +cpp_quote("#define IDebugApplication IDebugApplication32") +cpp_quote("#define IID_IDebugApplication IID_IDebugApplication32") + +cpp_quote("#endif") +cpp_quote("#endif") diff --git a/reactos/include/psdk/mshtmdid.h b/reactos/include/psdk/mshtmdid.h index 72a3e4760fe..e0a1bf2b81f 100644 --- a/reactos/include/psdk/mshtmdid.h +++ b/reactos/include/psdk/mshtmdid.h @@ -21,6 +21,7 @@ #define DISPID_NORMAL_FIRST 1000 #define DISPID_OMDOCUMENT DISPID_NORMAL_FIRST +#define DISPID_DATATRANSFER DISPID_NORMAL_FIRST #define DISPID_ANCHOR DISPID_NORMAL_FIRST #define DISPID_BLOCK DISPID_NORMAL_FIRST #define DISPID_BR DISPID_NORMAL_FIRST @@ -90,6 +91,8 @@ #define DISPID_OMDOCUMENT DISPID_NORMAL_FIRST #define DISPID_SCREEN DISPID_NORMAL_FIRST #define DISPID_DOMATTRIBUTE DISPID_NORMAL_FIRST +#define DISPID_DOMTEXTNODE DISPID_NORMAL_FIRST +#define DISPID_GENERIC DISPID_NORMAL_FIRST #define DISPID_DOMIMPLEMENTATION DISPID_NORMAL_FIRST #define DISPID_COLLECTION (DISPID_NORMAL_FIRST+500) @@ -984,6 +987,17 @@ #define DISPID_IHTMLELEMENTCOLLECTION__NEWENUM DISPID_NEWENUM #define DISPID_IHTMLELEMENTCOLLECTION_ITEM DISPID_VALUE +/* IHTMLElementCollection2 */ +#define DISPID_IHTMLELEMENTCOLLECTION2_URNS DISPID_COLLECTION+5 + +/* IHTMLElementCollection3 */ +#define DISPID_IHTMLELEMENTCOLLECTION3_NAMEDITEM DISPID_COLLECTION+6 + +/* IHTMLDOMChildrenCollection */ +#define DISPID_IHTMLDOMCHILDRENCOLLECTION_LENGTH DISPID_COLLECTION +#define DISPID_IHTMLDOMCHILDRENCOLLECTION__NEWENUM DISPID_NEWENUM +#define DISPID_IHTMLDOMCHILDRENCOLLECTION_ITEM DISPID_VALUE + /* HTMLElementEvents */ #define DISPID_HTMLELEMENTEVENTS_ONHELP DISPID_EVMETH_ONHELP #define DISPID_HTMLELEMENTEVENTS_ONCLICK DISPID_EVMETH_ONCLICK @@ -1107,7 +1121,7 @@ #define DISPID_IHTMLELEMENT_ONDATASETCOMPLETE DISPID_EVPROP_ONDATASETCOMPLETE #define DISPID_IHTMLELEMENT_ONFILTERCHANGE DISPID_EVPROP_ONFILTER -/* IHTMLelement2 */ +/* IHTMLElement2 */ #define DISPID_IHTMLELEMENT2_SCOPENAME DISPID_ELEMENT+39 #define DISPID_IHTMLELEMENT2_SETCAPTURE DISPID_ELEMENT+40 #define DISPID_IHTMLELEMENT2_RELEASECAPTURE DISPID_ELEMENT+41 @@ -1177,6 +1191,57 @@ #define DISPID_IHTMLELEMENT2_READYSTATEVALUE DISPID_ELEMENT+84 #define DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME DISPID_ELEMENT+85 +/* IHTMLElement3 */ +#define DISPID_IHTMLELEMENT3_MERGEATTRIBUTES DISPID_ELEMENT+96 +#define DISPID_IHTMLELEMENT3_ISMULTILINE DISPID_ELEMENT+97 +#define DISPID_IHTMLELEMENT3_CANHAVEHTML DISPID_ELEMENT+98 +#define DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE DISPID_EVPROP_ONLAYOUTCOMPLETE +#define DISPID_IHTMLELEMENT3_ONPAGE DISPID_EVPROP_ONPAGE +#define DISPID_IHTMLELEMENT3_INFLATEBLOCK DISPID_ELEMENT+100 +#define DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE DISPID_EVPROP_ONBEFOREDEACTIVATE +#define DISPID_IHTMLELEMENT3_SETACTIVE DISPID_ELEMENT+101 +#define DISPID_IHTMLELEMENT3_CONTENTEDITABLE DISPID_A_EDITABLE +#define DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE DISPID_ELEMENT+102 +#define DISPID_IHTMLELEMENT3_HIDEFOCUS DISPID_A_HIDEFOCUS +#define DISPID_IHTMLELEMENT3_DISABLED STDPROPID_XOBJ_DISABLED +#define DISPID_IHTMLELEMENT3_ISDISABLED DISPID_ELEMENT+105 +#define DISPID_IHTMLELEMENT3_ONMOVE DISPID_EVPROP_ONMOVE +#define DISPID_IHTMLELEMENT3_ONCONTROLSELECT DISPID_EVPROP_ONCONTROLSELECT +#define DISPID_IHTMLELEMENT3_FIREEVENT DISPID_ELEMENT+106 +#define DISPID_IHTMLELEMENT3_ONRESIZESTART DISPID_EVPROP_ONRESIZESTART +#define DISPID_IHTMLELEMENT3_ONRESIZEEND DISPID_EVPROP_ONRESIZEEND +#define DISPID_IHTMLELEMENT3_ONMOVESTART DISPID_EVPROP_ONMOVESTART +#define DISPID_IHTMLELEMENT3_ONMOVEEND DISPID_EVPROP_ONMOVEEND +#define DISPID_IHTMLELEMENT3_ONMOUSEENTER DISPID_EVPROP_ONMOUSEENTER +#define DISPID_IHTMLELEMENT3_ONMOUSELEAVE DISPID_EVPROP_ONMOUSELEAVE +#define DISPID_IHTMLELEMENT3_ONACTIVATE DISPID_EVPROP_ONACTIVATE +#define DISPID_IHTMLELEMENT3_ONDEACTIVATE DISPID_EVPROP_ONDEACTIVATE +#define DISPID_IHTMLELEMENT3_DRAGDROP DISPID_ELEMENT+107 +#define DISPID_IHTMLELEMENT3_GLYPHMODE DISPID_ELEMENT+108 + +/* IHTMLElement4 */ +#define DISPID_IHTMLELEMENT4_ONMOUSEWHEEL DISPID_EVPROP_ONMOUSEWHEEL +#define DISPID_IHTMLELEMENT4_NORMALIZE DISPID_ELEMENT+112 +#define DISPID_IHTMLELEMENT4_GETATTRIBUTENODE DISPID_ELEMENT+109 +#define DISPID_IHTMLELEMENT4_SETATTRIBUTENODE DISPID_ELEMENT+110 +#define DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE DISPID_ELEMENT+111 +#define DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE DISPID_EVPROP_ONBEFOREACTIVATE +#define DISPID_IHTMLELEMENT4_ONFOCUSIN DISPID_EVPROP_ONFOCUSIN +#define DISPID_IHTMLELEMENT4_ONFOCUSOUT DISPID_EVPROP_ONFOCUSOUT + +/* IHTMLGenericElement */ +#define DISPID_IHTMLGENERICELEMENT_RECORDSET DISPID_GENERIC+1 +#define DISPID_IHTMLGENERICELEMENT_NAMEDRECORDSET DISPID_GENERIC+2 + +/* IHTMLUniqueName */ +#define DISPID_IHTMLUNIQUENAME_UNIQUENUMBER DISPID_ELEMENT+54 +#define DISPID_IHTMLUNIQUENAME_UNIQUEID DISPID_ELEMENT+55 + +/* IHTMLDatabinding */ +#define DISPID_IHTMLDATABINDING_DATAFLD DISPID_ELEMENT+21 +#define DISPID_IHTMLDATABINDING_DATASRC DISPID_ELEMENT+22 +#define DISPID_IHTMLDATABINDING_DATAFORMATAS DISPID_ELEMENT+23 + /* IHTMLStyle */ #define DISPID_IHTMLSTYLE_PIXELTOP DISPID_STYLE #define DISPID_IHTMLSTYLE_PIXELLEFT (DISPID_STYLE+1) @@ -1271,6 +1336,62 @@ #define DISPID_IHTMLSTYLE_TEXTALIGN STDPROPID_XOBJ_BLOCKALIGN #define DISPID_IHTMLSTYLE_BACKGROUNDCOLOR DISPID_BACKCOLOR +/* IHTMLStyle2 */ +#define DISPID_IHTMLSTYLE2_TABLELAYOUT DISPID_A_TABLELAYOUT +#define DISPID_IHTMLSTYLE2_BORDERCOLLAPSE DISPID_A_BORDERCOLLAPSE +#define DISPID_IHTMLSTYLE2_DIRECTION DISPID_A_DIRECTION +#define DISPID_IHTMLSTYLE2_BEHAVIOR DISPID_A_BEHAVIOR +#define DISPID_IHTMLSTYLE2_SETEXPRESSION DISPID_HTMLOBJECT+4 +#define DISPID_IHTMLSTYLE2_GETEXPRESSION DISPID_HTMLOBJECT+5 +#define DISPID_IHTMLSTYLE2_REMOVEEXPRESSION DISPID_HTMLOBJECT+6 +#define DISPID_IHTMLSTYLE2_POSITION DISPID_A_POSITION +#define DISPID_IHTMLSTYLE2_UNICODEBIDI DISPID_A_UNICODEBIDI +#define DISPID_IHTMLSTYLE2_BOTTOM STDPROPID_XOBJ_BOTTOM +#define DISPID_IHTMLSTYLE2_RIGHT STDPROPID_XOBJ_RIGHT +#define DISPID_IHTMLSTYLE2_PIXELBOTTOM DISPID_STYLE+9 +#define DISPID_IHTMLSTYLE2_PIXELRIGHT DISPID_STYLE+10 +#define DISPID_IHTMLSTYLE2_POSBOTTOM DISPID_STYLE+11 +#define DISPID_IHTMLSTYLE2_POSRIGHT DISPID_STYLE+12 +#define DISPID_IHTMLSTYLE2_IMEMODE DISPID_A_IMEMODE +#define DISPID_IHTMLSTYLE2_RUBYALIGN DISPID_A_RUBYALIGN +#define DISPID_IHTMLSTYLE2_RUBYPOSITION DISPID_A_RUBYPOSITION +#define DISPID_IHTMLSTYLE2_RUBYOVERHANG DISPID_A_RUBYOVERHANG +#define DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR DISPID_A_LAYOUTGRIDCHAR +#define DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE DISPID_A_LAYOUTGRIDLINE +#define DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE DISPID_A_LAYOUTGRIDMODE +#define DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE DISPID_A_LAYOUTGRIDTYPE +#define DISPID_IHTMLSTYLE2_LAYOUTGRID DISPID_A_LAYOUTGRID +#define DISPID_IHTMLSTYLE2_WORDBREAK DISPID_A_WORDBREAK +#define DISPID_IHTMLSTYLE2_LINEBREAK DISPID_A_LINEBREAK +#define DISPID_IHTMLSTYLE2_TEXTJUSTIFY DISPID_A_TEXTJUSTIFY +#define DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM DISPID_A_TEXTJUSTIFYTRIM +#define DISPID_IHTMLSTYLE2_TEXTKASHIDA DISPID_A_TEXTKASHIDA +#define DISPID_IHTMLSTYLE2_TEXTAUTOSPACE DISPID_A_TEXTAUTOSPACE +#define DISPID_IHTMLSTYLE2_OVERFLOWX DISPID_A_OVERFLOWX +#define DISPID_IHTMLSTYLE2_OVERFLOWY DISPID_A_OVERFLOWY +#define DISPID_IHTMLSTYLE2_ACCELERATOR DISPID_A_ACCELERATOR + +/* IHTMLStyle3 */ +#define DISPID_IHTMLSTYLE3_LAYOUTFLOW DISPID_A_LAYOUTFLOW +#define DISPID_IHTMLSTYLE3_ZOOM DISPID_A_ZOOM +#define DISPID_IHTMLSTYLE3_WORDWRAP DISPID_A_WORDWRAP +#define DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION DISPID_A_TEXTUNDERLINEPOSITION +#define DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR DISPID_A_SCROLLBARBASECOLOR +#define DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR DISPID_A_SCROLLBARFACECOLOR +#define DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR DISPID_A_SCROLLBAR3DLIGHTCOLOR +#define DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR DISPID_A_SCROLLBARSHADOWCOLOR +#define DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR DISPID_A_SCROLLBARHIGHLIGHTCOLOR +#define DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR DISPID_A_SCROLLBARDARKSHADOWCOLOR +#define DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR DISPID_A_SCROLLBARARROWCOLOR +#define DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR DISPID_A_SCROLLBARTRACKCOLOR +#define DISPID_IHTMLSTYLE3_WRITINGMODE DISPID_A_WRITINGMODE +#define DISPID_IHTMLSTYLE3_TEXTALIGNLAST DISPID_A_TEXTALIGNLAST +#define DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE DISPID_A_TEXTKASHIDASPACE + +/* IHTMLStyle4 */ +#define DISPID_IHTMLSTYLE4_TEXTOVERFLOW DISPID_A_TEXTOVERFLOW +#define DISPID_IHTMLSTYLE4_MINHEIGHT DISPID_A_MINHEIGHT + /* IHTMLFiltersCollection */ #define DISPID_IHTMLFILTERSCOLLECTION_LENGTH (DISPID_FILTERS+1) #define DISPID_IHTMLFILTERSCOLLECTION__NEWENUM DISPID_NEWENUM @@ -1321,7 +1442,7 @@ #define DISPID_IHTMLWINDOW2_FRAMES 1100 #define DISPID_IHTMLWINDOW2_DEFAULTSTATUS 1101 #define DISPID_IHTMLWINDOW2_STATUS 1102 -#define DISPID_IHTMLWINDOW2_SETTIMEOUT 1103 +#define DISPID_IHTMLWINDOW2_SETTIMEOUT 1172 #define DISPID_IHTMLWINDOW2_CLEARTIMEOUT 1104 #define DISPID_IHTMLWINDOW2_ALERT 1105 #define DISPID_IHTMLWINDOW2_CONFIRM 1110 @@ -1338,7 +1459,7 @@ #define DISPID_IHTMLWINDOW2_BLUR 1159 #define DISPID_IHTMLWINDOW2_SCROLL 1160 #define DISPID_IHTMLWINDOW2_CLIENTINFORMATION 1161 -#define DISPID_IHTMLWINDOW2_SETINTERVAL 1162 +#define DISPID_IHTMLWINDOW2_SETINTERVAL 1173 #define DISPID_IHTMLWINDOW2_CLEARINTERVAL 1163 #define DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING 1164 #define DISPID_IHTMLWINDOW2_EXECSCRIPT 1165 @@ -1356,6 +1477,23 @@ #define DISPID_IHTMLWINDOW2_ONRESIZE DISPID_EVPROP_ONRESIZE #define DISPID_IHTMLWINDOW2_ONSCROLL DISPID_EVPROP_ONSCROLL +/* IHTMLWindow3 */ +#define DISPID_IHTMLWINDOW3_SCREENLEFT 1170 +#define DISPID_IHTMLWINDOW3_SCREENTOP 1171 +#define DISPID_IHTMLWINDOW3_ATTACHEVENT DISPID_HTMLOBJECT+7 +#define DISPID_IHTMLWINDOW3_DETACHEVENT DISPID_HTMLOBJECT+8 +#define DISPID_IHTMLWINDOW3_SETTIMEOUT 1103 +#define DISPID_IHTMLWINDOW3_SETINTERVAL 1162 +#define DISPID_IHTMLWINDOW3_PRINT 1174 +#define DISPID_IHTMLWINDOW3_ONBEFOREPRINT DISPID_EVPROP_ONBEFOREPRINT +#define DISPID_IHTMLWINDOW3_ONAFTERPRINT DISPID_EVPROP_ONAFTERPRINT +#define DISPID_IHTMLWINDOW3_CLIPBOARDDATA 1175 +#define DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG 1176 + +/* IHTMLWindow4 */ +#define DISPID_IHTMLWINDOW4_CREATEPOPUP 1180 +#define DISPID_IHTMLWINDOW4_FRAMEELEMENT 1181 + /* IHTMLImageElementFactory */ #define DISPID_IHTMLIMAGEELEMENTFACTORY_CREATE DISPID_VALUE @@ -1390,6 +1528,9 @@ #define DISPID_IHTMLIMGELEMENT_HEIGHT STDPROPID_XOBJ_HEIGHT #define DISPID_IHTMLIMGELEMENT_START DISPID_IMGBASE+13 +/* IHTMLImgElement2 */ +#define DISPID_IHTMLIMGELEMENT2_LONGDESC DISPID_IMG+19 + /* IOmHistory */ #define DISPID_IOMHISTORY_LENGTH DISPID_HISTORY #define DISPID_IOMHISTORY_BACK (DISPID_HISTORY+1) @@ -1436,6 +1577,13 @@ #define DISPID_IHTMLOPSPROFILE_DOREADREQUEST 8 #define DISPID_IHTMLOPSPROFILE_DOWRITEREQUEST 9 +/* IHTMLDataTransfer */ +#define DISPID_IHTMLDATATRANSFER_SETDATA DISPID_DATATRANSFER+1 +#define DISPID_IHTMLDATATRANSFER_GETDATA DISPID_DATATRANSFER+2 +#define DISPID_IHTMLDATATRANSFER_CLEARDATA DISPID_DATATRANSFER+3 +#define DISPID_IHTMLDATATRANSFER_DROPEFFECT DISPID_DATATRANSFER+4 +#define DISPID_IHTMLDATATRANSFER_EFFECTALLOWED DISPID_DATATRANSFER+5 + /* IHTMLEventObj */ #define DISPID_IHTMLEVENTOBJ_SRCELEMENT (DISPID_EVENTOBJ+1) #define DISPID_IHTMLEVENTOBJ_ALTKEY (DISPID_EVENTOBJ+2) @@ -1481,6 +1629,9 @@ #define DISPID_IHTMLOPTIONELEMENT_TEXT (DISPID_OPTION+4) #define DISPID_IHTMLOPTIONELEMENT_FORM (DISPID_OPTION+6) +/* IHTMLOptionElement3 */ +#define DISPID_IHTMLOPTIONELEMENT3_LABEL DISPID_OPTION+7 + /* IHTMLFormElement */ #define DISPID_IHTMLFORMELEMENT_ACTION (DISPID_FORM+1) #define DISPID_IHTMLFORMELEMENT_DIR (DISPID_FORM+2) @@ -1639,6 +1790,19 @@ /* IHTMLDOMNode2 */ #define DISPID_IHTMLDOMNODE2_OWNERDOCUMENT DISPID_ELEMENT+113 +/* IHTMLDOMTextNode */ +#define DISPID_IHTMLDOMTEXTNODE_DATA DISPID_DOMTEXTNODE +#define DISPID_IHTMLDOMTEXTNODE_TOSTRING DISPID_DOMTEXTNODE+1 +#define DISPID_IHTMLDOMTEXTNODE_LENGTH DISPID_DOMTEXTNODE+2 +#define DISPID_IHTMLDOMTEXTNODE_SPLITTEXT DISPID_DOMTEXTNODE+3 + +/* IHTMLDOMTextNode2 */ +#define DISPID_IHTMLDOMTEXTNODE2_SUBSTRINGDATA DISPID_DOMTEXTNODE+4 +#define DISPID_IHTMLDOMTEXTNODE2_APPENDDATA DISPID_DOMTEXTNODE+5 +#define DISPID_IHTMLDOMTEXTNODE2_INSERTDATA DISPID_DOMTEXTNODE+6 +#define DISPID_IHTMLDOMTEXTNODE2_DELETEDATA DISPID_DOMTEXTNODE+7 +#define DISPID_IHTMLDOMTEXTNODE2_REPLACEDATA DISPID_DOMTEXTNODE+8 + /* IHTMLRenderStyle */ #define DISPID_IHTMLRENDERSTYLE_TEXTLINETHROUGHSTYLE DISPID_A_TEXTLINETHROUGHSTYLE #define DISPID_IHTMLRENDERSTYLE_TEXTUNDERLINESTYLE DISPID_A_TEXTUNDERLINESTYLE @@ -1792,6 +1956,10 @@ #define DISPID_IHTMLINPUTELEMENT_HEIGHT STDPROPID_XOBJ_HEIGHT #define DISPID_IHTMLINPUTELEMENT_START DISPID_INPUT+20 +/* IHTMLInputElement2 */ +#define DISPID_IHTMLINPUTELEMENT2_ACCEPT DISPID_INPUT+22 +#define DISPID_IHTMLINPUTELEMENT2_USEMAP DISPID_INPUT+23 + /* IHTMLInputTextElement */ #define DISPID_IHTMLINPUTTEXTELEMENT_TYPE DISPID_INPUT #define DISPID_IHTMLINPUTTEXTELEMENT_VALUE DISPID_A_VALUE @@ -1826,6 +1994,12 @@ #define DISPID_IHTMLSELECTELEMENT_ITEM DISPID_VALUE #define DISPID_IHTMLSELECTELEMENT_TAGS DISPID_COLLECTION+2 +/* IHTMLSelectElement2 */ +#define DISPID_IHTMLSELECTELEMENT2_URNS DISPID_COLLECTION+5 + +/* IHTMLSelectElement4 */ +#define DISPID_IHTMLSELECTELEMENT4_NAMEDITEM DISPID_COLLECTION+6 + /* IHTMLRect */ #define DISPID_IHTMLRECT_LEFT DISPID_OMRECT+1 #define DISPID_IHTMLRECT_TOP DISPID_OMRECT+2 @@ -1950,6 +2124,19 @@ #define DISPID_IHTMLTABLECAPTION_ALIGN STDPROPID_XOBJ_BLOCKALIGN #define DISPID_IHTMLTABLECAPTION_VALIGN DISPID_A_TABLEVALIGN + /* IHTMLCommentElement */ +#define DISPID_IHTMLCOMMENTELEMENT_TEXT DISPID_COMMENTPDL+1 +#define DISPID_IHTMLCOMMENTELEMENT_ATOMIC DISPID_COMMENTPDL+2 + + /* IHTMLCommentElement2 */ +#define DISPID_IHTMLCOMMENTELEMENT2_DATA DISPID_COMMENTPDL+3 +#define DISPID_IHTMLCOMMENTELEMENT2_LENGTH DISPID_COMMENTPDL+4 +#define DISPID_IHTMLCOMMENTELEMENT2_SUBSTRINGDATA DISPID_COMMENTPDL+5 +#define DISPID_IHTMLCOMMENTELEMENT2_APPENDDATA DISPID_COMMENTPDL+6 +#define DISPID_IHTMLCOMMENTELEMENT2_INSERTDATA DISPID_COMMENTPDL+7 +#define DISPID_IHTMLCOMMENTELEMENT2_DELETEDATA DISPID_COMMENTPDL+8 +#define DISPID_IHTMLCOMMENTELEMENT2_REPLACEDATA DISPID_COMMENTPDL+9 + /* IHTMLTable */ #define DISPID_IHTMLTABLE_COLS DISPID_TABLE+1 #define DISPID_IHTMLTABLE_BORDER DISPID_TABLE+2 @@ -2006,6 +2193,17 @@ /* IHTMLScriptElement2 */ #define DISPID_IHTMLSCRIPTELEMENT2_CHARSET DISPID_SCRIPT+10 +/* IHTMLFrameBase */ +#define DISPID_IHTMLFRAMEBASE_SRC DISPID_FRAMESITE+0 +#define DISPID_IHTMLFRAMEBASE_NAME STDPROPID_XOBJ_NAME +#define DISPID_IHTMLFRAMEBASE_BORDER DISPID_FRAMESITE+2 +#define DISPID_IHTMLFRAMEBASE_FRAMEBORDER DISPID_FRAMESITE+3 +#define DISPID_IHTMLFRAMEBASE_FRAMESPACING DISPID_FRAMESITE+4 +#define DISPID_IHTMLFRAMEBASE_MARGINWIDTH DISPID_FRAMESITE+5 +#define DISPID_IHTMLFRAMEBASE_MARGINHEIGHT DISPID_FRAMESITE+6 +#define DISPID_IHTMLFRAMEBASE_NORESIZE DISPID_FRAMESITE+7 +#define DISPID_IHTMLFRAMEBASE_SCROLLING DISPID_FRAMESITE+8 + /* IHTMLFrameBase2 */ #define DISPID_IHTMLFRAMEBASE2_CONTENTWINDOW DISPID_FRAMESITE+9 #define DISPID_IHTMLFRAMEBASE2_ONLOAD DISPID_EVPROP_ONLOAD diff --git a/reactos/include/psdk/mshtmhst.idl b/reactos/include/psdk/mshtmhst.idl index 5b24d63cc07..344a88f2d10 100644 --- a/reactos/include/psdk/mshtmhst.idl +++ b/reactos/include/psdk/mshtmhst.idl @@ -157,9 +157,9 @@ interface IDocHostUIHandler : IUnknown } DOCHOSTUIINFO; HRESULT ShowContextMenu( - [in] DWORD dwID, - [in] POINT *ppt, - [in] IUnknown *pcmdtReserved, + [in] DWORD dwID, + [in] POINT *ppt, + [in] IUnknown *pcmdtReserved, [in] IDispatch *pdispReserved); HRESULT GetHostInfo([in, out] DOCHOSTUIINFO *pInfo); @@ -188,7 +188,7 @@ interface IDocHostUIHandler : IUnknown HRESULT TranslateAccelerator( [in] LPMSG lpMsg, - [in] const GUID *pguidCmdGroup, + [in] const GUID *pguidCmdGroup, [in] DWORD nCmdID); HRESULT GetOptionKeyPath( @@ -196,7 +196,7 @@ interface IDocHostUIHandler : IUnknown [in] DWORD dw); HRESULT GetDropTarget( - [in] IDropTarget *pDropTarget, + [in] IDropTarget *pDropTarget, [out] IDropTarget **ppDropTarget); HRESULT GetExternal([out] IDispatch **ppDispatch); diff --git a/reactos/include/psdk/mshtml.idl b/reactos/include/psdk/mshtml.idl index adcc3f23189..594c9964810 100644 --- a/reactos/include/psdk/mshtml.idl +++ b/reactos/include/psdk/mshtml.idl @@ -34,6 +34,7 @@ cpp_quote("#define SID_SElementBehaviorFactory IID_IElementBehaviorFactory") interface IHTMLDocument2; interface IHTMLStyleSheetsCollection; +interface IHTMLFrameBase; /***************************************************************************** * IHTMLFiltersCollection interface @@ -630,10 +631,10 @@ interface IHTMLStyle : IDispatch * IHTMLRuleStyle interface */ [ - odl, - oleautomation, - dual, - uuid(3050F3CF-98B5-11CF-BB82-00AA00BDCE0B) + odl, + oleautomation, + dual, + uuid(3050F3CF-98B5-11CF-BB82-00AA00BDCE0B) ] interface IHTMLRuleStyle : IDispatch { @@ -1133,6 +1134,853 @@ interface IHTMLRuleStyle : IDispatch [retval, out] VARIANT_BOOL *pfSuccess); } +/***************************************************************************** + * DispHTMLStyle dispinterface + */ +[ + hidden, + uuid(3050f55a-98b5-11cf-bb82-00aa00bdce0b) +] +dispinterface DispHTMLStyle +{ +properties: +methods: + [propput, id(DISPID_IHTMLSTYLE_FONTFAMILY), displaybind, bindable] + void fontFamily(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_FONTFAMILY), displaybind, bindable] + BSTR fontFamily(); + + [propput, id(DISPID_IHTMLSTYLE_FONTSTYLE), displaybind, bindable] + void fontStyle(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_FONTSTYLE), displaybind, bindable] + BSTR fontStyle(); + + [propput, id(DISPID_IHTMLSTYLE_FONTVARIANT), displaybind, bindable] + void fontVariant(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_FONTVARIANT), displaybind, bindable] + BSTR fontVariant(); + + [propput, id(DISPID_IHTMLSTYLE_FONTWEIGHT), displaybind, bindable] + void fontWeight(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_FONTWEIGHT), displaybind, bindable] + BSTR fontWeight(); + + [propput, id(DISPID_IHTMLSTYLE_FONTSIZE), displaybind, bindable] + void fontSize(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_FONTSIZE), displaybind, bindable] + VARIANT fontSize(); + + [propput, id(DISPID_IHTMLSTYLE_FONT), displaybind, bindable, nonbrowsable] + void font(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_FONT), displaybind, bindable, nonbrowsable] + BSTR font(); + + [propput, id(DISPID_IHTMLSTYLE_COLOR), displaybind, bindable] + void color(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_COLOR), displaybind, bindable] + VARIANT color(); + + [propput, id(DISPID_IHTMLSTYLE_BACKGROUND), displaybind, bindable, nonbrowsable] + void background(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_BACKGROUND), displaybind, bindable, nonbrowsable] + BSTR background(); + + [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), displaybind, bindable] + void backgroundColor(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), displaybind, bindable] + VARIANT backgroundColor(); + + [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), displaybind, bindable] + void backgroundImage(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), displaybind, bindable] + BSTR backgroundImage(); + + [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), displaybind, bindable] + void backgroundRepeat(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), displaybind, bindable] + BSTR backgroundRepeat(); + + [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable] + void backgroundAttachment(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable] + BSTR backgroundAttachment(); + + [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), displaybind, bindable, nonbrowsable] + void backgroundPosition(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), displaybind, bindable, nonbrowsable] + BSTR backgroundPosition(); + + [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable] + void backgroundPositionX(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable] + VARIANT backgroundPositionX(); + + [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable] + void backgroundPositionY(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable] + VARIANT backgroundPositionY(); + + [propput, id(DISPID_IHTMLSTYLE_WORDSPACING), displaybind, bindable] + void wordSpacing(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_WORDSPACING), displaybind, bindable] + VARIANT wordSpacing(); + + [propput, id(DISPID_IHTMLSTYLE_LETTERSPACING), displaybind, bindable] + void letterSpacing(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_LETTERSPACING), displaybind, bindable] + VARIANT letterSpacing(); + + [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATION), displaybind, bindable] + void textDecoration(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATION), displaybind, bindable] + BSTR textDecoration(); + + [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), displaybind, bindable] + void textDecorationNone(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), displaybind, bindable] + VARIANT_BOOL textDecorationNone(); + + [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), displaybind, bindable] + void textDecorationUnderline(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), displaybind, bindable] + VARIANT_BOOL textDecorationUnderline(); + + [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), displaybind, bindable] + void textDecorationOverline(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), displaybind, bindable] + VARIANT_BOOL textDecorationOverline(); + + [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), displaybind, bindable] + void textDecorationLineThrough(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), displaybind, bindable] + VARIANT_BOOL textDecorationLineThrough(); + + [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), displaybind, bindable] + void textDecorationBlink(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), displaybind, bindable] + VARIANT_BOOL textDecorationBlink(); + + [propput, id(DISPID_IHTMLSTYLE_VERTICALALIGN), displaybind, bindable] + void verticalAlign(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_VERTICALALIGN), displaybind, bindable] + VARIANT verticalAlign(); + + [propput, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), displaybind, bindable] + void textTransform(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), displaybind, bindable] + BSTR textTransform(); + + [propput, id(DISPID_IHTMLSTYLE_TEXTALIGN), displaybind, bindable] + void textAlign(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_TEXTALIGN), displaybind, bindable] + BSTR textAlign(); + + [propput, id(DISPID_IHTMLSTYLE_TEXTINDENT), displaybind, bindable] + void textIndent(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_TEXTINDENT), displaybind, bindable] + VARIANT textIndent(); + + [propput, id(DISPID_IHTMLSTYLE_LINEHEIGHT), displaybind, bindable] + void lineHeight(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_LINEHEIGHT), displaybind, bindable] + VARIANT lineHeight(); + + [propput, id(DISPID_IHTMLSTYLE_MARGINTOP), displaybind, bindable] + void marginTop(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_MARGINTOP), displaybind, bindable] + VARIANT marginTop(); + + [propput, id(DISPID_IHTMLSTYLE_MARGINRIGHT), displaybind, bindable] + void marginRight(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_MARGINRIGHT), displaybind, bindable] + VARIANT marginRight(); + + [propput, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), displaybind, bindable] + void marginBottom(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), displaybind, bindable] + VARIANT marginBottom(); + + [propput, id(DISPID_IHTMLSTYLE_MARGINLEFT), displaybind, bindable] + void marginLeft(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_MARGINLEFT), displaybind, bindable] + VARIANT marginLeft(); + + [propput, id(DISPID_IHTMLSTYLE_MARGIN), displaybind, bindable, nonbrowsable] + void margin(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_MARGIN), displaybind, bindable, nonbrowsable] + BSTR margin(); + + [propput, id(DISPID_IHTMLSTYLE_PADDINGTOP), displaybind, bindable] + void paddingTop(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_PADDINGTOP), displaybind, bindable] + VARIANT paddingTop(); + + [propput, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), displaybind, bindable] + void paddingRight(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), displaybind, bindable] + VARIANT paddingRight(); + + [propput, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), displaybind, bindable] + void paddingBottom(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), displaybind, bindable] + VARIANT paddingBottom(); + + [propput, id(DISPID_IHTMLSTYLE_PADDINGLEFT), displaybind, bindable] + void paddingLeft(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_PADDINGLEFT), displaybind, bindable] + VARIANT paddingLeft(); + + [propput, id(DISPID_IHTMLSTYLE_PADDING), displaybind, bindable, nonbrowsable] + void padding(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_PADDING), displaybind, bindable, nonbrowsable] + BSTR padding(); + + [propput, id(DISPID_IHTMLSTYLE_BORDER), displaybind, bindable, nonbrowsable] + void border(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_BORDER), displaybind, bindable, nonbrowsable] + BSTR border(); + + [propput, id(DISPID_IHTMLSTYLE_BORDERTOP), displaybind, bindable] + void borderTop(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_BORDERTOP), displaybind, bindable] + BSTR borderTop(); + + [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHT), displaybind, bindable] + void borderRight(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHT), displaybind, bindable] + BSTR borderRight(); + + [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), displaybind, bindable] + void borderBottom(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), displaybind, bindable] + BSTR borderBottom(); + + [propput, id(DISPID_IHTMLSTYLE_BORDERLEFT), displaybind, bindable] + void borderLeft(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_BORDERLEFT), displaybind, bindable] + BSTR borderLeft(); + + [propput, id(DISPID_IHTMLSTYLE_BORDERCOLOR), displaybind, bindable] + void borderColor(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_BORDERCOLOR), displaybind, bindable] + BSTR borderColor(); + + [propput, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), displaybind, bindable] + void borderTopColor(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), displaybind, bindable] + VARIANT borderTopColor(); + + [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), displaybind, bindable] + void borderRightColor(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), displaybind, bindable] + VARIANT borderRightColor(); + + [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable] + void borderBottomColor(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable] + VARIANT borderBottomColor(); + + [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), displaybind, bindable] + void borderLeftColor(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), displaybind, bindable] + VARIANT borderLeftColor(); + + [propput, id(DISPID_IHTMLSTYLE_BORDERWIDTH), displaybind, bindable] + void borderWidth(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_BORDERWIDTH), displaybind, bindable] + BSTR borderWidth(); + + [propput, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), displaybind, bindable] + void borderTopWidth(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), displaybind, bindable] + VARIANT borderTopWidth(); + + [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), displaybind, bindable] + void borderRightWidth(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), displaybind, bindable] + VARIANT borderRightWidth(); + + [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable] + void borderBottomWidth(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable] + VARIANT borderBottomWidth(); + + [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), displaybind, bindable] + void borderLeftWidth(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), displaybind, bindable] + VARIANT borderLeftWidth(); + + [propput, id(DISPID_IHTMLSTYLE_BORDERSTYLE), displaybind, bindable] + void borderStyle(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_BORDERSTYLE), displaybind, bindable] + BSTR borderStyle(); + + [propput, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), displaybind, bindable] + void borderTopStyle(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), displaybind, bindable] + BSTR borderTopStyle(); + + [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), displaybind, bindable] + void borderRightStyle(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), displaybind, bindable] + BSTR borderRightStyle(); + + [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable] + void borderBottomStyle(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable] + BSTR borderBottomStyle(); + + [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), displaybind, bindable] + void borderLeftStyle(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), displaybind, bindable] + BSTR borderLeftStyle(); + + [propput, id(DISPID_IHTMLSTYLE_WIDTH), displaybind, bindable] + void width(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_WIDTH), displaybind, bindable] + VARIANT width(); + + [propput, id(DISPID_IHTMLSTYLE_HEIGHT), displaybind, bindable] + void height(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_HEIGHT), displaybind, bindable] + VARIANT height(); + + [propput, id(DISPID_IHTMLSTYLE_STYLEFLOAT), displaybind, bindable] + void styleFloat(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_STYLEFLOAT), displaybind, bindable] + BSTR styleFloat(); + + [propput, id(DISPID_IHTMLSTYLE_CLEAR), displaybind, bindable] + void clear(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_CLEAR), displaybind, bindable] + BSTR clear(); + + [propput, id(DISPID_IHTMLSTYLE_DISPLAY), displaybind, bindable] + void display(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_DISPLAY), displaybind, bindable] + BSTR display(); + + [propput, id(DISPID_IHTMLSTYLE_VISIBILITY), displaybind, bindable] + void visibility(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_VISIBILITY), displaybind, bindable] + BSTR visibility(); + + [propput, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), displaybind, bindable] + void listStyleType(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), displaybind, bindable] + BSTR listStyleType(); + + [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), displaybind, bindable] + void listStylePosition(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), displaybind, bindable] + BSTR listStylePosition(); + + [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), displaybind, bindable] + void listStyleImage(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), displaybind, bindable] + BSTR listStyleImage(); + + [propput, id(DISPID_IHTMLSTYLE_LISTSTYLE), displaybind, bindable, nonbrowsable] + void listStyle(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_LISTSTYLE), displaybind, bindable, nonbrowsable] + BSTR listStyle(); + + [propput, id(DISPID_IHTMLSTYLE_WHITESPACE), displaybind, bindable] + void whiteSpace(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_WHITESPACE), displaybind, bindable] + BSTR whiteSpace(); + + [propput, id(DISPID_IHTMLSTYLE_TOP), displaybind, bindable] + void top(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_TOP), displaybind, bindable] + VARIANT top(); + + [propput, id(DISPID_IHTMLSTYLE_LEFT), displaybind, bindable] + void left(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_LEFT), displaybind, bindable] + VARIANT left(); + + [propput, id(DISPID_IHTMLSTYLE_ZINDEX), displaybind, bindable] + void zIndex(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE_ZINDEX), displaybind, bindable] + VARIANT zIndex(); + + [propput, id(DISPID_IHTMLSTYLE_OVERFLOW), displaybind, bindable] + void overflow(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_OVERFLOW), displaybind, bindable] + BSTR overflow(); + + [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), displaybind, bindable] + void pageBreakBefore(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), displaybind, bindable] + BSTR pageBreakBefore(); + + [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), displaybind, bindable] + void pageBreakAfter(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), displaybind, bindable] + BSTR pageBreakAfter(); + + [propput, id(DISPID_IHTMLSTYLE_CSSTEXT), displaybind, bindable, nonbrowsable] + void cssText(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_CSSTEXT), displaybind, bindable, nonbrowsable] + BSTR cssText(); + + [propput, id(DISPID_IHTMLSTYLE_PIXELTOP), displaybind, bindable, hidden] + void pixelTop(long v); + + [propget, id(DISPID_IHTMLSTYLE_PIXELTOP), displaybind, bindable, hidden] + long pixelTop(); + + [propput, id(DISPID_IHTMLSTYLE_PIXELLEFT), displaybind, bindable, hidden] + void pixelLeft(long v); + + [propget, id(DISPID_IHTMLSTYLE_PIXELLEFT), displaybind, bindable, hidden] + long pixelLeft(); + + [propput, id(DISPID_IHTMLSTYLE_PIXELWIDTH), displaybind, bindable, hidden] + void pixelWidth(long v); + + [propget, id(DISPID_IHTMLSTYLE_PIXELWIDTH), displaybind, bindable, hidden] + long pixelWidth(); + + [propput, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), displaybind, bindable, hidden] + void pixelHeight(long v); + + [propget, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), displaybind, bindable, hidden] + long pixelHeight(); + + [propput, id(DISPID_IHTMLSTYLE_POSTOP), displaybind, bindable] + void posTop(float v); + + [propget, id(DISPID_IHTMLSTYLE_POSTOP), displaybind, bindable] + float posTop(); + + [propput, id(DISPID_IHTMLSTYLE_POSLEFT), displaybind, bindable] + void posLeft(float v); + + [propget, id(DISPID_IHTMLSTYLE_POSLEFT), displaybind, bindable] + float posLeft(); + + [propput, id(DISPID_IHTMLSTYLE_POSWIDTH), displaybind, bindable] + void posWidth(float v); + + [propget, id(DISPID_IHTMLSTYLE_POSWIDTH), displaybind, bindable] + float posWidth(); + + [propput, id(DISPID_IHTMLSTYLE_POSHEIGHT), displaybind, bindable] + void posHeight(float v); + + [propget, id(DISPID_IHTMLSTYLE_POSHEIGHT), displaybind, bindable] + float posHeight(); + + [propput, id(DISPID_IHTMLSTYLE_CURSOR), displaybind, bindable] + void cursor(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_CURSOR), displaybind, bindable] + BSTR cursor(); + + [propput, id(DISPID_IHTMLSTYLE_CLIP), displaybind, bindable] + void clip(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_CLIP), displaybind, bindable] + BSTR clip(); + + [propput, id(DISPID_IHTMLSTYLE_FILTER), displaybind, bindable] + void filter(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE_FILTER), displaybind, bindable] + BSTR filter(); + + [id(DISPID_IHTMLSTYLE_SETATTRIBUTE)] + void setAttribute( + [in] BSTR strAttributeName, + [in] VARIANT AttributeValue, + [in, defaultvalue(1)] LONG lFlags); + + [id(DISPID_IHTMLSTYLE_GETATTRIBUTE)] + VARIANT getAttribute( + [in] BSTR strAttributeName, + [in, defaultvalue(0)] LONG lFlags); + + [id(DISPID_IHTMLSTYLE_REMOVEATTRIBUTE)] + VARIANT_BOOL removeAttribute( + [in] BSTR strAttributeName, + [in, defaultvalue(1)] LONG lFlags); + + [id(DISPID_IHTMLSTYLE_TOSTRING)] + BSTR toString(); + + [propput, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable] + void tableLayout(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable] + BSTR tableLayout(); + + [propput, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable] + void borderCollapse(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable] + BSTR borderCollapse(); + + [propput, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable] + void direction(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable] + BSTR direction(); + + [propput, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable] + void behavior(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable] + BSTR behavior(); + + [id(DISPID_IHTMLSTYLE2_SETEXPRESSION)] + void setExpression( + [in] BSTR propname, + [in] BSTR expression, + [in, defaultvalue("")] BSTR language); + + [id(DISPID_IHTMLSTYLE2_GETEXPRESSION)] + VARIANT getExpression([in] BSTR propname); + + [id(DISPID_IHTMLSTYLE2_REMOVEEXPRESSION)] + VARIANT_BOOL removeExpression([in] BSTR propname); + + [propput, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable] + void position(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable] + BSTR position(); + + [propput, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable] + void unicodeBidi(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable] + BSTR unicodeBidi(); + + [propput, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable] + void bottom(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable] + VARIANT bottom(); + + [propput, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable] + void right(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable] + VARIANT right(); + + [propput, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden] + void pixelBottom(long v); + + [propget, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden] + long pixelBottom(); + + [propput, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden] + void pixelRight(long v); + + [propget, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden] + long pixelRight(); + + [propput, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable] + void posBottom(float v); + + [propget, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable] + float posBottom(); + + [propput, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable] + void posRight(float v); + + [propget, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable] + float posRight(); + + [propput, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable] + void imeMode(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable] + BSTR imeMode(); + + [propput, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable] + void rubyAlign(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable] + BSTR rubyAlign(); + + [propput, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable] + void rubyPosition(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable] + BSTR rubyPosition(); + + [propput, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable] + void rubyOverhang(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable] + BSTR rubyOverhang(); + + [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable] + void layoutGridChar(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable] + VARIANT layoutGridChar(); + + [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable] + void layoutGridLine(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable] + VARIANT layoutGridLine(); + + [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable] + void layoutGridMode(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable] + BSTR layoutGridMode(); + + [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable] + void layoutGridType(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable] + BSTR layoutGridType(); + + [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable] + void layoutGrid(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable] + BSTR layoutGrid(); + + [propput, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable] + void wordBreak(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable] + BSTR wordBreak(); + + [propput, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable] + void lineBreak(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable] + BSTR lineBreak(); + + [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable] + void textJustify(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable] + BSTR textJustify(); + + [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable] + void textJustifyTrim(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable] + BSTR textJustifyTrim(); + + [propput, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable] + void textKashida(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable] + VARIANT textKashida(); + + [propput, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable] + void textAutospace(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable] + BSTR textAutospace(); + + [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable] + void overflowX(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable] + BSTR overflowX(); + + [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable] + void overflowY(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable] + BSTR overflowY(); + + [propput, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable] + void accelerator(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable] + BSTR accelerator(); + + [propput, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable] + void layoutFlow(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable] + BSTR layoutFlow(); + + [propput, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable] + void zoom(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable] + VARIANT zoom(); + + [propput, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable] + void wordWrap(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable] + BSTR wordWrap(); + + [propput, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable] + void textUnderlinePosition(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable] + BSTR textUnderlinePosition(); + + [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable] + void scrollbarBaseColor(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable] + VARIANT scrollbarBaseColor(); + + [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable] + void scrollbarFaceColor(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable] + VARIANT scrollbarFaceColor(); + + [propput, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable] + void scrollbar3dLightColor(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable] + VARIANT scrollbar3dLightColor(); + + [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable] + void scrollbarShadowColor(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable] + VARIANT scrollbarShadowColor(); + + [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable] + void scrollbarHighlightColor(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable] + VARIANT scrollbarHighlightColor(); + + [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable] + void scrollbarDarkShadowColor(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable] + VARIANT scrollbarDarkShadowColor(); + + [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable] + void scrollbarArrowColor(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable] + VARIANT scrollbarArrowColor(); + + [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable] + void scrollbarTrackColor(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable] + VARIANT scrollbarTrackColor(); + + [propput, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable] + void writingMode(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable] + BSTR writingMode(); + + [propput, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable] + void textAlignLast(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable] + BSTR textAlignLast(); + + [propput, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable] + void textKashidaSpace(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable] + VARIANT textKashidaSpace(); + + [propput, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable] + void textOverflow(BSTR v); + + [propget, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable] + BSTR textOverflow(); + + [propput, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable] + void minHeight(VARIANT v); + + [propget, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable] + VARIANT minHeight(); +} + /***************************************************************************** * IHTMLRenderStyle interface */ @@ -1675,6 +2523,35 @@ interface IHTMLDOMAttribute : IDispatch HRESULT specified([retval, out] VARIANT_BOOL *p); } +/***************************************************************************** + * IHTMLDOMTextNode interface + */ +[ + odl, + oleautomation, + dual, + uuid(3050f4b1-98b5-11cf-bb82-00aa00bdce0b) +] +interface IHTMLDOMTextNode : IDispatch +{ + [propput, id(DISPID_IHTMLDOMTEXTNODE_DATA)] + HRESULT data([in] BSTR v); + + [propget, id(DISPID_IHTMLDOMTEXTNODE_DATA)] + HRESULT data([out, retval] BSTR *p); + + [id(DISPID_IHTMLDOMTEXTNODE_TOSTRING)] + HRESULT toString([out, retval] BSTR *String); + + [propget, id(DISPID_IHTMLDOMTEXTNODE_LENGTH)] + HRESULT length([out, retval] long *p); + + [id(DISPID_IHTMLDOMTEXTNODE_SPLITTEXT)] + HRESULT splitText( + [in] long offset, + [out, retval] IHTMLDOMNode **pRetNode); +} + /***************************************************************************** * IHTMLDOMImplementation interface */ @@ -1693,6 +2570,168 @@ interface IHTMLDOMImplementation : IDispatch [retval, out] VARIANT_BOOL *pfHasFeature); } +/***************************************************************************** + * DispHTMLDOMTextNode dispinterface + */ +[ + hidden, + uuid(3050f565-98b5-11cf-bb82-00aa00bdce0b) +] +dispinterface DispHTMLDOMTextNode +{ +properties: +methods: + [propput, id(DISPID_IHTMLDOMTEXTNODE_DATA)] + void data(BSTR v); + + [propget, id(DISPID_IHTMLDOMTEXTNODE_DATA)] + BSTR data(); + + [id(DISPID_IHTMLDOMTEXTNODE_TOSTRING)] + BSTR toString(); + + [propget, id(DISPID_IHTMLDOMTEXTNODE_LENGTH)] + long length(); + + [id(DISPID_IHTMLDOMTEXTNODE_SPLITTEXT)] + IHTMLDOMNode *splitText([in] long offset); + + [id(DISPID_IHTMLDOMTEXTNODE2_SUBSTRINGDATA)] + BSTR substringData( + [in] long offset, + [in] long Count); + + [id(DISPID_IHTMLDOMTEXTNODE2_APPENDDATA)] + void appendData([in] BSTR bstrstring); + + [id(DISPID_IHTMLDOMTEXTNODE2_INSERTDATA)] + void insertData( + [in] long offset, + [in] BSTR bstrstring); + + [id(DISPID_IHTMLDOMTEXTNODE2_DELETEDATA)] + void deleteData( + [in] long offset, + [in] long Count); + + [id(DISPID_IHTMLDOMTEXTNODE2_REPLACEDATA)] + void replaceData( + [in] long offset, + [in] long Count, + [in] BSTR bstrstring); + + [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)] + long nodeType(); + + [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)] + IHTMLDOMNode *parentNode(); + + [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)] + VARIANT_BOOL hasChildNodes(); + + [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)] + IDispatch *childNodes(); + + [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)] + IDispatch *attributes(); + + [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)] + IHTMLDOMNode *insertBefore( + [in] IHTMLDOMNode *newChild, + [in, optional] VARIANT refChild); + + [id(DISPID_IHTMLDOMNODE_REMOVECHILD)] + IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild); + + [id(DISPID_IHTMLDOMNODE_REPLACECHILD)] + IHTMLDOMNode *replaceChild( + [in] IHTMLDOMNode *newChild, + [in] IHTMLDOMNode *oldChild); + + [id(DISPID_IHTMLDOMNODE_CLONENODE)] + IHTMLDOMNode* cloneNode([in] VARIANT_BOOL fDeep); + + [id(DISPID_IHTMLDOMNODE_REMOVENODE)] + IHTMLDOMNode *removeNode([in, defaultvalue(0)] VARIANT_BOOL fDeep); + + [id(DISPID_IHTMLDOMNODE_SWAPNODE)] + IHTMLDOMNode *swapNode([in] IHTMLDOMNode *otherNode); + + [id(DISPID_IHTMLDOMNODE_REPLACENODE)] + IHTMLDOMNode *replaceNode([in] IHTMLDOMNode *replacement); + + [id(DISPID_IHTMLDOMNODE_APPENDCHILD)] + IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild); + + [propget, id(DISPID_IHTMLDOMNODE_NODENAME)] + BSTR nodeName(); + + [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)] + void nodeValue(VARIANT v); + + [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)] + VARIANT nodeValue(); + + [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)] + IHTMLDOMNode *firstChild(); + + [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)] + IHTMLDOMNode *lastChild(); + + [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)] + IHTMLDOMNode *previousSibling(); + + [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)] + IHTMLDOMNode* nextSibling(); + + [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)] + IDispatch *ownerDocument(); +} + +/***************************************************************************** + * IHTMLDOMChildrenCollection interface + */ +[ + odl, + oleautomation, + dual, + uuid(3050f5ab-98b5-11cf-bb82-00aa00bdce0b) +] +interface IHTMLDOMChildrenCollection : IDispatch +{ + [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION_LENGTH)] + HRESULT length([out, retval] long *p); + + [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION__NEWENUM), hidden, restricted] + HRESULT _newEnum([out, retval] IUnknown **p); + + [id(DISPID_IHTMLDOMCHILDRENCOLLECTION_ITEM)] + HRESULT item( + [in] long index, + [out, retval] IDispatch **ppItem); +} + +/***************************************************************************** + * DispDOMChildrenCollection dispinterface + */ +[ + hidden, + uuid(3050f577-98b5-11cf-bb82-00aa00bdce0b) +] +dispinterface DispDOMChildrenCollection +{ +properties: +methods: + [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION_LENGTH)] + long length(); + + [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION__NEWENUM), hidden, restricted] + IUnknown *_newEnum(); + + [id(DISPID_IHTMLDOMCHILDRENCOLLECTION_ITEM)] + IDispatch *item([in] long index); +} + interface IHTMLElementCollection; /***************************************************************************** @@ -2318,6 +3357,869 @@ interface IHTMLElement2 : IDispatch [retval, out] IHTMLElementCollection **pelColl); } +/***************************************************************************** + * IHTMLGenericElement interface + */ +[ + odl, + oleautomation, + dual, + uuid(3050f4b7-98b5-11cf-bb82-00aa00bdce0b) +] +interface IHTMLGenericElement : IDispatch +{ + [propget, id(DISPID_IHTMLGENERICELEMENT_RECORDSET), hidden] + HRESULT recordset([out, retval] IDispatch **p); + + [id(DISPID_IHTMLGENERICELEMENT_NAMEDRECORDSET)] + HRESULT namedRecordset( + [in] BSTR dataMember, + [in, optional] VARIANT *hierarchy, + [out, retval] IDispatch **ppRecordset); +} + +/***************************************************************************** + * DispHTMLGenericElement dispinterface + */ +[ + hidden, + uuid(3050f563-98b5-11cf-bb82-00aa00bdce0b) +] +dispinterface DispHTMLGenericElement +{ +properties: +methods: + [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)] + void setAttribute( + [in] BSTR strAttributeName, + [in] VARIANT AttributeValue, + [in, defaultvalue(1)] LONG lFlags); + + [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)] + VARIANT getAttribute( + [in] BSTR strAttributeName, + [in, defaultvalue(0)] LONG lFlags); + + [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)] + VARIANT_BOOL removeAttribute( + [in] BSTR strAttributeName, + [in, defaultvalue(1)] LONG lFlags); + + [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable] + void className(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable] + BSTR className(); + + [propput, id(DISPID_IHTMLELEMENT_ID), bindable] + void id(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_ID), bindable] + BSTR id(); + + [propget, id(DISPID_IHTMLELEMENT_TAGNAME)] + BSTR tagName(); + + [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)] + IHTMLElement *parentElement(); + + [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable] + IHTMLStyle *style(); + + [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable] + void onhelp(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable] + VARIANT onhelp(); + + [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable] + void onclick(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable] + VARIANT onclick(); + + [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable] + void ondblclick(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable] + VARIANT ondblclick(); + + [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] + void onkeydown(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] + VARIANT onkeydown(); + + [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable] + void onkeyup(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable] + VARIANT onkeyup(); + + [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable] + void onkeypress(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable] + VARIANT onkeypress(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable] + void onmouseout(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable] + VARIANT onmouseout(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] + void onmouseover(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] + VARIANT onmouseover(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] + void onmousemove(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] + VARIANT onmousemove(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] + void onmousedown(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] + VARIANT onmousedown(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] + void onmouseup(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] + VARIANT onmouseup(); + + [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)] + IDispatch *document(); + + [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable] + void title(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable] + BSTR title(); + + [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable] + void language(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable] + BSTR language(); + + [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] + void onselectstart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] + VARIANT onselectstart(); + + [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)] + void scrollIntoView([in, optional] VARIANT varargStart); + + [id(DISPID_IHTMLELEMENT_CONTAINS)] + VARIANT_BOOL contains([in] IHTMLElement *pChild); + + [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable] + long sourceIndex(); + + [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)] + VARIANT recordNumber(); + + [propput, id(DISPID_IHTMLELEMENT_LANG)] + void lang(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_LANG)] + BSTR lang(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)] + long offsetLeft(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)] + long offsetTop(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)] + long offsetWidth(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)] + long offsetHeight(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)] + IHTMLElement *offsetParent(); + + [propput, id(DISPID_IHTMLELEMENT_INNERHTML)] + void innerHTML(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_INNERHTML)] + BSTR innerHTML(); + + [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)] + void innerText(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)] + BSTR innerText(); + + [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)] + void outerHTML(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)] + BSTR outerHTML(); + + [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)] + void outerText(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)] + BSTR outerText(); + + [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)] + void insertAdjacentHTML( + [in] BSTR where, + [in] BSTR html); + + [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)] + void insertAdjacentText( + [in] BSTR where, + [in] BSTR text); + + [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)] + IHTMLElement *parentTextEdit(); + + [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)] + VARIANT_BOOL isTextEdit(); + + [id(DISPID_IHTMLELEMENT_CLICK)] + void click(); + + [propget, id(DISPID_IHTMLELEMENT_FILTERS)] + IHTMLFiltersCollection *filters(); + + [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] + void ondragstart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] + VARIANT ondragstart(); + + [id(DISPID_IHTMLELEMENT_TOSTRING)] + BSTR toString(); + + [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] + void onbeforeupdate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] + VARIANT onbeforeupdate(); + + [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] + void onafterupdate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] + VARIANT onafterupdate(); + + [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] + void onerrorupdate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] + VARIANT onerrorupdate(); + + [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] + void onrowexit(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] + VARIANT onrowexit(); + + [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] + void onrowenter(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] + VARIANT onrowenter(); + + [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] + void ondatasetchanged(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] + VARIANT ondatasetchanged(); + + [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] + void ondataavailable(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] + VARIANT ondataavailable(); + + [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] + void ondatasetcomplete(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] + VARIANT ondatasetcomplete(); + + [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] + void onfilterchange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] + VARIANT onfilterchange(); + + [propget, id(DISPID_IHTMLELEMENT_CHILDREN)] + IDispatch *children(); + + [propget, id(DISPID_IHTMLELEMENT_ALL)] + IDispatch *all(); + + [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)] + BSTR scopeName(); + + [id(DISPID_IHTMLELEMENT2_SETCAPTURE)] + void setCapture([in, defaultvalue(-1)] VARIANT_BOOL containerCapture); + + [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)] + void releaseCapture(); + + [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] + void onlosecapture(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] + VARIANT onlosecapture(); + + [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)] + BSTR componentFromPoint( + [in] long x, + [in] long y); + + [id(DISPID_IHTMLELEMENT2_DOSCROLL)] + void doScroll([in, optional] VARIANT component); + + [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] + void onscroll(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] + VARIANT onscroll(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable] + void ondrag(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable] + VARIANT ondrag(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] + void ondragend(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] + VARIANT ondragend(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] + void ondragenter(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] + VARIANT ondragenter(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] + void ondragover(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] + VARIANT ondragover(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] + void ondragleave(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] + VARIANT ondragleave(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable] + void ondrop(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable] + VARIANT ondrop(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] + void onbeforecut(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] + VARIANT onbeforecut(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable] + void oncut(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable] + VARIANT oncut(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] + void onbeforecopy(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] + VARIANT onbeforecopy(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable] + void oncopy(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable] + VARIANT oncopy(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] + void onbeforepaste(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] + VARIANT onbeforepaste(); + + [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable] + void onpaste(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable] + VARIANT onpaste(); + + [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable] + IHTMLCurrentStyle *currentStyle(); + + [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] + void onpropertychange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] + VARIANT onpropertychange(); + + [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)] + IHTMLRectCollection *getClientRects(); + + [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)] + IHTMLRect *getBoundingClientRect(); + + [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)] + void setExpression( + [in] BSTR propname, + [in] BSTR expression, + [in, defaultvalue("")] BSTR language); + + [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)] + VARIANT getExpression([in] BSTR propname); + + [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)] + VARIANT_BOOL removeExpression([in] BSTR propname); + + [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] + void tabIndex(short v); + + [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] + short tabIndex(); + + [id(DISPID_IHTMLELEMENT2_FOCUS)] + void focus(); + + [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable] + void accessKey(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable] + BSTR accessKey(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable] + void onblur(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable] + VARIANT onblur(); + + [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable] + void onfocus(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable] + VARIANT onfocus(); + + [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] + void onresize(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] + VARIANT onresize(); + + [id(DISPID_IHTMLELEMENT2_BLUR)] + void blur(); + + [id(DISPID_IHTMLELEMENT2_ADDFILTER)] + void addFilter([in] IUnknown *pUnk); + + [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)] + void removeFilter([in] IUnknown *pUnk); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable] + long clientHeight(); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable] + long clientWidth(); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable] + long clientTop(); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable] + long clientLeft(); + + [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)] + VARIANT_BOOL attachEvent( + [in] BSTR event, + [in] IDispatch *pDisp); + + [id(DISPID_IHTMLELEMENT2_DETACHEVENT)] + void detachEvent( + [in] BSTR event, + [in] IDispatch *pDisp); + + [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)] + VARIANT readyState(); + + [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] + void onreadystatechange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] + VARIANT onreadystatechange(); + + [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] + void onrowsdelete(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] + VARIANT onrowsdelete(); + + [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] + void onrowsinserted(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] + VARIANT onrowsinserted(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] + void oncellchange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] + VARIANT oncellchange(); + + [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable] + void dir(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable] + BSTR dir(); + + [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)] + IDispatch *createControlRange(); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable] + long scrollHeight(); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable] + long scrollWidth(); + + [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable] + void scrollTop(long v); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable] + long scrollTop(); + + [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] + void scrollLeft(long v); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] + long scrollLeft(); + + [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)] + void clearAttributes(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] + void oncontextmenu(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] + VARIANT oncontextmenu(); + + [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)] + IHTMLElement *insertAdjacentElement( + [in] BSTR where, + [in] IHTMLElement *insertedElement); + + [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)] + IHTMLElement *applyElement( + [in] IHTMLElement *apply, + [in] BSTR where); + + [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)] + BSTR getAdjacentText([in] BSTR where); + + [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)] + BSTR replaceAdjacentText( + [in] BSTR where, + [in] BSTR newText); + + [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)] + VARIANT_BOOL canHaveChildren(); + + [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)] + long addBehavior( + [in] BSTR bstrUrl, + [in, optional] VARIANT *pvarFactory); + + [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)] + VARIANT_BOOL removeBehavior([in] long cookie); + + [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable] + IHTMLStyle *runtimeStyle(); + + [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)] + IDispatch *behaviorUrns(); + + [propput, id(DISPID_IHTMLELEMENT2_TAGURN)] + void tagUrn(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT2_TAGURN)] + BSTR tagUrn(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] + void onbeforeeditfocus(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] + VARIANT onbeforeeditfocus(); + + [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted] + long readyStateValue(); + + [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)] + IHTMLElementCollection *getElementsByTagName([in] BSTR v); + + [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)] + void mergeAttributes( + [in] IHTMLElement *mergeThis, + [in, optional] VARIANT *pvarFlags); + + [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)] + VARIANT_BOOL isMultiLine(); + + [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)] + VARIANT_BOOL canHaveHTML(); + + [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] + void onlayoutcomplete(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] + VARIANT onlayoutcomplete(); + + [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable] + void onpage(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable] + VARIANT onpage(); + + [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] + void inflateBlock(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] + VARIANT_BOOL inflateBlock(); + + [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] + void onbeforedeactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] + VARIANT onbeforedeactivate(); + + [id(DISPID_IHTMLELEMENT3_SETACTIVE)] + void setActive(); + + [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] + void contentEditable(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] + BSTR contentEditable(); + + [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)] + VARIANT_BOOL isContentEditable(); + + [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable] + void hideFocus(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable] + VARIANT_BOOL hideFocus(); + + [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] + void disabled(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] + VARIANT_BOOL disabled(); + + [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)] + VARIANT_BOOL isDisabled(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable] + void onmove(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable] + VARIANT onmove(); + + [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] + void oncontrolselect(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] + VARIANT oncontrolselect(); + + [id(DISPID_IHTMLELEMENT3_FIREEVENT)] + VARIANT_BOOL fireEvent( + [in] BSTR bstrEventName, + [in, optional] VARIANT *pvarEventObject); + + [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] + void onresizestart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] + VARIANT onresizestart(); + + [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] + void onresizeend(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] + VARIANT onresizeend(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] + void onmovestart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] + VARIANT onmovestart(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable] + void onmoveend(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable] + VARIANT onmoveend(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] + void onmouseenter(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] + VARIANT onmouseenter(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] + void onmouseleave(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] + VARIANT onmouseleave(); + + [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] + void onactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] + VARIANT onactivate(); + + [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] + void ondeactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] + VARIANT ondeactivate(); + + [id(DISPID_IHTMLELEMENT3_DRAGDROP)] + VARIANT_BOOL dragDrop(); + + [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable] + LONG glyphMode(); + + [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] + void onmousewheel(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] + VARIANT onmousewheel(); + + [id(DISPID_IHTMLELEMENT4_NORMALIZE)] + void normalize(); + + [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)] + IHTMLDOMAttribute *getAttributeNode([in] BSTR bstrname); + + [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)] + IHTMLDOMAttribute *setAttributeNode([in] IHTMLDOMAttribute *pattr); + + [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)] + IHTMLDOMAttribute *removeAttributeNode([in] IHTMLDOMAttribute *pattr); + + [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] + void onbeforeactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] + VARIANT onbeforeactivate(); + + [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable] + void onfocusin(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable] + VARIANT onfocusin(); + + [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] + void onfocusout(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] + VARIANT onfocusout(); + + [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden] + long uniqueNumber(); + + [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden] + BSTR uniqueID(); + + [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)] + long nodeType(); + + [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)] + IHTMLDOMNode *parentNode(); + + [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)] + VARIANT_BOOL hasChildNodes(); + + [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)] + IDispatch *childNodes(); + + [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)] + IDispatch *attributes(); + + [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)] + IHTMLDOMNode *insertBefore( + [in] IHTMLDOMNode *newChild, + [in, optional] VARIANT refChild); + + [id(DISPID_IHTMLDOMNODE_REMOVECHILD)] + IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild); + + [id(DISPID_IHTMLDOMNODE_REPLACECHILD)] + IHTMLDOMNode *replaceChild( + [in] IHTMLDOMNode *newChild, + [in] IHTMLDOMNode *oldChild); + + [id(DISPID_IHTMLDOMNODE_CLONENODE)] + IHTMLDOMNode *cloneNode([in] VARIANT_BOOL fDeep); + + [id(DISPID_IHTMLDOMNODE_REMOVENODE)] + IHTMLDOMNode *removeNode([in, defaultvalue(0)] VARIANT_BOOL fDeep); + + [id(DISPID_IHTMLDOMNODE_SWAPNODE)] + IHTMLDOMNode *swapNode([in] IHTMLDOMNode *otherNode); + + [id(DISPID_IHTMLDOMNODE_REPLACENODE)] + IHTMLDOMNode *replaceNode([in] IHTMLDOMNode *replacement); + + [id(DISPID_IHTMLDOMNODE_APPENDCHILD)] + IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild); + + [propget, id(DISPID_IHTMLDOMNODE_NODENAME)] + BSTR nodeName(); + + [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)] + void nodeValue(VARIANT v); + + [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)] + VARIANT nodeValue(); + + [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)] + IHTMLDOMNode *firstChild(); + + [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)] + IHTMLDOMNode *lastChild(); + + [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)] + IHTMLDOMNode *previousSibling(); + + [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)] + IHTMLDOMNode *nextSibling(); + + [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)] + IDispatch *ownerDocument(); + + [propget, id(DISPID_IHTMLGENERICELEMENT_RECORDSET), hidden] + IDispatch *recordset(); + + [id(DISPID_IHTMLGENERICELEMENT_NAMEDRECORDSET)] + IDispatch *namedRecordset( + [in] BSTR dataMember, + [in, optional] VARIANT *hierarchy); +} + /***************************************************************************** * IHTMLStyleSheetRule interface */ @@ -2917,6 +4819,1005 @@ interface IHTMLImageElementFactory : IDispatch [retval, out] IHTMLImgElement **elem); } +/***************************************************************************** + * DispHTMLImg interface + */ +[ + hidden, + uuid(3050f51c-98b5-11cf-bb82-00aa00bdce0b) +] +dispinterface DispHTMLImg +{ +properties: +methods: + [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)] + void setAttribute( + [in] BSTR strAttributeName, + [in] VARIANT AttributeValue, + [in, defaultvalue(1)] LONG lFlags); + + [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)] + VARIANT getAttribute( + [in] BSTR strAttributeName, + [in, defaultvalue(0)] LONG lFlags); + + [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)] + VARIANT_BOOL removeAttribute( + [in] BSTR strAttributeName, + [in, defaultvalue(1)] LONG lFlags); + + [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable] + void className(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable] + BSTR className(); + + [propput, id(DISPID_IHTMLELEMENT_ID), bindable] + void id(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_ID), bindable] + BSTR id(); + + [propget, id(DISPID_IHTMLELEMENT_TAGNAME)] + BSTR tagName(); + + [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)] + IHTMLElement *parentElement(); + + [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable] + IHTMLStyle *style(); + + [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable] + void onhelp(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable] + VARIANT onhelp(); + + [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable] + void onclick(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable] + VARIANT onclick(); + + [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable] + void ondblclick(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable] + VARIANT ondblclick(); + + [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] + void onkeydown(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] + VARIANT onkeydown(); + + [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable] + void onkeyup(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable] + VARIANT onkeyup(); + + [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable] + void onkeypress(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable] + VARIANT onkeypress(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable] + void onmouseout(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable] + VARIANT onmouseout(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] + void onmouseover(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] + VARIANT onmouseover(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] + void onmousemove(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] + VARIANT onmousemove(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] + void onmousedown(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] + VARIANT onmousedown(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] + void onmouseup(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] + VARIANT onmouseup(); + + [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)] + IDispatch *document(); + + [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable] + void title(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable] + BSTR title(); + + [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable] + void language(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable] + BSTR language(); + + [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] + void onselectstart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] + VARIANT onselectstart(); + + [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)] + void scrollIntoView([in, optional] VARIANT varargStart); + + [id(DISPID_IHTMLELEMENT_CONTAINS)] + VARIANT_BOOL contains([in] IHTMLElement *pChild); + + [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable] + long sourceIndex(); + + [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)] + VARIANT recordNumber(); + + [propput, id(DISPID_IHTMLELEMENT_LANG)] + void lang(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_LANG)] + BSTR lang(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)] + long offsetLeft(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)] + long offsetTop(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)] + long offsetWidth(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)] + long offsetHeight(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)] + IHTMLElement *offsetParent(); + + [propput, id(DISPID_IHTMLELEMENT_INNERHTML)] + void innerHTML(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_INNERHTML)] + BSTR innerHTML(); + + [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)] + void innerText(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)] + BSTR innerText(); + + [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)] + void outerHTML(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)] + BSTR outerHTML(); + + [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)] + void outerText(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)] + BSTR outerText(); + + [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)] + void insertAdjacentHTML( + [in] BSTR where, + [in] BSTR html); + + [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)] + void insertAdjacentText( + [in] BSTR where, + [in] BSTR text); + + [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)] + IHTMLElement *parentTextEdit(); + + [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)] + VARIANT_BOOL isTextEdit(); + + [id(DISPID_IHTMLELEMENT_CLICK)] + void click(); + + [propget, id(DISPID_IHTMLELEMENT_FILTERS)] + IHTMLFiltersCollection *filters(); + + [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] + void ondragstart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] + VARIANT ondragstart(); + + [id(DISPID_IHTMLELEMENT_TOSTRING)] + BSTR toString(); + + [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] + void onbeforeupdate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] + VARIANT onbeforeupdate(); + + [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] + void onafterupdate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] + VARIANT onafterupdate(); + + [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] + void onerrorupdate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] + VARIANT onerrorupdate(); + + [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] + void onrowexit(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] + VARIANT onrowexit(); + + [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] + void onrowenter(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] + VARIANT onrowenter(); + + [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] + void ondatasetchanged(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] + VARIANT ondatasetchanged(); + + [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] + void ondataavailable(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] + VARIANT ondataavailable(); + + [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] + void ondatasetcomplete(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] + VARIANT ondatasetcomplete(); + + [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] + void onfilterchange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] + VARIANT onfilterchange(); + + [propget, id(DISPID_IHTMLELEMENT_CHILDREN)] + IDispatch *children(); + + [propget, id(DISPID_IHTMLELEMENT_ALL)] + IDispatch *all(); + + [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)] + BSTR scopeName(); + + [id(DISPID_IHTMLELEMENT2_SETCAPTURE)] + void setCapture([in, defaultvalue(-1)] VARIANT_BOOL containerCapture); + + [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)] + void releaseCapture(); + + [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] + void onlosecapture(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] + VARIANT onlosecapture(); + + [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)] + BSTR componentFromPoint( + [in] long x, + [in] long y); + + [id(DISPID_IHTMLELEMENT2_DOSCROLL)] + void doScroll([in, optional] VARIANT component); + + [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] + void onscroll(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] + VARIANT onscroll(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable] + void ondrag(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable] + VARIANT ondrag(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] + void ondragend(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] + VARIANT ondragend(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] + void ondragenter(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] + VARIANT ondragenter(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] + void ondragover(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] + VARIANT ondragover(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] + void ondragleave(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] + VARIANT ondragleave(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable] + void ondrop(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable] + VARIANT ondrop(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] + void onbeforecut(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] + VARIANT onbeforecut(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable] + void oncut(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable] + VARIANT oncut(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] + void onbeforecopy(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] + VARIANT onbeforecopy(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable] + void oncopy(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable] + VARIANT oncopy(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] + void onbeforepaste(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] + VARIANT onbeforepaste(); + + [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable] + void onpaste(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable] + VARIANT onpaste(); + + [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable] + IHTMLCurrentStyle *currentStyle(); + + [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] + void onpropertychange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] + VARIANT onpropertychange(); + + [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)] + IHTMLRectCollection *getClientRects(); + + [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)] + IHTMLRect *getBoundingClientRect(); + + [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)] + void setExpression( + [in] BSTR propname, + [in] BSTR expression, + [in, defaultvalue("")] BSTR language); + + [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)] + VARIANT getExpression([in] BSTR propname); + + [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)] + VARIANT_BOOL removeExpression([in] BSTR propname); + + [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] + void tabIndex(short v); + + [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] + short tabIndex(); + + [id(DISPID_IHTMLELEMENT2_FOCUS)] + void focus(); + + [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable] + void accessKey(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable] + BSTR accessKey(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable] + void onblur(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable] + VARIANT onblur(); + + [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable] + void onfocus(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable] + VARIANT onfocus(); + + [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] + void onresize(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] + VARIANT onresize(); + + [id(DISPID_IHTMLELEMENT2_BLUR)] + void blur(); + + [id(DISPID_IHTMLELEMENT2_ADDFILTER)] + void addFilter([in] IUnknown *pUnk); + + [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)] + void removeFilter([in] IUnknown *pUnk); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable] + long clientHeight(); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable] + long clientWidth(); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable] + long clientTop(); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable] + long clientLeft(); + + [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)] + VARIANT_BOOL attachEvent( + [in] BSTR event, + [in] IDispatch *pDisp); + + [id(DISPID_IHTMLELEMENT2_DETACHEVENT)] + void detachEvent( + [in] BSTR event, + [in] IDispatch *pDisp); + + [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)] + VARIANT readyState(); + + [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] + void onreadystatechange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] + VARIANT onreadystatechange(); + + [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] + void onrowsdelete(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] + VARIANT onrowsdelete(); + + [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] + void onrowsinserted(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] + VARIANT onrowsinserted(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] + void oncellchange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] + VARIANT oncellchange(); + + [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable] + void dir(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable] + BSTR dir(); + + [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)] + IDispatch *createControlRange(); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable] + long scrollHeight(); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable] + long scrollWidth(); + + [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable] + void scrollTop(long v); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable] + long scrollTop(); + + [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] + void scrollLeft(long v); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] + long scrollLeft(); + + [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)] + void clearAttributes(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] + void oncontextmenu(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] + VARIANT oncontextmenu(); + + [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)] + IHTMLElement *insertAdjacentElement( + [in] BSTR where, + [in] IHTMLElement *insertedElement); + + [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)] + IHTMLElement *applyElement( + [in] IHTMLElement *apply, + [in] BSTR where); + + [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)] + BSTR getAdjacentText([in] BSTR where); + + [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)] + BSTR replaceAdjacentText( + [in] BSTR where, + [in] BSTR newText); + + [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)] + VARIANT_BOOL canHaveChildren(); + + [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)] + long addBehavior( + [in] BSTR bstrUrl, + [in, optional] VARIANT *pvarFactory); + + [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)] + VARIANT_BOOL removeBehavior([in] long cookie); + + [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable] + IHTMLStyle *runtimeStyle(); + + [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)] + IDispatch *behaviorUrns(); + + [propput, id(DISPID_IHTMLELEMENT2_TAGURN)] + void tagUrn(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT2_TAGURN)] + BSTR tagUrn(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] + void onbeforeeditfocus(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] + VARIANT onbeforeeditfocus(); + + [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted] + long readyStateValue(); + + [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)] + IHTMLElementCollection *getElementsByTagName([in] BSTR v); + + [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)] + void mergeAttributes( + [in] IHTMLElement *mergeThis, + [in, optional] VARIANT *pvarFlags); + + [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)] + VARIANT_BOOL isMultiLine(); + + [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)] + VARIANT_BOOL canHaveHTML(); + + [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] + void onlayoutcomplete(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] + VARIANT onlayoutcomplete(); + + [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable] + void onpage(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable] + VARIANT onpage(); + + [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] + void inflateBlock(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] + VARIANT_BOOL inflateBlock(); + + [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] + void onbeforedeactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] + VARIANT onbeforedeactivate(); + + [id(DISPID_IHTMLELEMENT3_SETACTIVE)] + void setActive(); + + [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] + void contentEditable(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] + BSTR contentEditable(); + + [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)] + VARIANT_BOOL isContentEditable(); + + [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable] + void hideFocus(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable] + VARIANT_BOOL hideFocus(); + + [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] + void disabled(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] + VARIANT_BOOL disabled(); + + [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)] + VARIANT_BOOL isDisabled(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable] + void onmove(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable] + VARIANT onmove(); + + [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] + void oncontrolselect(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] + VARIANT oncontrolselect(); + + [id(DISPID_IHTMLELEMENT3_FIREEVENT)] + VARIANT_BOOL fireEvent( + [in] BSTR bstrEventName, + [in, optional] VARIANT *pvarEventObject); + + [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] + void onresizestart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] + VARIANT onresizestart(); + + [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] + void onresizeend(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] + VARIANT onresizeend(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] + void onmovestart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] + VARIANT onmovestart(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable] + void onmoveend(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable] + VARIANT onmoveend(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] + void onmouseenter(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] + VARIANT onmouseenter(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] + void onmouseleave(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] + VARIANT onmouseleave(); + + [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] + void onactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] + VARIANT onactivate(); + + [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] + void ondeactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] + VARIANT ondeactivate(); + + [id(DISPID_IHTMLELEMENT3_DRAGDROP)] + VARIANT_BOOL dragDrop(); + + [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable] + LONG glyphMode(); + + [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] + void onmousewheel(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] + VARIANT onmousewheel(); + + [id(DISPID_IHTMLELEMENT4_NORMALIZE)] + void normalize(); + + [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)] + IHTMLDOMAttribute *getAttributeNode([in] BSTR bstrname); + + [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)] + IHTMLDOMAttribute *setAttributeNode([in] IHTMLDOMAttribute *pattr); + + [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)] + IHTMLDOMAttribute *removeAttributeNode([in] IHTMLDOMAttribute *pattr); + + [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] + void onbeforeactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] + VARIANT onbeforeactivate(); + + [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable] + void onfocusin(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable] + VARIANT onfocusin(); + + [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] + void onfocusout(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] + VARIANT onfocusout(); + + [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden] + long uniqueNumber(); + + [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden] + BSTR uniqueID(); + + [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)] + long nodeType(); + + [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)] + IHTMLDOMNode *parentNode(); + + [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)] + VARIANT_BOOL hasChildNodes(); + + [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)] + IDispatch *childNodes(); + + [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)] + IDispatch *attributes(); + + [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)] + IHTMLDOMNode *insertBefore( + [in] IHTMLDOMNode *newChild, + [in, optional] VARIANT refChild); + + [id(DISPID_IHTMLDOMNODE_REMOVECHILD)] + IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild); + + [id(DISPID_IHTMLDOMNODE_REPLACECHILD)] + IHTMLDOMNode *replaceChild( + [in] IHTMLDOMNode *newChild, + [in] IHTMLDOMNode *oldChild); + + [id(DISPID_IHTMLDOMNODE_CLONENODE)] + IHTMLDOMNode *cloneNode([in] VARIANT_BOOL fDeep); + + [id(DISPID_IHTMLDOMNODE_REMOVENODE)] + IHTMLDOMNode *removeNode([in, defaultvalue(0)] VARIANT_BOOL fDeep); + + [id(DISPID_IHTMLDOMNODE_SWAPNODE)] + IHTMLDOMNode *swapNode([in] IHTMLDOMNode *otherNode); + + [id(DISPID_IHTMLDOMNODE_REPLACENODE)] + IHTMLDOMNode *replaceNode([in] IHTMLDOMNode *replacement); + + [id(DISPID_IHTMLDOMNODE_APPENDCHILD)] + IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild); + + [propget, id(DISPID_IHTMLDOMNODE_NODENAME)] + BSTR nodeName(); + + [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)] + void nodeValue(VARIANT v); + + [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)] + VARIANT nodeValue(); + + [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)] + IHTMLDOMNode *firstChild(); + + [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)] + IHTMLDOMNode *lastChild(); + + [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)] + IHTMLDOMNode *previousSibling(); + + [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)] + IHTMLDOMNode *nextSibling(); + + [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)] + IDispatch *ownerDocument(); + + [propput, id(DISPID_IHTMLDATABINDING_DATAFLD)] + void dataFld(BSTR v); + + [propget, id(DISPID_IHTMLDATABINDING_DATAFLD)] + BSTR dataFld(); + + [propput, id(DISPID_IHTMLDATABINDING_DATASRC)] + void dataSrc(BSTR v); + + [propget, id(DISPID_IHTMLDATABINDING_DATASRC)] + BSTR dataSrc(); + + [propput, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)] + void dataFormatAs(BSTR v); + + [propget, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)] + BSTR dataFormatAs(); + + [propput, id(DISPID_IHTMLIMGELEMENT_ISMAP), displaybind, bindable] + void isMap(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLIMGELEMENT_ISMAP), displaybind, bindable] + VARIANT_BOOL isMap(); + + [propput, id(DISPID_IHTMLIMGELEMENT_USEMAP), displaybind, bindable] + void useMap(BSTR v); + + [propget, id(DISPID_IHTMLIMGELEMENT_USEMAP), displaybind, bindable] + BSTR useMap(); + + [propget, id(DISPID_IHTMLIMGELEMENT_MIMETYPE)] + BSTR mimeType(); + + [propget, id(DISPID_IHTMLIMGELEMENT_FILESIZE)] + BSTR fileSize(); + + [propget, id(DISPID_IHTMLIMGELEMENT_FILECREATEDDATE)] + BSTR fileCreatedDate(); + + [propget, id(DISPID_IHTMLIMGELEMENT_FILEMODIFIEDDATE)] + BSTR fileModifiedDate(); + + [propget, id(DISPID_IHTMLIMGELEMENT_FILEUPDATEDDATE)] + BSTR fileUpdatedDate(); + + [propget, id(DISPID_IHTMLIMGELEMENT_PROTOCOL)] + BSTR protocol(); + + [propget, id(DISPID_IHTMLIMGELEMENT_HREF)] + BSTR href(); + + [propget, id(DISPID_IHTMLIMGELEMENT_NAMEPROP)] + BSTR nameProp(); + + [propput, id(DISPID_IHTMLIMGELEMENT_BORDER), displaybind, bindable] + void border(VARIANT v); + + [propget, id(DISPID_IHTMLIMGELEMENT_BORDER), displaybind, bindable] + VARIANT border(); + + [propput, id(DISPID_IHTMLIMGELEMENT_VSPACE), displaybind, bindable] + void vspace(long v); + + [propget, id(DISPID_IHTMLIMGELEMENT_VSPACE), displaybind, bindable] + long vspace(); + + [propput, id(DISPID_IHTMLIMGELEMENT_HSPACE), displaybind, bindable] + void hspace(long v); + + [propget, id(DISPID_IHTMLIMGELEMENT_HSPACE), displaybind, bindable] + long hspace(); + + [propput, id(DISPID_IHTMLIMGELEMENT_ALT), displaybind, bindable] + void alt(BSTR v); + + [propget, id(DISPID_IHTMLIMGELEMENT_ALT), displaybind, bindable] + BSTR alt(); + + [propput, id(DISPID_IHTMLIMGELEMENT_SRC), displaybind, bindable] + void src(BSTR v); + + [propget, id(DISPID_IHTMLIMGELEMENT_SRC), displaybind, bindable] + BSTR src(); + + [propput, id(DISPID_IHTMLIMGELEMENT_LOWSRC), displaybind, bindable] + void lowsrc(BSTR v); + + [propget, id(DISPID_IHTMLIMGELEMENT_LOWSRC), displaybind, bindable] + BSTR lowsrc(); + + [propput, id(DISPID_IHTMLIMGELEMENT_VRML), displaybind, bindable] + void vrml(BSTR v); + + [propget, id(DISPID_IHTMLIMGELEMENT_VRML), displaybind, bindable] + BSTR vrml(); + + [propput, id(DISPID_IHTMLIMGELEMENT_DYNSRC), displaybind, bindable] + void dynsrc(BSTR v); + + [propget, id(DISPID_IHTMLIMGELEMENT_DYNSRC), displaybind, bindable] + BSTR dynsrc(); + + [propget, id(DISPID_IHTMLIMGELEMENT_COMPLETE)] + VARIANT_BOOL complete(); + + [propput, id(DISPID_IHTMLIMGELEMENT_LOOP), displaybind, bindable] + void loop(VARIANT v); + + [propget, id(DISPID_IHTMLIMGELEMENT_LOOP), displaybind, bindable] + VARIANT loop(); + + [propput, id(DISPID_IHTMLIMGELEMENT_ALIGN), displaybind, bindable] + void align(BSTR v); + + [propget, id(DISPID_IHTMLIMGELEMENT_ALIGN), displaybind, bindable] + BSTR align(); + + [propput, id(DISPID_IHTMLIMGELEMENT_ONLOAD), displaybind, bindable] + void onload(VARIANT v); + + [propget, id(DISPID_IHTMLIMGELEMENT_ONLOAD), displaybind, bindable] + VARIANT onload(); + + [propput, id(DISPID_IHTMLIMGELEMENT_ONERROR), displaybind, bindable] + void onerror(VARIANT v); + + [propget, id(DISPID_IHTMLIMGELEMENT_ONERROR), displaybind, bindable] + VARIANT onerror(); + + [propput, id(DISPID_IHTMLIMGELEMENT_ONABORT), displaybind, bindable] + void onabort(VARIANT v); + + [propget, id(DISPID_IHTMLIMGELEMENT_ONABORT), displaybind, bindable] + VARIANT onabort(); + + [propput, id(DISPID_IHTMLIMGELEMENT_NAME), displaybind, bindable] + void name(BSTR v); + + [propget, id(DISPID_IHTMLIMGELEMENT_NAME), displaybind, bindable] + BSTR name(); + + [propput, id(DISPID_IHTMLIMGELEMENT_WIDTH)] + void width(long v); + + [propget, id(DISPID_IHTMLIMGELEMENT_WIDTH)] + long width(); + + [propput, id(DISPID_IHTMLIMGELEMENT_HEIGHT)] + void height(long v); + + [propget, id(DISPID_IHTMLIMGELEMENT_HEIGHT)] + long height(); + + [propput, id(DISPID_IHTMLIMGELEMENT_START), displaybind, bindable] + void start(BSTR v); + + [propget, id(DISPID_IHTMLIMGELEMENT_START), displaybind, bindable] + BSTR start(); + + [propput, id(DISPID_IHTMLIMGELEMENT2_LONGDESC), displaybind, bindable] + void longDesc(BSTR v); + + [propget, id(DISPID_IHTMLIMGELEMENT2_LONGDESC), displaybind, bindable] + BSTR longDesc(); +} + /***************************************************************************** * IHTMLBodyElement interface */ @@ -3228,6 +6129,45 @@ interface IHTMLElementCollection : IDispatch [retval, out] IDispatch **pdisp); } +/***************************************************************************** + * DispHTMLElementCollection dispinterface + */ +[ + hidden, + uuid(3050f56b-98b5-11cf-bb82-00aa00bdce0b) +] +dispinterface DispHTMLElementCollection +{ +properties: +methods: + [id(DISPID_IHTMLELEMENTCOLLECTION_TOSTRING)] + BSTR toString(); + + [propput, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)] + void length(long v); + + [propget, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)] + long length(); + + [propget, id(DISPID_IHTMLELEMENTCOLLECTION__NEWENUM), hidden, restricted] + IUnknown *_newEnum(); + + [id(DISPID_IHTMLELEMENTCOLLECTION_ITEM)] + IDispatch *item( + [in, optional] VARIANT name, + [in, optional] VARIANT index); + + [id(DISPID_IHTMLELEMENTCOLLECTION_TAGS)] + IDispatch *tags( + [in] VARIANT tagName); + + [id(DISPID_IHTMLELEMENTCOLLECTION2_URNS)] + IDispatch *urns([in] VARIANT urn); + + [id(DISPID_IHTMLELEMENTCOLLECTION3_NAMEDITEM)] + IDispatch *namedItem([in] BSTR name); +} + /***************************************************************************** * IHTMLSelectElement interface */ @@ -3319,6 +6259,934 @@ interface IHTMLSelectElement : IDispatch [retval, out] IDispatch **pdisp); } +/***************************************************************************** + * DispHTMLSelectElement dispinterface + */ +[ + hidden, + uuid(3050f531-98b5-11cf-bb82-00aa00bdce0b) +] +dispinterface DispHTMLSelectElement +{ +properties: +methods: + [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)] + void setAttribute( + [in] BSTR strAttributeName, + [in] VARIANT AttributeValue, + [in, defaultvalue(1)] LONG lFlags); + + [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)] + VARIANT getAttribute( + [in] BSTR strAttributeName, + [in, defaultvalue(0)] LONG lFlags); + + [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)] + VARIANT_BOOL removeAttribute( + [in] BSTR strAttributeName, + [in, defaultvalue(1)] LONG lFlags); + + [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable] + void className(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable] + BSTR className(); + + [propput, id(DISPID_IHTMLELEMENT_ID), bindable] + void id(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_ID), bindable] + BSTR id(); + + [propget, id(DISPID_IHTMLELEMENT_TAGNAME)] + BSTR tagName(); + + [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)] + IHTMLElement *parentElement(); + + [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable] + IHTMLStyle *style(); + + [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable] + void onhelp(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable] + VARIANT onhelp(); + + [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable] + void onclick(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable] + VARIANT onclick(); + + [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable] + void ondblclick(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable] + VARIANT ondblclick(); + + [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] + void onkeydown(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] + VARIANT onkeydown(); + + [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable] + void onkeyup(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable] + VARIANT onkeyup(); + + [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable] + void onkeypress(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable] + VARIANT onkeypress(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable] + void onmouseout(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable] + VARIANT onmouseout(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] + void onmouseover(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] + VARIANT onmouseover(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] + void onmousemove(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] + VARIANT onmousemove(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] + void onmousedown(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] + VARIANT onmousedown(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] + void onmouseup(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] + VARIANT onmouseup(); + + [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)] + IDispatch *document(); + + [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable] + void title(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable] + BSTR title(); + + [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable] + void language(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable] + BSTR language(); + + [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] + void onselectstart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] + VARIANT onselectstart(); + + [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)] + void scrollIntoView([in, optional] VARIANT varargStart); + + [id(DISPID_IHTMLELEMENT_CONTAINS)] + VARIANT_BOOL contains([in] IHTMLElement *pChild); + + [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable] + long sourceIndex(); + + [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)] + VARIANT recordNumber(); + + [propput, id(DISPID_IHTMLELEMENT_LANG)] + void lang(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_LANG)] + BSTR lang(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)] + long offsetLeft(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)] + long offsetTop(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)] + long offsetWidth(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)] + long offsetHeight(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)] + IHTMLElement *offsetParent(); + + [propput, id(DISPID_IHTMLELEMENT_INNERHTML)] + void innerHTML(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_INNERHTML)] + BSTR innerHTML(); + + [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)] + void innerText(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)] + BSTR innerText(); + + [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)] + void outerHTML(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)] + BSTR outerHTML(); + + [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)] + void outerText(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)] + BSTR outerText(); + + [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)] + void insertAdjacentHTML( + [in] BSTR where, + [in] BSTR html); + + [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)] + void insertAdjacentText( + [in] BSTR where, + [in] BSTR text); + + [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)] + IHTMLElement *parentTextEdit(); + + [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)] + VARIANT_BOOL isTextEdit(); + + [id(DISPID_IHTMLELEMENT_CLICK)] + void click(); + + [propget, id(DISPID_IHTMLELEMENT_FILTERS)] + IHTMLFiltersCollection *filters(); + + [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] + void ondragstart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] + VARIANT ondragstart(); + + [id(DISPID_IHTMLELEMENT_TOSTRING)] + BSTR toString(); + + [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] + void onbeforeupdate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] + VARIANT onbeforeupdate(); + + [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] + void onafterupdate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] + VARIANT onafterupdate(); + + [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] + void onerrorupdate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] + VARIANT onerrorupdate(); + + [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] + void onrowexit(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] + VARIANT onrowexit(); + + [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] + void onrowenter(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] + VARIANT onrowenter(); + + [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] + void ondatasetchanged(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] + VARIANT ondatasetchanged(); + + [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] + void ondataavailable(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] + VARIANT ondataavailable(); + + [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] + void ondatasetcomplete(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] + VARIANT ondatasetcomplete(); + + [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] + void onfilterchange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] + VARIANT onfilterchange(); + + [propget, id(DISPID_IHTMLELEMENT_CHILDREN)] + IDispatch *children(); + + [propget, id(DISPID_IHTMLELEMENT_ALL)] + IDispatch *all(); + + [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)] + BSTR scopeName(); + + [id(DISPID_IHTMLELEMENT2_SETCAPTURE)] + void setCapture([in, defaultvalue(-1)] VARIANT_BOOL containerCapture); + + [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)] + void releaseCapture(); + + [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] + void onlosecapture(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] + VARIANT onlosecapture(); + + [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)] + BSTR componentFromPoint( + [in] long x, + [in] long y); + + [id(DISPID_IHTMLELEMENT2_DOSCROLL)] + void doScroll([in, optional] VARIANT component); + + [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] + void onscroll(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] + VARIANT onscroll(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable] + void ondrag(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable] + VARIANT ondrag(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] + void ondragend(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] + VARIANT ondragend(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] + void ondragenter(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] + VARIANT ondragenter(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] + void ondragover(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] + VARIANT ondragover(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] + void ondragleave(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] + VARIANT ondragleave(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable] + void ondrop(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable] + VARIANT ondrop(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] + void onbeforecut(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] + VARIANT onbeforecut(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable] + void oncut(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable] + VARIANT oncut(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] + void onbeforecopy(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] + VARIANT onbeforecopy(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable] + void oncopy(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable] + VARIANT oncopy(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] + void onbeforepaste(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] + VARIANT onbeforepaste(); + + [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable] + void onpaste(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable] + VARIANT onpaste(); + + [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable] + IHTMLCurrentStyle *currentStyle(); + + [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] + void onpropertychange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] + VARIANT onpropertychange(); + + [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)] + IHTMLRectCollection *getClientRects(); + + [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)] + IHTMLRect *getBoundingClientRect(); + + [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)] + void setExpression( + [in] BSTR propname, + [in] BSTR expression, + [in, defaultvalue("")] BSTR language); + + [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)] + VARIANT getExpression([in] BSTR propname); + + [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)] + VARIANT_BOOL removeExpression([in] BSTR propname); + + [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] + void tabIndex(short v); + + [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] + short tabIndex(); + + [id(DISPID_IHTMLELEMENT2_FOCUS)] + void focus(); + + [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable] + void accessKey(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable] + BSTR accessKey(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable] + void onblur(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable] + VARIANT onblur(); + + [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable] + void onfocus(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable] + VARIANT onfocus(); + + [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] + void onresize(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] + VARIANT onresize(); + + [id(DISPID_IHTMLELEMENT2_BLUR)] + void blur(); + + [id(DISPID_IHTMLELEMENT2_ADDFILTER)] + void addFilter([in] IUnknown *pUnk); + + [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)] + void removeFilter([in] IUnknown *pUnk); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable] + long clientHeight(); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable] + long clientWidth(); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable] + long clientTop(); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable] + long clientLeft(); + + [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)] + VARIANT_BOOL attachEvent( + [in] BSTR event, + [in] IDispatch *pDisp); + + [id(DISPID_IHTMLELEMENT2_DETACHEVENT)] + void detachEvent( + [in] BSTR event, + [in] IDispatch *pDisp); + + [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)] + VARIANT readyState(); + + [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] + void onreadystatechange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] + VARIANT onreadystatechange(); + + [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] + void onrowsdelete(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] + VARIANT onrowsdelete(); + + [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] + void onrowsinserted(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] + VARIANT onrowsinserted(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] + void oncellchange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] + VARIANT oncellchange(); + + [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable] + void dir(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable] + BSTR dir(); + + [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)] + IDispatch *createControlRange(); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable] + long scrollHeight(); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable] + long scrollWidth(); + + [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable] + void scrollTop(long v); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable] + long scrollTop(); + + [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] + void scrollLeft(long v); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] + long scrollLeft(); + + [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)] + void clearAttributes(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] + void oncontextmenu(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] + VARIANT oncontextmenu(); + + [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)] + IHTMLElement *insertAdjacentElement( + [in] BSTR where, + [in] IHTMLElement *insertedElement); + + [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)] + IHTMLElement *applyElement( + [in] IHTMLElement *apply, + [in] BSTR where); + + [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)] + BSTR getAdjacentText([in] BSTR where); + + [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)] + BSTR replaceAdjacentText( + [in] BSTR where, + [in] BSTR newText); + + [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)] + VARIANT_BOOL canHaveChildren(); + + [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)] + long addBehavior( + [in] BSTR bstrUrl, + [in, optional] VARIANT *pvarFactory); + + [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)] + VARIANT_BOOL removeBehavior([in] long cookie); + + [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable] + IHTMLStyle *runtimeStyle(); + + [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)] + IDispatch *behaviorUrns(); + + [propput, id(DISPID_IHTMLELEMENT2_TAGURN)] + void tagUrn(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT2_TAGURN)] + BSTR tagUrn(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] + void onbeforeeditfocus(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] + VARIANT onbeforeeditfocus(); + + [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted] + long readyStateValue(); + + [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)] + IHTMLElementCollection *getElementsByTagName([in] BSTR v); + + [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)] + void mergeAttributes( + [in] IHTMLElement *mergeThis, + [in, optional] VARIANT *pvarFlags); + + [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)] + VARIANT_BOOL isMultiLine(); + + [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)] + VARIANT_BOOL canHaveHTML(); + + [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] + void onlayoutcomplete(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] + VARIANT onlayoutcomplete(); + + [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable] + void onpage(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable] + VARIANT onpage(); + + [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] + void inflateBlock(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] + VARIANT_BOOL inflateBlock(); + + [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] + void onbeforedeactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] + VARIANT onbeforedeactivate(); + + [id(DISPID_IHTMLELEMENT3_SETACTIVE)] + void setActive(); + + [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] + void contentEditable(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] + BSTR contentEditable(); + + [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)] + VARIANT_BOOL isContentEditable(); + + [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable] + void hideFocus(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable] + VARIANT_BOOL hideFocus(); + + [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] + void disabled(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] + VARIANT_BOOL disabled(); + + [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)] + VARIANT_BOOL isDisabled(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable] + void onmove(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable] + VARIANT onmove(); + + [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] + void oncontrolselect(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] + VARIANT oncontrolselect(); + + [id(DISPID_IHTMLELEMENT3_FIREEVENT)] + VARIANT_BOOL fireEvent( + [in] BSTR bstrEventName, + [in, optional] VARIANT *pvarEventObject); + + [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] + void onresizestart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] + VARIANT onresizestart(); + + [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] + void onresizeend(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] + VARIANT onresizeend(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] + void onmovestart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] + VARIANT onmovestart(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable] + void onmoveend(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable] + VARIANT onmoveend(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] + void onmouseenter(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] + VARIANT onmouseenter(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] + void onmouseleave(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] + VARIANT onmouseleave(); + + [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] + void onactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] + VARIANT onactivate(); + + [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] + void ondeactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] + VARIANT ondeactivate(); + + [id(DISPID_IHTMLELEMENT3_DRAGDROP)] + VARIANT_BOOL dragDrop(); + + [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable] + LONG glyphMode(); + + [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] + void onmousewheel(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] + VARIANT onmousewheel(); + + [id(DISPID_IHTMLELEMENT4_NORMALIZE)] + void normalize(); + + [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)] + IHTMLDOMAttribute *getAttributeNode([in] BSTR bstrname); + + [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)] + IHTMLDOMAttribute *setAttributeNode([in] IHTMLDOMAttribute *pattr); + + [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)] + IHTMLDOMAttribute *removeAttributeNode([in] IHTMLDOMAttribute *pattr); + + [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] + void onbeforeactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] + VARIANT onbeforeactivate(); + + [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable] + void onfocusin(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable] + VARIANT onfocusin(); + + [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] + void onfocusout(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] + VARIANT onfocusout(); + + [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden] + long uniqueNumber(); + + [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden] + BSTR uniqueID(); + + [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)] + long nodeType(); + + [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)] + IHTMLDOMNode *parentNode(); + + [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)] + VARIANT_BOOL hasChildNodes(); + + [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)] + IDispatch *childNodes(); + + [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)] + IDispatch *attributes(); + + [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)] + IHTMLDOMNode *insertBefore( + [in] IHTMLDOMNode *newChild, + [in, optional] VARIANT refChild); + + [id(DISPID_IHTMLDOMNODE_REMOVECHILD)] + IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild); + + [id(DISPID_IHTMLDOMNODE_REPLACECHILD)] + IHTMLDOMNode *replaceChild( + [in] IHTMLDOMNode *newChild, + [in] IHTMLDOMNode *oldChild); + + [id(DISPID_IHTMLDOMNODE_CLONENODE)] + IHTMLDOMNode *cloneNode([in] VARIANT_BOOL fDeep); + + [id(DISPID_IHTMLDOMNODE_REMOVENODE)] + IHTMLDOMNode *removeNode([in, defaultvalue(0)] VARIANT_BOOL fDeep); + + [id(DISPID_IHTMLDOMNODE_SWAPNODE)] + IHTMLDOMNode *swapNode([in] IHTMLDOMNode *otherNode); + + [id(DISPID_IHTMLDOMNODE_REPLACENODE)] + IHTMLDOMNode *replaceNode([in] IHTMLDOMNode *replacement); + + [id(DISPID_IHTMLDOMNODE_APPENDCHILD)] + IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild); + + [propget, id(DISPID_IHTMLDOMNODE_NODENAME)] + BSTR nodeName(); + + [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)] + void nodeValue(VARIANT v); + + [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)] + VARIANT nodeValue(); + + [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)] + IHTMLDOMNode *firstChild(); + + [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)] + IHTMLDOMNode *lastChild(); + + [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)] + IHTMLDOMNode *previousSibling(); + + [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)] + IHTMLDOMNode *nextSibling(); + + [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)] + IDispatch *ownerDocument(); + + [propput, id(DISPID_IHTMLDATABINDING_DATAFLD)] + void dataFld(BSTR v); + + [propget, id(DISPID_IHTMLDATABINDING_DATAFLD)] + BSTR dataFld(); + + [propput, id(DISPID_IHTMLDATABINDING_DATASRC)] + void dataSrc(BSTR v); + + [propget, id(DISPID_IHTMLDATABINDING_DATASRC)] + BSTR dataSrc(); + + [propput, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)] + void dataFormatAs(BSTR v); + + [propget, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)] + BSTR dataFormatAs(); + + [propput, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable] + void size(long v); + + [propget, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable] + long size(); + + [propput, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable] + void multiple(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable] + VARIANT_BOOL multiple(); + + [propput, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable] + void name(BSTR v); + + [propget, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable] + BSTR name(); + + [propget, id(DISPID_IHTMLSELECTELEMENT_OPTIONS)] + IDispatch *options(); + + [propput, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable] + void onchange(VARIANT v); + + [propget, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable] + VARIANT onchange(); + + [propput, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)] + void selectedIndex(long v); + + [propget, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)] + long selectedIndex(); + + [propget, id(DISPID_IHTMLSELECTELEMENT_TYPE), displaybind, bindable] + BSTR type(); + + [propput, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable] + void value(BSTR v); + + [propget, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable] + BSTR value(); + + [propget, id(DISPID_IHTMLSELECTELEMENT_FORM)] + IHTMLFormElement *form(); + + [id(DISPID_IHTMLSELECTELEMENT_ADD)] + void add( + [in] IHTMLElement *element, + [in, optional] VARIANT before); + + [id(DISPID_IHTMLSELECTELEMENT_REMOVE)] + void remove([in, defaultvalue(-1)] long index); + + [propput, id(DISPID_IHTMLSELECTELEMENT_LENGTH)] + void length(long v); + + [propget, id(DISPID_IHTMLSELECTELEMENT_LENGTH)] + long length(); + + [propget, id(DISPID_IHTMLSELECTELEMENT__NEWENUM), hidden, restricted] + IUnknown *_newEnum(); + + [id(DISPID_IHTMLSELECTELEMENT_ITEM)] + IDispatch *item( + [in, optional] VARIANT name, + [in, optional] VARIANT index); + + [id(DISPID_IHTMLSELECTELEMENT_TAGS)] + IDispatch *tags([in] VARIANT tagName); + + [id(DISPID_IHTMLSELECTELEMENT2_URNS)] + IDispatch *urns([in] VARIANT urn); + + [id(DISPID_IHTMLSELECTELEMENT4_NAMEDITEM)] + IDispatch *namedItem([in] BSTR name); +} + /***************************************************************************** * IHTMLSelectionObject interface */ @@ -3408,6 +7276,897 @@ interface IHTMLOptionElementFactory : IDispatch [retval, out] IHTMLOptionElement **optelem); } +/***************************************************************************** + * DispHTMLOptionElement dispinterface + */ +[ + hidden, + uuid(3050f52b-98b5-11cf-bb82-00aa00bdce0b) +] +dispinterface DispHTMLOptionElement +{ +properties: +methods: + [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)] + void setAttribute( + [in] BSTR strAttributeName, + [in] VARIANT AttributeValue, + [in, defaultvalue(1)] LONG lFlags); + + [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)] + VARIANT getAttribute( + [in] BSTR strAttributeName, + [in, defaultvalue(0)] LONG lFlags); + + [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)] + VARIANT_BOOL removeAttribute( + [in] BSTR strAttributeName, + [in, defaultvalue(1)] LONG lFlags); + + [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable] + void className(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable] + BSTR className(); + + [propput, id(DISPID_IHTMLELEMENT_ID), bindable] + void id(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_ID), bindable] + BSTR id(); + + [propget, id(DISPID_IHTMLELEMENT_TAGNAME)] + BSTR tagName(); + + [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)] + IHTMLElement *parentElement(); + + [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable] + IHTMLStyle *style(); + + [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable] + void onhelp(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable] + VARIANT onhelp(); + + [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable] + void onclick(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable] + VARIANT onclick(); + + [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable] + void ondblclick(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable] + VARIANT ondblclick(); + + [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] + void onkeydown(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] + VARIANT onkeydown(); + + [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable] + void onkeyup(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable] + VARIANT onkeyup(); + + [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable] + void onkeypress(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable] + VARIANT onkeypress(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable] + void onmouseout(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable] + VARIANT onmouseout(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] + void onmouseover(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] + VARIANT onmouseover(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] + void onmousemove(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] + VARIANT onmousemove(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] + void onmousedown(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] + VARIANT onmousedown(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] + void onmouseup(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] + VARIANT onmouseup(); + + [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)] + IDispatch *document(); + + [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable] + void title(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable] + BSTR title(); + + [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable] + void language(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable] + BSTR language(); + + [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] + void onselectstart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] + VARIANT onselectstart(); + + [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)] + void scrollIntoView([in, optional] VARIANT varargStart); + + [id(DISPID_IHTMLELEMENT_CONTAINS)] + VARIANT_BOOL contains([in] IHTMLElement *pChild); + + [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable] + long sourceIndex(); + + [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)] + VARIANT recordNumber(); + + [propput, id(DISPID_IHTMLELEMENT_LANG)] + void lang(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_LANG)] + BSTR lang(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)] + long offsetLeft(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)] + long offsetTop(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)] + long offsetWidth(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)] + long offsetHeight(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)] + IHTMLElement *offsetParent(); + + [propput, id(DISPID_IHTMLELEMENT_INNERHTML)] + void innerHTML(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_INNERHTML)] + BSTR innerHTML(); + + [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)] + void innerText(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)] + BSTR innerText(); + + [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)] + void outerHTML(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)] + BSTR outerHTML(); + + [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)] + void outerText(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)] + BSTR outerText(); + + [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)] + void insertAdjacentHTML( + [in] BSTR where, + [in] BSTR html); + + [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)] + void insertAdjacentText( + [in] BSTR where, + [in] BSTR text); + + [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)] + IHTMLElement *parentTextEdit(); + + [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)] + VARIANT_BOOL isTextEdit(); + + [id(DISPID_IHTMLELEMENT_CLICK)] + void click(); + + [propget, id(DISPID_IHTMLELEMENT_FILTERS)] + IHTMLFiltersCollection *filters(); + + [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] + void ondragstart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] + VARIANT ondragstart(); + + [id(DISPID_IHTMLELEMENT_TOSTRING)] + BSTR toString(); + + [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] + void onbeforeupdate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] + VARIANT onbeforeupdate(); + + [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] + void onafterupdate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] + VARIANT onafterupdate(); + + [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] + void onerrorupdate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] + VARIANT onerrorupdate(); + + [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] + void onrowexit(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] + VARIANT onrowexit(); + + [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] + void onrowenter(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] + VARIANT onrowenter(); + + [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] + void ondatasetchanged(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] + VARIANT ondatasetchanged(); + + [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] + void ondataavailable(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] + VARIANT ondataavailable(); + + [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] + void ondatasetcomplete(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] + VARIANT ondatasetcomplete(); + + [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] + void onfilterchange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] + VARIANT onfilterchange(); + + [propget, id(DISPID_IHTMLELEMENT_CHILDREN)] + IDispatch *children(); + + [propget, id(DISPID_IHTMLELEMENT_ALL)] + IDispatch *all(); + + [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)] + BSTR scopeName(); + + [id(DISPID_IHTMLELEMENT2_SETCAPTURE)] + void setCapture([in, defaultvalue(-1)] VARIANT_BOOL containerCapture); + + [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)] + void releaseCapture(); + + [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] + void onlosecapture(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] + VARIANT onlosecapture(); + + [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)] + BSTR componentFromPoint( + [in] long x, + [in] long y); + + [id(DISPID_IHTMLELEMENT2_DOSCROLL)] + void doScroll([in, optional] VARIANT component); + + [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] + void onscroll(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] + VARIANT onscroll(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable] + void ondrag(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable] + VARIANT ondrag(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] + void ondragend(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] + VARIANT ondragend(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] + void ondragenter(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] + VARIANT ondragenter(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] + void ondragover(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] + VARIANT ondragover(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] + void ondragleave(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] + VARIANT ondragleave(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable] + void ondrop(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable] + VARIANT ondrop(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] + void onbeforecut(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] + VARIANT onbeforecut(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable] + void oncut(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable] + VARIANT oncut(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] + void onbeforecopy(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] + VARIANT onbeforecopy(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable] + void oncopy(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable] + VARIANT oncopy(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] + void onbeforepaste(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] + VARIANT onbeforepaste(); + + [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable] + void onpaste(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable] + VARIANT onpaste(); + + [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable] + IHTMLCurrentStyle *currentStyle(); + + [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] + void onpropertychange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] + VARIANT onpropertychange(); + + [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)] + IHTMLRectCollection *getClientRects(); + + [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)] + IHTMLRect *getBoundingClientRect(); + + [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)] + void setExpression( + [in] BSTR propname, + [in] BSTR expression, + [in, defaultvalue("")] BSTR language); + + [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)] + VARIANT getExpression([in] BSTR propname); + + [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)] + VARIANT_BOOL removeExpression([in] BSTR propname); + + [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] + void tabIndex(short v); + + [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] + short tabIndex(); + + [id(DISPID_IHTMLELEMENT2_FOCUS)] + void focus(); + + [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable] + void accessKey(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable] + BSTR accessKey(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable] + void onblur(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable] + VARIANT onblur(); + + [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable] + void onfocus(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable] + VARIANT onfocus(); + + [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] + void onresize(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] + VARIANT onresize(); + + [id(DISPID_IHTMLELEMENT2_BLUR)] + void blur(); + + [id(DISPID_IHTMLELEMENT2_ADDFILTER)] + void addFilter([in] IUnknown *pUnk); + + [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)] + void removeFilter([in] IUnknown *pUnk); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable] + long clientHeight(); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable] + long clientWidth(); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable] + long clientTop(); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable] + long clientLeft(); + + [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)] + VARIANT_BOOL attachEvent( + [in] BSTR event, + [in] IDispatch *pDisp); + + [id(DISPID_IHTMLELEMENT2_DETACHEVENT)] + void detachEvent( + [in] BSTR event, + [in] IDispatch *pDisp); + + [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)] + VARIANT readyState(); + + [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] + void onreadystatechange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] + VARIANT onreadystatechange(); + + [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] + void onrowsdelete(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] + VARIANT onrowsdelete(); + + [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] + void onrowsinserted(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] + VARIANT onrowsinserted(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] + void oncellchange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] + VARIANT oncellchange(); + + [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable] + void dir(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable] + BSTR dir(); + + [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)] + IDispatch *createControlRange(); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable] + long scrollHeight(); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable] + long scrollWidth(); + + [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable] + void scrollTop(long v); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable] + long scrollTop(); + + [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] + void scrollLeft(long v); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] + long scrollLeft(); + + [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)] + void clearAttributes(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] + void oncontextmenu(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] + VARIANT oncontextmenu(); + + [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)] + IHTMLElement *insertAdjacentElement( + [in] BSTR where, + [in] IHTMLElement *insertedElement); + + [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)] + IHTMLElement *applyElement( + [in] IHTMLElement *apply, + [in] BSTR where); + + [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)] + BSTR getAdjacentText([in] BSTR where); + + [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)] + BSTR replaceAdjacentText( + [in] BSTR where, + [in] BSTR newText); + + [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)] + VARIANT_BOOL canHaveChildren(); + + [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)] + long addBehavior( + [in] BSTR bstrUrl, + [in, optional] VARIANT *pvarFactory); + + [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)] + VARIANT_BOOL removeBehavior([in] long cookie); + + [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable] + IHTMLStyle *runtimeStyle(); + + [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)] + IDispatch *behaviorUrns(); + + [propput, id(DISPID_IHTMLELEMENT2_TAGURN)] + void tagUrn(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT2_TAGURN)] + BSTR tagUrn(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] + void onbeforeeditfocus(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] + VARIANT onbeforeeditfocus(); + + [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted] + long readyStateValue(); + + [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)] + IHTMLElementCollection *getElementsByTagName([in] BSTR v); + + [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)] + void mergeAttributes( + [in] IHTMLElement *mergeThis, + [in, optional] VARIANT *pvarFlags); + + [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)] + VARIANT_BOOL isMultiLine(); + + [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)] + VARIANT_BOOL canHaveHTML(); + + [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] + void onlayoutcomplete(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] + VARIANT onlayoutcomplete(); + + [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable] + void onpage(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable] + VARIANT onpage(); + + [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] + void inflateBlock(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] + VARIANT_BOOL inflateBlock(); + + [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] + void onbeforedeactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] + VARIANT onbeforedeactivate(); + + [id(DISPID_IHTMLELEMENT3_SETACTIVE)] + void setActive(); + + [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] + void contentEditable(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] + BSTR contentEditable(); + + [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)] + VARIANT_BOOL isContentEditable(); + + [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable] + void hideFocus(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable] + VARIANT_BOOL hideFocus(); + + [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] + void disabled(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] + VARIANT_BOOL disabled(); + + [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)] + VARIANT_BOOL isDisabled(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable] + void onmove(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable] + VARIANT onmove(); + + [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] + void oncontrolselect(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] + VARIANT oncontrolselect(); + + [id(DISPID_IHTMLELEMENT3_FIREEVENT)] + VARIANT_BOOL fireEvent( + [in] BSTR bstrEventName, + [in, optional] VARIANT *pvarEventObject); + + [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] + void onresizestart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] + VARIANT onresizestart(); + + [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] + void onresizeend(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] + VARIANT onresizeend(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] + void onmovestart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] + VARIANT onmovestart(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable] + void onmoveend(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable] + VARIANT onmoveend(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] + void onmouseenter(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] + VARIANT onmouseenter(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] + void onmouseleave(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] + VARIANT onmouseleave(); + + [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] + void onactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] + VARIANT onactivate(); + + [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] + void ondeactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] + VARIANT ondeactivate(); + + [id(DISPID_IHTMLELEMENT3_DRAGDROP)] + VARIANT_BOOL dragDrop(); + + [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable] + LONG glyphMode(); + + [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] + void onmousewheel(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] + VARIANT onmousewheel(); + + [id(DISPID_IHTMLELEMENT4_NORMALIZE)] + void normalize(); + + [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)] + IHTMLDOMAttribute *getAttributeNode([in] BSTR bstrname); + + [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)] + IHTMLDOMAttribute *setAttributeNode([in] IHTMLDOMAttribute *pattr); + + [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)] + IHTMLDOMAttribute *removeAttributeNode([in] IHTMLDOMAttribute *pattr); + + [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] + void onbeforeactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] + VARIANT onbeforeactivate(); + + [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable] + void onfocusin(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable] + VARIANT onfocusin(); + + [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] + void onfocusout(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] + VARIANT onfocusout(); + + [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden] + long uniqueNumber(); + + [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden] + BSTR uniqueID(); + + [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)] + long nodeType(); + + [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)] + IHTMLDOMNode *parentNode(); + + [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)] + VARIANT_BOOL hasChildNodes(); + + [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)] + IDispatch *childNodes(); + + [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)] + IDispatch *attributes(); + + [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)] + IHTMLDOMNode *insertBefore( + [in] IHTMLDOMNode *newChild, + [in, optional] VARIANT refChild); + + [id(DISPID_IHTMLDOMNODE_REMOVECHILD)] + IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild); + + [id(DISPID_IHTMLDOMNODE_REPLACECHILD)] + IHTMLDOMNode *replaceChild( + [in] IHTMLDOMNode *newChild, + [in] IHTMLDOMNode *oldChild); + + [id(DISPID_IHTMLDOMNODE_CLONENODE)] + IHTMLDOMNode *cloneNode([in] VARIANT_BOOL fDeep); + + [id(DISPID_IHTMLDOMNODE_REMOVENODE)] + IHTMLDOMNode *removeNode([in, defaultvalue(0)] VARIANT_BOOL fDeep); + + [id(DISPID_IHTMLDOMNODE_SWAPNODE)] + IHTMLDOMNode *swapNode([in] IHTMLDOMNode *otherNode); + + [id(DISPID_IHTMLDOMNODE_REPLACENODE)] + IHTMLDOMNode *replaceNode([in] IHTMLDOMNode *replacement); + + [id(DISPID_IHTMLDOMNODE_APPENDCHILD)] + IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild); + + [propget, id(DISPID_IHTMLDOMNODE_NODENAME)] + BSTR nodeName(); + + [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)] + void nodeValue(VARIANT v); + + [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)] + VARIANT nodeValue(); + + [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)] + IHTMLDOMNode *firstChild(); + + [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)] + IHTMLDOMNode *lastChild(); + + [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)] + IHTMLDOMNode *previousSibling(); + + [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)] + IHTMLDOMNode *nextSibling(); + + [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)] + IDispatch *ownerDocument(); + + [propput, id(DISPID_IHTMLDATABINDING_DATAFLD)] + void dataFld(BSTR v); + + [propget, id(DISPID_IHTMLDATABINDING_DATAFLD)] + BSTR dataFld(); + + [propput, id(DISPID_IHTMLDATABINDING_DATASRC)] + void dataSrc(BSTR v); + + [propget, id(DISPID_IHTMLDATABINDING_DATASRC)] + BSTR dataSrc(); + + [propput, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)] + void dataFormatAs(BSTR v); + + [propget, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)] + BSTR dataFormatAs(); + + [propput, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)] + void selected(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)] + VARIANT_BOOL selected(); + + [propput, id(DISPID_IHTMLOPTIONELEMENT_VALUE)] + void value(BSTR v); + + [propget, id(DISPID_IHTMLOPTIONELEMENT_VALUE)] + BSTR value(); + + [propput, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)] + void defaultSelected(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)] + VARIANT_BOOL defaultSelected(); + + [propput, id(DISPID_IHTMLOPTIONELEMENT_INDEX)] + void index(LONG v); + + [propget, id(DISPID_IHTMLOPTIONELEMENT_INDEX)] + LONG index(); + + [propput, id(DISPID_IHTMLOPTIONELEMENT_TEXT)] + void text(BSTR v); + + [propget, id(DISPID_IHTMLOPTIONELEMENT_TEXT)] + BSTR text(); + + [propget, id(DISPID_IHTMLOPTIONELEMENT_FORM)] + IHTMLFormElement *form(); + + [propput, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable] + void label(BSTR v); + + [propget, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable] + BSTR label(); +} + /***************************************************************************** * IHTMLInputElement interface */ @@ -3699,6 +8458,1053 @@ interface IHTMLInputTextElement : IDispatch HRESULT createTextRange([retval, out] IHTMLTxtRange **range); } +[ + hidden, + uuid(3050f57d-98b5-11cf-bb82-00aa00bdce0b) +] +dispinterface DispHTMLInputElement +{ +properties: +methods: + [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)] + void setAttribute( + [in] BSTR strAttributeName, + [in] VARIANT AttributeValue, + [in, defaultvalue(1)] LONG lFlags); + + [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)] + VARIANT getAttribute( + [in] BSTR strAttributeName, + [in, defaultvalue(0)] LONG lFlags); + + [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)] + VARIANT_BOOL removeAttribute( + [in] BSTR strAttributeName, + [in, defaultvalue(1)] LONG lFlags); + + [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable] + void className(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable] + BSTR className(); + + [propput, id(DISPID_IHTMLELEMENT_ID), bindable] + void id(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_ID), bindable] + BSTR id(); + + [propget, id(DISPID_IHTMLELEMENT_TAGNAME)] + BSTR tagName(); + + [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)] + IHTMLElement *parentElement(); + + [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable] + IHTMLStyle *style(); + + [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable] + void onhelp(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable] + VARIANT onhelp(); + + [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable] + void onclick(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable] + VARIANT onclick(); + + [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable] + void ondblclick(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable] + VARIANT ondblclick(); + + [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] + void onkeydown(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] + VARIANT onkeydown(); + + [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable] + void onkeyup(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable] + VARIANT onkeyup(); + + [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable] + void onkeypress(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable] + VARIANT onkeypress(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable] + void onmouseout(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable] + VARIANT onmouseout(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] + void onmouseover(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] + VARIANT onmouseover(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] + void onmousemove(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] + VARIANT onmousemove(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] + void onmousedown(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] + VARIANT onmousedown(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] + void onmouseup(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] + VARIANT onmouseup(); + + [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)] + IDispatch *document(); + + [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable] + void title(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable] + BSTR title(); + + [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable] + void language(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable] + BSTR language(); + + [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] + void onselectstart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] + VARIANT onselectstart(); + + [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)] + void scrollIntoView([in, optional] VARIANT varargStart); + + [id(DISPID_IHTMLELEMENT_CONTAINS)] + VARIANT_BOOL contains([in] IHTMLElement *pChild); + + [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable] + long sourceIndex(); + + [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)] + VARIANT recordNumber(); + + [propput, id(DISPID_IHTMLELEMENT_LANG)] + void lang(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_LANG)] + BSTR lang(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)] + long offsetLeft(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)] + long offsetTop(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)] + long offsetWidth(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)] + long offsetHeight(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)] + IHTMLElement *offsetParent(); + + [propput, id(DISPID_IHTMLELEMENT_INNERHTML)] + void innerHTML(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_INNERHTML)] + BSTR innerHTML(); + + [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)] + void innerText(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)] + BSTR innerText(); + + [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)] + void outerHTML(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)] + BSTR outerHTML(); + + [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)] + void outerText(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)] + BSTR outerText(); + + [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)] + void insertAdjacentHTML( + [in] BSTR where, + [in] BSTR html); + + [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)] + void insertAdjacentText( + [in] BSTR where, + [in] BSTR text); + + [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)] + IHTMLElement *parentTextEdit(); + + [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)] + VARIANT_BOOL isTextEdit(); + + [id(DISPID_IHTMLELEMENT_CLICK)] + void click(); + + [propget, id(DISPID_IHTMLELEMENT_FILTERS)] + IHTMLFiltersCollection *filters(); + + [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] + void ondragstart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] + VARIANT ondragstart(); + + [id(DISPID_IHTMLELEMENT_TOSTRING)] + BSTR toString(); + + [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] + void onbeforeupdate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] + VARIANT onbeforeupdate(); + + [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] + void onafterupdate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] + VARIANT onafterupdate(); + + [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] + void onerrorupdate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] + VARIANT onerrorupdate(); + + [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] + void onrowexit(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] + VARIANT onrowexit(); + + [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] + void onrowenter(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] + VARIANT onrowenter(); + + [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] + void ondatasetchanged(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] + VARIANT ondatasetchanged(); + + [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] + void ondataavailable(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] + VARIANT ondataavailable(); + + [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] + void ondatasetcomplete(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] + VARIANT ondatasetcomplete(); + + [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] + void onfilterchange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] + VARIANT onfilterchange(); + + [propget, id(DISPID_IHTMLELEMENT_CHILDREN)] + IDispatch *children(); + + [propget, id(DISPID_IHTMLELEMENT_ALL)] + IDispatch *all(); + + [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)] + BSTR scopeName(); + + [id(DISPID_IHTMLELEMENT2_SETCAPTURE)] + void setCapture([in, defaultvalue(-1)] VARIANT_BOOL containerCapture); + + [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)] + void releaseCapture(); + + [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] + void onlosecapture(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] + VARIANT onlosecapture(); + + [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)] + BSTR componentFromPoint( + [in] long x, + [in] long y); + + [id(DISPID_IHTMLELEMENT2_DOSCROLL)] + void doScroll([in, optional] VARIANT component); + + [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] + void onscroll(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] + VARIANT onscroll(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable] + void ondrag(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable] + VARIANT ondrag(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] + void ondragend(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] + VARIANT ondragend(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] + void ondragenter(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] + VARIANT ondragenter(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] + void ondragover(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] + VARIANT ondragover(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] + void ondragleave(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] + VARIANT ondragleave(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable] + void ondrop(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable] + VARIANT ondrop(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] + void onbeforecut(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] + VARIANT onbeforecut(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable] + void oncut(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable] + VARIANT oncut(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] + void onbeforecopy(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] + VARIANT onbeforecopy(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable] + void oncopy(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable] + VARIANT oncopy(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] + void onbeforepaste(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] + VARIANT onbeforepaste(); + + [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable] + void onpaste(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable] + VARIANT onpaste(); + + [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable] + IHTMLCurrentStyle *currentStyle(); + + [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] + void onpropertychange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] + VARIANT onpropertychange(); + + [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)] + IHTMLRectCollection *getClientRects(); + + [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)] + IHTMLRect *getBoundingClientRect(); + + [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)] + void setExpression( + [in] BSTR propname, + [in] BSTR expression, + [in, defaultvalue("")] BSTR language); + + [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)] + VARIANT getExpression([in] BSTR propname); + + [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)] + VARIANT_BOOL removeExpression([in] BSTR propname); + + [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] + void tabIndex(short v); + + [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] + short tabIndex(); + + [id(DISPID_IHTMLELEMENT2_FOCUS)] + void focus(); + + [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable] + void accessKey(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable] + BSTR accessKey(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable] + void onblur(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable] + VARIANT onblur(); + + [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable] + void onfocus(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable] + VARIANT onfocus(); + + [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] + void onresize(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] + VARIANT onresize(); + + [id(DISPID_IHTMLELEMENT2_BLUR)] + void blur(); + + [id(DISPID_IHTMLELEMENT2_ADDFILTER)] + void addFilter([in] IUnknown *pUnk); + + [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)] + void removeFilter([in] IUnknown *pUnk); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable] + long clientHeight(); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable] + long clientWidth(); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable] + long clientTop(); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable] + long clientLeft(); + + [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)] + VARIANT_BOOL attachEvent( + [in] BSTR event, + [in] IDispatch *pDisp); + + [id(DISPID_IHTMLELEMENT2_DETACHEVENT)] + void detachEvent( + [in] BSTR event, + [in] IDispatch *pDisp); + + [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)] + VARIANT readyState(); + + [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] + void onreadystatechange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] + VARIANT onreadystatechange(); + + [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] + void onrowsdelete(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] + VARIANT onrowsdelete(); + + [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] + void onrowsinserted(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] + VARIANT onrowsinserted(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] + void oncellchange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] + VARIANT oncellchange(); + + [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable] + void dir(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable] + BSTR dir(); + + [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)] + IDispatch *createControlRange(); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable] + long scrollHeight(); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable] + long scrollWidth(); + + [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable] + void scrollTop(long v); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable] + long scrollTop(); + + [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] + void scrollLeft(long v); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] + long scrollLeft(); + + [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)] + void clearAttributes(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] + void oncontextmenu(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] + VARIANT oncontextmenu(); + + [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)] + IHTMLElement *insertAdjacentElement( + [in] BSTR where, + [in] IHTMLElement *insertedElement); + + [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)] + IHTMLElement *applyElement( + [in] IHTMLElement *apply, + [in] BSTR where); + + [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)] + BSTR getAdjacentText([in] BSTR where); + + [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)] + BSTR replaceAdjacentText( + [in] BSTR where, + [in] BSTR newText); + + [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)] + VARIANT_BOOL canHaveChildren(); + + [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)] + long addBehavior( + [in] BSTR bstrUrl, + [in, optional] VARIANT *pvarFactory); + + [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)] + VARIANT_BOOL removeBehavior([in] long cookie); + + [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable] + IHTMLStyle *runtimeStyle(); + + [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)] + IDispatch *behaviorUrns(); + + [propput, id(DISPID_IHTMLELEMENT2_TAGURN)] + void tagUrn(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT2_TAGURN)] + BSTR tagUrn(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] + void onbeforeeditfocus(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] + VARIANT onbeforeeditfocus(); + + [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted] + long readyStateValue(); + + [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)] + IHTMLElementCollection *getElementsByTagName([in] BSTR v); + + [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)] + void mergeAttributes( + [in] IHTMLElement *mergeThis, + [in, optional] VARIANT *pvarFlags); + + [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)] + VARIANT_BOOL isMultiLine(); + + [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)] + VARIANT_BOOL canHaveHTML(); + + [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] + void onlayoutcomplete(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] + VARIANT onlayoutcomplete(); + + [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable] + void onpage(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable] + VARIANT onpage(); + + [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] + void inflateBlock(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] + VARIANT_BOOL inflateBlock(); + + [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] + void onbeforedeactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] + VARIANT onbeforedeactivate(); + + [id(DISPID_IHTMLELEMENT3_SETACTIVE)] + void setActive(); + + [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] + void contentEditable(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] + BSTR contentEditable(); + + [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)] + VARIANT_BOOL isContentEditable(); + + [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable] + void hideFocus(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable] + VARIANT_BOOL hideFocus(); + + [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] + void disabled(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] + VARIANT_BOOL disabled(); + + [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)] + VARIANT_BOOL isDisabled(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable] + void onmove(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable] + VARIANT onmove(); + + [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] + void oncontrolselect(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] + VARIANT oncontrolselect(); + + [id(DISPID_IHTMLELEMENT3_FIREEVENT)] + VARIANT_BOOL fireEvent( + [in] BSTR bstrEventName, + [in, optional] VARIANT *pvarEventObject); + + [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] + void onresizestart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] + VARIANT onresizestart(); + + [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] + void onresizeend(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] + VARIANT onresizeend(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] + void onmovestart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] + VARIANT onmovestart(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable] + void onmoveend(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable] + VARIANT onmoveend(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] + void onmouseenter(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] + VARIANT onmouseenter(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] + void onmouseleave(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] + VARIANT onmouseleave(); + + [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] + void onactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] + VARIANT onactivate(); + + [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] + void ondeactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] + VARIANT ondeactivate(); + + [id(DISPID_IHTMLELEMENT3_DRAGDROP)] + VARIANT_BOOL dragDrop(); + + [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable] + LONG glyphMode(); + + [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] + void onmousewheel(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] + VARIANT onmousewheel(); + + [id(DISPID_IHTMLELEMENT4_NORMALIZE)] + void normalize(); + + [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)] + IHTMLDOMAttribute *getAttributeNode([in] BSTR bstrname); + + [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)] + IHTMLDOMAttribute *setAttributeNode([in] IHTMLDOMAttribute *pattr); + + [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)] + IHTMLDOMAttribute *removeAttributeNode([in] IHTMLDOMAttribute *pattr); + + [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] + void onbeforeactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] + VARIANT onbeforeactivate(); + + [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable] + void onfocusin(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable] + VARIANT onfocusin(); + + [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] + void onfocusout(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] + VARIANT onfocusout(); + + [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden] + long uniqueNumber(); + + [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden] + BSTR uniqueID(); + + [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)] + long nodeType(); + + [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)] + IHTMLDOMNode *parentNode(); + + [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)] + VARIANT_BOOL hasChildNodes(); + + [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)] + IDispatch *childNodes(); + + [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)] + IDispatch *attributes(); + + [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)] + IHTMLDOMNode *insertBefore( + [in] IHTMLDOMNode *newChild, + [in, optional] VARIANT refChild); + + [id(DISPID_IHTMLDOMNODE_REMOVECHILD)] + IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild); + + [id(DISPID_IHTMLDOMNODE_REPLACECHILD)] + IHTMLDOMNode *replaceChild( + [in] IHTMLDOMNode *newChild, + [in] IHTMLDOMNode *oldChild); + + [id(DISPID_IHTMLDOMNODE_CLONENODE)] + IHTMLDOMNode *cloneNode([in] VARIANT_BOOL fDeep); + + [id(DISPID_IHTMLDOMNODE_REMOVENODE)] + IHTMLDOMNode *removeNode([in, defaultvalue(0)] VARIANT_BOOL fDeep); + + [id(DISPID_IHTMLDOMNODE_SWAPNODE)] + IHTMLDOMNode *swapNode([in] IHTMLDOMNode *otherNode); + + [id(DISPID_IHTMLDOMNODE_REPLACENODE)] + IHTMLDOMNode *replaceNode([in] IHTMLDOMNode *replacement); + + [id(DISPID_IHTMLDOMNODE_APPENDCHILD)] + IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild); + + [propget, id(DISPID_IHTMLDOMNODE_NODENAME)] + BSTR nodeName(); + + [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)] + void nodeValue(VARIANT v); + + [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)] + VARIANT nodeValue(); + + [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)] + IHTMLDOMNode *firstChild(); + + [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)] + IHTMLDOMNode *lastChild(); + + [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)] + IHTMLDOMNode *previousSibling(); + + [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)] + IHTMLDOMNode *nextSibling(); + + [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)] + IDispatch *ownerDocument(); + + [propput, id(DISPID_IHTMLDATABINDING_DATAFLD)] + void dataFld(BSTR v); + + [propget, id(DISPID_IHTMLDATABINDING_DATAFLD)] + BSTR dataFld(); + + [propput, id(DISPID_IHTMLDATABINDING_DATASRC)] + void dataSrc(BSTR v); + + [propget, id(DISPID_IHTMLDATABINDING_DATASRC)] + BSTR dataSrc(); + + [propput, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)] + void dataFormatAs(BSTR v); + + [propget, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)] + BSTR dataFormatAs(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_TYPE)] + void type(BSTR v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_TYPE)] + BSTR type(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable] + void value(BSTR v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable] + BSTR value(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable] + void name(BSTR v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable] + BSTR name(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_STATUS)] + void status(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_STATUS)] + VARIANT_BOOL status(); + + [propget, id(DISPID_IHTMLINPUTELEMENT_FORM)] + IHTMLFormElement *form(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable] + void size(long v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable] + long size(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable] + void maxLength(long v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable] + long maxLength(); + + [id(DISPID_IHTMLINPUTELEMENT_SELECT)] + void select(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable] + void onchange(VARIANT v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable] + VARIANT onchange(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable] + void onselect(VARIANT v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable] + VARIANT onselect(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden] + void defaultValue(BSTR v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden] + BSTR defaultValue(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable] + void readOnly(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable] + VARIANT_BOOL readOnly(); + + [id(DISPID_IHTMLINPUTELEMENT_CREATETEXTRANGE)] + IHTMLTxtRange *createTextRange(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable] + void indeterminate(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable] + VARIANT_BOOL indeterminate(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable] + void defaultChecked(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable] + VARIANT_BOOL defaultChecked(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable] + void checked(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable] + VARIANT_BOOL checked(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable] + void border(VARIANT v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable] + VARIANT border(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable] + void vspace(long v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable] + long vspace(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable] + void hspace(long v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable] + long hspace(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable] + void alt(BSTR v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable] + BSTR alt(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable] + void src(BSTR v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable] + BSTR src(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable] + void lowsrc(BSTR v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable] + BSTR lowsrc(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable] + void vrml(BSTR v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable] + BSTR vrml(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable] + void dynsrc(BSTR v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable] + BSTR dynsrc(); + + [propget, id(DISPID_IHTMLINPUTELEMENT_COMPLETE)] + VARIANT_BOOL complete(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable] + void loop(VARIANT v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable] + VARIANT loop(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable] + void align(BSTR v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable] + BSTR align(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable] + void onload(VARIANT v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable] + VARIANT onload(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable] + void onerror(VARIANT v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable] + VARIANT onerror(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable] + void onabort(VARIANT v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable] + VARIANT onabort(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_WIDTH)] + void width(long v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_WIDTH)] + long width(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)] + void height(long v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)] + long height(); + + [propput, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable] + void start(BSTR v); + + [propget, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable] + BSTR start(); + + [propput, id(DISPID_IHTMLINPUTELEMENT2_ACCEPT), displaybind, bindable] + void accept(BSTR v); + + [propget, id(DISPID_IHTMLINPUTELEMENT2_ACCEPT), displaybind, bindable] + BSTR accept(); + + [propput, id(DISPID_IHTMLINPUTELEMENT2_USEMAP), displaybind, bindable] + void useMap(BSTR v); + + [propget, id(DISPID_IHTMLINPUTELEMENT2_USEMAP), displaybind, bindable] + BSTR useMap(); +} + /***************************************************************************** * IHTMLTextAreaElement interface */ @@ -3789,6 +9595,840 @@ interface IHTMLTextAreaElement : IDispatch HRESULT createTextRange([retval, out] IHTMLTxtRange **range); } +/***************************************************************************** + * DispHTMLUnknownElement interface + */ +[ + hidden, + uuid(3050f539-98b5-11cf-bb82-00aa00bdce0b) +] +dispinterface DispHTMLUnknownElement +{ +properties: +methods: + [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)] + void setAttribute( + [in] BSTR strAttributeName, + [in] VARIANT AttributeValue, + [in, defaultvalue(1)] LONG lFlags); + + [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)] + VARIANT getAttribute( + [in] BSTR strAttributeName, + [in, defaultvalue(0)] LONG lFlags); + + [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)] + VARIANT_BOOL removeAttribute( + [in] BSTR strAttributeName, + [in, defaultvalue(1)] LONG lFlags); + + [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable] + void className(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable] + BSTR className(); + + [propput, id(DISPID_IHTMLELEMENT_ID), bindable] + void id(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_ID), bindable] + BSTR id(); + + [propget, id(DISPID_IHTMLELEMENT_TAGNAME)] + BSTR tagName(); + + [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)] + IHTMLElement *parentElement(); + + [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable] + IHTMLStyle *style(); + + [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable] + void onhelp(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable] + VARIANT onhelp(); + + [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable] + void onclick(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable] + VARIANT onclick(); + + [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable] + void ondblclick(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable] + VARIANT ondblclick(); + + [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] + void onkeydown(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] + VARIANT onkeydown(); + + [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable] + void onkeyup(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable] + VARIANT onkeyup(); + + [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable] + void onkeypress(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable] + VARIANT onkeypress(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable] + void onmouseout(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable] + VARIANT onmouseout(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] + void onmouseover(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] + VARIANT onmouseover(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] + void onmousemove(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] + VARIANT onmousemove(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] + void onmousedown(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] + VARIANT onmousedown(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] + void onmouseup(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] + VARIANT onmouseup(); + + [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)] + IDispatch *document(); + + [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable] + void title(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable] + BSTR title(); + + [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable] + void language(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable] + BSTR language(); + + [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] + void onselectstart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] + VARIANT onselectstart(); + + [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)] + void scrollIntoView([in, optional] VARIANT varargStart); + + [id(DISPID_IHTMLELEMENT_CONTAINS)] + VARIANT_BOOL contains([in] IHTMLElement *pChild); + + [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable] + long sourceIndex(); + + [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)] + VARIANT recordNumber(); + + [propput, id(DISPID_IHTMLELEMENT_LANG)] + void lang(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_LANG)] + BSTR lang(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)] + long offsetLeft(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)] + long offsetTop(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)] + long offsetWidth(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)] + long offsetHeight(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)] + IHTMLElement *offsetParent(); + + [propput, id(DISPID_IHTMLELEMENT_INNERHTML)] + void innerHTML(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_INNERHTML)] + BSTR innerHTML(); + + [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)] + void innerText(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)] + BSTR innerText(); + + [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)] + void outerHTML(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)] + BSTR outerHTML(); + + [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)] + void outerText(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)] + BSTR outerText(); + + [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)] + void insertAdjacentHTML( + [in] BSTR where, + [in] BSTR html); + + [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)] + void insertAdjacentText( + [in] BSTR where, + [in] BSTR text); + + [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)] + IHTMLElement *parentTextEdit(); + + [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)] + VARIANT_BOOL isTextEdit(); + + [id(DISPID_IHTMLELEMENT_CLICK)] + void click(); + + [propget, id(DISPID_IHTMLELEMENT_FILTERS)] + IHTMLFiltersCollection *filters(); + + [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] + void ondragstart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] + VARIANT ondragstart(); + + [id(DISPID_IHTMLELEMENT_TOSTRING)] + BSTR toString(); + + [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] + void onbeforeupdate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] + VARIANT onbeforeupdate(); + + [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] + void onafterupdate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] + VARIANT onafterupdate(); + + [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] + void onerrorupdate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] + VARIANT onerrorupdate(); + + [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] + void onrowexit(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] + VARIANT onrowexit(); + + [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] + void onrowenter(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] + VARIANT onrowenter(); + + [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] + void ondatasetchanged(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] + VARIANT ondatasetchanged(); + + [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] + void ondataavailable(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] + VARIANT ondataavailable(); + + [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] + void ondatasetcomplete(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] + VARIANT ondatasetcomplete(); + + [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] + void onfilterchange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] + VARIANT onfilterchange(); + + [propget, id(DISPID_IHTMLELEMENT_CHILDREN)] + IDispatch *children(); + + [propget, id(DISPID_IHTMLELEMENT_ALL)] + IDispatch *all(); + + [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)] + BSTR scopeName(); + + [id(DISPID_IHTMLELEMENT2_SETCAPTURE)] + void setCapture([in, defaultvalue(-1)] VARIANT_BOOL containerCapture); + + [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)] + void releaseCapture(); + + [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] + void onlosecapture(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] + VARIANT onlosecapture(); + + [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)] + BSTR componentFromPoint( + [in] long x, + [in] long y); + + [id(DISPID_IHTMLELEMENT2_DOSCROLL)] + void doScroll([in, optional] VARIANT component); + + [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] + void onscroll(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] + VARIANT onscroll(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable] + void ondrag(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable] + VARIANT ondrag(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] + void ondragend(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] + VARIANT ondragend(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] + void ondragenter(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] + VARIANT ondragenter(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] + void ondragover(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] + VARIANT ondragover(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] + void ondragleave(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] + VARIANT ondragleave(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable] + void ondrop(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable] + VARIANT ondrop(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] + void onbeforecut(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] + VARIANT onbeforecut(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable] + void oncut(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable] + VARIANT oncut(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] + void onbeforecopy(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] + VARIANT onbeforecopy(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable] + void oncopy(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable] + VARIANT oncopy(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] + void onbeforepaste(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] + VARIANT onbeforepaste(); + + [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable] + void onpaste(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable] + VARIANT onpaste(); + + [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable] + IHTMLCurrentStyle *currentStyle(); + + [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] + void onpropertychange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] + VARIANT onpropertychange(); + + [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)] + IHTMLRectCollection *getClientRects(); + + [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)] + IHTMLRect *getBoundingClientRect(); + + [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)] + void setExpression( + [in] BSTR propname, + [in] BSTR expression, + [in, defaultvalue("")] BSTR language); + + [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)] + VARIANT getExpression([in] BSTR propname); + + [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)] + VARIANT_BOOL removeExpression([in] BSTR propname); + + [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] + void tabIndex(short v); + + [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] + short tabIndex(); + + [id(DISPID_IHTMLELEMENT2_FOCUS)] + void focus(); + + [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable] + void accessKey(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable] + BSTR accessKey(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable] + void onblur(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable] + VARIANT onblur(); + + [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable] + void onfocus(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable] + VARIANT onfocus(); + + [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] + void onresize(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] + VARIANT onresize(); + + [id(DISPID_IHTMLELEMENT2_BLUR)] + void blur(); + + [id(DISPID_IHTMLELEMENT2_ADDFILTER)] + void addFilter([in] IUnknown *pUnk); + + [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)] + void removeFilter([in] IUnknown *pUnk); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable] + long clientHeight(); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable] + long clientWidth(); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable] + long clientTop(); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable] + long clientLeft(); + + [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)] + VARIANT_BOOL attachEvent( + [in] BSTR event, + [in] IDispatch *pDisp); + + [id(DISPID_IHTMLELEMENT2_DETACHEVENT)] + void detachEvent( + [in] BSTR event, + [in] IDispatch *pDisp); + + [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)] + VARIANT readyState(); + + [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] + void onreadystatechange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] + VARIANT onreadystatechange(); + + [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] + void onrowsdelete(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] + VARIANT onrowsdelete(); + + [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] + void onrowsinserted(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] + VARIANT onrowsinserted(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] + void oncellchange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] + VARIANT oncellchange(); + + [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable] + void dir(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable] + BSTR dir(); + + [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)] + IDispatch *createControlRange(); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable] + long scrollHeight(); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable] + long scrollWidth(); + + [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable] + void scrollTop(long v); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable] + long scrollTop(); + + [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] + void scrollLeft(long v); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] + long scrollLeft(); + + [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)] + void clearAttributes(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] + void oncontextmenu(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] + VARIANT oncontextmenu(); + + [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)] + IHTMLElement *insertAdjacentElement( + [in] BSTR where, + [in] IHTMLElement *insertedElement); + + [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)] + IHTMLElement *applyElement( + [in] IHTMLElement *apply, + [in] BSTR where); + + [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)] + BSTR getAdjacentText([in] BSTR where); + + [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)] + BSTR replaceAdjacentText( + [in] BSTR where, + [in] BSTR newText); + + [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)] + VARIANT_BOOL canHaveChildren(); + + [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)] + long addBehavior( + [in] BSTR bstrUrl, + [in, optional] VARIANT *pvarFactory); + + [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)] + VARIANT_BOOL removeBehavior([in] long cookie); + + [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable] + IHTMLStyle *runtimeStyle(); + + [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)] + IDispatch *behaviorUrns(); + + [propput, id(DISPID_IHTMLELEMENT2_TAGURN)] + void tagUrn(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT2_TAGURN)] + BSTR tagUrn(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] + void onbeforeeditfocus(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] + VARIANT onbeforeeditfocus(); + + [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted] + long readyStateValue(); + + [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)] + IHTMLElementCollection *getElementsByTagName([in] BSTR v); + + [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)] + void mergeAttributes( + [in] IHTMLElement *mergeThis, + [in, optional] VARIANT *pvarFlags); + + [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)] + VARIANT_BOOL isMultiLine(); + + [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)] + VARIANT_BOOL canHaveHTML(); + + [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] + void onlayoutcomplete(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] + VARIANT onlayoutcomplete(); + + [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable] + void onpage(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable] + VARIANT onpage(); + + [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] + void inflateBlock(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] + VARIANT_BOOL inflateBlock(); + + [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] + void onbeforedeactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] + VARIANT onbeforedeactivate(); + + [id(DISPID_IHTMLELEMENT3_SETACTIVE)] + void setActive(); + + [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] + void contentEditable(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] + BSTR contentEditable(); + + [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)] + VARIANT_BOOL isContentEditable(); + + [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable] + void hideFocus(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable] + VARIANT_BOOL hideFocus(); + + [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] + void disabled(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] + VARIANT_BOOL disabled(); + + [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)] + VARIANT_BOOL isDisabled(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable] + void onmove(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable] + VARIANT onmove(); + + [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] + void oncontrolselect(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] + VARIANT oncontrolselect(); + + [id(DISPID_IHTMLELEMENT3_FIREEVENT)] + VARIANT_BOOL fireEvent( + [in] BSTR bstrEventName, + [in, optional] VARIANT *pvarEventObject); + + [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] + void onresizestart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] + VARIANT onresizestart(); + + [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] + void onresizeend(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] + VARIANT onresizeend(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] + void onmovestart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] + VARIANT onmovestart(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable] + void onmoveend(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable] + VARIANT onmoveend(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] + void onmouseenter(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] + VARIANT onmouseenter(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] + void onmouseleave(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] + VARIANT onmouseleave(); + + [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] + void onactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] + VARIANT onactivate(); + + [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] + void ondeactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] + VARIANT ondeactivate(); + + [id(DISPID_IHTMLELEMENT3_DRAGDROP)] + VARIANT_BOOL dragDrop(); + + [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable] + LONG glyphMode(); + + [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] + void onmousewheel(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] + VARIANT onmousewheel(); + + [id(DISPID_IHTMLELEMENT4_NORMALIZE)] + void normalize(); + + [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)] + IHTMLDOMAttribute *getAttributeNode([in] BSTR bstrname); + + [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)] + IHTMLDOMAttribute *setAttributeNode([in] IHTMLDOMAttribute *pattr); + + [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)] + IHTMLDOMAttribute *removeAttributeNode([in] IHTMLDOMAttribute *pattr); + + [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] + void onbeforeactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] + VARIANT onbeforeactivate(); + + [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable] + void onfocusin(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable] + VARIANT onfocusin(); + + [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] + void onfocusout(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] + VARIANT onfocusout(); + + [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden] + long uniqueNumber(); + + [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden] + BSTR uniqueID(); + + [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)] + long nodeType(); + + [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)] + IHTMLDOMNode *parentNode(); + + [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)] + VARIANT_BOOL hasChildNodes(); + + [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)] + IDispatch *childNodes(); + + [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)] + IDispatch *attributes(); + + [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)] + IHTMLDOMNode *insertBefore( + [in] IHTMLDOMNode *newChild, + [in, optional] VARIANT refChild); + + [id(DISPID_IHTMLDOMNODE_REMOVECHILD)] + IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild); + + [id(DISPID_IHTMLDOMNODE_REPLACECHILD)] + IHTMLDOMNode *replaceChild( + [in] IHTMLDOMNode *newChild, + [in] IHTMLDOMNode *oldChild); + + [id(DISPID_IHTMLDOMNODE_CLONENODE)] + IHTMLDOMNode *cloneNode([in] VARIANT_BOOL fDeep); + + [id(DISPID_IHTMLDOMNODE_REMOVENODE)] + IHTMLDOMNode *removeNode([in, defaultvalue(0)] VARIANT_BOOL fDeep); + + [id(DISPID_IHTMLDOMNODE_SWAPNODE)] + IHTMLDOMNode *swapNode([in] IHTMLDOMNode *otherNode); + + [id(DISPID_IHTMLDOMNODE_REPLACENODE)] + IHTMLDOMNode *replaceNode([in] IHTMLDOMNode *replacement); + + [id(DISPID_IHTMLDOMNODE_APPENDCHILD)] + IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild); + + [propget, id(DISPID_IHTMLDOMNODE_NODENAME)] + BSTR nodeName(); + + [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)] + void nodeValue(VARIANT v); + + [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)] + VARIANT nodeValue(); + + [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)] + IHTMLDOMNode *firstChild(); + + [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)] + IHTMLDOMNode *lastChild(); + + [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)] + IHTMLDOMNode *previousSibling(); + + [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)] + IHTMLDOMNode *nextSibling(); + + [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)] + IDispatch *ownerDocument(); +} + /***************************************************************************** * IOmHistory interface */ @@ -3913,10 +10553,10 @@ interface IHTMLOpsProfile : IDispatch * IOmNavigator interface */ [ - odl, - oleautomation, - dual, - uuid(FECEAAA5-8405-11CF-8BA1-00AA00476DA6) + odl, + oleautomation, + dual, + uuid(FECEAAA5-8405-11CF-8BA1-00AA00476DA6) ] interface IOmNavigator : IDispatch { @@ -4053,6 +10693,46 @@ interface IHTMLLocation : IDispatch HRESULT toString([retval, out] BSTR *String); } +/***************************************************************************** + * IHTMLDataTransfer interface + */ +[ + odl, + oleautomation, + dual, + uuid(3050f4b3-98b5-11cf-bb82-00aa00bdce0b) +] +interface IHTMLDataTransfer : IDispatch +{ + [id(DISPID_IHTMLDATATRANSFER_SETDATA)] + HRESULT setData( + [in] BSTR format, + [in] VARIANT *data, + [out, retval] VARIANT_BOOL *pret); + + [id(DISPID_IHTMLDATATRANSFER_GETDATA)] + HRESULT getData( + [in] BSTR format, + [out, retval] VARIANT *pvarRet); + + [id(DISPID_IHTMLDATATRANSFER_CLEARDATA)] + HRESULT clearData( + [in] BSTR format, + [out, retval] VARIANT_BOOL *pret); + + [propput, id(DISPID_IHTMLDATATRANSFER_DROPEFFECT)] + HRESULT dropEffect([in] BSTR v); + + [propget, id(DISPID_IHTMLDATATRANSFER_DROPEFFECT)] + HRESULT dropEffect([out, retval] BSTR *p); + + [propput, id(DISPID_IHTMLDATATRANSFER_EFFECTALLOWED)] + HRESULT effectAllowed([in] BSTR v); + + [propget, id(DISPID_IHTMLDATATRANSFER_EFFECTALLOWED)] + HRESULT effectAllowed([out, retval] BSTR *p); +} + /***************************************************************************** * IHTMLEventObj interface */ @@ -4446,6 +11126,359 @@ interface IHTMLWindow2 : IHTMLFramesCollection2 HRESULT external([retval, out] IDispatch **p); } +/***************************************************************************** + * IHTMLWindow3 interface + */ +[ + odl, + oleautomation, + dual, + uuid(3050f4ae-98b5-11cf-bb82-00aa00bdce0b) +] +interface IHTMLWindow3 : IDispatch +{ + [propget, id(DISPID_IHTMLWINDOW3_SCREENLEFT)] + HRESULT screenLeft([out, retval] long *p); + + [propget, id(DISPID_IHTMLWINDOW3_SCREENTOP)] + HRESULT screenTop([out, retval] long *p); + + [id(DISPID_IHTMLWINDOW3_ATTACHEVENT)] + HRESULT attachEvent( + [in] BSTR event, + [in] IDispatch *pDisp, + [out, retval] VARIANT_BOOL *pfResult); + + [id(DISPID_IHTMLWINDOW3_DETACHEVENT)] + HRESULT detachEvent( + [in] BSTR event, + [in] IDispatch *pDisp); + + [id(DISPID_IHTMLWINDOW3_SETTIMEOUT)] + HRESULT setTimeout( + [in] VARIANT *expression, + [in] long msec, + [in, optional] VARIANT *language, + [out, retval] long *timerID); + + [id(DISPID_IHTMLWINDOW3_SETINTERVAL)] + HRESULT setInterval( + [in] VARIANT *expression, + [in] long msec, + [in, optional] VARIANT *language, + [out, retval] long *timerID); + + [id(DISPID_IHTMLWINDOW3_PRINT)] + HRESULT print(); + + [propput, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable] + HRESULT onbeforeprint([in] VARIANT v); + + [propget, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable] + HRESULT onbeforeprint([out, retval] VARIANT *p); + + [propput, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable] + HRESULT onafterprint([in] VARIANT v); + + [propget, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable] + HRESULT onafterprint([out, retval] VARIANT *p); + + [propget, id(DISPID_IHTMLWINDOW3_CLIPBOARDDATA)] + HRESULT clipboardData([out, retval] IHTMLDataTransfer **p); + + [id(DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG)] + HRESULT showModelessDialog( + [in, defaultvalue("")] BSTR url, + [in, optional] VARIANT *varArgIn, + [in, optional] VARIANT *options, + [out, retval] IHTMLWindow2 **pDialog); +} + +/***************************************************************************** + * DispHTMLWindow2 dispinterface + */ +[ + hidden, + uuid(3050f55d-98b5-11cf-bb82-00aa00bdce0b) +] +dispinterface DispHTMLWindow2 +{ +properties: +methods: + [id(DISPID_IHTMLFRAMESCOLLECTION2_ITEM)] + VARIANT item([in] VARIANT *pvarIndex); + + [propget, id(DISPID_IHTMLFRAMESCOLLECTION2_LENGTH)] + long length(); + + [propget, id(DISPID_IHTMLWINDOW2_FRAMES)] + IHTMLFramesCollection2 *frames(); + + [propput, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)] + void defaultStatus(BSTR v); + + [propget, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)] + BSTR defaultStatus(); + + [propput, id(DISPID_IHTMLWINDOW2_STATUS)] + void status(BSTR v); + + [propget, id(DISPID_IHTMLWINDOW2_STATUS)] + BSTR status(); + + [id(DISPID_IHTMLWINDOW2_CLEARTIMEOUT)] + void clearTimeout([in] long timerID); + + [id(DISPID_IHTMLWINDOW2_ALERT)] + void alert([in, defaultvalue("")] BSTR message); + + [id(DISPID_IHTMLWINDOW2_CONFIRM)] + VARIANT_BOOL confirm([in, defaultvalue("")] BSTR message); + + [id(DISPID_IHTMLWINDOW2_PROMPT)] + VARIANT prompt( + [in, defaultvalue("")] BSTR message, + [in, defaultvalue("undefined")] BSTR defstr); + + [propget, id(DISPID_IHTMLWINDOW2_IMAGE)] + IHTMLImageElementFactory *Image(); + + [propget, id(DISPID_IHTMLWINDOW2_LOCATION)] + IHTMLLocation *location(); + + [propget, id(DISPID_IHTMLWINDOW2_HISTORY)] + IOmHistory *history(); + + [id(DISPID_IHTMLWINDOW2_CLOSE)] + void close(); + + [propput, id(DISPID_IHTMLWINDOW2_OPENER)] + void opener(VARIANT v); + + [propget, id(DISPID_IHTMLWINDOW2_OPENER)] + VARIANT opener(); + + [propget, id(DISPID_IHTMLWINDOW2_NAVIGATOR)] + IOmNavigator *navigator(); + + [propput, id(DISPID_IHTMLWINDOW2_NAME)] + void name(BSTR v); + + [propget, id(DISPID_IHTMLWINDOW2_NAME)] + BSTR name(); + + [propget, id(DISPID_IHTMLWINDOW2_PARENT)] + IHTMLWindow2 *parent(); + + [id(DISPID_IHTMLWINDOW2_OPEN)] + IHTMLWindow2 *open( + [in, defaultvalue("")] BSTR url, + [in, defaultvalue("")] BSTR name, + [in, defaultvalue("")] BSTR features, + [in, defaultvalue(0)] VARIANT_BOOL replace); + + [propget, id(DISPID_IHTMLWINDOW2_SELF)] + IHTMLWindow2 *self(); + + [propget, id(DISPID_IHTMLWINDOW2_TOP)] + IHTMLWindow2 *top(); + + [propget, id(DISPID_IHTMLWINDOW2_WINDOW)] + IHTMLWindow2 *window(); + + [id(DISPID_IHTMLWINDOW2_NAVIGATE)] + void navigate([in] BSTR url); + + [propput, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable] + void onfocus(VARIANT v); + + [propget, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable] + VARIANT onfocus(); + + [propput, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable] + void onblur(VARIANT v); + + [propget, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable] + VARIANT onblur(); + + [propget, id(DISPID_IHTMLWINDOW2_ONLOAD), displaybind, bindable] + VARIANT onload(); + + [propput, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable] + void onbeforeunload(VARIANT v); + + [propget, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable] + VARIANT onbeforeunload(); + + [propput, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable] + void onunload(VARIANT v); + + [propget, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable] + VARIANT onunload(); + + [propput, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable] + void onhelp(VARIANT v); + + [propget, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable] + VARIANT onhelp(); + + [propput, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable] + void onerror(VARIANT v); + + [propget, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable] + VARIANT onerror(); + + [propput, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable] + void onresize(VARIANT v); + + [propget, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable] + VARIANT onresize(); + + [propput, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable] + void onscroll(VARIANT v); + + [propget, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable] + VARIANT onscroll(); + + [propget, id(DISPID_IHTMLWINDOW2_DOCUMENT), source] + IHTMLDocument2 *document(); + + [propget, id(DISPID_IHTMLWINDOW2_EVENT)] + IHTMLEventObj *event(); + + [propget, id(DISPID_IHTMLWINDOW2__NEWENUM), hidden, restricted] + IUnknown *_newEnum(); + + [id(DISPID_IHTMLWINDOW2_SHOWMODALDIALOG)] + VARIANT showModalDialog( + [in] BSTR dialog, + [in, optional] VARIANT *varArgIn, + [in, optional] VARIANT *varOptions); + + [id(DISPID_IHTMLWINDOW2_SHOWHELP)] + void showHelp( + [in] BSTR helpURL, + [in, optional] VARIANT helpArg, + [in, defaultvalue("")] BSTR features); + + [propget, id(DISPID_IHTMLWINDOW2_SCREEN)] + IHTMLScreen *screen(); + + [propget, id(DISPID_IHTMLWINDOW2_OPTION)] + IHTMLOptionElementFactory *Option(); + + [id(DISPID_IHTMLWINDOW2_FOCUS)] + void focus(); + + [propget, id(DISPID_IHTMLWINDOW2_CLOSED)] + VARIANT_BOOL closed(); + + [id(DISPID_IHTMLWINDOW2_BLUR)] + void blur(); + + [id(DISPID_IHTMLWINDOW2_SCROLL)] + void scroll([in] long x, [in] long y); + + [propget, id(DISPID_IHTMLWINDOW2_CLIENTINFORMATION)] + IOmNavigator *clientInformation(); + + [id(DISPID_IHTMLWINDOW2_CLEARINTERVAL)] + void clearInterval([in] long timerID); + + [propput, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)] + void offscreenBuffering(VARIANT v); + + [propget, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)] + VARIANT offscreenBuffering(); + + [id(DISPID_IHTMLWINDOW2_EXECSCRIPT)] + VARIANT execScript( + [in] BSTR _code, + [in, defaultvalue("JScript")] BSTR language); + + [id(DISPID_IHTMLWINDOW2_TOSTRING)] + BSTR toString(); + + [id(DISPID_IHTMLWINDOW2_SCROLLBY)] + void scrollBy([in] long x, [in] long y); + + [id(DISPID_IHTMLWINDOW2_SCROLLTO)] + void scrollTo([in] long x, [in] long y); + + [id(DISPID_IHTMLWINDOW2_MOVETO)] + void moveTo([in] long x, [in] long y); + + [id(DISPID_IHTMLWINDOW2_MOVEBY)] + void moveBy([in] long x, [in] long y); + + [id(DISPID_IHTMLWINDOW2_RESIZETO)] + void resizeTo([in] long x, [in] long y); + + [id(DISPID_IHTMLWINDOW2_RESIZEBY)] + void resizeBy([in] long x, [in] long y); + + [propget, id(DISPID_IHTMLWINDOW2_EXTERNAL)] + IDispatch *external(); + + [propget, id(DISPID_IHTMLWINDOW3_SCREENLEFT)] + long screenLeft(); + + [propget, id(DISPID_IHTMLWINDOW3_SCREENTOP)] + long screenTop(); + + [id(DISPID_IHTMLWINDOW3_ATTACHEVENT)] + VARIANT_BOOL attachEvent( + [in] BSTR event, + [in] IDispatch *pDisp); + + [id(DISPID_IHTMLWINDOW3_DETACHEVENT)] + void detachEvent( + [in] BSTR event, + [in] IDispatch *pDisp); + + [id(DISPID_IHTMLWINDOW3_SETTIMEOUT)] + long setTimeout( + [in] VARIANT *expression, + [in] long msec, + [in, optional] VARIANT *language); + + [id(DISPID_IHTMLWINDOW3_SETINTERVAL)] + long setInterval( + [in] VARIANT *expression, + [in] long msec, + [in, optional] VARIANT *language); + + [id(DISPID_IHTMLWINDOW3_PRINT)] + void print(); + + [propput, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable] + void onbeforeprint(VARIANT v); + + [propget, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable] + VARIANT onbeforeprint(); + + [propput, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable] + void onafterprint(VARIANT v); + + [propget, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable] + VARIANT onafterprint(); + + [propget, id(DISPID_IHTMLWINDOW3_CLIPBOARDDATA)] + IHTMLDataTransfer *clipboardData(); + + [id(DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG)] + IHTMLWindow2 *showModelessDialog( + [in, defaultvalue("")] BSTR url, + [in, optional] VARIANT *varArgIn, + [in, optional] VARIANT *options); + + [id(DISPID_IHTMLWINDOW4_CREATEPOPUP)] + IDispatch *createPopup([in, optional] VARIANT *varArgIn); + + [propget, id(DISPID_IHTMLWINDOW4_FRAMEELEMENT)] + IHTMLFrameBase *frameElement(); +} + /***************************************************************************** * HTMLDocumentEvents2 interface */ @@ -6236,6 +13269,955 @@ coclass HTMLDocument interface IHTMLDOMNode2; } +/***************************************************************************** + * IHTMLCommentElement interface + */ +[ + odl, + oleautomation, + dual, + uuid(3050f20c-98b5-11cf-bb82-00aa00bdce0b) +] +interface IHTMLCommentElement : IDispatch +{ + [propput, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable] + HRESULT text([in] BSTR v); + + [propget, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable] + HRESULT text([out, retval] BSTR *p); + + [propput, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable] + HRESULT atomic([in] long v); + + [propget, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable] + HRESULT atomic([out, retval] long *p); +} + +/***************************************************************************** + * IHTMLCommentElement2 interface + */ +[ + odl, + oleautomation, + dual, + uuid(3050f813-98b5-11cf-bb82-00aa00bdce0b) +] +interface IHTMLCommentElement2 : IDispatch +{ + [propput, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)] + HRESULT data([in] BSTR v); + + [propget, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)] + HRESULT data([out, retval] BSTR *p); + + [propget, id(DISPID_IHTMLCOMMENTELEMENT2_LENGTH)] + HRESULT length([out, retval] long *p); + + [id(DISPID_IHTMLCOMMENTELEMENT2_SUBSTRINGDATA)] + HRESULT substringData( + [in] long offset, + [in] long Count, + [out, retval] BSTR *pbstrsubString); + + [id(DISPID_IHTMLCOMMENTELEMENT2_APPENDDATA)] + HRESULT appendData([in] BSTR bstrstring); + + [id(DISPID_IHTMLCOMMENTELEMENT2_INSERTDATA)] + HRESULT insertData( + [in] long offset, + [in] BSTR bstrstring); + + [id(DISPID_IHTMLCOMMENTELEMENT2_DELETEDATA)] + HRESULT deleteData( + [in] long offset, + [in] long Count); + + [id(DISPID_IHTMLCOMMENTELEMENT2_REPLACEDATA)] + HRESULT replaceData( + [in] long offset, + [in] long Count, + [in] BSTR bstrstring); +} + +/***************************************************************************** + * DispHTMLCommentElement dispinterface + */ +[ + hidden, + uuid(3050f50a-98b5-11cf-bb82-00aa00bdce0b) +] +dispinterface DispHTMLCommentElement +{ +properties: +methods: + [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)] + void setAttribute( + [in] BSTR strAttributeName, + [in] VARIANT AttributeValue, + [in, defaultvalue(1)] LONG lFlags); + + [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)] + VARIANT getAttribute( + [in] BSTR strAttributeName, + [in, defaultvalue(0)] LONG lFlags); + + [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)] + VARIANT_BOOL removeAttribute( + [in] BSTR strAttributeName, + [in, defaultvalue(1)] LONG lFlags); + + [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable] + void className(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable] + BSTR className(); + + [propput, id(DISPID_IHTMLELEMENT_ID), bindable] + void id(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_ID), bindable] + BSTR id(); + + [propget, id(DISPID_IHTMLELEMENT_TAGNAME)] + BSTR tagName(); + + [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)] + IHTMLElement *parentElement(); + + [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable] + IHTMLStyle *style(); + + [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable] + void onhelp(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable] + VARIANT onhelp(); + + [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable] + void onclick(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable] + VARIANT onclick(); + + [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable] + void ondblclick(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable] + VARIANT ondblclick(); + + [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] + void onkeydown(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] + VARIANT onkeydown(); + + [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable] + void onkeyup(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable] + VARIANT onkeyup(); + + [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable] + void onkeypress(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable] + VARIANT onkeypress(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable] + void onmouseout(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable] + VARIANT onmouseout(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] + void onmouseover(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] + VARIANT onmouseover(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] + void onmousemove(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] + VARIANT onmousemove(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] + void onmousedown(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] + VARIANT onmousedown(); + + [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] + void onmouseup(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] + VARIANT onmouseup(); + + [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)] + IDispatch *document(); + + [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable] + void title(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable] + BSTR title(); + + [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable] + void language(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable] + BSTR language(); + + [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] + void onselectstart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] + VARIANT onselectstart(); + + [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)] + void scrollIntoView([in, optional] VARIANT varargStart); + + [id(DISPID_IHTMLELEMENT_CONTAINS)] + VARIANT_BOOL contains([in] IHTMLElement *pChild); + + [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable] + long sourceIndex(); + + [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)] + VARIANT recordNumber(); + + [propput, id(DISPID_IHTMLELEMENT_LANG)] + void lang(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_LANG)] + BSTR lang(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)] + long offsetLeft(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)] + long offsetTop(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)] + long offsetWidth(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)] + long offsetHeight(); + + [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)] + IHTMLElement *offsetParent(); + + [propput, id(DISPID_IHTMLELEMENT_INNERHTML)] + void innerHTML(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_INNERHTML)] + BSTR innerHTML(); + + [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)] + void innerText(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)] + BSTR innerText(); + + [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)] + void outerHTML(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)] + BSTR outerHTML(); + + [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)] + void outerText(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)] + BSTR outerText(); + + [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)] + void insertAdjacentHTML( + [in] BSTR where, + [in] BSTR html); + + [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)] + void insertAdjacentText( + [in] BSTR where, + [in] BSTR text); + + [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)] + IHTMLElement *parentTextEdit(); + + [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)] + VARIANT_BOOL isTextEdit(); + + [id(DISPID_IHTMLELEMENT_CLICK)] + void click(); + + [propget, id(DISPID_IHTMLELEMENT_FILTERS)] + IHTMLFiltersCollection *filters(); + + [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] + void ondragstart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] + VARIANT ondragstart(); + + [id(DISPID_IHTMLELEMENT_TOSTRING)] + BSTR toString(); + + [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] + void onbeforeupdate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] + VARIANT onbeforeupdate(); + + [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] + void onafterupdate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] + VARIANT onafterupdate(); + + [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] + void onerrorupdate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] + VARIANT onerrorupdate(); + + [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] + void onrowexit(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] + VARIANT onrowexit(); + + [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] + void onrowenter(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] + VARIANT onrowenter(); + + [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] + void ondatasetchanged(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] + VARIANT ondatasetchanged(); + + [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] + void ondataavailable(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] + VARIANT ondataavailable(); + + [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] + void ondatasetcomplete(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] + VARIANT ondatasetcomplete(); + + [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] + void onfilterchange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] + VARIANT onfilterchange(); + + [propget, id(DISPID_IHTMLELEMENT_CHILDREN)] + IDispatch *children(); + + [propget, id(DISPID_IHTMLELEMENT_ALL)] + IDispatch *all(); + + [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)] + BSTR scopeName(); + + [id(DISPID_IHTMLELEMENT2_SETCAPTURE)] + void setCapture([in, defaultvalue(-1)] VARIANT_BOOL containerCapture); + + [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)] + void releaseCapture(); + + [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] + void onlosecapture(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] + VARIANT onlosecapture(); + + [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)] + BSTR componentFromPoint( + [in] long x, + [in] long y); + + [id(DISPID_IHTMLELEMENT2_DOSCROLL)] + void doScroll([in, optional] VARIANT component); + + [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] + void onscroll(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] + VARIANT onscroll(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable] + void ondrag(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable] + VARIANT ondrag(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] + void ondragend(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] + VARIANT ondragend(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] + void ondragenter(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] + VARIANT ondragenter(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] + void ondragover(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] + VARIANT ondragover(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] + void ondragleave(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] + VARIANT ondragleave(); + + [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable] + void ondrop(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable] + VARIANT ondrop(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] + void onbeforecut(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] + VARIANT onbeforecut(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable] + void oncut(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable] + VARIANT oncut(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] + void onbeforecopy(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] + VARIANT onbeforecopy(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable] + void oncopy(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable] + VARIANT oncopy(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] + void onbeforepaste(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] + VARIANT onbeforepaste(); + + [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable] + void onpaste(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable] + VARIANT onpaste(); + + [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable] + IHTMLCurrentStyle *currentStyle(); + + [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] + void onpropertychange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] + VARIANT onpropertychange(); + + [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)] + IHTMLRectCollection *getClientRects(); + + [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)] + IHTMLRect *getBoundingClientRect(); + + [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)] + void setExpression( + [in] BSTR propname, + [in] BSTR expression, + [in, defaultvalue("")] BSTR language); + + [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)] + VARIANT getExpression([in] BSTR propname); + + [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)] + VARIANT_BOOL removeExpression([in] BSTR propname); + + [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] + void tabIndex(short v); + + [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] + short tabIndex(); + + [id(DISPID_IHTMLELEMENT2_FOCUS)] + void focus(); + + [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable] + void accessKey(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable] + BSTR accessKey(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable] + void onblur(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable] + VARIANT onblur(); + + [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable] + void onfocus(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable] + VARIANT onfocus(); + + [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] + void onresize(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] + VARIANT onresize(); + + [id(DISPID_IHTMLELEMENT2_BLUR)] + void blur(); + + [id(DISPID_IHTMLELEMENT2_ADDFILTER)] + void addFilter([in] IUnknown *pUnk); + + [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)] + void removeFilter([in] IUnknown *pUnk); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable] + long clientHeight(); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable] + long clientWidth(); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable] + long clientTop(); + + [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable] + long clientLeft(); + + [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)] + VARIANT_BOOL attachEvent( + [in] BSTR event, + [in] IDispatch *pDisp); + + [id(DISPID_IHTMLELEMENT2_DETACHEVENT)] + void detachEvent( + [in] BSTR event, + [in] IDispatch *pDisp); + + [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)] + VARIANT readyState(); + + [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] + void onreadystatechange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] + VARIANT onreadystatechange(); + + [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] + void onrowsdelete(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] + VARIANT onrowsdelete(); + + [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] + void onrowsinserted(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] + VARIANT onrowsinserted(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] + void oncellchange(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] + VARIANT oncellchange(); + + [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable] + void dir(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable] + BSTR dir(); + + [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)] + IDispatch *createControlRange(); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable] + long scrollHeight(); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable] + long scrollWidth(); + + [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable] + void scrollTop(long v); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable] + long scrollTop(); + + [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] + void scrollLeft(long v); + + [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] + long scrollLeft(); + + [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)] + void clearAttributes(); + + [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] + void oncontextmenu(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] + VARIANT oncontextmenu(); + + [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)] + IHTMLElement *insertAdjacentElement( + [in] BSTR where, + [in] IHTMLElement *insertedElement); + + [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)] + IHTMLElement *applyElement( + [in] IHTMLElement *apply, + [in] BSTR where); + + [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)] + BSTR getAdjacentText([in] BSTR where); + + [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)] + BSTR replaceAdjacentText( + [in] BSTR where, + [in] BSTR newText); + + [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)] + VARIANT_BOOL canHaveChildren(); + + [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)] + long addBehavior( + [in] BSTR bstrUrl, + [in, optional] VARIANT *pvarFactory); + + [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)] + VARIANT_BOOL removeBehavior([in] long cookie); + + [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable] + IHTMLStyle *runtimeStyle(); + + [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)] + IDispatch *behaviorUrns(); + + [propput, id(DISPID_IHTMLELEMENT2_TAGURN)] + void tagUrn(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT2_TAGURN)] + BSTR tagUrn(); + + [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] + void onbeforeeditfocus(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] + VARIANT onbeforeeditfocus(); + + [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted] + long readyStateValue(); + + [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)] + IHTMLElementCollection *getElementsByTagName([in] BSTR v); + + [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)] + void mergeAttributes( + [in] IHTMLElement *mergeThis, + [in, optional] VARIANT *pvarFlags); + + [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)] + VARIANT_BOOL isMultiLine(); + + [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)] + VARIANT_BOOL canHaveHTML(); + + [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] + void onlayoutcomplete(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] + VARIANT onlayoutcomplete(); + + [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable] + void onpage(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable] + VARIANT onpage(); + + [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] + void inflateBlock(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] + VARIANT_BOOL inflateBlock(); + + [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] + void onbeforedeactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] + VARIANT onbeforedeactivate(); + + [id(DISPID_IHTMLELEMENT3_SETACTIVE)] + void setActive(); + + [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] + void contentEditable(BSTR v); + + [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] + BSTR contentEditable(); + + [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)] + VARIANT_BOOL isContentEditable(); + + [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable] + void hideFocus(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable] + VARIANT_BOOL hideFocus(); + + [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] + void disabled(VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] + VARIANT_BOOL disabled(); + + [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)] + VARIANT_BOOL isDisabled(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable] + void onmove(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable] + VARIANT onmove(); + + [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] + void oncontrolselect(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] + VARIANT oncontrolselect(); + + [id(DISPID_IHTMLELEMENT3_FIREEVENT)] + VARIANT_BOOL fireEvent( + [in] BSTR bstrEventName, + [in, optional] VARIANT *pvarEventObject); + + [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] + void onresizestart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] + VARIANT onresizestart(); + + [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] + void onresizeend(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] + VARIANT onresizeend(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] + void onmovestart(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] + VARIANT onmovestart(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable] + void onmoveend(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable] + VARIANT onmoveend(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] + void onmouseenter(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] + VARIANT onmouseenter(); + + [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] + void onmouseleave(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] + VARIANT onmouseleave(); + + [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] + void onactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] + VARIANT onactivate(); + + [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] + void ondeactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] + VARIANT ondeactivate(); + + [id(DISPID_IHTMLELEMENT3_DRAGDROP)] + VARIANT_BOOL dragDrop(); + + [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable] + LONG glyphMode(); + + [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] + void onmousewheel(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] + VARIANT onmousewheel(); + + [id(DISPID_IHTMLELEMENT4_NORMALIZE)] + void normalize(); + + [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)] + IHTMLDOMAttribute *getAttributeNode([in] BSTR bstrname); + + [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)] + IHTMLDOMAttribute *setAttributeNode([in] IHTMLDOMAttribute *pattr); + + [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)] + IHTMLDOMAttribute *removeAttributeNode([in] IHTMLDOMAttribute *pattr); + + [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] + void onbeforeactivate(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] + VARIANT onbeforeactivate(); + + [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable] + void onfocusin(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable] + VARIANT onfocusin(); + + [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] + void onfocusout(VARIANT v); + + [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] + VARIANT onfocusout(); + + [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden] + long uniqueNumber(); + + [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden] + BSTR uniqueID(); + + [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)] + long nodeType(); + + [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)] + IHTMLDOMNode *parentNode(); + + [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)] + VARIANT_BOOL hasChildNodes(); + + [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)] + IDispatch *childNodes(); + + [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)] + IDispatch *attributes(); + + [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)] + IHTMLDOMNode *insertBefore( + [in] IHTMLDOMNode *newChild, + [in, optional] VARIANT refChild); + + [id(DISPID_IHTMLDOMNODE_REMOVECHILD)] + IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild); + + [id(DISPID_IHTMLDOMNODE_REPLACECHILD)] + IHTMLDOMNode *replaceChild( + [in] IHTMLDOMNode *newChild, + [in] IHTMLDOMNode *oldChild); + + [id(DISPID_IHTMLDOMNODE_CLONENODE)] + IHTMLDOMNode *cloneNode([in] VARIANT_BOOL fDeep); + + [id(DISPID_IHTMLDOMNODE_REMOVENODE)] + IHTMLDOMNode *removeNode([in, defaultvalue(0)] VARIANT_BOOL fDeep); + + [id(DISPID_IHTMLDOMNODE_SWAPNODE)] + IHTMLDOMNode *swapNode([in] IHTMLDOMNode *otherNode); + + [id(DISPID_IHTMLDOMNODE_REPLACENODE)] + IHTMLDOMNode *replaceNode([in] IHTMLDOMNode *replacement); + + [id(DISPID_IHTMLDOMNODE_APPENDCHILD)] + IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild); + + [propget, id(DISPID_IHTMLDOMNODE_NODENAME)] + BSTR nodeName(); + + [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)] + void nodeValue(VARIANT v); + + [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)] + VARIANT nodeValue(); + + [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)] + IHTMLDOMNode *firstChild(); + + [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)] + IHTMLDOMNode *lastChild(); + + [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)] + IHTMLDOMNode *previousSibling(); + + [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)] + IHTMLDOMNode *nextSibling(); + + [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)] + IDispatch *ownerDocument(); + + [propput, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable] + void text(BSTR v); + + [propget, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable] + BSTR text(); + + [propput, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable] + void atomic(long v); + + [propget, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable] + long atomic(); + + [propput, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)] + void data(BSTR v); + + [propget, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)] + BSTR data(); + + [propget, id(DISPID_IHTMLCOMMENTELEMENT2_LENGTH)] + long length(); + + [id(DISPID_IHTMLCOMMENTELEMENT2_SUBSTRINGDATA)] + BSTR substringData( + [in] long offset, + [in] long Count); + + [id(DISPID_IHTMLCOMMENTELEMENT2_APPENDDATA)] + void appendData([in] BSTR bstrstring); + + [id(DISPID_IHTMLCOMMENTELEMENT2_INSERTDATA)] + void insertData( + [in] long offset, + [in] BSTR bstrstring); + + [id(DISPID_IHTMLCOMMENTELEMENT2_DELETEDATA)] + void deleteData( + [in] long offset, + [in] long Count); + + [id(DISPID_IHTMLCOMMENTELEMENT2_REPLACEDATA)] + void replaceData( + [in] long offset, + [in] long Count, + [in] BSTR bstrstring); +} + /***************************************************************************** * HTMLTableEvents dispinterface */ @@ -6737,6 +14719,72 @@ interface IHTMLScriptElement2 : IDispatch HRESULT charset([retval, out] BSTR *p); } +/***************************************************************************** + * IHTMLFrameBase interface + */ +[ + odl, + oleautomation, + dual, + uuid(3050f311-98b5-11cf-bb82-00aa00bdce0b) +] +interface IHTMLFrameBase : IDispatch +{ + [propput, id(DISPID_IHTMLFRAMEBASE_SRC)] + HRESULT src([in] BSTR v); + + [propget, id(DISPID_IHTMLFRAMEBASE_SRC)] + HRESULT src([out, retval] BSTR *p); + + [propput, id(DISPID_IHTMLFRAMEBASE_NAME)] + HRESULT name([in] BSTR v); + + [propget, id(DISPID_IHTMLFRAMEBASE_NAME)] + HRESULT name([out, retval] BSTR *p); + + [propput, id(DISPID_IHTMLFRAMEBASE_BORDER)] + HRESULT border([in] VARIANT v); + + [propget, id(DISPID_IHTMLFRAMEBASE_BORDER)] + HRESULT border([out, retval] VARIANT *p); + + [propput, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)] + HRESULT frameBorder([in] BSTR v); + + [propget, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)] + HRESULT frameBorder([out, retval] BSTR *p); + + [propput, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)] + HRESULT frameSpacing([in] VARIANT v); + + [propget, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)] + HRESULT frameSpacing([out, retval] VARIANT *p); + + [propput, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)] + HRESULT marginWidth([in] VARIANT v); + + [propget, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)] + HRESULT marginWidth([out, retval] VARIANT *p); + + [propput, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)] + HRESULT marginHeight([in] VARIANT v); + + [propget, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)] + HRESULT marginHeight([out, retval] VARIANT *p); + + [propput, id(DISPID_IHTMLFRAMEBASE_NORESIZE)] + HRESULT noResize([in] VARIANT_BOOL v); + + [propget, id(DISPID_IHTMLFRAMEBASE_NORESIZE)] + HRESULT noResize([out, retval] VARIANT_BOOL *p); + + [propput, id(DISPID_IHTMLFRAMEBASE_SCROLLING)] + HRESULT scrolling([in] BSTR v); + + [propget, id(DISPID_IHTMLFRAMEBASE_SCROLLING)] + HRESULT scrolling([out, retval] BSTR *p); +} + /***************************************************************************** * IHTMLFrameBase2 interface */ diff --git a/reactos/include/psdk/psdk.rbuild b/reactos/include/psdk/psdk.rbuild index 7394fede3a9..2e404c1ba54 100644 --- a/reactos/include/psdk/psdk.rbuild +++ b/reactos/include/psdk/psdk.rbuild @@ -1,6 +1,8 @@ + activaut.idl + activdbg.idl activscp.idl control.idl dimm.idl diff --git a/reactos/include/psdk/urlhist.idl b/reactos/include/psdk/urlhist.idl index 7d5843e9fbf..0dde4829aa0 100644 --- a/reactos/include/psdk/urlhist.idl +++ b/reactos/include/psdk/urlhist.idl @@ -41,7 +41,7 @@ typedef enum _ADDURL_FLAG interface IEnumSTATURL : IUnknown { typedef [unique] IEnumSTATURL *LPENUMSTATURL; - + typedef struct _STATURL { DWORD cbSize; @@ -78,7 +78,7 @@ interface IEnumSTATURL : IUnknown interface IUrlHistoryStg : IUnknown { typedef [unique] IUrlHistoryStg *LPURLHISTORYSTG; - + HRESULT AddUrl( [in] LPCOLESTR pocsUrl, [in, unique] LPCOLESTR pocsTitle, @@ -92,14 +92,14 @@ interface IUrlHistoryStg : IUnknown [in] LPCOLESTR pocsUrl, [in] DWORD dwFlags, [in, out, unique] LPSTATURL lpSTATURL); - + HRESULT BindToObject( [in] LPCOLESTR pocsUrl, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut); HRESULT EnumUrls( - [out] IEnumSTATURL **ppEnum); + [out] IEnumSTATURL **ppEnum); } /***************************************************************************** diff --git a/reactos/include/psdk/urlmon.idl b/reactos/include/psdk/urlmon.idl index 9e03543c303..83bc58bb5a2 100644 --- a/reactos/include/psdk/urlmon.idl +++ b/reactos/include/psdk/urlmon.idl @@ -833,7 +833,8 @@ interface IInternetProtocolInfo : IUnknown QUERY_IS_CACHED_OR_MAPPED, QUERY_USES_CACHE, QUERY_IS_SECURE, - QUERY_IS_SAFE + QUERY_IS_SAFE, + QUERY_USES_HISTORYFOLDER } QUERYOPTION; HRESULT ParseUrl(