⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ime.c

📁 好记星的控件,包括button,list,对文件操作
💻 C
📖 第 1 页 / 共 3 页
字号:
/*************************************************************************/
/*																		 */
/* 				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 + -