[PATCH 4/4] mshtml: Add IHTMLControlRange interface stub.

Dmitry Timoshkov dmitry at baikal.ru
Tue Jun 18 01:10:32 CDT 2019


Signed-off-by: Dmitry Timoshkov <dmitry at 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
  */
-- 
2.20.1




More information about the wine-devel mailing list