📄 mmieditor.c
字号:
break; /* editor mode */
case DIGITS_MODE:
if ( data->editor_data.hide ) /* if hide is set, show '*' instead of numbers. */
editor_hideInit(data); /* initialize editor for hide */
data->edt_mode = E_NORMAL_MODE; /* if editor is not called in T9 mode, set the normal */
win_show(data->edt_win);
edtChar(data->edt_edt,ecBottom); /* in read-only mode set cursor to begin */
break; /* editor mode */
case CALC_MODE:
data->editor_data.hide = FALSE; /* don't allow hide for other modes than DIGITS_MODE. */
data->edt_mode = E_NORMAL_MODE; /* if editor is not called in T9 mode, set the normal */
win_show(data->edt_win);
edtChar(data->edt_edt,ecBottom);
break;
case PIN_SECURITY:
if ( data->editor_data.hide ) /* if hide is set, show '*' instead of numbers. */
editor_hideInit(data); /* initialize editor for hide */
data->edt_mode = E_PIN_SECURITY; /* spec. handling for PIN entering */
data->emergency_call = FALSE;
data->ss_string = FALSE;
win_show(data->edt_win);
edtChar(data->edt_edt,ecBottom);
break;
case FORMAT_MODE:
if ( data->editor_data.hide ) /* if hide is set, show '*' instead of numbers. */
{
editor_hideInit(data); /* initialize editor for hide */
editHiddenActivate(data->tmpBuf); /* initialise multi-tap for hide */
}
data->editor_data.editor_attr.mode |= edtModOverWr; // Must be overwrite mode
data->edt_mode = E_NORMAL_MODE;
win_show(data->edt_win);
edtChar(data->edt_edt,ecTop); // Cursor is at start of string
data->editor_data.formatIndex = -1; // Current format character. -1; increased to 0 in editCharFindNext below.
data->editor_data.fieldIndex = 0;
// Skip over any fixed characters that may be at start
setFormatPointers (data->editor_data.FormatString, &(data->editor_data.formatIndex), &(data->editor_data.fieldIndex));
TRACE_EVENT("Starting format mode");
editCharFindNext(NULL);
break;
}
// end KGT
// c015 rsa
/* create the timer handler */
if ( data->editor_data.timeout && (data->editor_data.timeout NEQ FOREVER))
{
data->edt_tim = tim_create (data->edt_win, data->editor_data.timeout, (T_MFW_CB)editor_tim_cb);
tim_start (data->edt_tim);
}
else
{
data->edt_tim = NULL;
}
//GW-SPR#1035-Added SAT changes from 33x build.
/*NM, 090702
why ? : for SAT application
this checks does the label fit on the first screen line ( <14chars) ;
if not so open a second editor and show up the whole
label (in Read_only_mode).
Pressing any key returns back to the main editor
*/
if ( strlen(data->LabelText) >= MAX_LINE )
{
/* need this flag later in the callback of key_handler */
over_length_label = TRUE;
editor_attr_init(&editor_label.editor_attr, NULL, edtCurBar1, 0, (char *)data->LabelText, strlen(data->LabelText), COLOUR_EDITOR);
editor_data_init(&editor_label, NULL, TxtNull, TxtNull, 0, 1, READ_ONLY_MODE, FOREVER);
editor_start(win,&editor_label); /* start the editor */
}
/*NM, 090702 END */
break;
case E_EDITOR_DEINIT:
/* on DEINIT => selfdestroy; sendevent <value> */
if (Callback)
(Callback) (parent_win, Identifier, value);
over_length_label = FALSE; //GW-SPR#1035
// MZ Destroy the text edit window after creating the number editor.
if(data->destroyEditor == TRUE)
editor_destroy (data->edt_win);
break;
#ifdef EASY_TEXT_ENABLED
case E_EDITOR_UPDATE:
if (SymbolChar != '\0')
{
edtShow(data->edt_edt);
edtChar(data->edt_edt, SymbolChar);
if ((SymbolChar == '.') ||(SymbolChar == '!') || (SymbolChar == '?'))
{
edtChar(data->edt_edt, ' ');
}
win_show(data->edt_win);
}
break;
#endif
/*SPR 1392, move cursor to end of editor string*/
case E_EDITOR_CURSOR_END:
edtChar(data->edt_edt, ecBottom);
break;
default:
break;
}
}
/*******************************************************************************
$Function: editor_win_cb
$Description: Editor window event handler.
$Returns: None.
$Arguments: None.
*******************************************************************************/
static int editor_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
{
T_EDITOR_INFO * data = (T_EDITOR_INFO *)win->user;
int xPos,yPos;
{
char dbg[80];
sprintf(dbg,"editor_win_cb()-event=%d",event);
TRACE_FUNCTION (dbg);
}
if (data->edt_edt!=activeEditor())
editActivate(data->edt_edt,data->editor_data.mode);
// SH - hidden mode
if (data->editor_data.hide)
editHiddenActivate(data->tmpBuf);
// end hidden mode
if (data EQ 0)
{
TRACE_FUNCTION ("editor_win_cb()-no data");
return MFW_EVENT_CONSUMED;
}
switch (event)
{
case E_WIN_VISIBLE: /* window is visible */
if (win->flags & E_WIN_VISIBLE)
{
/*
* Clear Screen
*/
dspl_ClearAll();
/*
* Print the information
*/
#ifdef EASY_TEXT_ENABLED
if(AllowPredText == TRUE && FFS_flashData.PredTextSelected == TRUE)
{
dspl_BitBlt(SCREEN_SIZE_X-9,0,8,8,0,(char*)TextIconeZiTextSmall,0);
}
#endif
edtShow(data->edt_edt);
/*
* Print the label
*/
//GW Removed T9 reference
//GW Actually remove T9 ref, not code executed when T9 not enabled.
if (data->editor_data.editor_attr.win.px > 0)
xPos = data->editor_data.editor_attr.win.px;
else
xPos = editor_menuArea.px;
if (data->editor_data.editor_attr.win.py > Mmi_layout_TitleHeight())
yPos = data->editor_data.editor_attr.win.py-Mmi_layout_TitleHeight();
else
yPos = editor_menuArea.py;
if (data->editor_data.TextId NEQ 0)
{
dspl_TextOut(xPos,yPos,DSPL_TXTATTR_CURRENT_MODE, (char*)MmiRsrcGetText(data->editor_data.TextId));
}
else if (data->editor_data.TextString NEQ NULL)
{
dspl_TextOut(xPos,yPos,0,data->LabelText);
}
/*
* Print the softkeys
*/
if (data->edt_mode != E_PIN_SECURITY)
{
#ifdef EASY_TEXT_ENABLED
if (data->editor_data.editor_attr.predText[0] != '\0' && FFS_flashData.PredTextSelected == TRUE)
softKeys_displayId(TxtSoftOK, TxtDelete,0,COLOUR_EDITOR_XX);
else
#endif
{
if (strlen(data->editor_data.editor_attr.text) < data->editor_data.min_enter)
{
/* entered less than the required number of chars: Alternate Softkey appears */
softKeys_displayId(data->editor_data.AlternateLeftSoftKey, data->editor_data.RightSoftKey,0,COLOUR_EDITOR_XX);
}
else
{
/* entered sufficient number of chars: Normal Softkey appears */
softKeys_displayId(data->editor_data.LeftSoftKey, data->editor_data.RightSoftKey,0,COLOUR_EDITOR_XX);
}
}
}
else
{
if (data->emergency_call EQ TRUE)
{
softKeys_displayId(TxtSoftCall, data->editor_data.RightSoftKey,0,COLOUR_EDITOR_XX);
TRACE_EVENT ("softkeys , call, delete");
}
else
{
//no emergency_call
if (strlen(data->editor_data.editor_attr.text) < data->editor_data.min_enter)
{
if (strlen(data->editor_data.editor_attr.text) EQ 0)
softKeys_displayId(data->editor_data.AlternateLeftSoftKey, TxtNull,0,COLOUR_EDITOR_XX);
else
softKeys_displayId(data->editor_data.AlternateLeftSoftKey, data->editor_data.RightSoftKey,0,COLOUR_EDITOR_XX);
TRACE_EVENT ("softkeys , altern, delete");
}
else
{
if (strlen(data->editor_data.editor_attr.text) EQ 0)
softKeys_displayId(data->editor_data.AlternateLeftSoftKey, TxtNull,0,COLOUR_EDITOR_XX);
else
softKeys_displayId(data->editor_data.LeftSoftKey, data->editor_data.RightSoftKey,0,COLOUR_EDITOR_XX);
TRACE_EVENT ("softkeys , ok, delete");
}
}
}
}
break;
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;
char* PredText = data->editor_data.editor_attr.predText;
unsigned int editMode;
char debug[25];
char temp[80];
TRACE_FUNCTION("editor_kbd_cb");
/* 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
editMode = data->edt_mode;
sprintf(temp, "Editor mode: %d", editMode);
TRACE_EVENT(temp);
#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_NORMAL_MODE:
if (event & KEY_LONG)
{
TRACE_EVENT("event and long key");
switch (keyboard->code)
{
case KCD_CALL:
SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_CALL, NULL);
break;
case KCD_LEFT:
break;
case KCD_MNURIGHT:
case KCD_MNUUP:
if (data->editor_data.mode NEQ READ_ONLY_MODE &&
!data->editor_data.hide )
break;
case KCD_RIGHT:
TRACE_EVENT("KCD_RIGHT");
// SH - special clear all for format mode
if (data->editor_data.mode EQ FORMAT_MODE)
{
editClear();
}
// SH - End of format mode modification
else if(data->editor_data.editor_attr.text[0] NEQ '\0')
{
/* clear the whole buffer */
if ( data->editor_data.hide )
editor_hideClearAll(data);
else
{
data->editor_data.editor_attr.text[0] = '\0';
edtChar(data->edt_edt, ecTop);
if (data->editor_data.min_enter > 0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -