Reactos
1/*
2 * PROJECT: ReactOS CTF
3 * LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
4 * PURPOSE: Implementation of ITfDocumentMgr and IEnumTfContexts
5 * COPYRIGHT: Copyright 2009 Aric Stewart, CodeWeavers
6 * Copyright 2025 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
7 */
8
9#pragma once
10
11////////////////////////////////////////////////////////////////////////////
12// CDocumentMgr
13
14class CDocumentMgr
15 : public ITfDocumentMgr
16 , public ITfSource
17{
18public:
19 CDocumentMgr(ITfThreadMgrEventSink *threadMgrSink);
20 virtual ~CDocumentMgr();
21
22 static HRESULT
23 CreateInstance(
24 _In_ ITfThreadMgrEventSink *pThreadMgrSink,
25 _Out_ ITfDocumentMgr **ppOut);
26
27 // ** IUnknown methods **
28 STDMETHODIMP QueryInterface(REFIID iid, LPVOID *ppvObject) override;
29 STDMETHODIMP_(ULONG) AddRef() override;
30 STDMETHODIMP_(ULONG) Release() override;
31
32 // ** ITfDocumentMgr methods **
33 STDMETHODIMP CreateContext(
34 TfClientId tidOwner,
35 DWORD dwFlags,
36 IUnknown *punk,
37 ITfContext **ppic,
38 TfEditCookie *pecTextStore) override;
39 STDMETHODIMP Push(ITfContext *pic) override;
40 STDMETHODIMP Pop(DWORD dwFlags) override;
41 STDMETHODIMP GetTop(ITfContext **ppic) override;
42 STDMETHODIMP GetBase(ITfContext **ppic) override;
43 STDMETHODIMP EnumContexts(IEnumTfContexts **ppEnum) override;
44
45 // ** ITfSource methods **
46 STDMETHODIMP AdviseSink(REFIID riid, IUnknown *punk, DWORD *pdwCookie) override;
47 STDMETHODIMP UnadviseSink(DWORD pdwCookie) override;
48
49 friend class CEnumTfContext;
50
51protected:
52 LONG m_cRefs;
53 ITfCompartmentMgr *m_pCompartmentMgr;
54 ITfContext *m_initialContext;
55 ITfContext *m_contextStack[2]; // limit of 2 contexts
56 ITfThreadMgrEventSink *m_pThreadMgrSink;
57 struct list m_transitoryExtensionSink;
58};
59
60EXTERN_C
61HRESULT EnumTfContext_Constructor(CDocumentMgr *mgr, IEnumTfContexts **ppOut);
62
63////////////////////////////////////////////////////////////////////////////
64// CEnumTfContext
65
66class CEnumTfContext
67 : public IEnumTfContexts
68{
69public:
70 CEnumTfContext(_In_opt_ CDocumentMgr *mgr);
71 virtual ~CEnumTfContext();
72
73 static HRESULT CreateInstance(_In_opt_ CDocumentMgr *mgr, _Out_ IEnumTfContexts **ppOut);
74
75 // ** IUnknown methods **
76 STDMETHODIMP QueryInterface(REFIID iid, LPVOID *ppvObject) override;
77 STDMETHODIMP_(ULONG) AddRef() override;
78 STDMETHODIMP_(ULONG) Release() override;
79
80 // ** IEnumTfContexts methods **
81 STDMETHODIMP Next(ULONG ulCount, ITfContext **rgContext, ULONG *pcFetched) override;
82 STDMETHODIMP Skip(ULONG celt) override;
83 STDMETHODIMP Reset() override;
84 STDMETHODIMP Clone(IEnumTfContexts **ppenum) override;
85
86protected:
87 LONG m_cRefs;
88 DWORD m_index;
89 CDocumentMgr *m_pDocMgr;
90};