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

📄 plxmms_view.c

📁 mtk wap和mms代码。。适应mtk 25。26平台
💻 C
📖 第 1 页 / 共 5 页
字号:
/***************************************************************************
 *
 *                      Pollex Mobile Platform
 *
 * Copyright (c) 2004 by Pollex Mobile Software Co., Ltd. 
 *                       All Rights Reserved 
 *
 * Module   : 
 *
 * Purpose  : 
 *
\**************************************************************************/
#include "PlxMms_View.h"
#include "PlxMms_Util.h"
#include "AudioInc.h"
#include "Aud_defs.h"
#include "..\public\PlxPublic.h"
#include "Wgui_categories_multimedia.h"
#include "PlxMms_Obj.h"
#include "GUI_SETTING.h"

//for time zone
#include "..\..\organizer\organizerinc\Worldclock.h"

#ifdef MMS_SCROLLVIEW
#ifdef __MMI_TOUCH_SCREEN__
#include "wgui_touch_screen.h"
#endif
#endif

//macro
#define MMS_VIEW_STR_PREV    STR_ID_PLX_MMS_VIEW_PREV//(U8*)(L"Prev Page")
#define MMS_VIEW_STR_NEXT    STR_ID_PLX_MMS_VIEW_NEXT//(U8*)(L"Next Page")
#define MMS_VIEW_STR_PLAY    STR_ID_PLX_MMS_VIEW_PLAY//(U8*)(L"Play")
#define MMS_VIEW_STR_STOP    STR_ID_PLX_MMS_VIEW_STOP//(U8*)(L"Stop")
#define MMS_VIEW_STR_OBJ     STR_ID_PLX_MMS_VIEW_OBJ//(U8*)(L"Object")

//for arrow draw
#define WGUI_COLOR_TO_GDI_FORMAT(c) (gdi_color)GDI_RGB_TO_BUFFER_FORMAT(c.r, c.g, c.b)

typedef enum
{
    MMS_VIEW_PREV = 0,
    MMS_VIEW_NEXT,
    MMS_VIEW_PLAY,
    MMS_VIEW_STOP,
    MMS_VIEW_OBJ,
    MMS_VIEW_MAX
}MMS_VIEW_MENU_ITEM;

typedef enum
{
    MMS_TEXT_UNKNOWN = 0,
    MMS_TEXT_UTF8,
    MMS_TEXT_UNICODE,
    MMS_TEXT_MAX
}MMS_TEXT_TYPE;

typedef enum
{
    MMS_IMG_UNKNOWN = 0,
    MMS_IMG_BMP,
    MMS_IMG_WBMP,
    MMS_IMG_JPG,
    MMS_IMG_GIF,
    MMS_IMG_PNG,
    MMS_IMG_MAX
}MMS_IMAGE_TYPE;

typedef enum
{
    MMS_SND_UNKNOWN = 0,
    MMS_SND_WAV,
    MMS_SND_MID,
    MMS_SND_AMR,
    MMS_SND_MMF,
    MMS_SND_MAX
}MMS_SOUND_TYPE;

//struct
typedef struct tagMmsViewTableItem
{
    int id;
    U16 string;
    U16 icon;
    PlxMmsEntryPtr entry;
}MmsViewTableItem;

typedef struct tagSlideInfo
{
    U8*    text;      //a slide's text
    int    line_count; //number of lines
    int*   line_pos;   //record start pos of each line
}SlideInfo;

#ifdef MMS_SCROLLVIEW
typedef struct tagMmsRect
{
    int left;
    int top;
    int right;
    int bottom;
}MmsRect;
#endif

typedef struct tagMmsViewData
{
    void* mmse;
    long  id;
    char* folder;
    MmsMessage* message;
    U16   back_screen;

    HDMENU hMenu;

    int   org_slide;
    int   cur_slide;

    //for content show
    BOOL  bSlideShifting;
//    BOOL  bGifInactive;
    BOOL  bInactived;
    BOOL  bClosing;
    BOOL  bPlaying;

	//no smil
	BOOL  bNoSmil;
	int   obj_count;
	PMMSECONTENT no_smil_content;

    //time
    int cur_dur;
    int time_left;
    int time_top;
    int time_width;
    int time_height;


    //text
//    SlideInfo* slide_info[MAX_MMS_SLIDE_COUNT];
    SlideInfo* slide_info;

//    U8* text;
//    long text_len;
    int text_left;
    int text_top;
    int text_width;
    int text_height;
    int start_line;
    BOOL bHasText;

    //image
    U8* image;
    U8  image_type;
    long image_len;
    int image_left;
    int image_top;
    int image_width;
    int image_height;
    int image_width_show;
    int image_height_show;
    BOOL bHasImage;

    //sound
    U8* sound;
    U8  sound_type;
    long sound_len;
    BOOL bHasSound;

    //for v-scroll
#ifdef MMS_SCROLLVIEW
    MmsRect rcVScroll;	//the rect of the vertical scrollbar
    vertical_scrollbar vScroll;
#endif
    int  scr_total;
    int  scr_page;
    int  scr_cur;

    int  line_height;
    int  timer_id;
}MmsViewData;

//global
static MmsViewData g_view_data;
static U8*         g_report_content = NULL;
static int         g_report_len;
extern FuncPtr g_mms_main_endKeyDownFuncPtr;
extern char g_msg_info_buf[];

static void EnterPrev(void);
static void EnterNext(void);
static void EnterPlay(void);
static void EnterStop(void);
static void EnterObj(void);
/*
static const U8* g_view_string_table[MMS_VIEW_MAX] = 
{
//    MMS_VIEW_STR_SAVEIMG,
//    MMS_VIEW_STR_SAVESND,
    MMS_VIEW_STR_PREV,
    MMS_VIEW_STR_NEXT,
    MMS_VIEW_STR_PLAY,
    MMS_VIEW_STR_STOP
};
*/
static const MmsViewTableItem g_view_entry_table[MMS_VIEW_MAX] = 
{
    {MMS_VIEW_PREV, MMS_VIEW_STR_PREV, IMG_GLOBAL_L1, EnterPrev},
    {MMS_VIEW_NEXT, MMS_VIEW_STR_NEXT, IMG_GLOBAL_L2, EnterNext},
    {MMS_VIEW_PLAY, MMS_VIEW_STR_PLAY, IMG_GLOBAL_L3, EnterPlay},
    {MMS_VIEW_STOP, MMS_VIEW_STR_STOP, IMG_GLOBAL_L3, EnterStop},
    {MMS_VIEW_OBJ,  MMS_VIEW_STR_OBJ,  IMG_GLOBAL_L4, EnterObj }
};

//private functions
////////////////////////////////////////////////////////////////////////////
//mms view screen
static void EnterMmsView(void);
static void ExitMmsView(void);
static void RedrawMmsView(void);
static BOOL InitMmsContent(void);
static BOOL DealSlide(void);
static BOOL UpdateText(void);
static BOOL UpdateImage(void);
static BOOL UpdateSound(void);
static void StartPlaySound(void);
static void StopPlaySound(void);
static U8 GetImageType(unsigned char* data);
static U8 GetSoundType(void);
static void RedrawViewTitle(void);
static void DrawOneTextLine(U8* string, int n, int x, int y);
static int FormatWString(U8* wsrc, long src_len, int* line_pos);
static void InitSlidePlay(void);
//static void Exit2Idle(void);
static void LeaveMmsView(void);
static void ExitViewReport(void);
static BOOL UpdateObject(int index);
static BOOL InitNoSmil(void);
static int GetObjCount(void* mmse, void* msg);

#ifdef MMS_SCROLLVIEW
static void RedrawVScroll(void);
#endif

////////////////////////////////////////////////////////////////////////////
//mms view menu
static BOOL CreateMmsViewMenu(void);

////////////////////////////////////////////////////////////////////////////
//mms view softkey handlers
static void OnLeftKey(void);
static void OnRightKey(void);
static void OnDownKey(void);
static void OnUpKey(void);
static void OnPrevKey(void);
static void OnNextKey(void);
static void DrawArrows(void);
static void OnVolDown(void);
static void OnVolUp(void);

#ifdef MMS_SCROLLVIEW
#ifdef __MMI_TOUCH_SCREEN__
static void OnTouchPenDown(mmi_pen_point_struct pos);
static void OnTouchPenMove(mmi_pen_point_struct pos);
static void OnTouchPenUp(mmi_pen_point_struct pos);
static void OnTouchPenRepeat(mmi_pen_point_struct pos);
static BOOL ProcessPenOnScrollbar(mmi_pen_point_struct pos, mmi_pen_event_type_enum pen_event);
#endif //__MMI_TOUCH_SCREEN__
static void ScrollTo(int pos);
#endif

////////////////////////////////////////////////////////////////////////////
//mms view callbacks
static void MmsViewPlayTimerCallback(void* param);
static int MmsViewMenuCallback(HDMENU hDmenu, unsigned long id, unsigned long event);

static void EnterViewDiliveryReport(void);
static void EmptyMenuEntry(void);

//extern int PlxMmsWideCharToUTF8(const char* lpWideCharStr, int cWideCharLen, 
//	   char* lpUtf8Str, int cUtf8Len);
//extern int PlxMmsUTF8ToWideChar(const char* lpUtf8Str, int cUtf8Len,
//	   char* lpWideCharStr, int cWideCharLen);
extern void SetNewMsgViewIntoInbox(void);
extern U8   PlxMmsDelHistoryHdlr(void* in_param);

static void AdjustDateAndTime(PMMSETIME pTime);
extern U8 PhnsetGetHomeCity(void);

typedef void (*snd_callback)(S32 result); 
extern S32 mdi_audio_play_string(void* audio_data, 
            U32 len, U8 format, U8 play_style, 
            S32* handle_p, snd_callback handler);

/* 11-23 Modified for 06A */
#include "PlxConfig.h"
#if defined(PROJECT_BRANCH_06A)
extern int PlxStartTimer(dword dwMilliseconds, void (*pTimerProc)(void* pParam), void* pParam);
#else
extern int PlxStartTimer(DWORD dwMilliseconds, void (*pTimerProc)(void* pParam), void* pParam);
#endif
/* 11-23 Modified for 06A end */
extern int PlxStopTimer(int id);

////////////////////////////////////////////////////////////////////////////
//public functions
/***************************************************************************
* Function	MmsViewGoBackToIdle
* Purpose	
* Params	
* Return	
* Remarks	
\**************************************************************************/
void MmsViewGoBackToIdle(void)
{
    int i;
    int count;
    SlideInfo* info;

#ifdef MMS_DEBUG
    PlxTrace("MmsViewGoBackToIdle, 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_report_content)
    {
        MMS_Free((void*)g_report_content);
        g_report_content = NULL;
    }

    MMS_Memset((void*)&g_view_data, 0, sizeof(MmsViewData));
}

/***************************************************************************
* Function	CreateMmsViewWithID
* Purpose	Entry of mms view
* Params	
* Return	
* Remarks	
\**************************************************************************/
BOOL CreateMmsViewWithID(void* mmse, long id, const char* folder, U16 screen)
{
    int count;

    if(!mmse || id < 0)
        return FALSE;

#ifdef MMS_DEBUG
    PlxTrace("CreateMmsViewWithID, id = %ld\r\n", id);
#endif

    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;
    }
    //create message
    g_view_data.message = mmsmsg_CreateMmsMessage();
    if(!g_view_data.message)
    {
#ifdef MMS_DEBUG
    PlxTrace("!g_view_data.message\r\n");
#endif
        MMS_Memset((void*)&g_view_data, 0, sizeof(MmsViewData));
        return FALSE;
    }
#ifdef MMS_DEBUG
    PlxTrace("g_view_data.message = %p\r\n", g_view_data.message);
#endif

    //init message
    if(!mmsmsg_Init(g_view_data.message, mmse, id))
    {
#ifdef MMS_DEBUG
    PlxTrace("!mmsmsg_Init(g_view_data.message, mmse, id)\r\n");
#endif
        mmsmsg_ReleaseMmsMessage(g_view_data.message);
        MMS_Memset((void*)&g_view_data, 0, sizeof(MmsViewData));
        return FALSE;
    }

    if((count = mmsmsg_GetSlideCount(g_view_data.message)) == 0)
    {
        //no slide message
#ifdef MMS_DEBUG
    PlxTrace("mmsmsg_GetSlideCount(g_view_data.message) == 0\r\n");
#endif
        g_view_data.mmse        = mmse;
        g_view_data.id          = id;
        g_view_data.back_screen = screen;
		g_view_data.bNoSmil		= TRUE;

		InitNoSmil();
        goto goto_view;
    }

    //
    g_view_data.slide_info = (SlideInfo*)MMS_Malloc(sizeof(SlideInfo) * count);
    if(!g_view_data.slide_info)
    {
        mmsmsg_ReleaseMmsMessage(g_view_data.message);
        MMS_Memset((void*)&g_view_data, 0, sizeof(MmsViewData));
        return FALSE;
    }
	MMS_Memset((void*)g_view_data.slide_info, 0, sizeof(SlideInfo) * count);

    g_view_data.mmse        = mmse;
    g_view_data.id          = id;
    g_view_data.org_slide   = 0;
    g_view_data.cur_slide   = 1;
    g_view_data.back_screen = screen;

#ifdef MMS_DEBUG
    PlxTrace("will InitMmsContent\r\n");
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -