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