[3/3] riched20: Implement ITextDocument_fnGetSelection.
Dan Hipschman
dsh at linux.ucla.edu
Thu Jun 19 19:13:19 CDT 2008
This implements a stub ITextSelection and ITextDocument_fnGetSelection.
---
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