[3/3] riched20: Implement ITextDocument_fnGetSelection with stubs for ITextSelection.

Dan Hipschman dsh at linux.ucla.edu
Wed May 21 19:33:53 CDT 2008


---
 dlls/riched20/richole.c       |  714 ++++++++++++++++++++++++++++++++++++++++-
 dlls/riched20/tests/richole.c |    6 +
 2 files changed, 718 insertions(+), 2 deletions(-)

diff --git a/dlls/riched20/richole.c b/dlls/riched20/richole.c
index 3d5e42f..d7569ac 100644
--- a/dlls/riched20/richole.c
+++ b/dlls/riched20/richole.c
@@ -48,6 +48,11 @@ TEXTSERV_GUID(IID_ITextServices, 0x8d33f740, 0xcf58, 0x11ce, 0xa8, 0x9d);
 TEXTSERV_GUID(IID_ITextHost, 0xc5bdd8d0, 0xd26e, 0x11ce, 0xa8, 0x9e);
 TEXTSERV_GUID(IID_ITextHost2, 0xc5bdd8d0, 0xd26e, 0x11ce, 0xa8, 0x9e);
 DEFINE_GUID(IID_ITextDocument, 0x8cc497c0, 0xa1df, 0x11ce, 0x80, 0x98, 0x00, 0xaa, 0x00, 0x47, 0xbe, 0x5d);
+DEFINE_GUID(IID_ITextSelection, 0x8cc497c1, 0xa1df, 0x11ce, 0x80,0x98, 0x00, 0xaa, 0x00, 0x47, 0xbe, 0x5d);
+
+typedef struct ITextSelectionImpl {
+    const ITextSelectionVtbl *lpVtbl;
+} ITextSelectionImpl;
 
 typedef struct IRichEditOleImpl {
     const IRichEditOleVtbl *lpRichEditOleVtbl;
@@ -55,6 +60,7 @@ typedef struct IRichEditOleImpl {
     LONG ref;
 
     ME_TextEditor *editor;
+    ITextSelectionImpl tsel;
 } IRichEditOleImpl;
 
 static inline IRichEditOleImpl *impl_from_IRichEditOle(IRichEditOle *iface)
@@ -358,8 +364,8 @@ static HRESULT WINAPI
 ITextDocument_fnGetSelection(ITextDocument* me, ITextSelection** ppSel)
 {
     IRichEditOleImpl *This = impl_from_ITextDocument(me);
-    FIXME("stub %p\n",This);
-    return E_NOTIMPL;
+    *ppSel = (ITextSelection *) &This->tsel;
+    return S_OK;
 }
 
 static HRESULT WINAPI
@@ -532,6 +538,709 @@ static const ITextDocumentVtbl tdvt = {
     ITextDocument_fnRangeFromPoint
 };
 
+/*** IUnknown methods ***/
+static HRESULT WINAPI ITextSelection_fnQueryInterface(
+    ITextSelection *me,
+    REFIID riid,
+    void **ppvObj)
+{
+    ITextSelectionImpl *This = (ITextSelectionImpl *) me;
+
+    TRACE("%p %s\n", This, debugstr_guid(riid));
+
+    *ppvObj = NULL;
+    if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_ITextSelection))
+    {
+        *ppvObj = me;
+        return S_OK;
+    }
+
+    return E_NOINTERFACE;
+}
+
+static ULONG WINAPI ITextSelection_fnAddRef(
+    ITextSelection *me)
+{
+    return 2;
+}
+
+static ULONG WINAPI ITextSelection_fnRelease(
+    ITextSelection *me)
+{
+    return 1;
+}
+
+/*** IDispatch methods ***/
+static HRESULT WINAPI ITextSelection_fnGetTypeInfoCount(
+    ITextSelection *me,
+    UINT *pctinfo)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnGetTypeInfo(
+    ITextSelection *me,
+    UINT iTInfo,
+    LCID lcid,
+    ITypeInfo **ppTInfo)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnGetIDsOfNames(
+    ITextSelection *me,
+    REFIID riid,
+    LPOLESTR *rgszNames,
+    UINT cNames,
+    LCID lcid,
+    DISPID *rgDispId)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnInvoke(
+    ITextSelection *me,
+    DISPID dispIdMember,
+    REFIID riid,
+    LCID lcid,
+    WORD wFlags,
+    DISPPARAMS *pDispParams,
+    VARIANT *pVarResult,
+    EXCEPINFO *pExcepInfo,
+    UINT *puArgErr)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+/*** ITextRange methods ***/
+static HRESULT WINAPI ITextSelection_fnGetText(
+    ITextSelection *me,
+    BSTR *pbstr)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnSetText(
+    ITextSelection *me,
+    BSTR bstr)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnGetChar(
+    ITextSelection *me,
+    long *pch)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnSetChar(
+    ITextSelection *me,
+    long ch)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnGetDuplicate(
+    ITextSelection *me,
+    ITextRange **ppRange)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnGetFormattedText(
+    ITextSelection *me,
+    ITextRange **ppRange)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnSetFormattedText(
+    ITextSelection *me,
+    ITextRange *pRange)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnGetStart(
+    ITextSelection *me,
+    long *pcpFirst)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnSetStart(
+    ITextSelection *me,
+    long cpFirst)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnGetEnd(
+    ITextSelection *me,
+    long *pcpLim)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnSetEnd(
+    ITextSelection *me,
+    long cpLim)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnGetFont(
+    ITextSelection *me,
+    ITextFont **pFont)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnSetFont(
+    ITextSelection *me,
+    ITextFont *pFont)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnGetPara(
+    ITextSelection *me,
+    ITextPara **ppPara)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnSetPara(
+    ITextSelection *me,
+    ITextPara *pPara)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnGetStoryLength(
+    ITextSelection *me,
+    long *pcch)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnGetStoryType(
+    ITextSelection *me,
+    long *pValue)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnCollapse(
+    ITextSelection *me,
+    long bStart)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnExpand(
+    ITextSelection *me,
+    long Unit,
+    long *pDelta)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnGetIndex(
+    ITextSelection *me,
+    long Unit,
+    long *pIndex)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnSetIndex(
+    ITextSelection *me,
+    long Unit,
+    long Index,
+    long Extend)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnSetRange(
+    ITextSelection *me,
+    long cpActive,
+    long cpOther)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnInRange(
+    ITextSelection *me,
+    ITextRange *pRange,
+    long *pb)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnInStory(
+    ITextSelection *me,
+    ITextRange *pRange,
+    long *pb)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnIsEqual(
+    ITextSelection *me,
+    ITextRange *pRange,
+    long *pb)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnSelect(
+    ITextSelection *me)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnStartOf(
+    ITextSelection *me,
+    long Unit,
+    long Extend,
+    long *pDelta)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnEndOf(
+    ITextSelection *me,
+    long Unit,
+    long Extend,
+    long *pDelta)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnMove(
+    ITextSelection *me,
+    long Unit,
+    long Count,
+    long *pDelta)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnMoveStart(
+    ITextSelection *me,
+    long Unit,
+    long Count,
+    long *pDelta)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnMoveEnd(
+    ITextSelection *me,
+    long Unit,
+    long Count,
+    long *pDelta)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnMoveWhile(
+    ITextSelection *me,
+    VARIANT *Cset,
+    long Count,
+    long *pDelta)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnMoveStartWhile(
+    ITextSelection *me,
+    VARIANT *Cset,
+    long Count,
+    long *pDelta)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnMoveEndWhile(
+    ITextSelection *me,
+    VARIANT *Cset,
+    long Count,
+    long *pDelta)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnMoveUntil(
+    ITextSelection *me,
+    VARIANT *Cset,
+    long Count,
+    long *pDelta)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnMoveStartUntil(
+    ITextSelection *me,
+    VARIANT *Cset,
+    long Count,
+    long *pDelta)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnMoveEndUntil(
+    ITextSelection *me,
+    VARIANT *Cset,
+    long Count,
+    long *pDelta)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnFindText(
+    ITextSelection *me,
+    BSTR bstr,
+    long cch,
+    long Flags,
+    long *pLength)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnFindTextStart(
+    ITextSelection *me,
+    BSTR bstr,
+    long cch,
+    long Flags,
+    long *pLength)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnFindTextEnd(
+    ITextSelection *me,
+    BSTR bstr,
+    long cch,
+    long Flags,
+    long *pLength)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnDelete(
+    ITextSelection *me,
+    long Unit,
+    long Count,
+    long *pDelta)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnCut(
+    ITextSelection *me,
+    VARIANT *pVar)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnCopy(
+    ITextSelection *me,
+    VARIANT *pVar)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnPaste(
+    ITextSelection *me,
+    VARIANT *pVar,
+    long Format)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnCanPaste(
+    ITextSelection *me,
+    VARIANT *pVar,
+    long Format,
+    long *pb)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnCanEdit(
+    ITextSelection *me,
+    long *pb)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnChangeCase(
+    ITextSelection *me,
+    long Type)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnGetPoint(
+    ITextSelection *me,
+    long Type,
+    long *cx,
+    long *cy)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnSetPoint(
+    ITextSelection *me,
+    long x,
+    long y,
+    long Type,
+    long Extend)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnScrollIntoView(
+    ITextSelection *me,
+    long Value)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnGetEmbeddedObject(
+    ITextSelection *me,
+    IUnknown **ppv)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+/*** ITextSelection methods ***/
+static HRESULT WINAPI ITextSelection_fnGetFlags(
+    ITextSelection *me,
+    long *pFlags)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnSetFlags(
+    ITextSelection *me,
+    long Flags)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnGetType(
+    ITextSelection *me,
+    long *pType)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnMoveLeft(
+    ITextSelection *me,
+    long Unit,
+    long Count,
+    long Extend,
+    long *pDelta)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnMoveRight(
+    ITextSelection *me,
+    long Unit,
+    long Count,
+    long Extend,
+    long *pDelta)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnMoveUp(
+    ITextSelection *me,
+    long Unit,
+    long Count,
+    long Extend,
+    long *pDelta)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnMoveDown(
+    ITextSelection *me,
+    long Unit,
+    long Count,
+    long Extend,
+    long *pDelta)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnHomeKey(
+    ITextSelection *me,
+    long Unit,
+    long Extend,
+    long *pDelta)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnEndKey(
+    ITextSelection *me,
+    long Unit,
+    long Extend,
+    long *pDelta)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextSelection_fnTypeText(
+    ITextSelection *me,
+    BSTR bstr)
+{
+    FIXME("not implemented\n");
+    return E_NOTIMPL;
+}
+
+static const ITextSelectionVtbl tsvt = {
+    ITextSelection_fnQueryInterface,
+    ITextSelection_fnAddRef,
+    ITextSelection_fnRelease,
+    ITextSelection_fnGetTypeInfoCount,
+    ITextSelection_fnGetTypeInfo,
+    ITextSelection_fnGetIDsOfNames,
+    ITextSelection_fnInvoke,
+    ITextSelection_fnGetText,
+    ITextSelection_fnSetText,
+    ITextSelection_fnGetChar,
+    ITextSelection_fnSetChar,
+    ITextSelection_fnGetDuplicate,
+    ITextSelection_fnGetFormattedText,
+    ITextSelection_fnSetFormattedText,
+    ITextSelection_fnGetStart,
+    ITextSelection_fnSetStart,
+    ITextSelection_fnGetEnd,
+    ITextSelection_fnSetEnd,
+    ITextSelection_fnGetFont,
+    ITextSelection_fnSetFont,
+    ITextSelection_fnGetPara,
+    ITextSelection_fnSetPara,
+    ITextSelection_fnGetStoryLength,
+    ITextSelection_fnGetStoryType,
+    ITextSelection_fnCollapse,
+    ITextSelection_fnExpand,
+    ITextSelection_fnGetIndex,
+    ITextSelection_fnSetIndex,
+    ITextSelection_fnSetRange,
+    ITextSelection_fnInRange,
+    ITextSelection_fnInStory,
+    ITextSelection_fnIsEqual,
+    ITextSelection_fnSelect,
+    ITextSelection_fnStartOf,
+    ITextSelection_fnEndOf,
+    ITextSelection_fnMove,
+    ITextSelection_fnMoveStart,
+    ITextSelection_fnMoveEnd,
+    ITextSelection_fnMoveWhile,
+    ITextSelection_fnMoveStartWhile,
+    ITextSelection_fnMoveEndWhile,
+    ITextSelection_fnMoveUntil,
+    ITextSelection_fnMoveStartUntil,
+    ITextSelection_fnMoveEndUntil,
+    ITextSelection_fnFindText,
+    ITextSelection_fnFindTextStart,
+    ITextSelection_fnFindTextEnd,
+    ITextSelection_fnDelete,
+    ITextSelection_fnCut,
+    ITextSelection_fnCopy,
+    ITextSelection_fnPaste,
+    ITextSelection_fnCanPaste,
+    ITextSelection_fnCanEdit,
+    ITextSelection_fnChangeCase,
+    ITextSelection_fnGetPoint,
+    ITextSelection_fnSetPoint,
+    ITextSelection_fnScrollIntoView,
+    ITextSelection_fnGetEmbeddedObject,
+    ITextSelection_fnGetFlags,
+    ITextSelection_fnSetFlags,
+    ITextSelection_fnGetType,
+    ITextSelection_fnMoveLeft,
+    ITextSelection_fnMoveRight,
+    ITextSelection_fnMoveUp,
+    ITextSelection_fnMoveDown,
+    ITextSelection_fnHomeKey,
+    ITextSelection_fnEndKey,
+    ITextSelection_fnTypeText
+};
+
 LRESULT CreateIRichEditOle(ME_TextEditor *editor, LPVOID *ppObj)
 {
     IRichEditOleImpl *reo;
@@ -544,6 +1253,7 @@ LRESULT CreateIRichEditOle(ME_TextEditor *editor, LPVOID *ppObj)
     reo->lpTextDocumentVtbl = &tdvt;
     reo->ref = 1;
     reo->editor = editor;
+    reo->tsel.lpVtbl = &tsvt;
     TRACE("Created %p\n",reo);
     *ppObj = (LPVOID) reo;
 
diff --git a/dlls/riched20/tests/richole.c b/dlls/riched20/tests/richole.c
index dc87676..46f447f 100644
--- a/dlls/riched20/tests/richole.c
+++ b/dlls/riched20/tests/richole.c
@@ -57,6 +57,7 @@ START_TEST(richole)
 {
   IRichEditOle *reOle = NULL;
   ITextDocument *txtDoc = NULL;
+  ITextSelection *txtSel = NULL;
   HRESULT hres;
   LRESULT res;
   HWND w;
@@ -81,6 +82,11 @@ START_TEST(richole)
   ok(hres == S_OK, "IRichEditOle_QueryInterface\n");
   ok(txtDoc != NULL, "IRichEditOle_QueryInterface\n");
 
+  hres = ITextDocument_GetSelection(txtDoc, &txtSel);
+  ok(hres == S_OK, "ITextDocument_GetSelection\n");
+  ok(txtSel != NULL, "ITextDocument_GetSelection\n");
+
+  ITextSelection_Release(txtSel);
   ITextDocument_Release(txtDoc);
   IUnknown_Release(reOle);
   DestroyWindow(w);



More information about the wine-patches mailing list