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

236 lines
7.5 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) Microsoft Corporation. All rights reserved
#pragma once
#include "Globals.h"
#include "Private.h"
#include "SampleIME.h"
class CKeyStateCategory;
class CKeyStateCategoryFactory
{
public:
static CKeyStateCategoryFactory* Instance();
CKeyStateCategory* MakeKeyStateCategory(KEYSTROKE_CATEGORY keyCategory, _In_ CSampleIME *pTextService);
void Release();
protected:
CKeyStateCategoryFactory();
private:
static CKeyStateCategoryFactory* _instance;
};
typedef struct KeyHandlerEditSessionDTO
{
KeyHandlerEditSessionDTO::KeyHandlerEditSessionDTO(TfEditCookie tFEC, _In_ ITfContext *pTfContext, UINT virualCode, WCHAR inputChar, KEYSTROKE_FUNCTION arrowKeyFunction)
{
ec = tFEC;
pContext = pTfContext;
code = virualCode;
wch = inputChar;
arrowKey = arrowKeyFunction;
}
TfEditCookie ec;
ITfContext* pContext;
UINT code;
WCHAR wch;
KEYSTROKE_FUNCTION arrowKey;
}KeyHandlerEditSessionDTO;
class CKeyStateCategory
{
public:
CKeyStateCategory(_In_ CSampleIME *pTextService);
protected:
~CKeyStateCategory(void);
public:
HRESULT KeyStateHandler(KEYSTROKE_FUNCTION function, KeyHandlerEditSessionDTO dto);
void Release(void);
protected:
// HandleKeyInput
virtual HRESULT HandleKeyInput(KeyHandlerEditSessionDTO dto);
// HandleKeyFinalizeTextStoreAndInput
virtual HRESULT HandleKeyFinalizeTextStoreAndInput(KeyHandlerEditSessionDTO dto);
// HandleKeyFinalizeTextStore
virtual HRESULT HandleKeyFinalizeTextStore(KeyHandlerEditSessionDTO dto);
// HandleKeyFinalizeCandidatelistAndInput
virtual HRESULT HandleKeyFinalizeCandidatelistAndInput(KeyHandlerEditSessionDTO dto);
// HandleKeyFinalizeCandidatelist
virtual HRESULT HandleKeyFinalizeCandidatelist(KeyHandlerEditSessionDTO dto);
// HandleKeyConvert
virtual HRESULT HandleKeyConvert(KeyHandlerEditSessionDTO dto);
// HandleKeyConvertWild
virtual HRESULT HandleKeyConvertWildCard(KeyHandlerEditSessionDTO dto);
// HandleKeyCancel
virtual HRESULT HandleKeyCancel(KeyHandlerEditSessionDTO dto);
// HandleKeyBackspace
virtual HRESULT HandleKeyBackspace(KeyHandlerEditSessionDTO dto);
// HandleKeyArrow
virtual HRESULT HandleKeyArrow(KeyHandlerEditSessionDTO dto);
// HandleKeyDoubleSingleByte
virtual HRESULT HandleKeyDoubleSingleByte(KeyHandlerEditSessionDTO dto);
// HandleKeyPunctuation
virtual HRESULT HandleKeyPunctuation(KeyHandlerEditSessionDTO dto);
// HandleKeySelectByNumber
virtual HRESULT HandleKeySelectByNumber(KeyHandlerEditSessionDTO dto);
protected:
CSampleIME* _pTextService;
};
class CKeyStateComposing : public CKeyStateCategory
{
public:
CKeyStateComposing(_In_ CSampleIME *pTextService);
protected:
// _HandleCompositionInput
HRESULT HandleKeyInput(KeyHandlerEditSessionDTO dto);
// HandleKeyCompositionFinalizeTextStoreAndInput
HRESULT HandleKeyFinalizeTextStoreAndInput(KeyHandlerEditSessionDTO dto);
// HandleKeyFinalizeTextStore
HRESULT HandleKeyFinalizeTextStore(KeyHandlerEditSessionDTO dto);
// HandleKeyCompositionFinalizeCandidatelistAndInput
HRESULT HandleKeyFinalizeCandidatelistAndInput(KeyHandlerEditSessionDTO dto);
// HandleKeyCompositionFinalizeCandidatelist
HRESULT HandleKeyFinalizeCandidatelist(KeyHandlerEditSessionDTO dto);
// HandleCompositionConvert
HRESULT HandleKeyConvert(KeyHandlerEditSessionDTO dto);
// HandleKeyCompositionConvertWildCard
HRESULT HandleKeyConvertWildCard(KeyHandlerEditSessionDTO dto);
// HandleCancel
HRESULT HandleKeyCancel(KeyHandlerEditSessionDTO dto);
// HandleCompositionBackspace
HRESULT HandleKeyBackspace(KeyHandlerEditSessionDTO dto);
// HandleArrowKey
HRESULT HandleKeyArrow(KeyHandlerEditSessionDTO dto);
// HandleKeyDoubleSingleByte
HRESULT HandleKeyDoubleSingleByte(KeyHandlerEditSessionDTO dto);
// HandleKeyCompositionPunctuation
HRESULT HandleKeyPunctuation(KeyHandlerEditSessionDTO dto);
};
class CKeyStateCandidate : public CKeyStateCategory
{
public:
CKeyStateCandidate(_In_ CSampleIME *pTextService);
protected:
// HandleKeyFinalizeCandidatelist
HRESULT HandleKeyFinalizeCandidatelist(KeyHandlerEditSessionDTO dto);
// HandleKeyFinalizeCandidatelistAndInput
HRESULT HandleKeyFinalizeCandidatelistAndInput(KeyHandlerEditSessionDTO dto);
//_HandleCandidateConvert
HRESULT HandleKeyConvert(KeyHandlerEditSessionDTO dto);
//_HandleCancel
HRESULT HandleKeyCancel(KeyHandlerEditSessionDTO dto);
//_HandleCandidateArrowKey
HRESULT HandleKeyArrow(KeyHandlerEditSessionDTO dto);
//_HandleCandidateSelectByNumber
HRESULT HandleKeySelectByNumber(KeyHandlerEditSessionDTO dto);
};
class CKeyStatePhrase : public CKeyStateCategory
{
public:
CKeyStatePhrase(_In_ CSampleIME *pTextService);
protected:
//_HandleCancel
HRESULT HandleKeyFinalizeCandidatelist(KeyHandlerEditSessionDTO dto);
//_HandleCancel
HRESULT HandleKeyCancel(KeyHandlerEditSessionDTO dto);
//_HandlePhraseArrowKey
HRESULT HandleKeyArrow(KeyHandlerEditSessionDTO dto);
//_HandlePhraseSelectByNumber
HRESULT HandleKeySelectByNumber(KeyHandlerEditSessionDTO dto);
};
//degeneration class
class CKeyStateNull : public CKeyStateCategory
{
public:
CKeyStateNull(_In_ CSampleIME *pTextService) : CKeyStateCategory(pTextService) {};
protected:
// _HandleNullInput
HRESULT HandleKeyInput(KeyHandlerEditSessionDTO dto) { return __super::HandleKeyInput(dto); };
// HandleKeyNullFinalizeTextStoreAndInput
HRESULT HandleKeyFinalizeTextStoreAndInput(KeyHandlerEditSessionDTO dto) { return __super::HandleKeyFinalizeTextStoreAndInput(dto); };
// HandleKeyFinalizeTextStore
HRESULT HandleKeyFinalizeTextStore(KeyHandlerEditSessionDTO dto) { return __super::HandleKeyFinalizeTextStore(dto); };
// HandleKeyNullFinalizeCandidatelistAndInput
HRESULT HandleKeyFinalizeCandidatelistAndInput(KeyHandlerEditSessionDTO dto) { return __super::HandleKeyFinalizeCandidatelistAndInput(dto); };
// HandleKeyNullFinalizeCandidatelist
HRESULT HandleKeyFinalizeCandidatelist(KeyHandlerEditSessionDTO dto) { return __super::HandleKeyFinalizeCandidatelist(dto); };
//_HandleNullConvert
HRESULT HandleKeyConvert(KeyHandlerEditSessionDTO dto) { return __super::HandleKeyConvert(dto); };
//_HandleNullCancel
HRESULT HandleKeyCancel(KeyHandlerEditSessionDTO dto) { return __super::HandleKeyCancel(dto); };
// HandleKeyNullConvertWild
HRESULT HandleKeyConvertWildCard(KeyHandlerEditSessionDTO dto) { return __super::HandleKeyConvertWildCard(dto); };
//_HandleNullBackspace
HRESULT HandleKeyBackspace(KeyHandlerEditSessionDTO dto) { return __super::HandleKeyBackspace(dto); };
//_HandleNullArrowKey
HRESULT HandleKeyArrow(KeyHandlerEditSessionDTO dto) { return __super::HandleKeyArrow(dto); };
// HandleKeyDoubleSingleByte
HRESULT HandleKeyDoubleSingleByte(KeyHandlerEditSessionDTO dto) { return __super::HandleKeyDoubleSingleByte(dto); };
// HandleKeyPunctuation
HRESULT HandleKeyPunctuation(KeyHandlerEditSessionDTO dto) { return __super::HandleKeyPunctuation(dto); };
//_HandleNullCandidateSelectByNumber
HRESULT HandleKeySelectByNumber(KeyHandlerEditSessionDTO dto) { return __super::HandleKeySelectByNumber(dto); };
};