mirror of
https://github.com/reactos/reactos.git
synced 2025-06-22 19:30:17 +00:00

Fix CRASH of msctf:inputprocessor tests. JIRA issue: CORE-19361 - Implement Range_Constructor and TF_SELECTION_to_TS_SELECTION_ACP functions. - Adapt CRange to these changes.
142 lines
4.6 KiB
C++
142 lines
4.6 KiB
C++
#pragma once
|
|
|
|
DEFINE_GUID(IID_PRIV_CRANGE, 0xB68832F0, 0x34B9, 0x11D3, 0xA7, 0x45, 0x00, 0x50, 0x04, 0x0A, 0xB4, 0x07);
|
|
|
|
class CRange
|
|
: public ITfRangeACP
|
|
, public ITfRangeAnchor
|
|
, public ITfSource
|
|
{
|
|
protected:
|
|
ITfContext *m_pContext;
|
|
ITextStoreACP *m_pTextStore;
|
|
DWORD m_dwLockType;
|
|
TfAnchor m_anchorStart;
|
|
TfAnchor m_anchorEnd;
|
|
DWORD m_dwCookie;
|
|
LONG m_cRefs;
|
|
|
|
public:
|
|
CRange(
|
|
_In_ ITfContext *context,
|
|
_In_ ITextStoreACP *textstore,
|
|
_In_ DWORD lockType,
|
|
_In_ TfAnchor anchorStart,
|
|
_In_ TfAnchor anchorEnd);
|
|
virtual ~CRange();
|
|
|
|
static HRESULT TF_SELECTION_to_TS_SELECTION_ACP(const TF_SELECTION *tf, TS_SELECTION_ACP *tsAcp);
|
|
|
|
// ** IUnknown methods **
|
|
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj) override;
|
|
STDMETHODIMP_(ULONG) AddRef() override;
|
|
STDMETHODIMP_(ULONG) Release() override;
|
|
|
|
// ** ITfRange methods **
|
|
STDMETHODIMP GetText(
|
|
_In_ TfEditCookie ec,
|
|
_In_ DWORD dwFlags,
|
|
_Out_ WCHAR *pchText,
|
|
_In_ ULONG cchMax,
|
|
_Out_ ULONG *pcch) override;
|
|
STDMETHODIMP SetText(
|
|
_In_ TfEditCookie ec,
|
|
_In_ DWORD dwFlags,
|
|
_In_ const WCHAR *pchText,
|
|
_In_ LONG cch) override;
|
|
STDMETHODIMP GetFormattedText(
|
|
_In_ TfEditCookie ec,
|
|
_Out_ IDataObject **ppDataObject) override;
|
|
STDMETHODIMP GetEmbedded(
|
|
_In_ TfEditCookie ec,
|
|
_In_ REFGUID rguidService,
|
|
_In_ REFIID riid,
|
|
_Out_ IUnknown **ppunk) override;
|
|
STDMETHODIMP InsertEmbedded(
|
|
_In_ TfEditCookie ec,
|
|
_In_ DWORD dwFlags,
|
|
_In_ IDataObject *pDataObject) override;
|
|
STDMETHODIMP ShiftStart(
|
|
_In_ TfEditCookie ec,
|
|
_In_ LONG cchReq,
|
|
_Out_ LONG *pcch,
|
|
_In_ const TF_HALTCOND *pHalt) override;
|
|
STDMETHODIMP ShiftEnd(
|
|
_In_ TfEditCookie ec,
|
|
_In_ LONG cchReq,
|
|
_Out_ LONG *pcch,
|
|
_In_ const TF_HALTCOND *pHalt) override;
|
|
STDMETHODIMP ShiftStartToRange(
|
|
_In_ TfEditCookie ec,
|
|
_In_ ITfRange *pRange,
|
|
_In_ TfAnchor aPos) override;
|
|
STDMETHODIMP ShiftEndToRange(
|
|
_In_ TfEditCookie ec,
|
|
_In_ ITfRange *pRange,
|
|
_In_ TfAnchor aPos) override;
|
|
STDMETHODIMP ShiftStartRegion(
|
|
_In_ TfEditCookie ec,
|
|
_In_ TfShiftDir dir,
|
|
_Out_ BOOL *pfNoRegion) override;
|
|
STDMETHODIMP ShiftEndRegion(
|
|
_In_ TfEditCookie ec,
|
|
_In_ TfShiftDir dir,
|
|
_Out_ BOOL *pfNoRegion) override;
|
|
STDMETHODIMP IsEmpty(_In_ TfEditCookie ec, _Out_ BOOL *pfEmpty) override;
|
|
STDMETHODIMP Collapse(_In_ TfEditCookie ec, _In_ TfAnchor aPos) override;
|
|
STDMETHODIMP IsEqualStart(
|
|
_In_ TfEditCookie ec,
|
|
_In_ ITfRange *pWith,
|
|
_In_ TfAnchor aPos,
|
|
_Out_ BOOL *pfEqual) override;
|
|
STDMETHODIMP IsEqualEnd(
|
|
_In_ TfEditCookie ec,
|
|
_In_ ITfRange *pWith,
|
|
_In_ TfAnchor aPos,
|
|
_Out_ BOOL *pfEqual) override;
|
|
STDMETHODIMP CompareStart(
|
|
_In_ TfEditCookie ec,
|
|
_In_ ITfRange *pWith,
|
|
_In_ TfAnchor aPos,
|
|
_Out_ LONG *plResult) override;
|
|
STDMETHODIMP CompareEnd(
|
|
_In_ TfEditCookie ec,
|
|
_In_ ITfRange *pWith,
|
|
_In_ TfAnchor aPos,
|
|
_Out_ LONG *plResult) override;
|
|
STDMETHODIMP AdjustForInsert(
|
|
_In_ TfEditCookie ec,
|
|
_In_ ULONG cchInsert,
|
|
_Out_ BOOL *pfInsertOk) override;
|
|
STDMETHODIMP GetGravity(_Out_ TfGravity *pgStart, _Out_ TfGravity *pgEnd) override;
|
|
STDMETHODIMP SetGravity(
|
|
_In_ TfEditCookie ec,
|
|
_In_ TfGravity gStart,
|
|
_In_ TfGravity gEnd) override;
|
|
STDMETHODIMP Clone(_Out_ ITfRange **ppClone) override;
|
|
STDMETHODIMP GetContext(_Out_ ITfContext **ppContext) override;
|
|
|
|
// ** ITfRangeACP methods **
|
|
STDMETHODIMP GetExtent(_Out_ LONG *pacpAnchor, _Out_ LONG *pcch) override;
|
|
STDMETHODIMP SetExtent(_In_ LONG acpAnchor, _In_ LONG cch) override;
|
|
|
|
// ** ITfRangeAnchor methods **
|
|
STDMETHODIMP GetExtent(_Out_ IAnchor **ppStart, _Out_ IAnchor **ppEnd) override;
|
|
STDMETHODIMP SetExtent(_In_ IAnchor *pAnchorStart, _In_ IAnchor *pAnchorEnd) override;
|
|
|
|
// ** ITfSource methods **
|
|
STDMETHODIMP AdviseSink(_In_ REFIID riid, _In_ IUnknown *punk, _Out_ DWORD *pdwCookie) override;
|
|
STDMETHODIMP UnadviseSink(_In_ DWORD dwCookie) override;
|
|
|
|
protected:
|
|
CRange *_Clone();
|
|
|
|
HRESULT _IsEqualX(TfEditCookie ec, BOOL bEnd, ITfRange *pWith, TfAnchor aPos, BOOL *pfEqual);
|
|
|
|
HRESULT _CompareX(
|
|
TfEditCookie ec,
|
|
BOOL bEnd,
|
|
ITfRange *pWidth,
|
|
TfAnchor aPos,
|
|
LONG *plResult);
|
|
};
|