plxmms_view.c
来自「mtk wap和mms代码。。适应mtk 25。26平台」· C语言 代码 · 共 2,345 行 · 第 1/5 页
C
2,345 行
if(!InitMmsContent())
{
#ifdef MMS_DEBUG
PlxTrace("InitMmsContent failed\r\n");
#endif
mmsmsg_ReleaseMmsMessage(g_view_data.message);
MMS_Free((void*)g_view_data.slide_info);
MMS_Memset((void*)&g_view_data, 0, sizeof(MmsViewData));
return FALSE;
}
#ifdef MMS_DEBUG
PlxTrace("InitMmsContent end\r\n");
#endif
goto_view:
//create menu
if(!CreateMmsViewMenu())
{
#ifdef MMS_DEBUG
PlxTrace("!CreateMmsViewMenu()\r\n");
#endif
mmsmsg_ReleaseMmsMessage(g_view_data.message);
MMS_Free((void*)g_view_data.slide_info);
MMS_Memset((void*)&g_view_data, 0, sizeof(MmsViewData));
return FALSE;
}
//init slide play state
InitSlidePlay();
//draw
if(mmsmsg_GetSlideCount(g_view_data.message) > 0) //> 1)
g_view_data.bPlaying = TRUE;
EnterMmsView();
#ifdef MMS_DEBUG
PlxTrace("create view end\r\n");
#endif
return TRUE;
}
/***************************************************************************
* Function CreateMmsView
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
BOOL CreateMmsView(MmsMessage* message, const char* folder, U16 screen)
{
int count;
if(!message)
return FALSE;
MMS_Memset((void*)&g_view_data, 0, sizeof(MmsViewData));
{
pixtel_UI_move_text_cursor(0,-100);
pixtel_UI_print_text_n((UI_string_type)L"xxx", 3);
g_view_data.line_height = LINE_HEIGHT+2;
}
if(mmsmsg_GetSlideCount(message) == 0)
{
//MMS_Memset((void*)&g_view_data, 0, sizeof(MmsViewData));
//return FALSE;
g_view_data.mmse = mmsmsg_GetMmse(message);
g_view_data.id = -1;
g_view_data.message = message;
g_view_data.back_screen = screen;
goto gotoview1;
}
g_view_data.mmse = mmsmsg_GetMmse(message);
g_view_data.id = -1; //mmsmsg_GetMsgId(message);
g_view_data.message = message;
g_view_data.org_slide = mmsmsg_GetCurSlideIndex(message);
g_view_data.cur_slide = 1;
g_view_data.back_screen = screen;
count = mmsmsg_GetSlideCount(g_view_data.message);
if(count)
{
g_view_data.slide_info = (SlideInfo*)MMS_Malloc(sizeof(SlideInfo) * count);
if(!g_view_data.slide_info)
{
MMS_Memset((void*)&g_view_data, 0, sizeof(MmsViewData));
return FALSE;
}
}
if(!InitMmsContent())
{
//mmsmsg_ReleaseMmsMessage(g_view_data.message);
MMS_Memset((void*)&g_view_data, 0, sizeof(MmsViewData));
return FALSE;
}
gotoview1:
if(!CreateMmsViewMenu())
{
//mmsmsg_ReleaseMmsMessage(g_view_data.message);
MMS_Memset((void*)&g_view_data, 0, sizeof(MmsViewData));
return FALSE;
}
//init slide play state
InitSlidePlay();
if(mmsmsg_GetSlideCount(g_view_data.message) > 0) //> 1)
g_view_data.bPlaying = TRUE;
EnterMmsView();
return TRUE;
}
/***************************************************************************
* Function ViewDeliveryReport
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
BOOL ViewDeliveryReport(void* mmse, long id)
{
MMDELIVERYREPORT info;
static char time[30];
static U8 Time[30];
static U8 Date[30];
U8* To = NULL;
if(!mmse || id < 0)
return FALSE;
MMS_Memset((void*)&info, 0, sizeof(MMDELIVERYREPORT));
if(MMSE_ReadDeliveryReport(mmse, id, &info) != MMSE_SUCCESS)
{
return FALSE;
}
g_report_content = (U8*)MMS_Malloc(MMS_Strlen(info.to)*2 + 200);
if(!g_report_content)
return FALSE;
//to
To = (U8*)MMS_Malloc((MMS_Strlen(info.to)+1) * 2);
if(!To)
{
MMS_Free((void*)g_report_content);
return FALSE;
}
AnsiiToUnicodeString((S8*)To, (S8*)info.to);
AdjustDateAndTime(&info.date);
//time
MMS_Memset((void*)time, 0, 30);
sprintf(time, "%04d-%02d-%02d",
info.date.year, info.date.month, info.date.day);
AnsiiToUnicodeString((S8*)Date, (S8*)time);
//date
MMS_Memset((void*)time, 0, 30);
sprintf(time, "%02d:%02d",
info.date.hour, info.date.minute);
AnsiiToUnicodeString((S8*)Time, (S8*)time);
pfnUnicodeStrcpy((S8*)g_report_content, (S8*)GetString(STR_ID_PLX_MMS_INFO_TO));
pfnUnicodeStrcat((S8*)g_report_content, (S8*)L"\n");
pfnUnicodeStrcat((S8*)g_report_content, (S8*)To);
pfnUnicodeStrcat((S8*)g_report_content, (S8*)L"\n");
pfnUnicodeStrcat((S8*)g_report_content, (S8*)GetString(STR_ID_PLX_MMS_INFO_DATE));
pfnUnicodeStrcat((S8*)g_report_content, (S8*)L"\n");
pfnUnicodeStrcat((S8*)g_report_content, (S8*)Date);
pfnUnicodeStrcat((S8*)g_report_content, (S8*)L"\n");
pfnUnicodeStrcat((S8*)g_report_content, (S8*)GetString(STR_ID_PLX_MMS_INFO_TIME));
pfnUnicodeStrcat((S8*)g_report_content, (S8*)L"\n");
pfnUnicodeStrcat((S8*)g_report_content, (S8*)Time);
pfnUnicodeStrcat((S8*)g_report_content, (S8*)L"\n");
switch(info.status)
{
case X_MMS_STATUS_REJECTED:
pfnUnicodeStrcat((S8*)g_report_content, (S8*)GetString(STR_ID_PLX_MMS_BOX_REJECTED));
break;
case X_MMS_STATUS_RETRIEVED:
pfnUnicodeStrcat((S8*)g_report_content, (S8*)GetString(STR_ID_PLX_MMS_BOX_RETRIVED));
break;
case X_MMS_STATUS_EXPIRED:
pfnUnicodeStrcat((S8*)g_report_content, (S8*)GetString(STR_ID_PLX_MMS_BOX_EXPIRED));
break;
case X_MMS_STATUS_DEFERRED:
pfnUnicodeStrcat((S8*)g_report_content, (S8*)GetString(STR_ID_PLX_MMS_BOX_DEFERRED));
break;
case X_MMS_STATUS_INDETERMINATE:
pfnUnicodeStrcat((S8*)g_report_content, (S8*)GetString(STR_ID_PLX_MMS_BOX_INDETERMINATE));
break;
case X_MMS_STATUS_FORWARDED:
pfnUnicodeStrcat((S8*)g_report_content, (S8*)GetString(STR_ID_PLX_MMS_BOX_FORWARDED));
break;
case X_MMS_STATUS_UNREACHABLE:
pfnUnicodeStrcat((S8*)g_report_content, (S8*)GetString(STR_ID_PLX_MMS_BOX_UNREACHABLE));
break;
default:
pfnUnicodeStrcat((S8*)g_report_content, (S8*)L"");
break;
}
EnterViewDiliveryReport();
MMS_Free((void*)To);
return TRUE;
}
//private function
////////////////////////////////////////////////////////////////////////////
//mms view screen
/***************************************************************************
* Function EnterMmsView
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
void EnterMmsView(void)
{
#ifdef MMS_DEBUG
PlxTrace("EnterMmsView\r\n");
#endif
//show list
if(GetActiveScreenId() != SCR_ID_PLX_MMS_VIEW)
{
EntryNewScreen(SCR_ID_PLX_MMS_VIEW, LeaveMmsView, EnterMmsView, NULL);
}
if(g_view_data.bPlaying)
{
ShowCategory221Screen(STR_ID_PLX_MMS_EDIT_NULLTITLE, IMG_ID_PLX_MMS,
0, 0,
0, IMG_GLOBAL_OK,
GDI_COLOR_WHITE, NULL);
}
else
{
ShowCategory221Screen(STR_ID_PLX_MMS_EDIT_NULLTITLE, IMG_ID_PLX_MMS,
STR_GLOBAL_OPTIONS, IMG_GLOBAL_OK,
STR_GLOBAL_BACK, IMG_GLOBAL_BACK,
GDI_COLOR_WHITE, NULL);
}
SetRightSoftkeyFunction(OnRightKey, KEY_EVENT_UP);
SetKeyHandler(PlxMmsGoBackToIdle, KEY_END, KEY_EVENT_DOWN);
SetKeyHandler(OnVolDown, KEY_VOL_DOWN, KEY_EVENT_DOWN);
SetKeyHandler(OnVolUp, KEY_VOL_UP, KEY_EVENT_DOWN);
if(!IsScreenPresent(SCR_ID_PLX_MMS_MAIN))
SetDelScrnIDCallbackHandler(SCR_ID_PLX_MMS_VIEW, PlxMmsDelHistoryHdlr);
#ifdef MMS_SCROLLVIEW
#ifdef __MMI_TOUCH_SCREEN__
mmi_pen_register_down_handler(OnTouchPenDown);
mmi_pen_register_move_handler(OnTouchPenMove);
mmi_pen_register_up_handler(OnTouchPenUp);
mmi_pen_register_repeat_handler(OnTouchPenRepeat);
#endif //__MMI_TOUCH_SCREEN__
pixtel_UI_create_vertical_scrollbar(&g_view_data.vScroll, g_view_data.rcVScroll.left,
g_view_data.rcVScroll.top, g_view_data.rcVScroll.right - g_view_data.rcVScroll.left,
g_view_data.rcVScroll.bottom - g_view_data.rcVScroll.top);
pixtel_UI_set_vertical_scrollbar_current_theme(&g_view_data.vScroll);
pixtel_UI_set_vertical_scrollbar_range(&g_view_data.vScroll, g_view_data.scr_total);
pixtel_UI_set_vertical_scrollbar_value(&g_view_data.vScroll, g_view_data.scr_cur);
pixtel_UI_set_vertical_scrollbar_scale(&g_view_data.vScroll, g_view_data.scr_page);
pixtel_UI_show_vertical_scrollbar(&g_view_data.vScroll);
#endif
RedrawCategoryFunction = RedrawMmsView;
RedrawMmsView();
//set timer
if(g_view_data.bPlaying)
{
StartPlaySound();
//pixtel_UI_start_timer(g_view_data.cur_dur, MmsViewPlayTimerCallback);
g_view_data.timer_id = PlxStartTimer(g_view_data.cur_dur,
MmsViewPlayTimerCallback, NULL);
if(!g_view_data.timer_id)
{
EnterStop();
return;
}
}
}
/***************************************************************************
* Function LeaveMmsView
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
void LeaveMmsView(void)
{
#ifdef MMS_DEBUG
PlxTrace("LeaveMmsView, will stop sound\r\n");
#endif
gdi_image_stop_animation_all();
StopPlaySound();
if(g_view_data.timer_id)
{
PlxStopTimer(g_view_data.timer_id);
g_view_data.timer_id = 0;
}
}
/***************************************************************************
* Function ExitMmsView
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
void ExitMmsView(void)
{
int i;
int count;
SlideInfo* info;
#ifdef MMS_DEBUG
PlxTrace("ExitMmsView, will stop sound\r\n");
#endif
//stop all
gdi_image_stop_animation_all();
StopPlaySound();
if(g_view_data.timer_id)
{
PlxStopTimer(g_view_data.timer_id);
g_view_data.timer_id = 0;
}
//release menu
if(g_view_data.hMenu)
PlxDestroyDMenu(g_view_data.hMenu);
//release text info
if(g_view_data.slide_info)
{
if(g_view_data.bNoSmil)
count = g_view_data.obj_count;
else
count = mmsmsg_GetSlideCount(g_view_data.message);
for(i = 0; i < count; i++)
{
if((info = (g_view_data.slide_info+i)))
{
if(info->text)
MMS_Free((void*)info->text);
if(info->line_pos)
MMS_Free((void*)info->line_pos);
//MMS_Free((void*)info);
}
}
MMS_Free((void*)g_view_data.slide_info);
}
//release content data
if(g_view_data.image)
MMS_Free((void*)g_view_data.image);
if(g_view_data.sound)
MMS_Free((void*)g_view_data.sound);
//release message
if(g_view_data.id == -1)
{
if(g_view_data.message)
mmsmsg_SetCurSlide(g_view_data.message, g_view_data.org_slide);
}
else //by id, will close message
{
if(g_view_data.message)
mmsmsg_ReleaseMmsMessage(g_view_data.message);
}
if(g_view_data.back_screen == MMS_NEW_MSG_VIEW_BACK_SCREEN)
{
//view message from idle, into inbox
PAPP_OpenMmsInbox();
SetNewMsgViewIntoInbox();
}
else
{
//GoBackToHistory(g_view_data.back_screen);
if(IsScreenPresent(g_view_data.back_screen))
GoBackToHistory(g_view_data.back_screen);
else
GoBackHistory();
}
g_mms_main_endKeyDownFuncPtr = NULL;
MMS_Memset((void*)&g_view_data, 0, sizeof(MmsViewData));
// GoBackHistory();
}
/***************************************************************************
* Function RedrawMmsView
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
void RedrawMmsView(void)
{
int i;
int pos_x;
int pos_y;
int fcount;
#ifdef MMS_DEBUG
PlxTrace("RedrawMmsView\r\n");
#endif
reset_left_softkey();
reset_right_softkey();
gdi_image_stop_animation_all();
gdi_image_gif_reset();
gdi_layer_lock_frame_buffer();
//title
RedrawViewTitle();
//softkey
show_softkey_background();
if(g_view_data.bPlaying)
{
clear_left_softkey();
ChangeLeftSoftkey(0, IMG_GLOBAL_OK);
//EnableLeftSoftkey(0, IMG_GLOBAL_OK);
show_left_softkey();
ChangeRightSoftkey(MMS_VIEW_STR_STOP, IMG_GLOBAL_BACK);
EnableRightSoftkey(MMS_VIEW_STR_STOP, IMG_GLOBAL_BACK);
}
else
{
ChangeLeftSoftkey(STR_GLOBAL_OPTIONS, IMG_GLOBAL_OK);
EnableLeftSoftkey(STR_GLOBAL_OPTIONS, IMG_GLOBAL_OK);
SetLeftSoftkeyFunction(OnLeftKey, KEY_EVENT_UP);
// SetKeyHandler(OnLeftKey, KEY_ENTER, KEY_EVENT_DOWN);
show_left_softkey();
ChangeRightSoftkey(STR_GLOBAL_BACK, IMG_GLOBAL_BACK);
EnableRightSoftkey(STR_GLOBAL_BACK, IMG_GLOBAL_BACK);
}
show_right_softkey();
#ifdef MMS_VIEW_HASARROWS
DrawArrows();
#endif
//content
gdi_layer_unlock_frame_buffer();
gdi_layer_blt_base_layer(0, 0, UI_device_width-1, UI_device_height-1);
/*
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?