📄 plxmms_obj.c
字号:
/***************************************************************************
*
* 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 + -