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 + -
显示快捷键?