Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

190 lines
6.8 KiB

//
// mark.h
//
// CMarkTextService declaration.
//
#ifndef MARK_H
#define MARK_H
class CLangBarItemButton;
class CMarkTextService : public ITfTextInputProcessor,
public ITfDisplayAttributeProvider,
public ITfCreatePropertyStore,
public ITfThreadMgrEventSink,
public ITfTextEditSink,
public ITfCompositionSink,
public ITfCleanupContextDurationSink,
public ITfCleanupContextSink,
public ITfCompartmentEventSink,
public ITfKeyEventSink
{
public:
CMarkTextService();
~CMarkTextService();
// IUnknown
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
// ITfTextInputProcessor
STDMETHODIMP Activate(ITfThreadMgr *pThreadMgr, TfClientId tfClientId);
STDMETHODIMP Deactivate();
// ITfDisplayAttributeProvider
STDMETHODIMP EnumDisplayAttributeInfo(IEnumTfDisplayAttributeInfo **ppEnum);
STDMETHODIMP GetDisplayAttributeInfo(REFGUID guidInfo, ITfDisplayAttributeInfo **ppInfo);
// ITfCreatePropertyStore
STDMETHODIMP IsStoreSerializable(REFGUID guidProperty, ITfRange *pRange, ITfPropertyStore *pPropertyStore, BOOL *pfSerializable);
STDMETHODIMP CreatePropertyStore(REFGUID guidProperty, ITfRange *pRange, ULONG cb, IStream *pStream, ITfPropertyStore **ppStore);
// 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);
// ITfCompositionSink
STDMETHODIMP OnCompositionTerminated(TfEditCookie ecWrite, ITfComposition *pComposition);
// ITfCleanupContextDurationSink
STDMETHODIMP OnStartCleanupContext();
STDMETHODIMP OnEndCleanupContext();
// ITfCleanupContextSink
STDMETHODIMP OnCleanupContext(TfEditCookie ecWrite, ITfContext *pContext);
// ITfCompartmentEventSink
STDMETHODIMP OnChange(REFGUID rguidCompartment);
// 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);
// CClassFactory factory callback
static HRESULT CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppvObj);
// server registration
static BOOL RegisterProfiles();
static void UnregisterProfiles();
static BOOL RegisterCategories(BOOL fRegister);
static BOOL RegisterServer();
static void UnregisterServer();
// language bar menu handlers
static void _Menu_OnComposition(CMarkTextService *_this);
static void _Menu_OnSetGlobalCompartment(CMarkTextService *_this);
static void _Menu_OnSetCaseProperty(CMarkTextService *_this);
static void _Menu_OnViewCaseProperty(CMarkTextService *_this);
static void _Menu_OnViewCustomProperty(CMarkTextService *_this);
static void _Menu_OnSetCustomProperty(CMarkTextService *_this);
// keystroke handlers
HRESULT _HandleKeyDown(TfEditCookie ec, ITfContext *pContext, WPARAM wParam);
HRESULT _HandleArrowKey(TfEditCookie ec, ITfContext *pContext, WPARAM wParam);
HRESULT _HandleReturn(TfEditCookie ec, ITfContext *pContext);
// callbacks for CCompositionEditSession
BOOL _IsComposing()
{
return _pComposition != NULL;
}
ITfComposition *_GetComposition()
{
return _pComposition;
}
void _SetComposition(ITfComposition *pComposition)
{
_pComposition = pComposition;
}
void _TerminateComposition(TfEditCookie ec)
{
if (_pComposition != NULL)
{
_ClearCompositionDisplayAttributes(ec);
_pComposition->EndComposition(ec);
SafeReleaseClear(_pComposition);
}
}
void _TerminateCompositionInContext(ITfContext *pContext);
void _ClearCompositionDisplayAttributes(TfEditCookie ec);
BOOL _SetCompositionDisplayAttributes(TfEditCookie ec);
// messages for the worker wnd
enum { WM_DISPLAY_PROPERTY = WM_USER + 1 };
// property methods
void _ViewCaseProperty(TfEditCookie ec, ITfContext *pContext);
void _SetCaseProperty(TfEditCookie ec, ITfContext *pContext);
void _ViewCustomProperty(TfEditCookie ec, ITfContext *pContext);
void _SetCustomProperty(TfEditCookie ec, ITfContext *pContext);
private:
// init methods
BOOL _InitLanguageBar();
BOOL _InitThreadMgrSink();
BOOL _InitTextEditSink(ITfDocumentMgr *pDocMgr);
BOOL _InitDisplayAttributeGuidAtom();
BOOL _InitCleanupContextDurationSink();
BOOL _InitCleanupContextSink(ITfContext *pContext);
BOOL _InitContextCompartment(ITfContext *pContext);
BOOL _InitGlobalCompartment();
BOOL _InitWorkerWnd();
BOOL _InitKeystrokeSink();
// uninit methods
void _UninitLanguageBar();
void _UninitThreadMgrSink();
void _UninitCleanupContextDurationSink();
void _UninitCleanupContextSink(ITfContext *pContext);
void _UninitCompartment(ITfContext *pContext);
void _UninitGlobalCompartment();
void _UninitWorkerWnd();
void _UninitKeystrokeSink();
// property methods
void _RequestPropertyEditSession(ULONG ulCallback);
static LRESULT CALLBACK _WorkerWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
//
// state
//
ITfThreadMgr *_pThreadMgr;
TfClientId _tfClientId;
ITfComposition *_pComposition; // pointer to an ongoing composition, or NULL if there is none
BOOL _fCleaningUp;
TfGuidAtom _gaDisplayAttribute;
CLangBarItemButton *_pLangBarItem;
DWORD _dwThreadMgrEventSinkCookie;
DWORD _dwThreadFocusSinkCookie;
DWORD _dwTextEditSinkCookie;
DWORD _dwGlobalCompartmentEventSinkCookie;
ITfContext *_pTextEditSinkContext;
HWND _hWorkerWnd;
// buffers for the popup property displays
WCHAR _achDisplayText[64];
WCHAR _achDisplayPropertyText[64];
LONG _cRef; // COM ref count
};
#endif // MARK_H