2025-11-28 00:35:46 +09:00

151 lines
5.2 KiB
C++

//////////////////////////////////////////////////////////////////////
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED
// TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright (C) 2003 Microsoft Corporation. All rights reserved.
//
// TextService.h
//
// CTextService declaration.
//
//////////////////////////////////////////////////////////////////////
#ifndef TEXTSERVICE_H
#define TEXTSERVICE_H
class CLangBarItemButton;
class CCandidateList;
class CTextService : public ITfTextInputProcessor,
public ITfThreadMgrEventSink,
public ITfTextEditSink,
public ITfKeyEventSink,
public ITfCompositionSink,
public ITfDisplayAttributeProvider
{
public:
CTextService();
~CTextService();
// IUnknown
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
// ITfTextInputProcessor
STDMETHODIMP Activate(ITfThreadMgr *pThreadMgr, TfClientId tfClientId);
STDMETHODIMP Deactivate();
// ITfThreadMgrEventSink
STDMETHODIMP OnInitDocumentMgr(ITfDocumentMgr *pDocMgr);
STDMETHODIMP OnUninitDocumentMgr(ITfDocumentMgr *pDocMgr);
STDMETHODIMP OnSetFocus(ITfDocumentMgr *pDocMgrFocus, ITfDocumentMgr *pDocMgrPrevFocus);
STDMETHODIMP OnPushContext(ITfContext *pContext);
STDMETHODIMP OnPopContext(ITfContext *pContext);
// ITfTextEditSink
STDMETHODIMP OnEndEdit(ITfContext *pContext, TfEditCookie ecReadOnly, ITfEditRecord *pEditRecord);
// ITfKeyEventSink
STDMETHODIMP OnSetFocus(BOOL fForeground);
STDMETHODIMP OnTestKeyDown(ITfContext *pContext, WPARAM wParam, LPARAM lParam, BOOL *pfEaten);
STDMETHODIMP OnKeyDown(ITfContext *pContext, WPARAM wParam, LPARAM lParam, BOOL *pfEaten);
STDMETHODIMP OnTestKeyUp(ITfContext *pContext, WPARAM wParam, LPARAM lParam, BOOL *pfEaten);
STDMETHODIMP OnKeyUp(ITfContext *pContext, WPARAM wParam, LPARAM lParam, BOOL *pfEaten);
STDMETHODIMP OnPreservedKey(ITfContext *pContext, REFGUID rguid, BOOL *pfEaten);
// ITfCompositionSink
STDMETHODIMP OnCompositionTerminated(TfEditCookie ecWrite, ITfComposition *pComposition);
// ITfDisplayAttributeProvider
STDMETHODIMP EnumDisplayAttributeInfo(IEnumTfDisplayAttributeInfo **ppEnum);
STDMETHODIMP GetDisplayAttributeInfo(REFGUID guidInfo, ITfDisplayAttributeInfo **ppInfo);
// CClassFactory factory callback
static HRESULT CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppvObj);
ITfThreadMgr *_GetThreadMgr() { return _pThreadMgr; }
TfClientId _GetClientId() { return _tfClientId; }
// utility function for compartment
BOOL _IsKeyboardDisabled();
BOOL _IsKeyboardOpen();
HRESULT _SetKeyboardOpen(BOOL fOpen);
// functions for the composition object.
void _StartComposition(ITfContext *pContext);
void _EndComposition(ITfContext *pContext);
void _TerminateComposition(TfEditCookie ec, ITfContext *pContext);
BOOL _IsComposing();
void _SetComposition(ITfComposition *pComposition);
// key event handlers.
HRESULT _HandleCharacterKey(TfEditCookie ec, ITfContext *pContext, WPARAM wParam);
HRESULT _HandleArrowKey(TfEditCookie ec, ITfContext *pContext, WPARAM wParam);
HRESULT _HandleReturnKey(TfEditCookie ec, ITfContext *pContext);
HRESULT _HandleSpaceKey(TfEditCookie ec, ITfContext *pContext);
HRESULT _InvokeKeyHandler(ITfContext *pContext, WPARAM wParam, LPARAM lParam);
void _ClearCompositionDisplayAttributes(TfEditCookie ec, ITfContext *pContext);
BOOL _SetCompositionDisplayAttributes(TfEditCookie ec, ITfContext *pContext, TfGuidAtom gaDisplayAttribute);
BOOL _InitDisplayAttributeGuidAtom();
private:
// initialize and uninitialize ThreadMgrEventSink.
BOOL _InitThreadMgrEventSink();
void _UninitThreadMgrEventSink();
// initialize TextEditSink.
BOOL _InitTextEditSink(ITfDocumentMgr *pDocMgr);
// initialize and uninitialize LanguageBar Item.
BOOL _InitLanguageBar();
void _UninitLanguageBar();
// initialize and uninitialize KeyEventSink.
BOOL _InitKeyEventSink();
void _UninitKeyEventSink();
// initialize and uninitialize PreservedKey.
BOOL _InitPreservedKey();
void _UninitPreservedKey();
// utility function for KeyEventSink
BOOL _IsKeyEaten(ITfContext *pContext, WPARAM wParam);
//
// state
//
ITfThreadMgr *_pThreadMgr;
TfClientId _tfClientId;
// The cookie of ThreadMgrEventSink
DWORD _dwThreadMgrEventSinkCookie;
//
// private variables for TextEditSink
//
ITfContext *_pTextEditSinkContext;
DWORD _dwTextEditSinkCookie;
CLangBarItemButton *_pLangBarItem;
// the current composition object.
ITfComposition *_pComposition;
// guidatom for the display attibute.
TfGuidAtom _gaDisplayAttributeInput;
TfGuidAtom _gaDisplayAttributeConverted;
// the candidate list object.
CCandidateList *_pCandidateList;
LONG _cRef; // COM ref count
};
#endif // TEXTSERVICE_H