📄 mmieditor.c
字号:
default:
return MFW_EVENT_PASSED;
}
return MFW_EVENT_CONSUMED;
}
/*******************************************************************************
$Function: editor_kbd_cb
$Description: Editor keyboard event handler
$Returns: None.
$Arguments: None.
*******************************************************************************/
static int editor_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_EDITOR_INFO * data = (T_EDITOR_INFO *)win_data->user;
//T_CHINESE_DATA chinese_data; /* 2003/12/04 sunsj */
T_MFW_HND parent_win = data->parent; //zgz add,2002.9.3
USHORT Identifier = data->editor_data.Identifier; //zgz add,2002.9.3
T_EDIT_CB Callback = data->editor_data.Callback; //zgz add,2002.9.3
MfwHdr *edit_hdr=(MfwHdr *)data->edt_edt;
MfwEdt *edit_controll=(MfwEdt *)edit_hdr->data;
MfwEdtAttr* edtattr=&data->editor_data.editor_attr;
char* PredText = data->editor_data.editor_attr.predText;
unsigned int editMode;
char debug[25];
unsigned int cur_ecinput_mode; //zgz,2002.7.9
UINT32 oldFontColor;
UBYTE old_mode;
TRACE_EVENT("editor_kbd_cb");
//old_mode=dspl_Enable(0);
/* subpress unwanted longpresses (mfw throws more than one long press event for one long press on a key)*/
if( !( event & KEY_LONG ) )
DoNextLongPress = TRUE; /* next Key_long event is correct */
else if( DoNextLongPress )
DoNextLongPress = FALSE; /* mark Key_long event as consumed but do current long press */
else if( !DoNextLongPress )
return MFW_EVENT_CONSUMED; /* don't do current long press */
// c015 rsa
if( data->edt_tim NEQ NULL )
{
/* restart the timer for no response */
tim_stop (data->edt_tim);
tim_start (data->edt_tim);
}
// end c015 rsa
/* RM T9 integration 24-08
*
*/
editMode = data->edt_mode;
#ifdef EASY_TEXT_ENABLED
if( FFS_flashData.PredTextSelected == FALSE || data->editor_data.mode != ALPHA_MODE )
#else
if( 1 )
#endif
{
//TRACE_EVENT("Not in predictive mode");
//sprintf(debug, "Key: %d", keyboard->code);
//TRACE_EVENT(debug);
switch( editMode )
{
case E_MOBILEINNOVATION_MODE:
cur_ecinput_mode = get_ecinput_mode();
if( event & KEY_LONG )
{
switch( keyboard->code )
{
case KCD_CALL:
//SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_CALL, NULL);
break;
case KCD_LEFT:
break;
case KCD_MNUUP:
if( cur_ecinput_mode NEQ ONLYREAD_MODE &&
!data->editor_data.hide )
//GW Removed T9 code.
break;
case KCD_RIGHT:
#ifndef _M188_ /* 2004/06/29 sunsj modify for m288b */
case KCD_CLEAR:
#endif
if( data->editor_data.editor_attr.text[0] NEQ '\0' )
{
if( data->editor_data.hide )
editor_hideClearAll(data);
else
{
/* clear the whole buffer */
//data->editor_data.editor_attr.text[0] = '\0';
memset(data->editor_data.editor_attr.text, 0, sizeof(data->editor_data.editor_attr.text));
//edtHide(data->edt_edt); // zgz added, 2002.04.29
// edtSymbol(data->edt_edt,ecTop); //zgz, 2002.7.2 edtChar(data->edt_edt,ecTop);
//edtClear(data->edt_edt);
// edtUnhide(data->edt_edt); // zgz added, 2002.04.29
win_show(data->edt_win); /* in order to update the Softkeys */
}
}
else
{
/* leave editor if buffer already empty */
TRACE_EVENT("yq:event for long right");
SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_RIGHT, NULL);
}
break;
case KCD_0: /* '+' key */
/* 2003/12/04 sunsj modify for new editor */
if( (cur_ecinput_mode NEQ ONLYREAD_MODE) /*&& (cur_ecinput_mode NEQ PARADISE_MODE)*/ ) /* ignore normal keys if in read-only mode */
{
if( data->editor_data.hide )
editor_hideClear(data); /* remove the '0' */
else
{
edtSymbol(data->edt_edt,ecBack); //zgz,2002.7.2 edtChar(data->edt_edt,ecBack); /* remove the '0' */
edtSymbol(data->edt_edt,'+'); //zgz,2002.7.2 edtChar(data->edt_edt,'+'); /* insert the '+' */
displayedtsoftkey(win);// win_show(data->edt_win); /* in order to update the Softkeys */
}
}
break;
case KCD_HASH:
if( (cur_ecinput_mode EQ PHONENUMONLY_MODE) || (cur_ecinput_mode EQ SHUZI_MODE) )
{
edtSymbol(data->edt_edt,ecBack); //zgz,2002.7.2 edtChar(data->edt_edt,ecBack); /* remove the '0' */
edtSymbol(data->edt_edt,'p'); //zgz,2002.7.2 edtChar(data->edt_edt,'+'); /* insert the '+' */
displayedtsoftkey(win);// win_show(data->edt_win); /* in order to update the Softkeys */
}
break;
default:
return MFW_EVENT_CONSUMED; /* we don't handle other long presses here */
}
}
else
{
switch( keyboard->code )
{
case KCD_CALL:
//SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_CALL, NULL);
break;
//zgz, 2002.5.15 add the up or down one line key process
case KCD_VOLUP:
case KCD_MNUUP:
TRACE_EVENT("haha,yanqing pressed the up");
if( data->editor_data.edtInPbk )
{
SEND_EVENT (win, E_EDITOR_DEINIT, INFO_TOPREV_EDT, NULL);
}
else if( !data->editor_data.hide )
edtSymbol(data->edt_edt,ecUp);
break;
case KCD_VOLDOWN:
case KCD_MNUDOWN:
TRACE_EVENT("yanqing,you pressed the down");
if( data->editor_data.edtInPbk )
{
SEND_EVENT (win, E_EDITOR_DEINIT, INFO_TONEXT_EDT, NULL);
}
else if( !data->editor_data.hide )
edtSymbol(data->edt_edt,ecDown);
break;
case KCD_MNULEFT:
if( cur_ecinput_mode EQ ONLYREAD_MODE )
edtSymbol(data->edt_edt,ecUp);
else if( cur_ecinput_mode EQ IPADDRESS_MODE )
{
if( findprechar()=='.' )
{
edtSymbol(data->edt_edt,ecLeft);
edtSymbol(data->edt_edt,ecLeft);
}
else edtSymbol(data->edt_edt,ecLeft);
}
else if( !data->editor_data.hide )
edtSymbol(data->edt_edt,ecLeft);
break;
case KCD_MNURIGHT:
if( cur_ecinput_mode EQ ONLYREAD_MODE )
edtSymbol(data->edt_edt,ecDown);
else if( cur_ecinput_mode EQ IPADDRESS_MODE )
{
if( findnextchar()=='.' )
{
edtSymbol(data->edt_edt,ecRight);
edtSymbol(data->edt_edt,ecRight);
}
else edtSymbol(data->edt_edt,ecRight);
}
else if( !data->editor_data.hide )
edtSymbol(data->edt_edt,ecRight);
break;
case KCD_OK:
#ifdef QQFUNC//hxl add for qq func switch,2003-3-24
if( In_QQ )
{//hxl add for qq,2003-3-2
SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_OK, NULL);
break;
}
#endif
case KCD_LEFT:
/* 2004/04/13 sunsj add for password editor */
if( data->editor_data.hide == 1 )
{
memcpy(data->editor_data.editor_attr.text, data->tmpBuf, data->editor_data.editor_attr.size);
}
if( wstrlen(data->editor_data.editor_attr.text) < data->editor_data.min_enter )
{
/* entered less than the required number of chars */
if( data->editor_data.AlternateLeftSoftKey NEQ TxtNull )
{
/* an alternate softkey were defined: execute it*/
SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_ALTERNATELEFT, NULL);
}
else
{ //zgz add,2002.9.3 this else sentence only for phbk editing
if( data->editor_data.edtInPbk )
SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_LEFT, NULL);
}
}
else if( data->editor_data.LeftSoftKey NEQ TxtNull )
{
/* 2003/11/10 sunsj */
edit_controll->cp_curr_x=15;
/* left Softkey is enabled (and entered sufficient number of chars): execute it */
SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_LEFT, NULL);
}
else
{
/* NOP */
/* entered less than the required number of chars */
if( data->editor_data.AlternateLeftSoftKey NEQ TxtNull )
{
/* an alternate softkey were defined: execute it*/
SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_ALTERNATELEFT, NULL);
}
else
{ //zgz add,2002.9.3 this else sentence only for phbk editing
if( data->editor_data.edtInPbk )
SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_LEFT, NULL);
}
}
break;
case KCD_HUP:
if( data->editor_data.RightSoftKey NEQ TxtNull )
{
/* Right softkey is enabled: execute it */
SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_HUP, NULL);
}
break;
case KCD_RIGHT:
#ifndef _M188_ /* 2004/06/29 sunsj modify for m288b */
case KCD_CLEAR:
#endif
if( !((data->editor_data.LeftSoftKey == TxtNull)&&(data->editor_data.RightSoftKey == TxtNull)&&
((data->editor_data.Identifier == SAT_SEND_SMS)||
(data->editor_data.Identifier == SAT_SEND_SS)||
(data->editor_data.Identifier == SAT_CALL_RESULT))) ) //zhaowm 2003.1.4
{
char unicode_head = 0x80;
if( cur_ecinput_mode NEQ ONLYREAD_MODE ) /* ignore clear key if in read-only mode */
{
/* 2003/11/1 sunsj modify */
if( (data->editor_data.editor_attr.text[0] == unicode_head && ((data->editor_data.editor_attr.text[1] NEQ '\0') || (data->editor_data.editor_attr.text[2] NEQ '\0')))
|| data->editor_data.editor_attr.text[0] NEQ '\0' )
//if (data->editor_data.editor_attr.text[0] NEQ '\0' && ((data->editor_data.editor_attr.text[1] NEQ '\0') || (data->editor_data.editor_attr.text[2] NEQ '\0')))
{
/* buffer is not empty, delete the char before the cursor */
if( cur_ecinput_mode EQ IPADDRESS_MODE )
{
if( findprechar()=='.'&&findnextchar()==0 )
{
edtSymbol(data->edt_edt, ecBack);
edtSymbol(data->edt_edt, ecBack);
}
else if( findnextchar()==0 )
edtSymbol(data->edt_edt, ecBack);
break;
}
else edtSymbol(data->edt_edt, ecBack);
displayedtsoftkey(win);
}
else
{
/* leave editor if buffer already empty */
SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_RIGHT, NULL);
}
}
else
SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_RIGHT, NULL);
}
break;
case KCD_HASH:
if( (((MfwEdt *)((MfwHdr *)data->edt_edt)->data)->attr->titleMode == 1) ||(((MfwEdt *)((MfwHdr *)data->edt_edt)->data)->attr->titleMode == TITLE_TOP) )
{
if( (cur_ecinput_mode NEQ ONLYREAD_MODE) && (cur_ecinput_mode NEQ PHONENUMONLY_MODE) )
{
/* 2003/12/04 sunsj remove */
#if 0
switch_ecinput_mode(); // switch the input method
if( (get_ecinput_mode() == PARADISE_MODE)&&data->editor_data.hide )
switch_ecinput_mode();
if( get_ecinput_mode() == PARADISE_MODE )
{
if( getSymbolNumSpare(((MfwHdr *) data->edt_edt)->data) == -1 )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -