Reactos
1#pragma once
2
3DEFINE_GUID(IID_PRIV_CRANGE, 0xB68832F0, 0x34B9, 0x11D3, 0xA7, 0x45, 0x00, 0x50, 0x04, 0x0A, 0xB4, 0x07);
4
5class CRange
6 : public ITfRangeACP
7 , public ITfRangeAnchor
8 , public ITfSource
9{
10public:
11 CRange(
12 _In_ ITfContext *context,
13 _In_ TfAnchor anchorStart,
14 _In_ TfAnchor anchorEnd);
15 virtual ~CRange();
16
17 static HRESULT TF_SELECTION_to_TS_SELECTION_ACP(const TF_SELECTION *tf, TS_SELECTION_ACP *tsAcp);
18
19 // ** IUnknown methods **
20 STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj) override;
21 STDMETHODIMP_(ULONG) AddRef() override;
22 STDMETHODIMP_(ULONG) Release() override;
23
24 // ** ITfRange methods **
25 STDMETHODIMP GetText(
26 _In_ TfEditCookie ec,
27 _In_ DWORD dwFlags,
28 _Out_ WCHAR *pchText,
29 _In_ ULONG cchMax,
30 _Out_ ULONG *pcch) override;
31 STDMETHODIMP SetText(
32 _In_ TfEditCookie ec,
33 _In_ DWORD dwFlags,
34 _In_ const WCHAR *pchText,
35 _In_ LONG cch) override;
36 STDMETHODIMP GetFormattedText(
37 _In_ TfEditCookie ec,
38 _Out_ IDataObject **ppDataObject) override;
39 STDMETHODIMP GetEmbedded(
40 _In_ TfEditCookie ec,
41 _In_ REFGUID rguidService,
42 _In_ REFIID riid,
43 _Out_ IUnknown **ppunk) override;
44 STDMETHODIMP InsertEmbedded(
45 _In_ TfEditCookie ec,
46 _In_ DWORD dwFlags,
47 _In_ IDataObject *pDataObject) override;
48 STDMETHODIMP ShiftStart(
49 _In_ TfEditCookie ec,
50 _In_ LONG cchReq,
51 _Out_ LONG *pcch,
52 _In_ const TF_HALTCOND *pHalt) override;
53 STDMETHODIMP ShiftEnd(
54 _In_ TfEditCookie ec,
55 _In_ LONG cchReq,
56 _Out_ LONG *pcch,
57 _In_ const TF_HALTCOND *pHalt) override;
58 STDMETHODIMP ShiftStartToRange(
59 _In_ TfEditCookie ec,
60 _In_ ITfRange *pRange,
61 _In_ TfAnchor aPos) override;
62 STDMETHODIMP ShiftEndToRange(
63 _In_ TfEditCookie ec,
64 _In_ ITfRange *pRange,
65 _In_ TfAnchor aPos) override;
66 STDMETHODIMP ShiftStartRegion(
67 _In_ TfEditCookie ec,
68 _In_ TfShiftDir dir,
69 _Out_ BOOL *pfNoRegion) override;
70 STDMETHODIMP ShiftEndRegion(
71 _In_ TfEditCookie ec,
72 _In_ TfShiftDir dir,
73 _Out_ BOOL *pfNoRegion) override;
74 STDMETHODIMP IsEmpty(_In_ TfEditCookie ec, _Out_ BOOL *pfEmpty) override;
75 STDMETHODIMP Collapse(_In_ TfEditCookie ec, _In_ TfAnchor aPos) override;
76 STDMETHODIMP IsEqualStart(
77 _In_ TfEditCookie ec,
78 _In_ ITfRange *pWith,
79 _In_ TfAnchor aPos,
80 _Out_ BOOL *pfEqual) override;
81 STDMETHODIMP IsEqualEnd(
82 _In_ TfEditCookie ec,
83 _In_ ITfRange *pWith,
84 _In_ TfAnchor aPos,
85 _Out_ BOOL *pfEqual) override;
86 STDMETHODIMP CompareStart(
87 _In_ TfEditCookie ec,
88 _In_ ITfRange *pWith,
89 _In_ TfAnchor aPos,
90 _Out_ LONG *plResult) override;
91 STDMETHODIMP CompareEnd(
92 _In_ TfEditCookie ec,
93 _In_ ITfRange *pWith,
94 _In_ TfAnchor aPos,
95 _Out_ LONG *plResult) override;
96 STDMETHODIMP AdjustForInsert(
97 _In_ TfEditCookie ec,
98 _In_ ULONG cchInsert,
99 _Out_ BOOL *pfInsertOk) override;
100 STDMETHODIMP GetGravity(_Out_ TfGravity *pgStart, _Out_ TfGravity *pgEnd) override;
101 STDMETHODIMP SetGravity(
102 _In_ TfEditCookie ec,
103 _In_ TfGravity gStart,
104 _In_ TfGravity gEnd) override;
105 STDMETHODIMP Clone(_Out_ ITfRange **ppClone) override;
106 STDMETHODIMP GetContext(_Out_ ITfContext **ppContext) override;
107
108 // ** ITfRangeACP methods **
109 STDMETHODIMP GetExtent(_Out_ LONG *pacpAnchor, _Out_ LONG *pcch) override;
110 STDMETHODIMP SetExtent(_In_ LONG acpAnchor, _In_ LONG cch) override;
111
112 // ** ITfRangeAnchor methods **
113 STDMETHODIMP GetExtent(_Out_ IAnchor **ppStart, _Out_ IAnchor **ppEnd) override;
114 STDMETHODIMP SetExtent(_In_ IAnchor *pAnchorStart, _In_ IAnchor *pAnchorEnd) override;
115
116 // ** ITfSource methods **
117 STDMETHODIMP AdviseSink(_In_ REFIID riid, _In_ IUnknown *punk, _Out_ DWORD *pdwCookie) override;
118 STDMETHODIMP UnadviseSink(_In_ DWORD dwCookie) override;
119
120protected:
121 LONG m_cRefs;
122 ITfContext *m_context;
123 DWORD m_dwLockType;
124 TfAnchor m_anchorStart;
125 TfAnchor m_anchorEnd;
126 DWORD m_dwCookie;
127
128 CRange *_Clone();
129
130 HRESULT _IsEqualX(TfEditCookie ec, BOOL bEnd, ITfRange *pWith, TfAnchor aPos, BOOL *pfEqual);
131
132 HRESULT _CompareX(
133 TfEditCookie ec,
134 BOOL bEnd,
135 ITfRange *pWidth,
136 TfAnchor aPos,
137 LONG *plResult);
138};