📄 auieditor.c
字号:
}
break;
default:
ATB_edit_SetCase(data->editor, ED_CASE_CAPS);
break;
}
win_show(data->win);
break;
case KCD_STAR:
if (PredText->len==0)
{
AUI_symbol_Start (data->win, E_ED_INSERT);
}
else
{
int i;
MoreCandidates((char *)PredText->data, &i);
AUI_edit_CalcPredText(data);
win_show(data->win);
}
break;
case KCD_0:
case KCD_1:
if (PredText->len!=0)
{
if ((data->editor_data.editor_attr.text.len + PredText->len) < MAX_MSG_LEN)
{
/* If char b4 cursor full stop/question/exclamation (or last char space and char b4 full stop) */
if (ATB_edit_CapitaliseWord(data->editor) || (PredText->len==1 && ATB_string_GetChar(PredText,0)==ATB_char_Unicode('i')))
ATB_string_SetChar(PredText, 0, ATB_edit_FindCapital(ATB_string_GetChar(PredText, 0)));/*SPR1508*/
/* Capitalise first letter of char. If char before cursor not space, insert space */
character = ATB_edit_GetCursorChar(data->editor, -1);
if (ATB_string_GetChar(PredText, 0) != UNICODE_STAR)
{
if (keyboard->code == KCD_1)
{
/* Insert space at end of string */
ATB_string_SetChar(PredText, PredText->len, UNICODE_SPACE);
PredText->len++;
ATB_string_SetChar(PredText, PredText->len, UNICODE_EOLN);
if ( character!=UNICODE_SPACE && character!=UNICODE_EOLN)
{
/* Insert space at start of string */
ATB_string_MoveRight(PredText, 0, 1, ED_PREDTEXT_MAX);
ATB_string_SetChar(PredText, 0, UNICODE_SPACE);
}
}
else
{
/* Insert space and full stop at end of string */
ATB_string_SetChar(PredText, PredText->len, UNICODE_FULLSTOP);
PredText->len++;
ATB_string_SetChar(PredText, PredText->len, UNICODE_SPACE);
PredText->len++;
ATB_string_SetChar(PredText, PredText->len, UNICODE_EOLN);
if ( character!=UNICODE_SPACE && character!=UNICODE_EOLN)
{
/* Insert space at start of string */
ATB_string_MoveRight(PredText, 0, 1, ED_PREDTEXT_MAX);
ATB_string_SetChar(PredText, 0, UNICODE_SPACE);
}
}
ATB_edit_InsertString(data->editor, PredText);
}
}
AUI_edit_ClearPredText(data);
ResetDictSearch();
ATB_edit_SetCase(data->editor, ED_CASE_LOWER);
win_show(data->win);
}
break;
/* Any key */
default:
if (!ATB_edit_Mode(data->editor, ED_MODE_READONLY)) /* ignore normal keys if in read-only mode */
{
AUI_entry_EventKey(data->entry_data, event, keyboard);
ATB_edit_Char(data->editor,ctrlBack,TRUE);
win_show(data->win);
}
break;
}
}
}
#endif
return MFW_EVENT_CONSUMED;
}
/*******************************************************************************
$Function: AUI_edit_KbdLongCb
$Description: Editor keyboard event handler for long keypresses
$Returns: None.
$Arguments: event - the keyboard event
keyboard
*******************************************************************************/
static int AUI_edit_KbdLongCb(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_AUI_EDITOR_INFO *data = (T_AUI_EDITOR_INFO *)win_data->user;
T_ATB_TEXT *PredText = &data->predText;
ED_RES result;
#ifdef TRACE_AUIEditor
TRACE_FUNCTION("AUI_edit_KbdLongCb()");
#endif
/* Suppress unwanted long keypresses */
if ( data->doNextLongPress )
data->doNextLongPress = FALSE; /* mark Key_long event as consumed but do current long press */
else
return MFW_EVENT_CONSUMED; /* don't do current long press */
/* Restart the timer */
if (data->timer !=NULL)
{
tim_stop(data->timer);
tim_start(data->timer);
}
#ifdef EASY_TEXT_ENABLED
if (FFS_flashData.PredTextSelected == FALSE || !ATB_edit_Mode(data->editor, ED_MODE_PREDTEXT)) {
/* Predictive text is off */
#endif
switch (keyboard->code)
{
case KCD_RIGHT:
result = ATB_edit_ClearAll(data->editor); /* Otherwise, clear the editor */
/* If buffer is empty, right soft key causes exit from editor */
if (result==ED_DONE)
{
SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_RIGHT, NULL);
}
else
{
win_show(data->win);
}
break;
/* KEY ENTRY 0 */
case KCD_0:
/* Alpha mode: insert a '0' */
if (ATB_edit_Mode(data->editor, ED_MODE_ALPHA))
{
if (keyboard->code<=KCD_HASH)
{
ATB_edit_DeleteLeft(data->editor);
//AUI_entry_EditDigit(data->entry_data, keyboard->code); // enter the character, not multi-tap
win_show(data->win);
}
}
/* Number mode: insert a '+'*/
else if (!ATB_edit_Mode(data->editor, ED_MODE_READONLY)) /* ignore normal keys if in read-only mode */
{
if (ATB_edit_Mode(data->editor, ED_MODE_HIDDEN)) /* in hidden mode do not allow entering of '+' */
{
ATB_edit_DeleteLeft(data->editor); /* remove the '0' */
}
else
{
ATB_edit_Char(data->editor,ctrlBack,FALSE); /* remove the '0' */
ATB_edit_Char(data->editor,UNICODE_PLUS,TRUE); /* insert the '+' */
}
win_show(data->win);
}
break;
case (KCD_HASH):
/* In alphanumeric mode, a long hold of # selects number case */
if (ATB_edit_GetCasePref(data->editor)==ED_CASEPREF_ALPHANUM)
ATB_edit_SetCase(data->editor, ED_CASE_NUM);
win_show(data->win);
break;
/* KEY ENTRY 1 - 9 */
case KCD_1:
case KCD_2:
case KCD_3:
case KCD_4:
case KCD_5:
case KCD_6:
case KCD_7:
case KCD_8:
case KCD_9:
/* Insert equivalent numeric character, only possible in Alpha modes */
if (ATB_edit_Mode(data->editor, ED_MODE_ALPHA))
{
if (keyboard->code<=KCD_HASH)
{
ATB_edit_DeleteLeft(data->editor);
AUI_entry_EditDigit(data->entry_data, keyboard->code); // enter the character, not multi-tap
win_show(data->win);
}
}
break;
}
#ifdef EASY_TEXT_ENABLED
}
else
{
if(FFS_flashData.PredTextAvailable == TRUE)
{
switch (keyboard->code)
{
case KCD_RIGHT: /*empty predictive text string */
if(PredText->len!=0)
{
PredText->len = 0;
ATB_string_SetChar(PredText, 0, UNICODE_EOLN);
ResetDictSearch();
win_show(data->win);
}
else /*empty whole editor */
{
if(data->editor_data.editor_attr.text.len > 0 )
{
ATB_edit_ClearAll(data->editor);
win_show(data->win);
}
else
{
/* leave editor if buffer already empty */
SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_RIGHT, NULL);
}
}
break;
case(KCD_STAR):
AUI_symbol_Start(data->win, E_ED_INSERT);
break;
case (KCD_HASH):
break;
/* KEY ENTRY 1 - 9 */
case KCD_0:
case KCD_1:
case KCD_2:
case KCD_3:
case KCD_4:
case KCD_5:
case KCD_6:
case KCD_7:
case KCD_8:
case KCD_9:
if(PredText->len==0)
{
/* Insert equivalent numeric character, only possible in Alpha modes */
if (ATB_edit_Mode(data->editor, ED_MODE_ALPHA))
{
if (keyboard->code<=KCD_HASH)
{
ATB_edit_DeleteLeft(data->editor);
AUI_entry_EditDigit(data->entry_data, keyboard->code); // enter the character, not multi-tap
}
}
win_show(data->win);
}
break;
}
}
}
#endif
return MFW_EVENT_CONSUMED;
}
/*******************************************************************************
$Function: AUI_edit_TimerCb
$Description: Callback function for the editor info timer.
$Returns: None.
$Arguments: event - the event type
timer - the timer
*******************************************************************************/
static int AUI_edit_TimerCb (T_MFW_EVENT event, T_MFW_TIM *timer)
{
T_MFW_HND win = mfw_parent (mfw_header());
T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
T_AUI_EDITOR_INFO *data = (T_AUI_EDITOR_INFO *)win_data->user;
T_MFW_HND parent_win = data->parent;
USHORT Identifier = data->editor_data.Identifier;
T_AUI_EDIT_CB Callback = data->editor_data.Callback;
TRACE_FUNCTION("AUI_edit_TimerCb");
AUI_edit_Destroy(data->win);
if (Callback)
(Callback) (parent_win, Identifier, INFO_TIMEOUT);
return MFW_EVENT_CONSUMED;
}
/*******************************************************************************
$Function: AUI_edit_TitleTimerCb
$Description: SPR#1559 - SH
Callback function for the editor title timer. Recalculates title_pos so that
the next part of the string is displayed.
$Returns: None.
$Arguments: event - the event type
timer - the timer
*******************************************************************************/
static int AUI_edit_TitleTimerCb (T_MFW_EVENT event, T_MFW_TIM *timer)
{
/* SPR#1597 - SH - Use the mfwHeader property of the timer to get the window */
T_MFW_HND win = mfw_parent(timer->mfwHeader);
T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
T_AUI_EDITOR_INFO *data = (T_AUI_EDITOR_INFO *)win_data->user;
TRACE_FUNCTION("AUI_edit_TitleTimerCb");
/* SPR#1597 - SH - Since there may be multiple timers running at once, only
call win_show if the window is focussed. */
if (winIsFocussed(win))
{
if (data->title_next_pos!=data->title_pos)
{
data->title_pos = data->title_next_pos;
}
data->editor->update = ED_UPDATE_PARTIAL; /* Don't update editor text */
win_show(data->win);
tim_start(data->title_timer);
}
return MFW_EVENT_CONSUMED;
}
/*******************************************************************************
$Function: AUI_edit_CalcPredText
$Description: Calculate properties of predicted text string.
$Returns: None.
$Arguments: data - The AUI editor data
*******************************************************************************/
static void AUI_edit_CalcPredText(T_AUI_EDITOR_INFO *data)
{
USHORT character;
T_ATB_TEXT dummy;
data->predText.len = ATB_string_Length(&data->predText);
/* Get position of current entry */
dummy.data = data->predText.data;
dummy.dcs = data->predText.dcs;
dummy.len = data->predTextChar.pos;
data->predTextChar.lineWidth = ATB_display_StringWidth(&dummy, &data->predTextChar.format);
data->predTextChar.lineHeight = ATB_display_StringHeight(&dummy, &data->predTextChar.format);
/* Get width and height of current character */
character = ATB_string_GetChar(&data->predText, data->predTextChar.pos);
data->predTextChar.width = ATB_display_GetCharWidth(character, &data->predTextChar.format);
data->predTextChar.height = ATB_display_GetCharHeight(character, &data->predTextChar.format);
return;
}
/*******************************************************************************
$Function: AUI_edit_ClearPredText
$Description: Clear the predictive text buffer
$Returns: None.
$Arguments: data - The AUI editor data
*******************************************************************************/
static void AUI_edit_ClearPredText(T_AUI_EDITOR_INFO *data)
{
data->predText.len = 0;
ATB_string_SetChar(&data->predText,0,UNICODE_EOLN);
memset(&data->predTextChar, 0, sizeof(T_ED_CHAR));
return;
}
/*******************************************************************************
$Function: AUI_edit_InsertString
$Description: Insert a string into the editor
$Returns: Pointer to the editor's window.
$Arguments: win - The editor window
string - The string to insert
dcs - The dcs of the string
*******************************************************************************/
void AUI_edit_InsertString(T_MFW_HND win, UBYTE *string, T_ATB_DCS dcs)
{
T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
T_AUI_EDITOR_INFO *data = (T_AUI_EDITOR_INFO *)win_data->user;
T_ATB_TEXT text;
text.data = string;
text.dcs = dcs;
text.len = ATB_string_Length(&text);
ATB_edit_InsertString(data->editor, &text);
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -