📄 gui_ems.c
字号:
case 1: if(c==EMS_INPUTBOX_PARAGRAPH_BREAK_CHARACTER) done=1;
break;
case 2: if(o->Type==EMS_TYPE_TEXT_FORMAT)
{ b->text_format.Alignment=o->data->text_format.Alignment;
done=1;
}
break;
}
}
}
}
void pixtel_UI_EMS_input_box_set_cursor_position(UI_EMS_input_box *b,EMSPosition *p)
{ if(b->data!=NULL)
{ ResetCurrentPosition(b->data);
while(!((b->data->CurrentPosition.OffsetToText==p->OffsetToText) && (b->data->CurrentPosition.Object==p->Object)))
{ if(ForwardCurrentPosition(b->data,1)!=1) break;
}
pixtel_UI_EMS_input_box_locate_cursor(b);
}
}
/* Macros for graphics functions */
extern stFontAttribute *UI_font;
extern U8 SetFont(stFontAttribute Font , U8 arrCount);
extern s32 UI_clip_x1,UI_clip_x2,UI_clip_y1,UI_clip_y2;
extern s32 UI_text_x,UI_text_y;
extern color UI_text_color;
#define EMS_SET_FONT(f) \
{ UI_font=(f); \
SetFont(*(f),0); \
}
#define EMS_MOVE_TEXT_CURSOR(x,y) \
{ UI_text_x=x; \
UI_text_y=y; \
}
#define EMS_SET_TEXT_COLOR(c) \
{ UI_text_color=c; \
UI_set_current_text_color(UI_text_color);\
}
byte pixtel_UI_EMS_input_box_equal_text_format(EMSTextFormat *t1,EMSTextFormat *t2)
{ if(t1->Alignment!=t2->Alignment) return(0);
if(t1->bgColor!=t2->bgColor) return(0);
if(t1->fgColor!=t2->fgColor) return(0);
if(t1->FontSize!=t2->FontSize) return(0);
if(t1->isBold!=t2->isBold) return(0);
if(t1->isItalic!=t2->isItalic) return(0);
if(t1->isStrikethrough!=t2->isStrikethrough) return(0);
if(t1->isUnderline!=t2->isUnderline) return(0);
if(t1->textLength!=t2->textLength) return(0);
return(1);
}
#define EMS_EQUAL_TEXT_FORMAT(t1,t2) (~(memcmp((t1),(t2),sizeof(EMSTextFormat)))
#define EMS_ESCAPE_CHARACTER (27)
void pixtel_UI_EMS_input_box_remove_extension_character(EMSData *data)
{
U16 c,OffsetToText;
U8* textBuffer=data->textBuffer;
U16 textBufferLength=data->textLength;
EMSPosition currposition=data->CurrentPosition;
#if defined(__MMI_T9__)
//PMT VIKAS GUPTA START 20051129
EMSPosition backupcurrposition=data->CurrentPosition;
//PMT VIKAS GUPTA END 20051129
#endif
kal_uint16 ret_char;
EMSPosition dummyposition;
EMSObject *ret_object;
if( textBuffer == NULL )
{
return;
}
ResetCurrentPosition(data);
if( data->dcs == SMSAL_DEFAULT_DCS )
{
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_ESCAPE_CHARACTER )
{
dummyposition = data->CurrentPosition;
while (EMSGetNextObject(data, &dummyposition, &ret_char , &ret_object) == 2)
{
ForwardCurrentPosition(data,1);
dummyposition = data->CurrentPosition;
if(ret_object->Type == EMS_TYPE_TEXT_FORMAT)
{
if(EMSGetPreviousObject(data, &dummyposition, &ret_char , &ret_object) == 1)
{
BackwardCurrentPosition(data,1);
break;
}
dummyposition = data->CurrentPosition;
}
}
#if(EMS_BYTE_ORDER_BIG_ENDIAN)
if( ForwardCurrentPosition(data,1) != 1)
{
break;
}
CancelCurrentPosition(data,1);
if( OffsetToText <= currposition.OffsetToText )
{
currposition.OffsetToText--;
}
OffsetToText=data->CurrentPosition.OffsetToText;
textBufferLength -= ENCODING_LENGTH;
#else
if( ForwardCurrentPosition(data,1) != 1 )
{
break;
}
CancelCurrentPosition(data,1);
if( OffsetToText <= currposition.OffsetToText )
{
currposition.OffsetToText -= ENCODING_LENGTH;
}
OffsetToText=data->CurrentPosition.OffsetToText;
textBufferLength -= ENCODING_LENGTH;
#endif
}
if( ForwardCurrentPosition(data,1) != 1 )
{
break;
}
}
}
MoveCursorToPosition(data, &currposition);
#if defined(__MMI_T9__)
//PMT VIKAS GUPTA START 20051129
if(memcmp((const void *)&backupcurrposition,(const void *)&currposition,sizeof(EMSPosition))==0) return;
//PMT VIKAS GUPTA END 20051129
T9SynT9WithInputBoxForEMSInputBox();
#endif
}
/* Call before EMSPack */
void pixtel_UI_EMS_input_box_insert_extension_character(EMSData *data)
{
U16 c,OffsetToText;
U8* textBuffer=data->textBuffer;
U16 textBufferLength=data->textLength;
EMSPosition currposition=data->CurrentPosition;
#if defined(__MMI_T9__)
//PMT VIKAS GUPTA START 20051129
EMSPosition backupcurrposition=data->CurrentPosition;
//PMT VIKAS GUPTA END 20051129
#endif
#if(EMS_BYTE_ORDER_BIG_ENDIAN)
U8 ESC_string[]={0x00,0x1B};
#else
U8 ESC_string[]={0x1B,0x00};
#endif
if( textBuffer == NULL )
{
return;
}
ResetCurrentPosition(data);
if( data->dcs == SMSAL_DEFAULT_DCS )
{
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(UI_TEST_GSM_EXTENDED(c))
{
AddString(data,ESC_string,1,NULL);
if(OffsetToText<=currposition.OffsetToText)
{
currposition.OffsetToText += ENCODING_LENGTH;
}
OffsetToText=data->CurrentPosition.OffsetToText;
//MTK Elvis 20031126
textBufferLength += ENCODING_LENGTH;
//MTK end
}
if(ForwardCurrentPosition(data,1)!=1)
{
break;
}
}
}
MoveCursorToPosition(data, &currposition);
#if defined(__MMI_T9__)
//PMT VIKAS GUPTA START 20051129
if(memcmp((const void *)&backupcurrposition,(const void *)&currposition,sizeof(EMSPosition))==0) return;
//PMT VIKAS GUPTA END 20051129
T9SynT9WithInputBoxForEMSInputBox();
#endif
}
#if(EMS_USE_DCS)
#if(EMS_USE_CRLF_COMBINATION||EMS_USE_ESC_COMBINATION)
/* Deletes one object/character before cursor position and updates UCS2 and Object counters */
/* Also handles CRLF combination */
byte pixtel_UI_EMS_cancel_current_position(UI_EMS_input_box *b)
{
#ifdef __MMI_HINDI_ALG__
S32 lst_pos=0;
S32 cancel_two_pos=0;
UI_character_type current_character1 = 0;
byte object_type_check1=0;
EMSObject *o1;
EMSPosition p1=b->data->CurrentPosition;
EMSData *data_chk_type1 = b->data;
if(TestLastPosition(b->data,&(b->data->CurrentPosition)))
{
lst_pos=1;
}
#endif //__MMI_HINDI_ALG__
if(BackwardCurrentPosition(b->data,1)==1)
{ EMSPosition p=b->data->CurrentPosition;
EMSObject* current_object;
UI_character_type c;
byte r;
s32 count;
byte dcs_change=0;
r=pixtel_UI_EMS_input_box_get_next_object(b->data,&p,&c,¤t_object);
#ifdef __MMI_HINDI_ALG__
if(lst_pos)
{
if (b->data->CurrentPosition.OffsetToText>=4 && UI_TEST_LF_CHARACTER(b->data->textBuffer[b->data->CurrentPosition.OffsetToText])
&& UI_TEST_CR_CHARACTER(b->data->textBuffer[b->data->CurrentPosition.OffsetToText-2]))
{
b->data->textBuffer[b->data->CurrentPosition.OffsetToText-2]=0;
b->data->textBuffer[b->data->CurrentPosition.OffsetToText-1]=0;
cancel_two_pos = 1;
}
b->data->textBuffer[b->data->CurrentPosition.OffsetToText]=0;
b->data->textBuffer[b->data->CurrentPosition.OffsetToText+1]=0;
}
#endif //__MMI_HINDI_ALG__
ForwardCurrentPosition(b->data,1);
switch(r)
{ case 0: break;
case 1:
#if(EMS_USE_CRLF_COMBINATION)
if(UI_TEST_LF_CHARACTER(c))
{ count=BackwardCurrentPosition(b->data,2);
if(count==2)
{ p=b->data->CurrentPosition;
r=pixtel_UI_EMS_input_box_get_next_object(b->data,&p,&c,¤t_object);
if((r==1) && UI_TEST_CR_CHARACTER(c))
{ ForwardCurrentPosition(b->data,2);
CancelCurrentPosition(b->data,1);
count=0;
}
}
ForwardCurrentPosition(b->data,(U16)count);
}
else
#endif
if(UI_TEST_UCS2_CHARACTER(c))
{ if(b->UCS2_count>0)
{ b->UCS2_count--;
if(b->UCS2_count==0)
{
dcs_change=1;
pixtel_UI_EMS_change_DCS(b);
}
}
}
else if(UI_TEST_GSM_EXTENDED(c))
{ if(b->GSM_ext_count>0) b->GSM_ext_count--;
}
break;
case 2:
//MTK Joy added for text format case, get the character and set the parameters accordingly, 1230
if(current_object->Type==0)
{
r=pixtel_UI_EMS_input_box_get_next_object(b->data,&p,&c,¤t_object);
if((r==1) &&UI_TEST_UCS2_CHARACTER(c))
{ if(b->UCS2_count>0)
{ b->UCS2_count--;
if(b->UCS2_count==0)
{
dcs_change=1;
pixtel_UI_EMS_change_DCS(b);
}
}
}
else if(UI_TEST_GSM_EXTENDED(c))
{ if(b->GSM_ext_count>0) b->GSM_ext_count--;
}
break;
}
//MTK end
if(b->object_count>0)
{ b->object_count--;
if(b->object_count==0) pixtel_UI_EMS_change_DCS(b);
}
break;
}
CancelCurrentPosition(b->data,1);
#ifdef __MMI_HINDI_ALG__
b->data->textBuffer[b->data->textLength]=0;
b->data->textBuffer[b->data->textLength+1]=0;
if (cancel_two_pos)
{
CancelCurrentPosition(b->data,1);
}
if (b->data->CurrentPosition.OffsetToText >=4)
{
if ( (UI_CHK_CONSONANT(b->data->textBuffer[b->data->CurrentPosition.OffsetToText]))
&& (UI_CHK_CONSONANT(b->data->textBuffer[b->data->CurrentPosition.OffsetToText-4]))
&& (b->data->textBuffer[b->data->CurrentPosition.OffsetToText-2]==0x4d)
&& ((b->data->textBuffer[b->data->CurrentPosition.OffsetToText+1])== 0x09)
&& ((b->data->textBuffer[b->data->CurrentPosition.OffsetToText-3])== 0x09))
{
EMSObject *bb;
U8 fwd_positions=0;
U8 saved_fwd_positions=0;
PU8 dest_pos;
PU8 src_pos=&b->data->textBuffer[b->data->CurrentPosition.OffsetToText];
p1=b->data->CurrentPosition;
object_type_check1 = pixtel_UI_EMS_input_box_get_next_object(data_chk_type1,&p1,¤t_character1,&o1);
//dest_pos = hf_get_next_cluster_p(b->data->textBuffer,src_pos);
dest_pos = hf_get_next_cluster_p(src_pos,src_pos);
fwd_positions = dest_pos - src_pos;//Number of moves
fwd_positions = fwd_positions >> 1;
saved_fwd_positions =fwd_positions;
PRINT_INFORMATION_2((MMI_TRACE_INFO, "pixtel_UI_EMS_cancel_current_position[fwd_positions]:%d ",fwd_positions));
while(fwd_positions--)
{
ForwardCurrentPosition(b->data,1);
}
if (object_type_check1 == 2)
{
if (saved_fwd_positions == 1)
{
// To shift the images on cluster completion
bb = b->data->listTail;
do
{
if (bb->OffsetToText == b->data->CurrentPosition.Object->OffsetToText)
bb->OffsetToText+=(saved_fwd_positions)*2;
bb = bb->prev;
}while(bb != NULL);
ForwardCurrentPosition(b->data,saved_fwd_positions);
BackwardCurrentPositionSkipCR(b->data);
}
else if (saved_fwd_positions > 1)
{
// To shift the images on cluster completion
bb = b->data->listHead;
do
{
if (bb->OffsetToText == b->data->CurrentPosition.Object->OffsetToText)
bb->OffsetToText+=(saved_fwd_positions)*2;
bb = bb->next;
}while(bb != NULL);
ForwardCurrentPosition(b->data,saved_fwd_positions);
if (b->data->listHead == b->data->listTail)
{
BackwardCurrentPositionSkipCR(b->data);
}
else
{
BackwardCurrentPositionSkipCR(b->data);
BackwardCurrentPositionSkipCR(b->data);
}
}
}
}
}
#endif //__MMI_HINDI_ALG__
if(dcs_change)
pixtel_UI_EMS_input_box_insert_extension_character(b->data);
#if(EMS_USE_ESC_COMBINATION)
if(b->UCS2_count==0)
{
p=b->data->CurrentPosition;
r=pixtel_UI_EMS_input_box_get_previous_object(b->data,&p,&c,¤t_object);
if((r==1) && UI_TEST_ESC_CHARACTER(c)) CancelCurrentPosition(b->data,1);
}
#endif
return(1);
}
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -