Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/mshtml/main.c | 1 + dlls/mshtml/txtrange.c | 196 +++++++++++++++++++++++++++++++++++++++++ include/mshtmdid.h | 17 ++++ include/mshtml.idl | 57 ++++++++++++ 4 files changed, 271 insertions(+)
diff --git a/dlls/mshtml/main.c b/dlls/mshtml/main.c index 8ce7f8680c..b3c6cf80d4 100644 --- a/dlls/mshtml/main.c +++ b/dlls/mshtml/main.c @@ -711,6 +711,7 @@ const char *debugstr_mshtml_guid(const GUID *iid) X(IID_IEnumVARIANT); X(IID_IHlinkTarget); X(IID_IHTMLBlockElement); + X(IID_IHTMLControlRange); X(IID_IHTMLDocument6); X(IID_IHTMLDocument7); X(IID_IHTMLEditServices); diff --git a/dlls/mshtml/txtrange.c b/dlls/mshtml/txtrange.c index c6a6ed096b..ab83009a09 100644 --- a/dlls/mshtml/txtrange.c +++ b/dlls/mshtml/txtrange.c @@ -39,6 +39,7 @@ static const WCHAR hrW[] = {'h','r',0}; typedef struct { DispatchEx dispex; IHTMLTxtRange IHTMLTxtRange_iface; + IHTMLControlRange IHTMLControlRange_iface; IOleCommandTarget IOleCommandTarget_iface;
LONG ref; @@ -69,6 +70,198 @@ typedef enum { RU_TEXTEDIT } range_unit_t;
+static inline HTMLTxtRange *impl_from_IHTMLControlRange(IHTMLControlRange *iface) +{ + return CONTAINING_RECORD(iface, HTMLTxtRange, IHTMLControlRange_iface); +} + +static HRESULT WINAPI HTMLControlRange_QueryInterface(IHTMLControlRange *iface, REFIID riid, void **ppv) +{ + HTMLTxtRange *This = impl_from_IHTMLControlRange(iface); + return IHTMLTxtRange_QueryInterface(&This->IHTMLTxtRange_iface, riid, ppv); +} + +static ULONG WINAPI HTMLControlRange_AddRef(IHTMLControlRange *iface) +{ + HTMLTxtRange *This = impl_from_IHTMLControlRange(iface); + return IHTMLTxtRange_AddRef(&This->IHTMLTxtRange_iface); +} + +static ULONG WINAPI HTMLControlRange_Release(IHTMLControlRange *iface) +{ + HTMLTxtRange *This = impl_from_IHTMLControlRange(iface); + return IHTMLTxtRange_Release(&This->IHTMLTxtRange_iface); +} + +static HRESULT WINAPI HTMLControlRange_GetTypeInfoCount(IHTMLControlRange *iface, UINT *pctinfo) +{ + HTMLTxtRange *This = impl_from_IHTMLControlRange(iface); + return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo); +} + +static HRESULT WINAPI HTMLControlRange_GetTypeInfo(IHTMLControlRange *iface, UINT iTInfo, + LCID lcid, ITypeInfo **ppTInfo) +{ + HTMLTxtRange *This = impl_from_IHTMLControlRange(iface); + return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo); +} + +static HRESULT WINAPI HTMLControlRange_GetIDsOfNames(IHTMLControlRange *iface, REFIID riid, + LPOLESTR *rgszNames, UINT cNames, + LCID lcid, DISPID *rgDispId) +{ + HTMLTxtRange *This = impl_from_IHTMLControlRange(iface); + return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface, riid, rgszNames, + cNames, lcid, rgDispId); +} + +static HRESULT WINAPI HTMLControlRange_Invoke(IHTMLControlRange *iface, DISPID dispIdMember, + REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, + VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +{ + HTMLTxtRange *This = impl_from_IHTMLControlRange(iface); + return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface, dispIdMember, riid, + lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); +} + +static HRESULT WINAPI HTMLControlRange_select(IHTMLControlRange *iface) +{ + HTMLTxtRange *This = impl_from_IHTMLControlRange(iface); + FIXME("(%p): stub\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLControlRange_add(IHTMLControlRange *iface, IHTMLControlElement *item) +{ + HTMLTxtRange *This = impl_from_IHTMLControlRange(iface); + FIXME("(%p): stub\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLControlRange_remove(IHTMLControlRange *iface, LONG index) +{ + HTMLTxtRange *This = impl_from_IHTMLControlRange(iface); + FIXME("(%p): stub\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLControlRange_item(IHTMLControlRange *iface, LONG index, IHTMLElement **pdisp) +{ + HTMLTxtRange *This = impl_from_IHTMLControlRange(iface); + FIXME("(%p): stub\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLControlRange_scrollIntoView(IHTMLControlRange *iface, VARIANT varargStart) +{ + HTMLTxtRange *This = impl_from_IHTMLControlRange(iface); + FIXME("(%p): stub\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLControlRange_queryCommandSupported(IHTMLControlRange *iface, + BSTR cmdID, VARIANT_BOOL *pfRet) +{ + HTMLTxtRange *This = impl_from_IHTMLControlRange(iface); + FIXME("(%p): stub\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLControlRange_queryCommandEnabled(IHTMLControlRange *iface, + BSTR cmdID, VARIANT_BOOL *pfRet) +{ + HTMLTxtRange *This = impl_from_IHTMLControlRange(iface); + FIXME("(%p): stub\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLControlRange_queryCommandState(IHTMLControlRange *iface, + BSTR cmdID, VARIANT_BOOL *pfRet) +{ + HTMLTxtRange *This = impl_from_IHTMLControlRange(iface); + FIXME("(%p): stub\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLControlRange_queryCommandIndeterm(IHTMLControlRange *iface, + BSTR cmdID, VARIANT_BOOL *pfRet) +{ + HTMLTxtRange *This = impl_from_IHTMLControlRange(iface); + FIXME("(%p): stub\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLControlRange_queryCommandText(IHTMLControlRange *iface, + BSTR cmdID, BSTR *pcmdText) +{ + HTMLTxtRange *This = impl_from_IHTMLControlRange(iface); + FIXME("(%p): stub\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLControlRange_queryCommandValue(IHTMLControlRange *iface, + BSTR cmdID, VARIANT *pcmdValue) +{ + HTMLTxtRange *This = impl_from_IHTMLControlRange(iface); + FIXME("(%p): stub\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLControlRange_execCommand(IHTMLControlRange *iface, + BSTR cmdID, VARIANT_BOOL showUI, VARIANT value, VARIANT_BOOL *pfRet) +{ + HTMLTxtRange *This = impl_from_IHTMLControlRange(iface); + FIXME("(%p): stub\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLControlRange_execCommandShowHelp(IHTMLControlRange *iface, + BSTR cmdID, VARIANT_BOOL *pfRet) +{ + HTMLTxtRange *This = impl_from_IHTMLControlRange(iface); + FIXME("(%p): stub\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLControlRange_commonParentElement(IHTMLControlRange *iface, IHTMLElement **parent) +{ + HTMLTxtRange *This = impl_from_IHTMLControlRange(iface); + FIXME("(%p): stub\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLControlRange_get_length(IHTMLControlRange *iface, LONG *p) +{ + HTMLTxtRange *This = impl_from_IHTMLControlRange(iface); + FIXME("(%p): stub\n", This); + return E_NOTIMPL; +} + +static const IHTMLControlRangeVtbl HTMLControlRangeVtbl = { + HTMLControlRange_QueryInterface, + HTMLControlRange_AddRef, + HTMLControlRange_Release, + HTMLControlRange_GetTypeInfoCount, + HTMLControlRange_GetTypeInfo, + HTMLControlRange_GetIDsOfNames, + HTMLControlRange_Invoke, + HTMLControlRange_select, + HTMLControlRange_add, + HTMLControlRange_remove, + HTMLControlRange_item, + HTMLControlRange_scrollIntoView, + HTMLControlRange_queryCommandSupported, + HTMLControlRange_queryCommandEnabled, + HTMLControlRange_queryCommandState, + HTMLControlRange_queryCommandIndeterm, + HTMLControlRange_queryCommandText, + HTMLControlRange_queryCommandValue, + HTMLControlRange_execCommand, + HTMLControlRange_execCommandShowHelp, + HTMLControlRange_commonParentElement, + HTMLControlRange_get_length +}; + static HTMLTxtRange *get_range_object(HTMLDocumentNode *doc, IHTMLTxtRange *iface) { HTMLTxtRange *iter; @@ -831,6 +1024,8 @@ static HRESULT WINAPI HTMLTxtRange_QueryInterface(IHTMLTxtRange *iface, REFIID r *ppv = &This->IHTMLTxtRange_iface; }else if(IsEqualGUID(&IID_IHTMLTxtRange, riid)) { *ppv = &This->IHTMLTxtRange_iface; + }else if(IsEqualGUID(&IID_IHTMLControlRange, riid)) { + *ppv = &This->IHTMLControlRange_iface; }else if(IsEqualGUID(&IID_IOleCommandTarget, riid)) { *ppv = &This->IOleCommandTarget_iface; }else if(dispex_query_interface(&This->dispex, riid, ppv)) { @@ -1744,6 +1939,7 @@ HRESULT HTMLTxtRange_Create(HTMLDocumentNode *doc, nsIDOMRange *nsrange, IHTMLTx init_dispex(&ret->dispex, (IUnknown*)&ret->IHTMLTxtRange_iface, &HTMLTxtRange_dispex);
ret->IHTMLTxtRange_iface.lpVtbl = &HTMLTxtRangeVtbl; + ret->IHTMLControlRange_iface.lpVtbl = &HTMLControlRangeVtbl; ret->IOleCommandTarget_iface.lpVtbl = &OleCommandTargetVtbl; ret->ref = 1;
diff --git a/include/mshtmdid.h b/include/mshtmdid.h index a58b3f9247..8544d4be2a 100644 --- a/include/mshtmdid.h +++ b/include/mshtmdid.h @@ -4208,6 +4208,23 @@ #define DISPID_IHTMLTEXTCONTAINER_SCROLLLEFT DISPID_TEXTSITE+5 #define DISPID_IHTMLTEXTCONTAINER_ONSCROLL DISPID_EVPROP_ONSCROLL
+/* IHTMLControlRange */ +#define DISPID_IHTMLCONTROLRANGE_SELECT DISPID_RANGE+2 +#define DISPID_IHTMLCONTROLRANGE_ADD DISPID_RANGE+3 +#define DISPID_IHTMLCONTROLRANGE_REMOVE DISPID_RANGE+4 +#define DISPID_IHTMLCONTROLRANGE_ITEM DISPID_VALUE +#define DISPID_IHTMLCONTROLRANGE_SCROLLINTOVIEW DISPID_RANGE+6 +#define DISPID_IHTMLCONTROLRANGE_QUERYCOMMANDSUPPORTED DISPID_RANGE+7 +#define DISPID_IHTMLCONTROLRANGE_QUERYCOMMANDENABLED DISPID_RANGE+8 +#define DISPID_IHTMLCONTROLRANGE_QUERYCOMMANDSTATE DISPID_RANGE+9 +#define DISPID_IHTMLCONTROLRANGE_QUERYCOMMANDINDETERM DISPID_RANGE+10 +#define DISPID_IHTMLCONTROLRANGE_QUERYCOMMANDTEXT DISPID_RANGE+11 +#define DISPID_IHTMLCONTROLRANGE_QUERYCOMMANDVALUE DISPID_RANGE+12 +#define DISPID_IHTMLCONTROLRANGE_EXECCOMMAND DISPID_RANGE+13 +#define DISPID_IHTMLCONTROLRANGE_EXECCOMMANDSHOWHELP DISPID_RANGE+14 +#define DISPID_IHTMLCONTROLRANGE_COMMONPARENTELEMENT DISPID_RANGE+15 +#define DISPID_IHTMLCONTROLRANGE_LENGTH DISPID_RANGE+5 + /* IHTMLTableCaption */ #define DISPID_IHTMLTABLECAPTION_ALIGN STDPROPID_XOBJ_BLOCKALIGN #define DISPID_IHTMLTABLECAPTION_VALIGN DISPID_A_TABLEVALIGN diff --git a/include/mshtml.idl b/include/mshtml.idl index e90e0018a8..a666c628ae 100644 --- a/include/mshtml.idl +++ b/include/mshtml.idl @@ -16262,6 +16262,63 @@ coclass HTMLUnknownElement /* interface IHTMLUnknownElement; */ }
+/***************************************************************************** + * IHTMLControlRange interface + */ +[ + odl, + oleautomation, + dual, + uuid(3050f29c-98b5-11cf-bb82-00aa00bdce0b) +] +interface IHTMLControlRange : IDispatch +{ + [id(DISPID_IHTMLCONTROLRANGE_SELECT)] + HRESULT select(); + + [id(DISPID_IHTMLCONTROLRANGE_ADD)] + HRESULT add([in] IHTMLControlElement *item); + + [id(DISPID_IHTMLCONTROLRANGE_REMOVE)] + HRESULT remove([in] long index); + + [id(DISPID_IHTMLCONTROLRANGE_ITEM)] + HRESULT item([in] long index,[retval, out] IHTMLElement **pdisp); + + [id(DISPID_IHTMLCONTROLRANGE_SCROLLINTOVIEW)] + HRESULT scrollIntoView([optional, in] VARIANT varargStart); + + [id(DISPID_IHTMLCONTROLRANGE_QUERYCOMMANDSUPPORTED)] + HRESULT queryCommandSupported([in] BSTR cmdID,[retval, out] VARIANT_BOOL *pfRet); + + [id(DISPID_IHTMLCONTROLRANGE_QUERYCOMMANDENABLED)] + HRESULT queryCommandEnabled([in] BSTR cmdID,[retval, out] VARIANT_BOOL *pfRet); + + [id(DISPID_IHTMLCONTROLRANGE_QUERYCOMMANDSTATE)] + HRESULT queryCommandState([in] BSTR cmdID,[retval, out] VARIANT_BOOL *pfRet); + + [id(DISPID_IHTMLCONTROLRANGE_QUERYCOMMANDINDETERM)] + HRESULT queryCommandIndeterm([in] BSTR cmdID,[retval, out] VARIANT_BOOL *pfRet); + + [id(DISPID_IHTMLCONTROLRANGE_QUERYCOMMANDTEXT)] + HRESULT queryCommandText([in] BSTR cmdID,[retval, out] BSTR* pcmdText); + + [id(DISPID_IHTMLCONTROLRANGE_QUERYCOMMANDVALUE)] + HRESULT queryCommandValue([in] BSTR cmdID,[retval, out] VARIANT *pcmdValue); + + [id(DISPID_IHTMLCONTROLRANGE_EXECCOMMAND)] + HRESULT execCommand([in] BSTR cmdID,[defaultvalue(0), in] VARIANT_BOOL showUI,[optional, in] VARIANT value,[retval, out] VARIANT_BOOL *pfRet); + + [id(DISPID_IHTMLCONTROLRANGE_EXECCOMMANDSHOWHELP)] + HRESULT execCommandShowHelp([in] BSTR cmdID,[retval, out] VARIANT_BOOL *pfRet); + + [id(DISPID_IHTMLCONTROLRANGE_COMMONPARENTELEMENT)] + HRESULT commonParentElement([retval, out] IHTMLElement **parent); + + [propget, id(DISPID_IHTMLCONTROLRANGE_LENGTH)] + HRESULT length([retval, out] long *p); +}; + /***************************************************************************** * ISVGAnimatedEnumeration interface */