📄 mmichineseinput.c
字号:
/*
if( data->Ime.PinyinElementBUF[data->Ime.ElementNumber-1].Count == 1 )
{
return;
}
if(data->Ime.Element_Select == data->Ime.PinyinElementBUF[data->Ime.ElementNumber-1].Count-1)
{
data->Ime.Element_Select = 0;
}
else
{
data->Ime.Element_Select++;
}
candidate_num = Zi_GetElementCandidates(&data->Ime);
*/
data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
winShow(win);
}
break;
default:
break;
}
break;
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:
data->Ime.InputScreenType = STROKE_INPUT_SCREEN;
IMEKeyPress(&data->Ime, (ZI8WCHAR) (ZiStrokeKeyMap[value][1] + ZI8_BASE_STROKES));
data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
winShow(win);
break;
case PINYIN_INPUT_MODE:
temp_ZiKeyMap = (PZI8WCHAR )ZiPinYinKeyMap[value-1];
data->Ime.InputScreenType = PINYIN_INPUT_SCREEN;
Zi_onekey_keypress(&data->Ime, temp_ZiKeyMap);
data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
winShow(win);
break;
default:
break;
}
break;
default:
win_show (win);
break;
}
break;
case CHINESE_INPUT_DESTROY:
{/* on DEINIT => selfdestroy; sendevent <value> */
int i;
if ( data->Callback_Data.DestroyEditor == TRUE )
{
ZI8WCHAR Temp, LowByte, HighByte;
for ( i = 0; i < (/*data->Ime.TextBufferCount*/data->Callback_Data.EditorSize ); i++ )
{
Temp = data->wszTextBuffer[i];
LowByte = data->wszTextBuffer[i] & 0x00FF;
HighByte = data->wszTextBuffer[i] & 0xFF00;
Temp = (LowByte << 8) & 0xFF00;
HighByte = (HighByte >> 8) & 0x00FF;
Temp = Temp |HighByte;
data->wszTextBuffer[i] = Temp;
}
}
for ( i=(data->Ime.TextBufferCount ); i < TEXT_BUFFER_EDIT_SIZE; i++ )
data->wszTextBuffer[/*data->Ime.TextBufferCount*/i] = 0x0000;//terminate string
if ( Callback )
{ //TRACE_EVENT("Running Callback");
(Callback) (parent_win, Identifier, value);
sprintf(debug, "Identifier: %d", Identifier);
//TRACE_EVENT(debug);
}
if ( data->Callback_Data.DestroyEditor == TRUE )
{
chinese_input_destroy(win);
}
}
break;
case ADD_SYMBOL:
if ( data->Ime.TextBufferCount < TEXT_BUFFER_EDIT_SIZE )
{
int i=0;
int j=0;
if ( data->Ime.TextCursor < data->Ime.TextBufferCount ) /* locate the text cursor position for correct character insertion */
{
for ( i=data->Ime.TextCursor; i<data->Ime.TextBufferCount; i++ ) /* shift and move characters to make rooms to insert the selected character */
{
//pIME->pTextBuffer[pIME->TextBufferCount - i + 1]=pIME->pTextBuffer[pIME->TextBufferCount - i];
data->Ime.pTextBuffer[data->Ime.TextBufferCount - j]=data->Ime.pTextBuffer[data->Ime.TextBufferCount - j - 1];
j++;
}
}
//data->Ime.pTextBuffer[data->Ime.TextCursor++]= (ZI8WCHAR)(SymbolChar << 8);
data->Ime.TextBufferCount++;
}
win_show(win);
break;
case LATIN_INPUT:
data->Ime.TextBufferCount = Uni_strlen(data->Ime.pTextBuffer);
data->Ime.TextCursor = data->Ime.TextBufferCount;
break;
}
}
/*******************************************************************************
$Function: chinese_input_win_cb
$Description:
$Returns: void
$Arguments: window handle event, win
*******************************************************************************/
static int chinese_input_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
{
T_chinese_input * data = (T_chinese_input *)win->user;
int i = 0;
int j = 0;
PZI8WCHAR Temp_ptr;
UINT32 oldColor; /* 2003/10/13 sunsj */
int current_pixel; /* 2003/10/13 sunsj */
int current_x = 0, current_y = 0; /* 2003/10/13 sunsj */
BOOL conver_page = FALSE; /* 2003/10/13 sunsj */
char spareNum[10];
//TRACE_EVENT ("chinese_input_win_cb()");
if ( data EQ 0 )
return 1;
switch ( event )
{
case E_WIN_VISIBLE:
if ( win->flags & E_WIN_VISIBLE )
{
/* Print the information dialog */
/* Clear Screen */
oldColor=dspl_GetBkgColor();
dspl_SetBkgColor(0xe6ffff);
dspl_Clear(0,0,120,131);
//dspl_ClearAll();
//dspl_BitBlt(0, 0, menuup[0].area.sx, menuup[0].area.sy, 0, (void*)menuup[0].icons, 0);
DRAW_ICON(ICON_MENUUP);
sprintf(spareNum, "%d", (data->Ime.TextBufferEditSize/2 - data->Ime.TextBufferCount));
switch ( data->Ime.InputScreenType )
{
case TEXT_DISPLAY_SCREEN:
{
/* This section of the code was written to display the data stored in the text buffer. The text cursor position */
/* was also taken into consideration to display the correct portion of text during editing (when data stored in */
/* the text buffer is more than two line display. */
ZI8WCHAR TempArray[CANDIDATES_PER_GROUP*2]; //maximum no of chars possible in a line
ZI8WCHAR TempArray2[CANDIDATES_PER_GROUP+1];
int i;
int space_counter;
UBYTE first_line= 0; //no of chars in first line(set to minimum)
UBYTE second_line=0; //no of chars in second line
//dspl_BitBlt(75,0,LINE_HEIGHT,LINE_HEIGHT,0,(char*)TextIconeZiTextSmall,0);
memset(TempArray, 0, CANDIDATES_PER_GROUP*2);
//dspl_TextOut(4,FIRST_LINE,DSPL_TXTATTR_UNICODE,(char*)data->wszTextBuffer);
#if 0
if ( data->Ime.TextBufferCount == 0 ) //If text buffer is empty
{
displaySoftKeys(data->Callback_Data.LeftSoftKey,TxtSoftBack); /* Softkey display*/
}
else if ( data->Ime.TextBufferCount <= (CANDIDATES_PER_GROUP * 2) ) // data in text buffer is within 2 lines
{
for ( i=0; i<CANDIDATES_PER_GROUP; i++ )
TempArray[i]= data->wszTextBuffer[data->StartOfDisplayIndex+ i];
TempArray[CANDIDATES_PER_GROUP] = 0x0000;
dspl_TextOut(1,Mmi_layout_first_line(),DSPL_TXTATTR_UNICODE,(char*)/*Temp_ptr*/TempArray);
if ( data->Ime.TextBufferCount > CANDIDATES_PER_GROUP )
{
//Temp_ptr += CANDIDATES_PER_GROUP;
for ( i=0; i<CANDIDATES_PER_GROUP; i++ )
TempArray2[i]= data->wszTextBuffer[data->StartOfDisplayIndex+ i+CANDIDATES_PER_GROUP];
TempArray2[CANDIDATES_PER_GROUP] = 0x0000;
dspl_TextOut(1,Mmi_layout_second_line(),DSPL_TXTATTR_UNICODE,(char *)TempArray2);
}
j = (data->Ime.TextCursor / CANDIDATES_PER_GROUP) + 1;
TextCursorDisplayContorl(&data->Ime, data->CursorPosition, j);
/* 2003/10/13 sunsj/ mark */
//displaySoftKeys(data->Callback_Data.LeftSoftKey,TxtDelete); /* Softkey display*/
}
else // data in text buffer is more than 14 characters.
{
if ( data->Ime.TextCursor == data->StartOfDisplayIndex )
{
for ( i=0; i<CANDIDATES_PER_GROUP; i++ )
TempArray[i]= data->wszTextBuffer[data->StartOfDisplayIndex+ i];
//Temp_ptr = &data->wszTextBuffer[data->StartOfDisplayIndex];
TempArray[CANDIDATES_PER_GROUP] = 0x0000;
dspl_TextOut(1,Mmi_layout_first_line(),DSPL_TXTATTR_UNICODE,(char *)TempArray);
//Temp_ptr += CANDIDATES_PER_GROUP;
for ( i=0; i<CANDIDATES_PER_GROUP; i++ )
TempArray2[i]= data->wszTextBuffer[data->StartOfDisplayIndex+ i +CANDIDATES_PER_GROUP];
TempArray2[CANDIDATES_PER_GROUP] = 0x0000;
dspl_TextOut(1,Mmi_layout_second_line(),DSPL_TXTATTR_UNICODE,(char *)TempArray2);
TextCursorDisplayContorl(&data->Ime, data->CursorPosition, 1);
}
else if ( data->Ime.TextCursor > data->StartOfDisplayIndex )
{
while ( data->Ime.TextCursor - data->StartOfDisplayIndex >= CANDIDATES_PER_GROUP*2 )
{
data->StartOfDisplayIndex = data->StartOfDisplayIndex + CANDIDATES_PER_GROUP;
}
//Temp_ptr = &data->wszTextBuffer[data->StartOfDisplayIndex];
for ( i=0; i<CANDIDATES_PER_GROUP; i++ )
TempArray[i]= data->wszTextBuffer[data->StartOfDisplayIndex+ i];
TempArray[CANDIDATES_PER_GROUP] = 0x0000;
dspl_TextOut(1,Mmi_layout_first_line(),DSPL_TXTATTR_UNICODE,(char *)TempArray);
//Temp_ptr += CANDIDATES_PER_GROUP;
for ( i=0; i<CANDIDATES_PER_GROUP; i++ )
TempArray2[i]= data->wszTextBuffer[data->StartOfDisplayIndex+ i +CANDIDATES_PER_GROUP];
TempArray2[CANDIDATES_PER_GROUP] = 0x0000;
dspl_TextOut(1,Mmi_layout_second_line(),DSPL_TXTATTR_UNICODE,(char *)TempArray2);
if ( (data->Ime.TextCursor - data->StartOfDisplayIndex) < CANDIDATES_PER_GROUP )
j = 1;
else if ( (data->Ime.TextCursor - data->StartOfDisplayIndex) < CANDIDATES_PER_GROUP * 2 )
j = 2;
TextCursorDisplayContorl(&data->Ime, data->CursorPosition, j);
}
else if ( data->Ime.TextCursor < data->StartOfDisplayIndex && data->StartOfDisplayIndex != 0 )
{
data->StartOfDisplayIndex = data->StartOfDisplayIndex - CANDIDATES_PER_GROUP;
//Temp_ptr = &data->wszTextBuffer[data->StartOfDisplayIndex];
for ( i=0; i<CANDIDATES_PER_GROUP; i++ )
TempArray[i]= data->wszTextBuffer[data->StartOfDisplayIndex+ i ];
TempArray[CANDIDATES_PER_GROUP] = 0x0000;
dspl_TextOut(1,Mmi_layout_first_line(),DSPL_TXTATTR_UNICODE,(char *)TempArray);
//Temp_ptr += CANDIDATES_PER_GROUP;
for ( i=0; i<CANDIDATES_PER_GROUP; i++ )
TempArray2[i]= data->wszTextBuffer[data->StartOfDisplayIndex+ i +CANDIDATES_PER_GROUP];
TempArray2[CANDIDATES_PER_GROUP] = 0x0000;
dspl_TextOut(1,Mmi_layout_second_line(),DSPL_TXTATTR_UNICODE,(char *)TempArray2);
if ( (data->Ime.TextCursor - data->StartOfDisplayIndex) < CANDIDATES_PER_GROUP )
j = 1;
else if ( (data->Ime.TextCursor - data->StartOfDisplayIndex) < CANDIDATES_PER_GROUP * 2 )
j = 2;
TextCursorDisplayContorl(&data->Ime, data->CursorPosition, j);
}
displaySoftKeys(data->Callback_Data.LeftSoftKey,TxtDelete); /* Softkey display*/
}
#endif
}
break;
case STROKE_INPUT_SCREEN:
/* Display the correct portion composed text stored in wszTextBuffer. If the text cursor is not pointing at */
/* the end of the text buffer, the display content is then adjusted to display the correct portion of the */
/* text buffer. */
current_x = 0;
current_y = FIRST_LINE;
conver_page = FALSE;
j=0;
UnicodeConver(data->wszTextBuffer, data->wszTextBuffer);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -