📄 mmichineseinput.c
字号:
IMEKeyPress(&data->Ime, (ZI8WCHAR) ZiPinYinKeyMap[(keyboard->code)-1][0]);
Counter[keyboard->code]++; //increment counter
tim_start(data->KeyPad_Timer_Handle);/*restart timer*/
}
else /*if counter is less than MAX for that key*/
{ ZI8WCHAR last_element;
if ( Counter[keyboard->code] <ZiPinYinKeyMap[(keyboard->code)-1][5])
{ tim_stop(data->KeyPad_Timer_Handle);/*stop timer*/
//if last element is the previous char for this key
last_element = data->Ime.pGetParam->pElements[data->Ime.pGetParam->ElementCount -1];
//should put in check
if (last_element== ZiPinYinKeyMap[(keyboard->code)-1][ Counter[keyboard->code]-1])
{ //MC e.g. if we're trying to enter 'I' and the last char was 'H'
IMEClear(&data->Ime, data->Ime.pGetParam->pElements);/*remove last char from elements*/
data->Ime.InputScreenType = PINYIN_INPUT_SCREEN;/*this prevents display problems*/
}
/*so we can add the next char for this key*/
IMEKeyPress(&data->Ime, (ZI8WCHAR) ZiPinYinKeyMap[(keyboard->code)-1][ Counter[keyboard->code]]);
Counter[keyboard->code]++; //increment counter
tim_start(data->KeyPad_Timer_Handle);/*restart timer*/
}
}
data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
winShow(win);
break;
default:
break;
}
}
break;
case KCD_1:
case KCD_2:
case KCD_3:
case KCD_4:
case KCD_5:
case KCD_6:
case KCD_7:
case KCD_9:
switch(data->Ime.EditorMode)
{
case STROKE_INPUT_MODE:
if (data->Ime.TextBufferCount < TEXT_BUFFER_EDIT_SIZE)/*MC*/
{ data->Ime.InputScreenType = STROKE_INPUT_SCREEN;
IMEKeyPress(&data->Ime, (ZI8WCHAR) ZiStrokeKeyMap[keyboard->code][1] + ZI8_BASE_STROKES);
data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
winShow(win);
}
break;
case PINYIN_INPUT_MODE:
if (data->Ime.TextBufferCount < TEXT_BUFFER_EDIT_SIZE)/*MC*/
{
data->Ime.InputScreenType = PINYIN_INPUT_SCREEN;
/*MC, multitap handling*/
sprintf(debug, "Keypad Counter : %d", Counter[keyboard->code]);
TRACE_EVENT(debug);
/*if time out or new key pressed*/
if ( Counter[keyboard->code] == 0)
{ tim_stop(data->KeyPad_Timer_Handle);/*stop timer*/
memset( Counter, 0, sizeof(char)*KCD_STAR);/*reset all key counters*/
IMEKeyPress(&data->Ime, (ZI8WCHAR) ZiPinYinKeyMap[(keyboard->code)-1][0]);
Counter[keyboard->code]++; //increment counter
tim_start(data->KeyPad_Timer_Handle);/*restart timer*/
}
else /*if counter is less than MAX for that key*/
{ ZI8WCHAR last_element;
if ( Counter[keyboard->code] <ZiPinYinKeyMap[(keyboard->code)-1][5])
{ tim_stop(data->KeyPad_Timer_Handle);/*stop timer*/
last_element = data->Ime.pGetParam->pElements[data->Ime.pGetParam->ElementCount -1];
//should put in check
//e.g. if last char was 'a' and we're entering 'b'
if (last_element== ZiPinYinKeyMap[(keyboard->code)-1][ Counter[keyboard->code]-1])
{ IMEClear(&data->Ime, data->Ime.pGetParam->pElements);/*remove last char from elements*/
data->Ime.InputScreenType = PINYIN_INPUT_SCREEN;/*this prevents display problems*/
}
/*so we can add the next char for this key*/
IMEKeyPress(&data->Ime, (ZI8WCHAR) ZiPinYinKeyMap[(keyboard->code)-1][ Counter[keyboard->code]]);
Counter[keyboard->code]++; //increment counter
tim_start(data->KeyPad_Timer_Handle);/*restart timer*/
}
}
//IMEKeyPress(&data->Ime, (ZI8WCHAR) ZiPinYinKeyMap[(keyboard->code)-1][/*0*/2]);
data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
winShow(win);
}
break;
default:
break;
}
break;
case KCD_STAR:
if (data->Ime.TextBufferCount < TEXT_BUFFER_EDIT_SIZE)/*MC*/
{
switch(data->Ime.EditorMode)
{
case STROKE_INPUT_MODE:
/* SPR#1428 - SH - New Editor uses new symbol selector */
#ifdef NEW_EDITOR
AUI_symbol_Start(win, ADD_SYMBOL);
#else /* NEW_EDITOR */
SymbolScreenstart(win, NULL);
#endif /* NEW_EDITOR */
break;
case PINYIN_INPUT_MODE:
memset( Counter, 0, sizeof(char)*KCD_STAR);/*MC set counters to 0*/
/* SPR#1428 - SH - New Editor uses new symbol selector */
#ifdef NEW_EDITOR
AUI_symbol_Start(win, ADD_SYMBOL);
#else /* NEW_EDITOR */
SymbolScreenstart(win, NULL);
#endif /* NEW_EDITOR */
break;
default:
break;
}
}
break;
case KCD_HASH:
if (data->Ime.TextBufferCount < TEXT_BUFFER_EDIT_SIZE)/*MC*/
{
switch(data->Ime.EditorMode)
{
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
T_AUI_EDITOR_DATA editor_data;
#else /* NEW_EDITOR */
T_EDITOR_DATA editor_data;
#endif /* NEW_EDITOR */
case STROKE_INPUT_MODE:
data->Ime.EditorMode = PINYIN_INPUT_MODE;
break;
case PINYIN_INPUT_MODE:
memset( Counter, 0, sizeof(char)*KCD_STAR);/*MC set counters to 0*/
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
AUI_edit_SetDefault(&editor_data);
#else /* NEW_EDITOR */
editor_attr_init(&editor_data.editor_attr, NULL, edtCurBar1, 0, 0, 0, 0);
editor_data.hide = FALSE;
editor_data.TextId = '\0';
editor_data.TextString = NULL;
editor_data.timeout = FOREVER; // Avoid to return empty strings
#endif /* NEW_EDITOR */
//set mode to stroke input when Latin editor exited
data->Ime.EditorMode = STROKE_INPUT_MODE;
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
AUI_edit_SetDisplay(&editor_data, ZONE_FULL_SK_TITLE, COLOUR_EDITOR, EDITOR_FONT);
AUI_edit_SetBuffer(&editor_data, ATB_DCS_UNICODE, (UBYTE *)data->Callback_Data.TextString, data->Callback_Data.EditorSize*2 + 3);
AUI_edit_SetMode(&editor_data, ED_MODE_ALPHA, ED_CURSOR_BAR);
AUI_edit_SetTextStr(&editor_data, TxtChinese, TxtDelete, TxtNull, NULL);
AUI_edit_SetEvents(&editor_data, LATIN_INPUT, TRUE, FOREVER, (T_AUI_EDIT_CB)chinese_input_exec);
AUI_edit_Start(data->input_win, &editor_data);
#else /* NEW_EDITOR */
editor_data.editor_attr.text = (char *)data->Callback_Data.TextString;
editor_data.editor_attr.size = data->Callback_Data.EditorSize*2 + 3;
editor_data.min_enter = 0;
editor_data.mode = ALPHA_MODE;
editor_data.LeftSoftKey = TxtChinese;
editor_data.AlternateLeftSoftKey = TxtSoftBack;
editor_data.RightSoftKey = TxtDelete;
editor_data.Identifier = LATIN_INPUT;
editor_data.Callback = (T_EDIT_CB)chinese_input_exec/*NULL*/;
editor_data.destroyEditor = TRUE;
editor_start(data->input_win, &editor_data);
#endif /* NEW_EDITOR */
break;
default:
break;
}
memset(&data->DisplayElementBuffer, 0,sizeof(data->DisplayElementBuffer));
IMEChangeMode(&data->Ime,&data->GetParam);
winShow(win);
}
break;
default:
break;
}
return MFW_EVENT_CONSUMED;
}
/*******************************************************************************
$Function:
$Description:
$Returns:
$Arguments: menu and menu item (neither used)
*******************************************************************************/
int chinese_input_menu(MfwMnu* m, MfwMnuItem* i)
{
T_MFW_HND parent = mfwParent( mfw_header() );
chinese_input( parent, NULL );
return MFW_EVENT_CONSUMED;
}
/*******************************************************************************
$Function: IMEChangeMode
$Description: This function change some of the setting when user selected to use
different input method. E.g change from Stroke to Pin-yin input.
$Returns: void
$Arguments:
*******************************************************************************/
void IMEChangeMode(PIME_DATA pIME, PZI8GETPARAM pGetParam)
{
/* First initialize the members that will be constant */
switch(pIME->EditorMode)
{
case STROKE_INPUT_MODE:
pGetParam->Language = ZI8_LANG_ZH;
pGetParam->GetMode = ZI8_GETMODE_STROKES;
pGetParam->SubLanguage = ZI8_SUBLANG_ZH;
/*MC, check size of editor to work out context*/
if (TEXT_BUFFER_EDIT_SIZE <= MAX_PHONEBOOK_ENTRY_SIZE)
pGetParam->Context = ZI8_GETCONTEXT_SURNAME;
else
pGetParam->Context = ZI8_GETCONTEXT_SMS;
pGetParam->GetOptions = ZI8_GETOPTION_ALLCOMPONENTS;
break;
case PINYIN_INPUT_MODE:
pGetParam->Language = ZI8_LANG_ZH;
pGetParam->GetMode = ZI8_GETMODE_PINYIN;
pGetParam->SubLanguage = ZI8_SUBLANG_ZH/*ZI8_SUBLANG_ZH_ALL*/;
/*MC, check size of editor to work out context*/
if (TEXT_BUFFER_EDIT_SIZE <= MAX_PHONEBOOK_ENTRY_SIZE)
pGetParam->Context = ZI8_GETCONTEXT_SURNAME;
else
pGetParam->Context = ZI8_GETCONTEXT_SMS;
pGetParam->GetOptions = ZI8_GETOPTION_NOCOMPONENTS/*ZI8_GETOPTION_SAMESOUND*/;
break;
case LATIN_INPUT_MODE:
pIME->InputScreenType = TEXT_DISPLAY_SCREEN;
break;
default:
break;
}
pIME->InputScreenType = TEXT_DISPLAY_SCREEN;
memset(pGetParam->pElements, 0, sizeof(pGetParam->pElements));
memset(pIME->pDisplayElementBuffer, 0,sizeof(pIME->pDisplayElementBuffer));
/* save the pointer to the ZI8GETPARAM structure in the IME data */
pIME->pGetParam = pGetParam;
/* now initialize the text buffer and element buffer */
pIME->moreCount = 0;
pGetParam->ElementCount = 0;
/* initilalize the WordCharacterCount to zero */
pGetParam->WordCharacterCount = 0;
/* initialize the saved number of candidates to zero */
pIME->candidates = 0;
/* initialize the candidate cursor to zero */
pIME->CandidateCursor = 0;
}
/*******************************************************************************
$Function: IMEInitialize
$Description: This function initializes the ZI8GETPARAM structure defined in the API
and the various members of the IME_DATA structure defined in to keep
track of the IME.
$Returns: void
$Arguments:
*******************************************************************************/
/*void IMEInitialize(PIME_DATA pIME, PZI8GETPARAM pGetParam, PZI8WCHAR wszTextBuffer, int TextBufferEditSize,
int TextBufferSize, PZI8WCHAR pCandidates)*/
void IMEInitialize(PIME_DATA pIME, PZI8GETPARAM pGetParam, PZI8WCHAR wszTextBuffer,
int TextBufferEditSize, int TextBufferSize, PZI8WCHAR pCandidates,
PZI8WCHAR wszElementBuffer, PZI8WCHAR DisplayElementBuffer)
{
pIME->EditorMode = STROKE_INPUT_MODE;
/* First initialize the members that will be constant */
switch(pIME->EditorMode)
{
case STROKE_INPUT_MODE:
pGetParam->Language = ZI8_LANG_ZH;
pGetParam->GetMode = ZI8_GETMODE_STROKES;
pGetParam->SubLanguage = ZI8_SUBLANG_ZH;
/*MC, check size of editor to work out context*/
if (TEXT_BUFFER_EDIT_SIZE <= MAX_PHONEBOOK_ENTRY_SIZE)
pGetParam->Context = ZI8_GETCONTEXT_SURNAME;
else
pGetParam->Context = ZI8_GETCONTEXT_SMS;
pGetParam->GetOptions = ZI8_GETOPTION_ALLCOMPONENTS;
break;
case PINYIN_INPUT_MODE:
pGetParam->Language = ZI8_LANG_ZH;
pGetParam->GetMode = ZI8_GETMODE_PINYIN;
pGetParam->SubLanguage = ZI8_SUBLANG_ZH;
if (TEXT_BUFFER_EDIT_SIZE <= MAX_PHONEBOOK_ENTRY_SIZE)
pGetParam->Context = ZI8_GETCONTEXT_SURNAME;
else
pGetParam->Context = ZI8_GETCONTEXT_SMS;
pGetParam->GetOptions = ZI8_GETOPTION_NOCOMPONENTS/*ZI8_GETOPTION_SAMESOUND*/;
break;
case LATIN_INPUT_MODE:
break;
default:
break;
}
/* save the pointer to the ZI8GETPARAM structure in the IME data */
pIME->pGetParam = pGetParam;
/* now initialize the text buffer and element buffer */
pIME->pTextBuffer = wszTextBuffer;
pIME->TextBufferEditSize = TextBufferEditSize;
pIME->TextBufferSize = TextBufferSize;
pIME->moreCount = 0;
pIME->TextBufferCount = Uni_strlen(wszTextBuffer);;
pIME->TextCursor = pIME->TextBufferCount;
pIME->pDisplayElementBuffer = DisplayElementBuffer;
pIME->InputScreenType
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -