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

📄 plxmms_edit.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_Edit.h"

#include "PlxMms_Util.h"
#include "Wgui_categories_multimedia.h"
#include "..\public\PlxPublic.h"
#include "fmt_def.h"
#include "FileMgr.h"
#include "Fs_type.h"
#include "Fs_func.h"
#include "mmsfrrecord.h"
#include "PlxMms_View.h"
#include "PlxMms_Obj.h"

//macros
#define MAX_MAINMENU_TEXT_LEN (MAX_PB_NAME_LEN+1)//50
#define MAX_EDIT_TITLE        20
#define MAX_CONTENT_TEXT_LEN  (5*1024+1)

#define MAX_SHOW_TEXT         64//32//16//14
#define SAVE_SPACE            128
#define SAVE_SPACE_TEXT	      64

#define IMG_SHOW_WIDTH      64 //48
typedef void (*MmsEditEntryPtr)(void);


//ids
#define MMS_EDITMENU_EDITTEXT 100
#define MMS_EDITMENU_INSERT   101
#define MMS_EDITMENU_INSIMG   102
#define MMS_EDITMENU_INSSND   103
#define MMS_EDITMENU_INSATT   104
#define MMS_EDITMENU_INSPAGE  105
#define MMS_EDITMENU_ARRANGE  106
#define MMS_EDITMENU_ARRIMG   107
#define MMS_EDITMENU_ARRTEXT  108
#define MMS_EDITMENU_DELETE   109
#define MMS_EDITMENU_DELIMG   110
#define MMS_EDITMENU_DELSND   111
#define MMS_EDITMENU_DELATT   112
#define MMS_EDITMENU_DELPAGE  113
#define MMS_EDITMENU_PREV     114
#define MMS_EDITMENU_NEXT     115
#define MMS_EDITMENU_PREVIEW  116
#define MMS_EDITMENU_TIME     117

//strings
#define MMS_EDITMENUSTR_EDITTEXT STR_ID_PLX_MMS_EDITMENUSTR_EDITTEXT//(const char*)(L"Edit Text")
#define MMS_EDITMENUSTR_INSERT   STR_ID_PLX_MMS_EDITMENUSTR_INSERT//(const char*)(L"Insert")
#define MMS_EDITMENUSTR_INSIMG   STR_ID_PLX_MMS_EDITMENUSTR_INSIMG//(const char*)(L"Image")
#define MMS_EDITMENUSTR_INSSND   STR_ID_PLX_MMS_EDITMENUSTR_INSSND//(const char*)(L"Sound")
#define MMS_EDITMENUSTR_INSATT   STR_ID_PLX_MMS_EDITMENUSTR_INSATT//(const char*)(L"Att")
#define MMS_EDITMENUSTR_INSPAGE  STR_ID_PLX_MMS_EDITMENUSTR_INSPAGE//(const char*)(L"Page")
#define MMS_EDITMENUSTR_ARRANGE  STR_ID_PLX_MMS_EDITMENUSTR_ARRANGE//(const char*)(L"Arrangment")
#define MMS_EDITMENUSTR_ARRIMG   STR_ID_PLX_MMS_EDITMENUSTR_ARRIMG//(const char*)(L"Image First")
#define MMS_EDITMENUSTR_ARRTEXT  STR_ID_PLX_MMS_EDITMENUSTR_ARRTEXT//(const char*)(L"Text First")
#define MMS_EDITMENUSTR_DELETE   STR_ID_PLX_MMS_OBJ_DEL//STR_ID_PLX_MMS_EDITMENUSTR_DELETE//(const char*)(L"Delete")
#define MMS_EDITMENUSTR_DELIMG   STR_ID_PLX_MMS_EDITMENUSTR_INSIMG//STR_ID_PLX_MMS_EDITMENUSTR_DELIMG//(const char*)(L"Image")
#define MMS_EDITMENUSTR_DELSND   STR_ID_PLX_MMS_EDITMENUSTR_INSSND//STR_ID_PLX_MMS_EDITMENUSTR_DELSND//(const char*)(L"Sound")
#define MMS_EDITMENUSTR_DELATT   STR_ID_PLX_MMS_EDITMENUSTR_INSATT//STR_ID_PLX_MMS_EDITMENUSTR_DELATT//(const char*)(L"Att")
#define MMS_EDITMENUSTR_DELPAGE  STR_ID_PLX_MMS_EDITMENUSTR_DELPAGE//(const char*)(L"Page")
#define MMS_EDITMENUSTR_PREV     STR_ID_PLX_MMS_EDITMENUSTR_PREV//(const char*)(L"Prev Page")
#define MMS_EDITMENUSTR_NEXT     STR_ID_PLX_MMS_EDITMENUSTR_NEXT//(const char*)(L"Next Page")
#define MMS_EDITMENUSTR_PREVIEW  STR_ID_PLX_MMS_EDITMENUSTR_PREVIEW//(const char*)(L"Preview")
#define MMS_EDITMENUSTR_TIME     STR_ID_PLX_MMS_EDITMENUSTR_TIME//(const char*)(L"Time")

#define MMS_EDIT_MAINMENUMENU_EDIT STR_ID_PLX_MMS_EDITRECV_EDIT//STR_ID_PLX_MMS_EDIT_MAINMENUMENU_EDIT//(const char*)(L"Edit")
#define MMS_EDIT_MAINMENUMENU_SEND STR_ID_PLX_MMS_BOX_SEND//STR_ID_PLX_MMS_EDIT_MAINMENUMENU_SEND//(const char*)(L"Send")
#define MMS_EDIT_MAINMENUMENU_SAVE STR_ID_PLX_MMS_EDIT_MAINMENUMENU_SAVE//(const char*)(L"Save")

#define MMS_EDITMENUSTR_RECEIVERS STR_ID_PLX_MMS_EDITMENUSTR_RECEIVERS//(const char*)(L"Receivers")
#define MMS_EDITMENUSTR_SLIDES STR_ID_PLX_MMS_EDITMENUSTR_SLIDES//(const char*)(L"Slides")
#define MMS_EDITMENUSTR_ATTS STR_ID_PLX_MMS_EDITMENUSTR_ATTS//(const char*)(L"Attachments")

#define MMS_EDIT_POP_SAVEOK STR_ID_PLX_MMS_EDIT_SAVEOK//(U8*)(L"Saved")
#define MMS_EDIT_POP_SAVEFAIL STR_ID_PLX_MMS_EDIT_SAVEFAIL//(U8*)(L"Save Failed")
#define MMS_EDIT_POP_SENDFAIL STR_ID_PLX_MMS_BOX_SENDFAILE//(U8*)(L"Send Failed")
#define MMS_EDIT_POP_SENDING STR_ID_PLX_MMS_BOX_SENDING//(U8*)(L"Sending Message")
#define MMS_EDIT_POP_EMPTYMSG STR_ID_PLX_MMS_EDIT_MSGNULL//(U8*)(L"Empty Number")
#define MMS_EDIT_POP_NONUM STR_ID_PLX_MMS_EDIT_NORECV//(U8*)(L"No Number")
#define MMS_EDIT_POP_INSFAIL STR_ID_PLX_MMS_EDIT_INSFAIL//(U8*)(L"Insert Failed")
#define MMS_EDIT_POP_OPENFAIL STR_ID_PLX_MMS_BOX_OPENFAIL//(U8*)(L"Open Failed")
#define MMS_EDIT_POP_PREVIEWFAIL STR_ID_PLX_MMS_EDIT_PREVIEWFAIL//(U8*)(L"Preview Failed")
#define MMS_EDIT_POP_OBJFAIL  STR_ID_PLX_MMS_EDIT_OBJFAIL//(U8*)(L"Object Error")
#define MMS_EDIT_POP_ERRFILE  STR_ID_PLX_MMS_EDIT_ERRFILE//(U8*)(L"Invalid File")
#define MMS_EDIT_POP_TOOLARGE STR_ID_PLX_MMS_EDIT_TOOLARGE//(U8*)(L"Too Large")
#define MMS_EDIT_POP_ERRTYPE  STR_ID_PLX_MMS_EDIT_ERRTYPE//(U8*)(L"Type Unsupported")
#define MMS_EDIT_POP_IFSAVE   STR_ID_PLX_MMS_EDIT_IFSAVE
#define MMS_EDIT_POP_EMPTYINPUT STR_ID_PLX_MMS_EDIT_EMPTYINPUT
#define MMS_EDIT_POP_INVALIDINPUT STR_ID_PLX_MMS_EDIT_INVALIDINPUT

/*typedef enum 
{
	INLINE_TO = 0,
	INLINE_CC,
	INLINE_BCC,
	INLINE_SUBJECT,	
	INLINE_CONTENT,
	INLINE_CONTENT_BRIEF,
	INLINE_CONTENT_ATTACH,
    INLINE_MAINMENU_COUNT
} PLX_MMS_INLINE_ITEM_DISPLAY;
*/
typedef enum
{
    MMS_EDIT_MENU_TO = 0,
    MMS_EDIT_MENU_CC,
    MMS_EDIT_MENU_BCC,
    MMS_EDIT_MENU_SUB,
    MMS_EDIT_MENU_CONTENT,
    MMS_EDIT_MENU_ATT,
    MMS_EDIT_MENU_MAX
}MMS_EDIT_MENU;
/*
typedef enum
{
    INLINE_EDIT = 0,
    INLINE_SEND,
    INLINE_SAVE,
    INLINE_MAINMENUMENU_COUNT
} PLX_MMS_INLINE_ITEM_MAINMENUMENU;
*/
typedef enum
{
    MMS_EDIT_MENUMENU_EDIT = 0,
    MMS_EDIT_MENUMENU_SEND,
    MMS_EDIT_MENUMENU_SAVE,
    MMS_EDIT_MENUMENU_MAX
}MMS_EDIT_MENUMENU;

//struct

typedef struct tagMmsEditData
{
    void* mmse; //passed outside
    MmsMessage* message;
    
    HDMENU hMenu;
    HDMENU hInsMenu;
    HDMENU hArrMenu;
    HDMENU hDelMenu;

    HDMENU hMainMenuMenu;

    U16  back_screen;
	U16  send_back_screen;
    U16  menu_back_screen;

    //
    char to[MAX_TO_LEN+1];
    char cc[MAX_TO_LEN+1];
    char bcc[MAX_TO_LEN+1];
    
    int  cur_hilite_item;
    int  cur_slide_dur;

    BOOL bInsAtt;
    BOOL bTextFirst;
    BOOL bSubModified;
	BOOL bTextModified;
    BOOL bBackFromDur;

    //for recv list
    MmsEditRecvList recv_list;
    MmsEditRecvList cc_list;
    MmsEditRecvList bcc_list;

    //for content draw
    //text
    char* utfText;
    long  utfLen;
    
    long  uniLen;
    long  uniTextTempLen;
    
//    U8  text[MAX_TO_LEN*2];
    
    S8* text_show;
    int text_len;
    int  text_left;
    int  text_top;
    int  text_width;
    int  text_height;
    

    //image
    U8*  image;
    U8   image_type;
    long image_len;
    int  image_left;
    int  image_top;
    int  image_width;
    int  image_height;
    //sound
//    BOOL sound;
    int  snd_left;
    int  snd_top;
    int  snd_width;
    int  snd_height;

    BOOL bGoingBackToIdle;
	BOOL bPubCall;
    PlxMmsBoxEditCBPtr box_callback;
    //for public call
    
    PlxMmsPubCallback pub_callback;

    HGIF hGif;

	U8   sub[MMS_MAX_SUB_LEN];
    U8   edit_title[MAX_EDIT_TITLE*2]; //unicode
    //
    U8   to_item[MAX_MAINMENU_TEXT_LEN*2];
    U8   cc_item[MAX_MAINMENU_TEXT_LEN*2];
    U8   bcc_item[MAX_MAINMENU_TEXT_LEN*2];
    U8   content_item[MAX_MAINMENU_TEXT_LEN*2];
    U8   att_item[MAX_MAINMENU_TEXT_LEN*2];
	U8   uniText[MAX_CONTENT_TEXT_LEN*2];
    U8   uniTextTemp[MAX_CONTENT_TEXT_LEN*2];
	U8   text[(MAX_SHOW_TEXT+4)*2];
	U8   edit_dur[6];
}MmsEditData;

typedef struct tagEditMainMenuTableItem
{
    U16 id;
    U16 string;
    PlxMmsEntryPtr entry;
}EditMainMenuTableItem;

typedef struct tagEditMainMenuMenuTableItem
{
    U8  id;
    U16 string;
    U16 icon;
    PlxMmsEntryPtr entry;
}EditMainMenuMenuTableItem;

//global
static MmsEditData g_edit_data;
//static U8          g_edit_mainmenu_text[INLINE_MAINMENU_COUNT][MAX_MAINMENU_TEXT_LEN*3];

static void EnterTo(void);
static void EnterCC(void);
static void EnterBCC(void);
static void EnterSub(void);
static void EnterContent(void);
static void EditCurItem(void);
static void SendMmsMessage(void);
static void SaveMmsMessage(void);
static BOOL SaveMmsMessageNotExit(void);
static void EnterAttList(void);

static const EditMainMenuTableItem g_edit_mainmenu_table[MMS_EDIT_MENU_MAX] = 
{
    {MENU_ID_PLX_MMS_NEW_TO,        STR_ID_PLX_MMS_TO,      EnterTo},
    {MENU_ID_PLX_MMS_NEW_CC,        STR_ID_PLX_MMS_CC,      EnterCC},
    {MENU_ID_PLX_MMS_NEW_BCC,       STR_ID_PLX_MMS_BCC,     EnterBCC},
    {MENU_ID_PLX_MMS_NEW_SUB,       STR_ID_PLX_MMS_SUBJECT, EnterSub},
    {MENU_ID_PLX_MMS_NEW_CONTENT,   STR_ID_PLX_MMS_CONTENT, EnterContent},
    {MENU_ID_PLX_MMS_NEW_ATT,       STR_ID_PLX_MMS_ATT,     EnterAttList}
};

static const EditMainMenuMenuTableItem g_edit_mainmenumenu_table[MMS_EDIT_MENUMENU_MAX] = 
{
    {MMS_EDIT_MENUMENU_EDIT, MMS_EDIT_MAINMENUMENU_EDIT, IMG_GLOBAL_L1, EditCurItem},
    {MMS_EDIT_MENUMENU_SEND, MMS_EDIT_MAINMENUMENU_SEND, IMG_GLOBAL_L2, SendMmsMessage},
    {MMS_EDIT_MENUMENU_SAVE, MMS_EDIT_MAINMENUMENU_SAVE, IMG_GLOBAL_L3, SaveMmsMessage}
};

static const U16 gPlxMmsNewIconList[]=			// icon list, just for show
{
	IMG_ID_PLX_MMS_TO,
	IMG_ID_PLX_MMS_CC,
	IMG_ID_PLX_MMS_BCC,
	IMG_ID_PLX_MMS_SUB,
	IMG_ID_PLX_MMS_CONTENT,
	IMG_ID_PLX_MMS_ATT,
	0
};

#ifdef __MMI_TOUCH_SCREEN__
static const U16 gPlxMmsNewStringList[] = 
{
    STR_ID_PLX_MMS_TO,
    STR_ID_PLX_MMS_CC,
    STR_ID_PLX_MMS_BCC,
    STR_ID_PLX_MMS_SUBJECT,
    STR_ID_PLX_MMS_CONTENT,
    STR_ID_PLX_MMS_ATT,
    0
};
extern void mmi_wgui_register_list_item_selected_callback(
                    void (*pen_event_selected_callback_function)(void));
extern void mmi_wgui_reset_list_item_selected_callback(void);
#endif
//private functions
//extern void gdi_draw_solid_rect(S32 x1, S32 y1, S32 x2, S32 y2, 
//                                gdi_color rect_color);


//static void InitEditMainMenu(void);
//static void EditMainMenuHilitHandler(S32 index);
//static void UpdateContentEdit(void);
//static void RedrawContentEdit(void);
static BOOL UpdateText(void);
static BOOL UpdateImage(void);
static BOOL UpdateSound(void);
static void UpdateTitle(void);
static void PopMmsEditMenu(void);
/*static void DrawContentEdit(U16 title,U16 title_icon,U16 left_softkey,
		 U16 left_softkey_icon,U16 right_softkey,U16 right_softkey_icon,
	     U8* history_buffer);
*/
static void ExitContentEdit(void);
static BOOL CreateMmsEditMenu(void);
//static void OnEditText(void);
static void EnterTextEdit(void);
//static void SaveEditText(void);
static BOOL OnInsPage(void);
static BOOL SaveCurText(void);
static BOOL OnDelPage(void);
static BOOL OnPrevPage(BOOL bByKey);
static BOOL OnNextPage(BOOL bByKey);
static void OnLeftKey(void);
static void OnRightKey(void);
static BOOL OnPreview(void);
static void InitEditMainMenuMenu(void);
//static void EditMainMenuMenuHiliteHandler(S32 index);
static BOOL OnDelImage(void);
static BOOL OnDelSound(void);
static void OnSetCurSlideTime(void);
static BOOL SaveNum(void);
static BOOL SaveSub(void);
static void ExitMmsEdit(BOOL bSend);
//static void Exit2Idle(void);
static void EditMainMenuMenuGoBack(void);
static void EditEditMenuGoBack(void);

////////////////////////////////////////////////////////////////////////////
//Edit main menu
static void EnterEditMainMenu(void);
static void ExitEditMainMenu(void);
static void MmsEditHintHandler(U16 index);
static void MmsEditHiliteHandler(S32 index);
static void EnterEditMainMenuMenu(void);
static void MmsEditInitRecvLists(void);
static void MmsEditInitSub(void);

static void ConstructInlineStruct(void);
static void InitMainMenuItems(void);
static void SaveAndExit(void);
static void CancelConfirm(void);

////////////////////////////////////////////////////////////////////////////
//Edit main menu menu

////////////////////////////////////////////////////////////////////////////
//Edit content edit
static void DrawEditContents(void);
static void ShowEditContent(void);
static void RedrawEditContent(void);
static void EnterInsImage(void);
static void EnterInsSound(void);
static void EnterInsAtt(void);
static void DrawEditContentText(int* y);
static void DrawEditContentImage(int* y);
static void DrawEditContentSound(int* y);
static void OnArrImg(void);
static void OnArrText(void);
static void EndDurEdit(void);
static void LeaveEditContent(void);
static int  FormatEditContentText(unsigned short* string, int len, int max_char_count);

static void MmsEditTextOnOk(void);
static void MmsEditDurOnOk(void);

////////////////////////////////////////////////////////////////////////////
//Edit content edit menu

////////////////////////////////////////////////////////////////////////////
//callback
static int MmsEditMainMenuMenuCallback(HDMENU hDmenu, unsigned long id, unsigned long event);
static int  MenuCallback(HDMENU hDmenu, unsigned long id, unsigned long event);
//static void InsertCallback(void *filePath, int n);
static void InsertCallback(WCHAR* filePath);
static void IfSaveCallback(PLIBEVENT event);
static void EmptyMainMenuMenuEntry(void);
static void EmptyContentMenuEntry(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 U8   PlxMmsDelHistoryHdlr(void* in_param);

//public functions
/***************************************************************************
* Function	MmsEditGoBackToIdle
* Purpose	
* Params	
* Return	
* Remarks	
\**************************************************************************/
void MmsEditGoBackToIdle(void)
{
    MmsEditRecvListNode* p;

    g_edit_data.bGoingBackToIdle = TRUE;
    //save
    if(g_edit_data.mmse)
        SaveMmsMessageNotExit();//SaveMmsMessage();

    //release message
    if(g_edit_data.message)
        mmsmsg_ReleaseMmsMessage(g_edit_data.message);
    
    if(g_edit_data.bPubCall &&
       g_edit_data.mmse)
       MMSE_Close(g_edit_data.mmse);

    //release menus

⌨️ 快捷键说明

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