Reactos
at master 90 lines 2.8 kB view raw
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};