📄 ime.c
字号:
/*************************************************************************/
/* */
/* Copyright (C) 2002 SHENZHEN MEIJIN CO.LTD */
/* */
/* FILE NAME: PrjIme.c */
/* MODULE NAME: 输入法 Input Method Editor */
/* DESCRIPTION: 输入法 */
/* */
/*************************************************************************/
/* DTAE AUTHOR VERSION REMARKS */
/* =========== ========== ========= ===================================*/
/* 2003-03-24 Qorse Ver 1.00 学生机(无笔点) */
/* 2004-12-18 Bingle Ver 2.00 笔点机 */
/*************************************************************************/
#include "Kernel.h"
#include "ImeIn.h"
#include "Global.h"
/************************************FOR_IME_ALL_START********************/
const struct tagMInputME prjImeArray[] =
{
{(UINT8*)"英文", IME_ENGLISH, IM_HEIGHT, _EnglishHandleEvent },
{(UINT8*)"拼音", IME_PINYIN, IM_HEIGHT, _GBKHandleEvent },
{(UINT8*)"五笔", IME_WUBI, IM_HEIGHT, _WuBiHandleEvent },
{(UINT8*)"部首", IME_BUSHOU, IM_HEIGHT, _BuShouHandleEvent },
{(UINT8*)"笔划", IME_BIHUA, IM_HEIGHT, _BiHuaHandleEvent },
{(UINT8*)"难检", IME_NANJIAN, IM_HEIGHT, _NanJianHandleEvent },
{(UINT8*)"符号", IME_SYMBOL, IM_HEIGHT, _SymBolHandleEvent },
{(UINT8*)"日文", IME_JAPANESE, IM_HEIGHT, _GBKHandleEvent }
};
UINT32 ImeSelectHandleEvent(IMEGUI_STRUCT *pApGui, UINT uEvent, UINT uParam);
const APGUI_STRUCT g_pIMeSelectGuiTemplate[] =
{
GUI_RESERVE_MARK, // UINT uReserveMark;
0, // INT16 nX;
0, // INT16 nY;
LCD_SCREEN_WIDTH, // UINT16 uWidth;
LCD_SCREEN_HEIGHT, // UINT16 uHeight;
(FPGUIHANDLEEVENT)ImeSelectHandleEvent, // FPGUIHANDLEEVENT fpHandleFunc;
NULL, // UINT uCurrentIme;
0, // INT nCtrlParam1;
0, // INT nCtrlParam2;
0, // INT nCtrlParam3;
NULL,
};
const UINT IME_SELECT_LIST[] = {
IME_ENGLISH,
IME_PINYIN,
IME_SYMBOL,
IME_WUBI,
IME_BUSHOU,
IME_BIHUA,
IME_NANJIAN,
IME_JAPANESE,
};
const UINT8 * const ime_InputBoxHead[]=
{
"英", /*英数*/
"拼", /*拼音*/
"五", /*五笔*/
"部", /*部首*/
"笔", /*笔划*/
"难", /*难检*/
"符", /*符号*/
"日", /*日文*/
// "音", /*音标*/
};
const UINT8 Number_shift_Char[]={')','!','@','#','$','%','^','&','*','('};
const UINT8 * const sy_pKeyData[]=
{
"1 ","2 ","3 ","4 ","5 ","6 ","7 ","8 ","9 ","0 ",
"+ ","- ","* ","/ ","( ",") ","= ","< ","> ",": ",
"; ","\" ","{ ","} ","! ","# ","$ ","% ","& ","\' ",
", ",". ","? ","@ ","[ ","\\ ","] ","^ ","_ ","` ",
"| ","~ "," "
};
const UINT16 yb_pKeyData[]=
{
0x0180,0x0280,0x0380,0x0480,0x0580,0x0680,0x0780,0x0880,0x0980,0x4680,
0x0a80,0x0b80
};
UINT8 g_pIMEOutBuffer[IM_OUTBUFF_LEN];//输入法数据输出
UINT8 g_pIMEInBuffer[IM_INBUFF_LEN]; //用户按键输入
UINT8 g_pIMEOutWordBuf[3]; //输出一个UNICODE
UINT g_pIMEInputednum; //用户已经输入有效按键的个数
HTIMER g_pIMETimer; //时钟
MInputBox g_mInputBox; //输入框
UINT16 g_pIMEAssocNum; //联想字的个数
UINT16 g_pIMECandiPos; //翻动的字的偏移个数
UINT16 g_pIMEWordNum; //同一输入对应的字的个数
UINT8 *g_pIMEDataAddr; //字符信息的地址
UINT8 g_pIMEWordTypeNum; //当前页的字符个数
UINT8 g_pIMElasttype; //记录符号输入法之前的输入法
UINT8 g_IMEShowFlag[IME_MAXNUMBER]; //输入法可选标记
UINT16 g_pIMEBushouState;
UINT32 g_uImeSelect;
/*********************************声明函数********************************/
BOOL ImeShowAbility(UINT kbTypeID);
VOID _ImeSelectList(MIMEManager *pImeManager);
VOID _ImeOnChangeFunc(UINT uType);
/*************************************************************************/
VOID __InitialIME()
{
if(g_pIMETimer)
{
TimerStopTimer(g_pIMETimer);
TimerDestroyTimer(g_pIMETimer);
g_pIMETimer = NULL;
}
memset(g_pIMEInBuffer,0,IM_INBUFF_LEN);
memset(g_pIMEOutBuffer,0,IM_OUTBUFF_LEN);
g_pIMEInputednum = 0;
g_pIMEBushouState = 0;
g_pIMECandiPos = 0;
g_mInputBox.state = IM_INPUT_NULL;
g_mInputBox.refresh = IME_NO_REFRESH;
g_pIMEAssocNum = 0;
g_pIMEWordNum = 0;
}
/*************************************************************************/
/* FUNCTION: _ImeOnChangeFunc */
/* DESCRIPTION:输入法变更时的回调函数 */
/* INPUTS: uType 新的输入法 */
/* OUTPUTS: NONE */
/* RETURN: NONE */
/*************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ===========================================*/
/* Qorse 2003-03-25 创建初始版本 */
/*************************************************************************/
FOR_IME_ALL
VOID _ImeOnChangeFunc(UINT uType)
{
g_mInputBox.rect.height =IM_HEIGHT; // ???
__InitialIME();
if (uType == IME_SYMBOL)
{
g_pIMEWordNum = SY_SKEYDATANUM;
g_pIMEDataAddr = (UINT8 *)sy_pKeyData;
g_pIMEWordTypeNum = HZ_PER_PAGE;
g_mInputBox.state = IM_INPUT_DOING;
}
_ImeDrawGraph(uType); //Jacky
//MsgPost(NULL,EVENT_DRAW,NULL);
//DrawCurrentAp();
}
/*************************************************************************/
/* FUNCTION: _ImeInitialize */
/* DESCRIPTION:初始化输入法 */
/* INPUTS: NONE */
/* OUTPUTS: NONE */
/*************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ===========================================*/
/* QORSE 2003-03-24 创建初始版本 */
/*************************************************************************/
FOR_IME_ALL
BOOL _ImeInitialize(MIMEManager *pImeManager, UINT uInitMode)
{
// 输入法管理初始化
if (pImeManager != NULL)
{
// UINT uIme;
pImeManager->uCount = sizeof(prjImeArray)/sizeof(MInputME);
pImeManager->maInputME = (MInputME*)prjImeArray; // 输入法信息
pImeManager->ImeSwitchFunc = (VOID*)_ImeSelectList; // 切换输入法的界面
pImeManager->ImeOnChangeFunc =(VOID*)_ImeOnChangeFunc; // 输入法切换回调函数
pImeManager->pmImputBox = &g_mInputBox; // InputBox
// SysGetSetting(SYSTEM_SETTING_IME, NULL, &uIme);
// ImeSetDefault(uIme); // 设置确省输入法
}
g_mInputBox.rect.y = LCD_SCREEN_HEIGHT - IM_HEIGHT;
ImGetBiShouDataAddr();
// 输入框参数初始化
g_mInputBox.rect.height = IM_HEIGHT;
g_mInputBox.rect.x = 0;
g_mInputBox.rect.width = LCD_SCREEN_WIDTH;
g_mInputBox.refresh = IME_NO_REFRESH;
g_mInputBox.state = IM_INPUT_NULL;
g_pIMETimer = NULL; // 时钟初始化
memset(g_IMEShowFlag, 0, IME_MAXNUMBER);
return TRUE;
}
/*************************************************************************/
/* FUNCTION: ImeShowDisable */
/* DESCRIPTION:清除输入法的可选标记 */
/* INPUTS: kbTypeID 输入法类型 */
/* OUTPUTS: NONE */
/*************************************************************************/
void ImeShowDisable(UINT kbTypeID)
{
UINT uType;
if (kbTypeID <= IME_MAXNUMBER && kbTypeID > 0)
{
g_IMEShowFlag[kbTypeID - 1] = 1;
}
uType = ImeGetDefault();
if (uType == kbTypeID)
{
if (!ImeSetDefault(IME_PINYIN))
{
ImeSetDefault(IME_ENGLISH);
}
}
}
/*************************************************************************/
/* FUNCTION: ImeShowEnable */
/* DESCRIPTION:使能输入法的可选标记 */
/* INPUTS: kbTypeID 输入法类型 */
/* OUTPUTS: NONE */
/*************************************************************************/
void ImeShowEnable(UINT kbTypeID)
{
//118中符号输入法不需要显示在输入法列表中
#ifdef _ED135__
if (kbTypeID == IME_SYMBOL) {
return;
}
#endif
if (kbTypeID <= IME_MAXNUMBER && kbTypeID > 0)
{
g_IMEShowFlag[kbTypeID - 1] = 0;
}
}
BOOL ImeShowAbility(UINT kbTypeID)
{
return (g_IMEShowFlag[kbTypeID - 1] == 0);
}
/*************************************************************************/
/* FUNCTION: ImeGetDefault */
/* DESCRIPTION:得到系统缺省输入法 */
/* INPUTS: NONE */
/* OUTPUTS: NONE */
/* RETURN: 系统缺省输入法ID */
/*************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ===========================================*/
/* Qorse 2003-03-25 创建初始版本 */
/*************************************************************************/
UINT ImeGetDefault(VOID)
{
UINT kbtype;
BOOL bImeChange;
//输入法改变标志
bImeChange = FALSE;
if(GlobalRead( ) == FALSE)
{
kbtype = IME_ENGLISH;
bImeChange = TRUE;
}
else
{
kbtype = g_vSysGlobal.uImeInput;
}
if( kbtype > IME_MAXNUMBER )
{
kbtype = IME_ENGLISH;
bImeChange = TRUE;
}
if( bImeChange )
{
//ImeSetDefault(kbtype);
ImeSetCurrent(kbtype);
}
return kbtype;
}
/*************************************************************************/
/* FUNCTION: ImeSetDefault */
/* DESCRIPTION:设置系统缺省输入法 */
/* INPUTS: kbTypeID 输入法ID */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -