⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wgui_ems_categories.c

📁 The font library converting tool MCT mainly introduces the process of the font formats to give us a
💻 C
📖 第 1 页 / 共 5 页
字号:
				//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 + -