📄 mmichineseinput.c
字号:
/*******************************************************************************
$Function: chinese_input_kbd_cb
$Description: Keyboard event handler
$Returns: status int
$Arguments: window handle event, keyboard control block
*******************************************************************************/
static int chinese_input_kbd_cb (T_MFW_EVENT event, T_MFW_KBD *keyboard)
{
T_MFW_HND win = mfw_parent (mfw_header());
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
T_chinese_input * data = (T_chinese_input *)win_data->user;
T_MFW_HND parent_win = data->parent_win;
USHORT Identifier = data->Identifier;
int temp = 0;
char debug[30];
// void (* Callback)() = data->Callback;
TRACE_EVENT("chinese_input_kbd_cb");
sprintf(debug, "Counters %d:%d:%d:%d:%d:%d", Counter[0], Counter[1], Counter[2], Counter[3],
Counter[4], Counter[5]);
TRACE_EVENT(debug);
switch (keyboard->code)
{
case KCD_LEFT:
switch(data->Ime.EditorMode)
{
case STROKE_INPUT_MODE:
switch (data->Ime.InputScreenType)
{
case TEXT_DISPLAY_SCREEN:
//access to the option list.
SEND_EVENT(win, CHINESE_INPUT_DEINIT/*SPR 1752*/, INFO_KCD_LEFT, NULL);
break;
case STROKE_INPUT_SCREEN:
case WORD_ASSOCIATION_SCREEN:
IMESelectCandidate(&data->Ime, data->wszElementBuffer);
data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
break;
default:
break;
}
winShow(win);
break;
case PINYIN_INPUT_MODE:
switch (data->Ime.InputScreenType)
{
case TEXT_DISPLAY_SCREEN:
SEND_EVENT(win, CHINESE_INPUT_DEINIT/*SPR 1752*/, INFO_KCD_LEFT, NULL);
//access to the option list.
break;
case PINYIN_INPUT_SCREEN:
case WORD_ASSOCIATION_SCREEN:
memset( Counter, 0, sizeof(char)*KCD_STAR);/*MC set counters to 0*/
IMESelectCandidate(&data->Ime, data->wszElementBuffer);
data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
break;
default:
break;
}
winShow(win);
default:
break;
}
break;
case KCD_RIGHT:
switch(data->Ime.EditorMode)
{
case STROKE_INPUT_MODE:
switch (data->Ime.InputScreenType)
{
case TEXT_DISPLAY_SCREEN:
if(data->Ime.TextBufferCount == 0)
{ /* When there is no stored data, return back to the menu*/
//GW-SPR-#1068-Destroy using event - execute callback of the function that created the editor
SEND_EVENT(win, CHINESE_INPUT_DEINIT/*SPR 1752*/, INFO_KCD_RIGHT, NULL);
}
else
{
IMEClear(&data->Ime, data->wszElementBuffer);
}
break;
case STROKE_INPUT_SCREEN:
IMEClear(&data->Ime, data->wszElementBuffer);
data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
break;
case WORD_ASSOCIATION_SCREEN:
data->Ime.InputScreenType = TEXT_DISPLAY_SCREEN;
break;
default:
break;
}
winShow(win);
break;
case PINYIN_INPUT_MODE:
switch (data->Ime.InputScreenType)
{
case TEXT_DISPLAY_SCREEN:
if(data->Ime.TextBufferCount == 0)
{ /* When there is no stored data, return back to the menu*/
//GW-SPR-#1068-Destroy using event - execute callback of the function that created the editor
SEND_EVENT(win, CHINESE_INPUT_DEINIT/*SPR 1752*/, INFO_KCD_RIGHT, NULL);
}
else
{
IMEClear(&data->Ime, data->wszElementBuffer);
data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
}
break;
case PINYIN_INPUT_SCREEN:
memset( Counter, 0, sizeof(char)*KCD_STAR);/*MC set counters to 0*/
IMEClear(&data->Ime, data->wszElementBuffer);
data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
break;
case WORD_ASSOCIATION_SCREEN:
data->Ime.InputScreenType = TEXT_DISPLAY_SCREEN;
break;
default:
break;
}
winShow(win);
break;
default:
break;
}
break;
case KCD_HUP:
//GW-SPR-#1068-Destroy using event - execute callback of the function that created the editor
SEND_EVENT(win, CHINESE_INPUT_DEINIT/*SPR 1752*/, INFO_KCD_HUP, NULL);
break;
case KCD_MNUUP:
switch(data->Ime.EditorMode)
{
case STROKE_INPUT_MODE:
switch (data->Ime.InputScreenType)
{
case TEXT_DISPLAY_SCREEN:
//update the text cursor
if(data->Ime.TextCursor > 0 && data->Ime.TextCursor <= data->Ime.TextBufferCount)
{
data->CursorPosition[0] = data->wszTextBuffer[data->Ime.TextCursor - 1];
data->Ime.TextCursor--;
}
#ifdef LSCREEN /*SPR 1319 move left along editor*/
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
ATB_edit_MoveCursor(data->editor, ctrlLeft, TRUE);
#else /* NEW_EDITOR */
edtChar(data->editor, ecLeft);
#endif /* NEW_EDITOR */
#endif
break;
case STROKE_INPUT_SCREEN:
case WORD_ASSOCIATION_SCREEN:
IMECursorLeft(&data->Ime);
data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
break;
default:
break;
}
winShow(win);
break;
case PINYIN_INPUT_MODE:
switch (data->Ime.InputScreenType)
{
case TEXT_DISPLAY_SCREEN:
//update the text cursor
if(data->Ime.TextCursor > 0 && data->Ime.TextCursor <= data->Ime.TextBufferCount)
{
data->CursorPosition[0] = data->wszTextBuffer[data->Ime.TextCursor - 1];
data->Ime.TextCursor--;
}
#ifdef LSCREEN/*SPR 1319 move left along editor*/
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
ATB_edit_MoveCursor(data->editor, ctrlLeft, TRUE);
#else /* NEW_EDITOR */
edtCharUnicode(data->editor, ecLeft);
#endif /* NEW_EDITOR */
#endif
break;
case PINYIN_INPUT_SCREEN:
case WORD_ASSOCIATION_SCREEN:
memset( Counter, 0, sizeof(char)*KCD_STAR);/*MC set counters to 0*/
IMECursorLeft(&data->Ime);
data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
break;
default:
break;
}
winShow(win);
break;
default:
break;
}
break;
case KCD_MNUDOWN:
switch(data->Ime.EditorMode)
{
case STROKE_INPUT_MODE:
switch (data->Ime.InputScreenType)
{
case TEXT_DISPLAY_SCREEN:
//update the text cursor
if(data->Ime.TextCursor < data->Ime.TextBufferCount)
{
data->Ime.TextCursor++;
data->CursorPosition[0] = data->wszTextBuffer[data->Ime.TextCursor];
}
#ifdef LSCREEN/*SPR 1319 move right along editor*/
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
ATB_edit_MoveCursor(data->editor, ctrlRight, TRUE);
#else /* NEW_EDITOR */
edtCharUnicode(data->editor, ecRight);
#endif /* NEW_EDITOR */
#endif
break;
case STROKE_INPUT_SCREEN:
case WORD_ASSOCIATION_SCREEN:
IMECursorRight(&data->Ime);
data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
break;
default:
break;
}
winShow(win);
break;
case PINYIN_INPUT_MODE:
switch (data->Ime.InputScreenType)
{
case TEXT_DISPLAY_SCREEN:
//update the text cursor
if(data->Ime.TextCursor < data->Ime.TextBufferCount)
{
data->Ime.TextCursor++;
data->CursorPosition[0] = data->wszTextBuffer[data->Ime.TextCursor];
}
#ifdef LSCREEN /*SPR 1319 move right along editor*/
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
ATB_edit_MoveCursor(data->editor, ctrlRight, TRUE);
#else /* NEW_EDITOR */
edtCharUnicode(data->editor, ecRight);
#endif /* NEW_EDITOR */
#endif
break;
case PINYIN_INPUT_SCREEN:
case WORD_ASSOCIATION_SCREEN:
memset( Counter, 0, sizeof(char)*KCD_STAR);/*MC set counters to 0*/
IMECursorRight(&data->Ime);
data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
break;
default:
break;
}
winShow(win);
break;
default:
break;
}
break;
case KCD_CALL:
break;
case KCD_0:
if (data->Ime.TextBufferCount < TEXT_BUFFER_EDIT_SIZE)/*MC*/
{
switch(data->Ime.EditorMode)
{
case STROKE_INPUT_MODE:
data->Ime.InputScreenType = STROKE_INPUT_SCREEN;
IMEMore(&data->Ime);
data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
winShow(win);
break;
case PINYIN_INPUT_MODE:
memset( Counter, 0, sizeof(char)*KCD_STAR);/*MC set counters to 0*/
data->Ime.InputScreenType = PINYIN_INPUT_SCREEN;
IMEMore(&data->Ime);
data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
winShow(win);
break;
default:
break;
}
}
break;
case KCD_8:
if (data->Ime.TextBufferCount < TEXT_BUFFER_EDIT_SIZE)/*MC*/
{
switch(data->Ime.EditorMode)
{
case STROKE_INPUT_MODE:
data->Ime.InputScreenType = STROKE_INPUT_SCREEN;
IMEMore(&data->Ime);
data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
winShow(win);
break;
case PINYIN_INPUT_MODE:
data->Ime.InputScreenType = PINYIN_INPUT_SCREEN;
/* The unclear of eZiText document, it is assumed that multi-key press may required to get to the required letter */
/* To do that a ZiPinYinKeyMap array is defined in ChineseInput.h header file. */
/* When number of keypress from the user is given from the keypad hadler, the key press count can then be */
/* used to work out the relevent code to insert into the element buffer for eZiText search. The variable */
/* data->NumberOfKeyPress is decleared to store the key press count. */
//temp = data->NumberOfKeyPress % ZiPinYinKeyMap[(keyboard->code)-1][5];
//IMEKeyPress(&data->Ime, (ZI8WCHAR) ZiPinYinKeyMap[(keyboard->code)-1][temp - 1]);
/* due to not able to receive key press count, it is assume the first letter assign to the key is selected when key */
/* is pressed. */
/*MC, multitap handling*/
/*if time out or new key pressed*/
sprintf(debug, "Keypad Counter : %d", Counter[keyboard->code]);
TRACE_EVENT(debug);
if ( Counter[keyboard->code] == 0)
{ tim_stop(data->KeyPad_Timer_Handle);/*stop timer*/
memset( Counter, 0, sizeof(char)*KCD_STAR);/*reset all key counters*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -