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

📄 plxmms_obj.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_Obj.h"
#include "PlxMms_Util.h"
#include "gdi_include.h"
#include "AudioInc.h"
#include "Aud_defs.h"
#include "..\public\PlxPublic.h"
#include "Wgui_categories_multimedia.h"
#include "wgui_categories_inputs.h"
#include "Fs_type.h"
#include "Fs_func.h"
#include "fmt_def.h"
#include "FileMgr.h"
#include "mmsfrrecord.h"
#include "GUI_SETTING.h"
#ifdef MMS_DRAWCOMIMG
#include "PlxMms_ComBmp.h"
#endif

//macro
#define MMS_OBJ_STR_VIEW        STR_ID_PLX_MMS_OBJ_VIEW//(U8*)(L"View")
#define MMS_OBJ_STR_PLAY        STR_ID_PLX_MMS_OBJ_PLAY//(U8*)(L"Play")
#define MMS_OBJ_STR_STOP        STR_ID_PLX_MMS_OBJ_STOP//(U8*)(L"Stop")
#define MMS_OBJ_STR_SAVE        STR_ID_PLX_MMS_OBJ_SAVE//(U8*)(L"Save")
#define MMS_OBJ_STR_DEL         STR_ID_PLX_MMS_OBJ_DEL//(U8*)(L"Delete")
#define MMS_OBJ_STR_INS         STR_ID_PLX_MMS_OBJ_INS//(U8*)(L"Insert")
#define MMS_OBJ_STR_SAVEOK      STR_ID_PLX_MMS_OBJ_SAVEOK
#define MMS_OBJ_STR_SAVEFAIL    STR_ID_PLX_MMS_OBJ_SAVEFAIL
#define MMS_OBJ_STR_EXIST	    STR_ID_PLX_MMS_OBJ_EXIST
#define MMS_OBJ_STR_NONAME	    STR_ID_PLX_MMS_OBJ_NONAME
#define MMS_OBJ_STR_NOOBJ	    STR_ID_PLX_MMS_OBJ_NOOBJ
#define MMS_OBJ_STR_DELOK       STR_ID_PLX_MMS_BOX_DELOK

#define MMS_OBJ_STR_TXT         STR_ID_PLX_MMS_OBJ_TXT
#define MMS_OBJ_STR_BMP         STR_ID_PLX_MMS_OBJ_BMP
#define MMS_OBJ_STR_WBMP        STR_ID_PLX_MMS_OBJ_WBMP
#define MMS_OBJ_STR_JPG         STR_ID_PLX_MMS_OBJ_JPG
#define MMS_OBJ_STR_GIF         STR_ID_PLX_MMS_OBJ_GIF
#define MMS_OBJ_STR_PNG         STR_ID_PLX_MMS_OBJ_PNG
#define MMS_OBJ_STR_MID         STR_ID_PLX_MMS_OBJ_MID
#define MMS_OBJ_STR_WAV         STR_ID_PLX_MMS_OBJ_WAV
#define MMS_OBJ_STR_MMF         STR_ID_PLX_MMS_OBJ_MMF
#define MMS_OBJ_STR_AMR         STR_ID_PLX_MMS_OBJ_AMR
#define MMS_OBJ_STR_MP3         STR_ID_PLX_MMS_OBJ_MP3
#define MMS_OBJ_STR_UNKNOWN     STR_ID_PLX_MMS_OBJ_UNKNOWN

#define MMS_CONTENTTYPE_MID     "audio/mid"
#define MMS_CONTENTTYPE_XMID    "audio/x-midi"
#define MMS_CONTENTTYPE_SPMID   "audio/sp-midi"
#define MMS_CONTENTTYPE_XWAV    "audio/x-wav"

#define MMS_CONTENTTYPE_WBMP    "image/wbmp"

#define UNICODE_TXT_HEAD        0xFEFF

typedef enum
{
    MMS_OBJ_VIEW = 0,
    MMS_OBJ_PLAY,
    MMS_OBJ_STOP,
    MMS_OBJ_SAVE,
    MMS_OBJ_DEL,
    MMS_OBJ_INS,
    MMS_OBJ_DELALL,
    MMS_OBJ_COUNT
}MMS_OBJ_INDEX;



//struct
typedef struct tagMmsObjEntryItem
{
    U8 id;
    U16 string;
    U16 icon;
    PlxMmsEntryPtr entry;
}MmsObjEntryItem;

typedef struct tagMmsObjItem
{
    U8  type;
    PMMSECONTENT content;
    struct tagMmsObjItem* next;
	U8 name[MAX_OBJ_NAME_LEN*2];
}MmsObjItem;

typedef struct tagMmsObjData
{
    MmsMessage* message;
    MmsObjItem* obj_head;
    int         obj_count;
    int         cur_item_index;
    MmsObjItem* cur_item;
    HDMENU      hMenu;
    BOOL        bSoundPlaying;
    BOOL        bAttList;
    BOOL        bLeavListByMenu;
    U16         back_screen;
    U16         menu_back_screen;
    //for obj save
//    U8*  save_data;
    //for obj view
    U8   type;
    U8*  data;
    long len;
    int  left;
    int  top;
    int  width;
    int  height;
    int  width_show;
    int  height_show;
    int  gif_fcount;
	U8   save_filename[(MAX_OBJ_NAME_LEN+10)*2];
}MmsObjData;

//global
static MmsObjData g_obj_data;

static void EntryViewObj(void);
static void EntryPlayObj(void);
static void EntryStopObj(void);
static void EntrySaveObj(void);
static void EntryDelObj(void);
static void EntryInsObj(void);
static void EntryDelAllObj(void);

static const MmsObjEntryItem g_obj_entry_table[MMS_OBJ_COUNT] = 
{
    {MMS_OBJ_VIEW, MMS_OBJ_STR_VIEW, IMG_GLOBAL_L1, EntryViewObj},
    {MMS_OBJ_PLAY, MMS_OBJ_STR_PLAY, IMG_GLOBAL_L1, EntryPlayObj},
    {MMS_OBJ_STOP, MMS_OBJ_STR_STOP, IMG_GLOBAL_L1, EntryStopObj},//EnterStop},
    {MMS_OBJ_SAVE, MMS_OBJ_STR_SAVE, IMG_GLOBAL_L2, EntrySaveObj},
    {MMS_OBJ_DEL,  MMS_OBJ_STR_DEL,  IMG_GLOBAL_L3, EntryDelObj},
    {MMS_OBJ_INS,  MMS_OBJ_STR_INS,  IMG_GLOBAL_L4, EntryInsObj},
    {MMS_OBJ_DELALL,  STR_ID_PLX_MMS_BOX_DELALL,  IMG_GLOBAL_L5, EntryDelAllObj}
};

//private functions
////////////////////////////////////////////////////////////////////////////
//obj list
static int GetObjList(void);

static void MmsObjListHiliteHandler(S32 index);
static void EnterObjList(void);
static pBOOL MmsObjListGetItemText(S32 item_index, UI_string_type str_buff, 
                         UI_image_type* img_buff_p, U8 str_img_mask);
static void ExitObjList(void);
static void EnterObjListMenu(void);
static void CreateSaveObj(void);
//static void SaveImage(void);
//static void SaveSound(void);
//static void EndSaveImage(U8* def_name);
//static void EndSaveSound(U8* def_name);
static void SaveObjCallback(PLIBEVENT event);

////////////////////////////////////////////////////////////////////////////
//softkey handler

////////////////////////////////////////////////////////////////////////////
//obj menu
static BOOL CreateObjMenu(void);

////////////////////////////////////////////////////////////////////////////
//list
static void ClearList(void);
static MmsObjItem* GetListNode(int index);
static void DelListNode(MmsObjItem* node);
static BOOL AddListNode(MmsObjItem* node, BOOL bInit);
static void ObjGoBack(void);
static void ObjMenuGoBack(void);

////////////////////////////////////////////////////////////////////////////
//callback
static int MmsObjMenuCallback(HDMENU hDmenu, unsigned long id, 
                              unsigned long event);
//static void InsertObjCallback(void *filePath, int n);
static void InsertObjCallback(WCHAR* filePath);

////////////////////////////////////////////////////////////////////////////
//for obj view window
static BOOL CreateOneObjView(void);
//static void EnterOneObjView(void);
static void ExitOneObjView(void);
static BOOL InitImage(void);
static BOOL InitSound(void);
static BOOL InitText(void);
static void DrawImage(void);
static void DrawSound(void);
static void DrawTexts(void);
static void RedrawOneImage(void);
static void RedrawOneSound(void);
static void RedrawOneObjTitle(void);
//static void RedrawOneText(void);
static void LeaveDrawImage(void);
static void LeaveObjList(void);
static void DoSaveObj(U8* def_name, BOOL bContentText);
static void StopPlayingSound(void);
static void BackToObjList(void);
static void IfDelCallback(PLIBEVENT event);
static void IfDelAllCallback(PLIBEVENT event);
//static char* UTF8ToGB(const char* utf_text, int utf_len, int* gb_length);
static WCHAR* UTF8ToUnicodeText(const char* utf_text, int utf_len, int* uni_length);
static U8 GetObjTypeByData(unsigned char* data);

////////////////////////////////////////////////////////////////////////////
static void EmptyMenuEntry(void);

extern void SetActiveScreenId(U16 id);

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);

//public funstions
/***************************************************************************
* Function	MmsObjGoBackToIdle
* Purpose	
* Params	
* Return	
* Remarks	
\**************************************************************************/
void MmsObjGoBackToIdle(void)
{
    gdi_image_stop_animation_all();
/*
    if(g_obj_data.bSoundPlaying)
    {
        switch(g_obj_data.type)
        {
        case MMS_OBJ_MID:
            StopAudioMidiStream();
            break;
        case MMS_OBJ_AMR:
        case MMS_OBJ_IMY:
            StopAudioStream();
            break;
    //        case MMS_SND_MMF:
    //            break;
        case MMS_OBJ_WAV:
            StopAudioWavStream();
            break;
        }
    }
*/
    StopPlayingSound();
    ClearList();
    if(g_obj_data.data)
        MMS_Free((void*)g_obj_data.data);
    if(g_obj_data.hMenu)
        PlxDestroyDMenu(g_obj_data.hMenu);

    MMS_Memset((void*)&g_obj_data, 0, sizeof(g_obj_data));
}

/***************************************************************************
* Function	CreateMmsObj
* Purpose	
* Params	
* Return	
* Remarks	
\**************************************************************************/
BOOL CreateMmsObj(MmsMessage* message, BOOL bAttList, U16 screen)
{
    if(!message)
        return FALSE;

    MMS_Memset((void*)&g_obj_data, 0, sizeof(MmsObjData));

    g_obj_data.message = message;
    g_obj_data.bAttList = bAttList;
    g_obj_data.back_screen = screen;

    if(!CreateObjMenu())
    {
        MMS_Memset((void*)&g_obj_data, 0, sizeof(MmsObjData));
        return FALSE;
    }

    GetObjList();

    if(g_obj_data.obj_count == 0 &&
       bAttList) //no obj
    {
//        PlxDestroyDMenu(g_obj_data.hMenu);
//        return FALSE;
//        EnterObjList();
        g_obj_data.menu_back_screen = screen;
        EnterObjListMenu();
    }
    else
    {
        EnterObjList();
    }

    return TRUE;
}

/***************************************************************************
* Function	CreateMmsObjByID
* Purpose	
* Params	
* Return	
* Remarks	
\**************************************************************************/
BOOL CreateMmsObjByID(void* mmse, long id, BOOL bAttList, U16 screen)
{
    MmsMessage* message;

    if(id < 0)
        return FALSE;
    
    message = mmsmsg_CreateMmsMessage();
    if(!message)
        return FALSE;
    if(!mmsmsg_Init(message, mmse, id))
    {
        mmsmsg_ReleaseMmsMessage(message);
        return FALSE;
    }

    return CreateMmsObj(message, bAttList, screen);
}

////////////////////////////////////////////////////////////////////////////
//private functions
////////////////////////////////////////////////////////////////////////////
/***************************************************************************
* Function	EnterObjList
* Purpose	
* Params	
* Return	
* Remarks	
\**************************************************************************/
void EnterObjList(void)
{
    U8* guiBuffer = NULL;

    if(g_obj_data.obj_count == 0 &&
       g_obj_data.bAttList)
    {
        ObjGoBack();
        return;
    }

    if(GetActiveScreenId() != SCR_ID_PLX_MMS_OBJLIST)
    {
        EntryNewScreen(SCR_ID_PLX_MMS_OBJLIST, LeaveObjList, EnterObjList, NULL);	
        g_obj_data.menu_back_screen = SCR_ID_PLX_MMS_OBJLIST;
    }

    RegisterHighlightHandler(MmsObjListHiliteHandler);

    if(g_obj_data.bAttList)
    {
        ShowCategory184Screen(STR_ID_PLX_MMS_ATT, IMG_ID_PLX_MMS, 
							STR_GLOBAL_OPTIONS, IMG_GLOBAL_OK,
							STR_GLOBAL_BACK, IMG_GLOBAL_BACK,
							g_obj_data.obj_count, MmsObjListGetItemText,
							NULL, g_obj_data.cur_item_index, guiBuffer);
    }
    else
    {
        ShowCategory184Screen(STR_ID_PLX_MMS_BOX_OBJ, IMG_ID_PLX_MMS, 
							STR_GLOBAL_OPTIONS, IMG_GLOBAL_OK,
							STR_GLOBAL_BACK, IMG_GLOBAL_BACK,
							g_obj_data.obj_count, MmsObjListGetItemText,
							NULL, g_obj_data.cur_item_index, guiBuffer);
    }

	SetLeftSoftkeyFunction(EnterObjListMenu, KEY_EVENT_UP);
    SetKeyHandler(EnterObjListMenu, KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
//    SetKeyHandler(EnterObjListMenu, KEY_ENTER, KEY_EVENT_DOWN);
    SetKeyHandler(PlxMmsGoBackToIdle, KEY_END, KEY_EVENT_DOWN);
	SetRightSoftkeyFunction(ObjGoBack, KEY_EVENT_UP);
    SetKeyHandler(ObjGoBack, KEY_LEFT_ARROW, KEY_EVENT_DOWN);
}

/***************************************************************************
* Function	LeaveObjList
* Purpose	
* Params	
* Return	
* Remarks	
\**************************************************************************/
void LeaveObjList(void)
{
/*
    if(g_obj_data.bSoundPlaying)
    {
        switch(g_obj_data.type)
        {
        case MMS_OBJ_MID:
            StopAudioMidiStream();
            break;
        case MMS_OBJ_AMR:
        case MMS_OBJ_IMY:
            StopAudioStream();
            break;
    //        case MMS_SND_MMF:
    //            break;
        case MMS_OBJ_WAV:
            StopAudioWavStream();
            break;
        }
    }
    g_obj_data.bSoundPlaying = FALSE;
*/
    if(!g_obj_data.bLeavListByMenu)
        StopPlayingSound();
}

/***************************************************************************
* Function	ExitObjList
* Purpose	
* Params	
* Return	
* Remarks	
\**************************************************************************/
void ExitObjList(void)
{

⌨️ 快捷键说明

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