📄 wgui_ems_categories.c
字号:
//MTK end
c=ExtendedAsciiToDefaultArray[c];
}
else
{
c=AsciiToDefaultArray[c];
}
#if(EMS_BYTE_ORDER_BIG_ENDIAN)
textBuffer[OffsetToText+1]=(U8)(c&0xff);
textBuffer[OffsetToText+0]=(U8)(c>>8);
#else
textBuffer[OffsetToText]=(U8)(c&0xff);
textBuffer[OffsetToText+1]=(U8)(c>>8);
#endif
if(ForwardCurrentPosition(data,1)!=1) break;
}
}
else
{ while((OffsetToText=data->CurrentPosition.OffsetToText)<textBufferLength)
{
#if(EMS_BYTE_ORDER_BIG_ENDIAN)
c=(U16)(textBuffer[OffsetToText+1]|(textBuffer[OffsetToText]<<8));
#else
c=(U16)(textBuffer[OffsetToText]|(textBuffer[OffsetToText+1]<<8));
#endif
// if(c==EMS_EURO_CHARACTER) c=EMS_EURO_CHARACTER_UCS2;
#if(EMS_BYTE_ORDER_BIG_ENDIAN)
textBuffer[OffsetToText+1]=(U8)(c&0xff);
textBuffer[OffsetToText+0]=(U8)(c>>8);
#else
textBuffer[OffsetToText]=(U8)(c&0xff);
textBuffer[OffsetToText+1]=(U8)(c>>8);
#endif
if(ForwardCurrentPosition(data,1)!=1) break;
}
}
ResetCurrentPosition(data);
}
#endif
/* Temporary: Will be removed later */
UI_string_type temp_EMS_buffer;
EMSData *temp_EMS_data;
/* EMS input box: Low level wrappers */
void (*EMS_inputbox_input_callback)(void);
void register_EMS_inputbox_input_callback(void (*f)(void))
{ EMS_inputbox_input_callback=f;
}
#if(!UI_DISABLE_EMS_INPUT_BOX)
/* 072904 Calvin moved for centralized control */
//#define ENABLE_EMS_INPUTBOX_FRAME_SKIPPING 1
/* Calvin end */
byte EMS_inputbox_has_changed=0;
UI_EMS_input_box MMI_EMS_inputbox;
EMSTextFormat wgui_EMS_text_format;
extern void wgui_EMS_redraw_remaining_characters_display(void);
#if((UI_ENABLE_FRAME_SKIPPING)&&(ENABLE_EMS_INPUTBOX_FRAME_SKIPPING))
S32 wgui_EMS_inputbox_frame_counter=0;
#endif
void show_EMS_inputbox(void)
{
#if(0)
PRINT_INFORMATION(("\n\n"));
if(MMI_EMS_inputbox.data->CurrentPosition.Object!=NULL)
{
if(MMI_EMS_inputbox.data->CurrentPosition.Object->Type==EMS_TYPE_TEXT_FORMAT)
{ PRINT_INFORMATION(("O: *"));
}
else
{ PRINT_INFORMATION(("O: %d",MMI_EMS_inputbox.data->CurrentPosition.Object->data.picture.pdu[0]));
}
}
PRINT_INFORMATION((" TL: %d, TO: %d, T: %c",MMI_EMS_inputbox.data->textLength,MMI_EMS_inputbox.data->CurrentPosition.OffsetToText,MMI_EMS_inputbox.data->textBuffer[MMI_EMS_inputbox.data->CurrentPosition.OffsetToText+1]));
#endif
pixtel_UI_set_EMS_input_box_current_theme(&MMI_EMS_inputbox);
pixtel_UI_show_EMS_input_box(&MMI_EMS_inputbox);
#if(UI_DOUBLE_BUFFER_SUPPORT)
pixtel_UI_BLT_double_buffer(MMI_EMS_inputbox.x,MMI_EMS_inputbox.y,MMI_EMS_inputbox.x+MMI_EMS_inputbox.width-1,MMI_EMS_inputbox.y+MMI_EMS_inputbox.height-1);
#endif
}
#if((UI_ENABLE_FRAME_SKIPPING)&&(ENABLE_EMS_INPUTBOX_FRAME_SKIPPING))
void wgui_EMS_inputbox_end_frame(void)
{ if(wgui_EMS_inputbox_frame_counter>=1)
{ S32 BLT_y2,y2;
#if(UI_DOUBLE_BUFFER_SUPPORT)
pixtel_UI_lock_double_buffer();
#endif
pixtel_UI_show_EMS_input_box(&MMI_EMS_inputbox);
if(EMS_inputbox_has_changed)
{ wgui_EMS_redraw_remaining_characters_display();
EMS_inputbox_has_changed=0;
}
#if(UI_DOUBLE_BUFFER_SUPPORT)
pixtel_UI_unlock_double_buffer();
BLT_y2=MMI_EMS_inputbox.y+MMI_EMS_inputbox.height;
y2=MMI_multitap_y+MMI_multitap_height+1;
if(BLT_y2<y2) BLT_y2=y2;
pixtel_UI_BLT_double_buffer(MMI_EMS_inputbox.x,MMI_EMS_inputbox.y,MMI_EMS_inputbox.x+MMI_EMS_inputbox.width-1,BLT_y2);
#endif
wgui_EMS_inputbox_frame_counter=0;
pixtel_UI_start_timer(UI_FRAME_SKIP_TIMEOUT,wgui_EMS_inputbox_end_frame);
}
}
#endif
#if(EMS_INPUTBOX_DEBUG)
#define _DEBUG_PRINT(x) _debug_print x
extern void DisplayToDebugwindow(S8 *nPrintableStr);
void _debug_print(S8 *fmt,...)
{
S8 display_string[2048];
va_list args;
va_start(args,fmt);
vsprintf(display_string,fmt,args);
va_end(args);
DisplayToDebugwindow(display_string);
}
void _DUMP_EMS_TEXT_FORMAT_OBJECT(EMSTextFormat *x)
{ if(x!=NULL)
{ _DEBUG_PRINT(("L=%03d ",x->textLength));
_DEBUG_PRINT(("AL="));
switch(x->Alignment)
{ case EMS_ALIGN_LEFT:
_DEBUG_PRINT(("L"));
break;
case EMS_ALIGN_RIGHT:
_DEBUG_PRINT(("R"));
break;
case EMS_ALIGN_CENTER:
_DEBUG_PRINT(("C"));
break;
case EMS_ALIGN_LANG_DEP:
_DEBUG_PRINT(("D"));
break;
}
_DEBUG_PRINT((" SZ="));
switch(x->FontSize)
{ case EMS_FONTSIZE_NORMAL:
_DEBUG_PRINT(("N"));
break;
case EMS_FONTSIZE_LARGE:
_DEBUG_PRINT(("L"));
break;
case EMS_FONTSIZE_SMALL:
_DEBUG_PRINT(("S"));
break;
}
_DEBUG_PRINT((" ST="));
if(x->isBold) _DEBUG_PRINT(("B"));
if(x->isItalic) _DEBUG_PRINT(("I"));
if(x->isUnderline) _DEBUG_PRINT(("U"));
if(x->isStrikethrough) _DEBUG_PRINT(("S"));
}
}
void _DUMP_EMS_OBJECT(EMSObject *x)
{ if(x==NULL) _DEBUG_PRINT(("NULL"));
else
{ _DEBUG_PRINT(("%8X OFF=%03d ",x,x->OffsetToText));
switch(x->Type)
{ case EMS_TYPE_TEXT_FORMAT:
_DEBUG_PRINT(("TXT FMT "));
_DUMP_EMS_TEXT_FORMAT_OBJECT(&x->data->text_format);
break;
case EMS_TYPE_PREDEF_SND:
_DEBUG_PRINT(("PRE SND %d",x->PredefNo));
break;
case EMS_TYPE_USERDEF_SND:
_DEBUG_PRINT(("USR SND"));
break;
case EMS_TYPE_PREDEF_ANM:
_DEBUG_PRINT(("PRE ANM %d",x->PredefNo));
break;
case EMS_TYPE_USERDEF_ANM:
_DEBUG_PRINT(("USR ANM"));
break;
case EMS_TYPE_PIC:
_DEBUG_PRINT(("EMS PIC"));
break;
}
}
}
#else
#define _DEBUG_PRINT(x)
void _DUMP_EMS_OBJECT(EMSObject *x)
{ UI_UNUSED_PARAMETER(x);
}
#endif
extern U16 GetExitScrnID(void);
#include "IdleAppDef.h"
void redraw_EMS_inputbox(void)
{
if((SCR_POPUP_SCREEN != GetExitScrnID())&&(POPUP_SCREENID !=GetExitScrnID()))
{
#if(EMS_INPUTBOX_DEBUG)
S32 i=0;
UI_character_type c='-';
EMSObject *object=MMI_EMS_inputbox.data->listHead;
EMSPosition mapped_position;
EMS_map_position(MMI_EMS_inputbox.data,&MMI_EMS_inputbox.data->CurrentPosition,&mapped_position);
if((MMI_EMS_inputbox.data->textBuffer!=NULL)&&(MMI_EMS_inputbox.data->textLength>0)&&(MMI_EMS_inputbox.data->CurrentPosition.OffsetToText<MMI_EMS_inputbox.data->textLength))
c=MMI_EMS_inputbox.data->textBuffer[MMI_EMS_inputbox.data->CurrentPosition.OffsetToText];
if((c==0x0A)||(c==0x0D)) c='.';
_DEBUG_PRINT(("\n\nCurrent position: %c OFF=%03d, Object=",c,MMI_EMS_inputbox.data->CurrentPosition.OffsetToText));
_DUMP_EMS_OBJECT(MMI_EMS_inputbox.data->CurrentPosition.Object);
_DEBUG_PRINT(("\nMapped position: %c OFF=%03d, Object=",c,mapped_position.OffsetToText,mapped_position.Object));
_DUMP_EMS_OBJECT(mapped_position.Object);
_DEBUG_PRINT(("\nInputbox text format: "));
_DUMP_EMS_TEXT_FORMAT_OBJECT(&MMI_EMS_inputbox.text_format);
_DEBUG_PRINT(("\nWGUI text format: "));
_DUMP_EMS_TEXT_FORMAT_OBJECT(&wgui_EMS_text_format);
_DEBUG_PRINT(("\nCurrent text format: "));
_DUMP_EMS_OBJECT(MMI_EMS_inputbox.data->CurrentTextFormatObj);
while(object!=NULL)
{ _DEBUG_PRINT(("\nO%d=",i));
_DUMP_EMS_OBJECT(object);
object=object->next;
i++;
}
for(i=0;i<MMI_EMS_inputbox.n_lines;i++)
{ _DEBUG_PRINT(("\nL%d OFF=%03d, Count=%02d, x=%02d, Object=",i,MMI_EMS_inputbox.line_positions[i].OffsetToText,MMI_EMS_inputbox.line_object_counts[i],MMI_EMS_inputbox.line_x_positions[i]));
_DUMP_EMS_OBJECT(MMI_EMS_inputbox.line_positions[i].Object);
}
_DEBUG_PRINT(("\n"));
#endif
#if(0)
PRINT_INFORMATION(("\n\n"));
if(MMI_EMS_inputbox.data->CurrentPosition.Object!=NULL)
{
if(MMI_EMS_inputbox.data->CurrentPosition.Object->Type==EMS_TYPE_TEXT_FORMAT)
{ PRINT_INFORMATION(("O: *"));
}
else
{ PRINT_INFORMATION(("O: %d",MMI_EMS_inputbox.data->CurrentPosition.Object->data.picture.pdu[0]));
}
}
PRINT_INFORMATION((" TL: %d, TO: %d, T: %c",MMI_EMS_inputbox.data->textLength,MMI_EMS_inputbox.data->CurrentPosition.OffsetToText,MMI_EMS_inputbox.data->textBuffer[MMI_EMS_inputbox.data->CurrentPosition.OffsetToText+1]));
#endif
#if((UI_ENABLE_FRAME_SKIPPING)&&(ENABLE_EMS_INPUTBOX_FRAME_SKIPPING))
if(wgui_EMS_inputbox_frame_counter>0)
{ wgui_EMS_inputbox_frame_counter++;
}
else
{ wgui_EMS_inputbox_frame_counter=1;
pixtel_UI_start_timer(UI_FRAME_START_TIMEOUT,wgui_EMS_inputbox_end_frame);
}
#else
pixtel_UI_show_EMS_input_box(&MMI_EMS_inputbox);
//MTK Terry fix EMS remaining characters display unsync bug firefly#278
if(!(MMI_EMS_inputbox.flags&UI_EMS_INPUT_BOX_VIEW_MODE))
{
wgui_EMS_redraw_remaining_characters_display();
// EMS_inputbox_has_changed=0;
}
#if(UI_DOUBLE_BUFFER_SUPPORT)
pixtel_UI_BLT_double_buffer(MMI_EMS_inputbox.x,MMI_EMS_inputbox.y,MMI_EMS_inputbox.x+MMI_EMS_inputbox.width-1,MMI_EMS_inputbox.y+MMI_EMS_inputbox.height-1);
#endif
#endif
}
}
void show_EMS_inputbox_no_draw(void)
{
MMI_EMS_inputbox.flags|=(UI_EMS_INPUT_BOX_DISABLE_DRAW);
pixtel_UI_show_EMS_input_box(&MMI_EMS_inputbox);
MMI_EMS_inputbox.flags&=~(UI_EMS_INPUT_BOX_DISABLE_DRAW);
}
void EMS_inputbox_previous(void)
{
//W05.34 Fix Multitap in arrow keys
if (!(MMI_EMS_inputbox.flags&UI_EMS_INPUT_BOX_VIEW_MODE))
{
disable_active_multitap();
}
pixtel_UI_EMS_input_box_previous(&MMI_EMS_inputbox);
wgui_EMS_text_format=MMI_EMS_inputbox.text_format;
redraw_EMS_inputbox();
}
void EMS_inputbox_next(void)
{
//W05.34 Fix Multitap in arrow keys
if (!(MMI_EMS_inputbox.flags&UI_EMS_INPUT_BOX_VIEW_MODE))
{
disable_active_multitap();
}
pixtel_UI_EMS_input_box_next(&MMI_EMS_inputbox);
wgui_EMS_text_format=MMI_EMS_inputbox.text_format;
redraw_EMS_inputbox();
}
#ifdef __MMI_MESSAGES_EMS__
void EMS_inputbox_previous_object(void)
{
pixtel_UI_EMS_input_box_view_previous_object(&MMI_EMS_inputbox);
wgui_EMS_text_format=MMI_EMS_inputbox.text_format;
redraw_EMS_inputbox();
}
void EMS_inputbox_next_object(void)
{
pixtel_UI_EMS_input_box_view_next_object(&MMI_EMS_inputbox);
wgui_EMS_text_format=MMI_EMS_inputbox.text_format;
redraw_EMS_inputbox();
}
#endif
void EMS_inputbox_previous_line(void)
{
//W05.34 Fix Multitap in arrow keys
if (!(MMI_EMS_inputbox.flags&UI_EMS_INPUT_BOX_VIEW_MODE))
{
disable_active_multitap();
}
pixtel_UI_EMS_input_box_previous_line(&MMI_EMS_inputbox);
wgui_EMS_text_format=MMI_EMS_inputbox.text_format;
redraw_EMS_inputbox();
}
void EMS_inputbox_next_line(void)
{
//W05.34 Fix Multitap in arrow keys
if (!(MMI_EMS_inputbox.flags&UI_EMS_INPUT_BOX_VIEW_MODE))
{
disable_active_multitap();
}
pixtel_UI_EMS_input_box_next_line(&MMI_EMS_inputbox);
wgui_EMS_text_format=MMI_EMS_inputbox.text_format;
redraw_EMS_inputbox();
}
UI_character_type EMS_GSM_extended_lookup[]=
{ '[',']','{','}','~','\\','^','|',0xA2, /* Euro character is mapped to 0xA2 */
};
byte EMS_GSM_extended_map(UI_character_type c)
{ S32 i,n;
if(c&0xff00) return(0);
n=sizeof(EMS_GSM_extended_lookup)/sizeof(UI_character_type);
for(i=0;i<n;i++)
{ if(c==EMS_GSM_extended_lookup[i]) return(1);
}
return(0);
}
void EMS_inputbox_direct_input(UI_character_type c)
{ if(UI_TEST_LF_CHARACTER(c))
pixtel_UI_EMS_input_box_insert_new_line(&MMI_EMS_inputbox);
else
{
#if(!EMS_USE_GSM_EXTENDED)
if(MMI_EMS_inputbox.UCS2_count==0)
{
if(EMS_GSM_extended_map(c)) pixtel_UI_EMS_input_box_insert_character(&MMI_EMS_inputbox,0x1b);
}
#endif
pixtel_UI_EMS_input_box_insert_character(&MMI_EMS_inputbox,c);
}
redraw_EMS_inputbox();
EMS_inputbox_input_callback();
}
void EMS_inputbox_direct_input_no_LF_check(UI_character_type c)
{ pixtel_UI_EMS_input_box_insert_character(&MMI_EMS_inputbox,c);
redraw_EMS_inputbox();
EMS_inputbox_input_callback();
}
void EMS_inputbox_backspace(void)
{ pixtel_UI_EMS_input_box_backspace(&MMI_EMS_inputbox);
wgui_EMS_text_format=MMI_EMS_inputbox.text_format;
redraw_EMS_inputbox();
EMS_inputbox_input_callback();
}
void EMS_inputbox_delete_all(void)
{ pixtel_UI_EMS_input_box_delete_all(&MMI_EMS_inputbox);
wgui_EMS_text_format=MMI_EMS_inputbox.text_format;
redraw_EMS_inputbox();
EMS_inputbox_input_callback();
}
void EMS_inputbox_toggle_insert_mode(void)
{ pixtel_UI_EMS_input_box_toggle_insert_mode(&MMI_EMS_inputbox);
redraw_EMS_inputbox();
}
void EMS_inputbox_delete(void)
{ pixtel_UI_EMS_input_box_delete(&MMI_EMS_inputbox);
wgui_EMS_text_format=MMI_EMS_inputbox.text_format;
redraw_EMS_inputbox();
EMS_inputbox_input_callback();
}
void EMS_inputbox_insert_new_line(void)
{ pixtel_UI_EMS_input_box_insert_new_line(&MMI_EMS_inputbox);
EMS_inputbox_input_callback();
}
void EMS_inputbox_alphanumeric_keyboard_input_handler(S32 keyc)
{ if(keyc==0xc0) EMS_inputbox_direct_input_no_LF_check((UI_character_type)'\n');
else if(keyc==0xbb) EMS_inputbox_direct_input((UI_character_type)0x0d);
else if(keyc==0x08) EMS_inputbox_backspace();
else if(keyc==0x1b) EMS_inputbox_delete_all();
else if(keyc==0x0d) EMS_inputbox_direct_input((UI_character_type)'\n');
else if(keyc==0xbd) EMS_inputbox_direct_input((UI_character_type)0x1b);
else if(keyc>0x1f) EMS_inputbox_direct_input((UI_character_type)keyc);
}
void EMS_inputbox_key_handler(S32 vkey_code,S32 key_state)
{
#if(MMI_BUILD_TYPE==BUILD_TYPE_X86WIN32)
if(key_state)
{ switch(vkey_code)
{ case 37:
#if(ENABLE_EMS_TEST_WORD_HIGHLIGHT)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -