📄 plxmms_recvedit.c
字号:
/***************************************************************************
*
* Pollex Mobile Platform
*
* Copyright (c) 2004 by Pollex Mobile Software Co., Ltd.
* All Rights Reserved
*
* Module :
*
* Purpose :
*
\**************************************************************************/
#include "PlxMms_RecvEdit.h"
#include "..\public\PlxPublic.h"
#include "PlxMms_Util.h"
//macro
#define MAX_TITLE_LEN 16
//#define MAX_NUM_LEN 40
#define MMS_EDITRECV_STR_ADDNUM STR_ID_PLX_MMS_EDITRECV_ADDNUM//(const char*)(L"Add Number")
#define MMS_EDITRECV_STR_ADDEMAIL STR_ID_PLX_MMS_EDITRECV_ADDEMAIL//(const char*)(L"Add Email")
#define MMS_EDITRECV_STR_EDIT STR_ID_PLX_MMS_EDITRECV_EDIT//(const char*)(L"Edit")
#define MMS_EDITRECV_STR_DEL STR_ID_PLX_MMS_BOX_DEL//(const char*)(L"Delete")
#define MMS_EDITRECV_STR_NONUM STR_ID_PLX_MMS_EDITRECV_NONUM//(const char*)(L"No Number")
#define MMS_EDITRECV_STR_MAXLEN STR_ID_PLX_MMS_EDITRECV_MAXLEN
#define MMS_EDITRECV_STR_CALL STR_ID_PLX_MMS_EDITRECV_CALL
#define MMS_EDITRECV_STR_SAVENUM STR_ID_PLX_MMS_EDITRECV_SAVENUM
#define MMS_EDITRECV_STR_DELALL STR_ID_PLX_MMS_BOX_DELALL
typedef enum
{
MMS_EDITRECV_ADDNUM = 0,
MMS_EDITRECV_ADDEMAIL,
MMS_EDITRECV_EDIT,
MMS_EDITRECV_DEL,
MMS_EDITRECV_DELALL,
MMS_EDITRECV_SAVENUM,
MMS_EDITRECV_CALL,
MMS_EDITRECV_COUNT
}RECV_EDIT_MENU_ID;
//struct
typedef struct tagMmsRecvData
{
MmsEditRecvList* list;
HDMENU hMenu;
char type;
int cur_item;
BOOL is_a_num;
U16 back_screen;
U16 menu_back_screen;
BOOL bBoxNumList;
int max_buf_len;
BOOL bAddFromPB;
MmsEditRecvListNode* temp_node;
U8 temp_buf[MAX_MAIL_LEN*2]; //[MAX_NUM_LEN*2];
}MmsRecvData;
typedef struct tagMmsSubData
{
U8* sub;
int max_len;
BOOL* pModified;
U8 new_sub[MMS_MAX_SUB_LEN];
}MmsSubData;
typedef struct tagMmsRecvTableItem
{
int id;
U16 string;
U16 icon;
PlxMmsEntryPtr entry;
}MmsRecvTableItem;
//global
static MmsRecvData g_recv_data;
static MmsSubData g_sub_data;
static void EnterAddNum(void);
//static void EnterAddEmail(void);
static void EnterEditItem(void);
static void EnterDelItem(void);
static void EnterDelAllItem(void);
static void EnterSaveNum(void);
static void EnterCall(void);
static const MmsRecvTableItem g_recvedit_entry_table[MMS_EDITRECV_COUNT] =
{
{MMS_EDITRECV_ADDNUM, MMS_EDITRECV_STR_ADDNUM, IMG_GLOBAL_L1, EnterAddNum},
{MMS_EDITRECV_ADDEMAIL, MMS_EDITRECV_STR_ADDEMAIL, IMG_GLOBAL_L2, EnterAddNum}, //EnterAddEmail},
{MMS_EDITRECV_EDIT, MMS_EDITRECV_STR_EDIT, IMG_GLOBAL_L3, EnterEditItem},
{MMS_EDITRECV_DEL, MMS_EDITRECV_STR_DEL, IMG_GLOBAL_L4, EnterDelItem},
{MMS_EDITRECV_DELALL, MMS_EDITRECV_STR_DELALL, IMG_GLOBAL_L5, EnterDelAllItem},
{MMS_EDITRECV_SAVENUM, MMS_EDITRECV_STR_SAVENUM, IMG_GLOBAL_L1, EnterSaveNum},
{MMS_EDITRECV_CALL, MMS_EDITRECV_STR_CALL, IMG_GLOBAL_L2, EnterCall}
};
/*
static const U8* g_recvedit_string_table[MMS_EDITRECV_COUNT] =
{
(U8*)MMS_EDITRECV_STR_ADDNUM,
(U8*)MMS_EDITRECV_STR_ADDEMAIL,
(U8*)MMS_EDITRECV_STR_EDIT,
(U8*)MMS_EDITRECV_STR_DEL
};
*/
//private functions
//static void EnterRecvEdit(void);
//static void ExitRecvEdit(void);
static void SaveRecv(void);
static void EnterSubEdit(void);
static void ExitSubEdit(void);
static void SaveSub(void);
static void SubGoBack(void);
static void EnterRecvListMenu(void);
static void ExitRcevList(void);
static S32 RecvListGetItemHint(S32 item_index, UI_string_type *hint_array);
static pBOOL RecvListGetItemText(S32 item_index, UI_string_type str_buff,
UI_image_type* img_buff_p, U8 str_img_mask);
static void RecvListHiliteHandler(S32 index);
static void enter_list(void);
static MmsEditRecvListNode* GetNumItem(int index);
static void DelNumItem(MmsEditRecvListNode* node);
static void AddNumItem(MmsEditRecvListNode* node);
static void CallPhoneBook(void);
static void ExitAddNum(void);
//static void RecvEditHiliteHandler(S32 i);
static void enter_no_num(void);
static BOOL ExistInList(U8* number, BOOL bNewNum);
static void RecvMenuGoBack(void);
static void RecvGoBack(void);
static BOOL CreateBoxNumList(char* numbers);
static void ReleaseBoxNumList(void);
//static void SaveNumber(void);
static void EnterBoxNumMenu(void);
static BOOL CreateBoxNumMenu(void);
static void SetRecvLeftEmptyText(void);
static void SetRecvLeftNotEmptyText(void);
static void ShowRecvEditInputBox(void);
static void IfDelAllCallback(PLIBEVENT event);
static void IfDelCallback(PLIBEVENT event);
static void MmsEditSubOnOk(void);
static void MmsEditRecvOnOk(void);
static void RemoveRN(WCHAR* wstring);
/////////////////////////////////////
//menu
static BOOL CreateRecvEditMenu(BOOL bEmptyList);
static int RecvEditMenuCallback(HDMENU hDmenu, unsigned long id, unsigned long event);
static void PBCallback(void * info, int count);
static void EmptyMenuEntry(void);
//public functions
/***************************************************************************
* Function MmsRecvGoBackToIdle
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
void MmsRecvGoBackToIdle(void)
{
if(g_recv_data.hMenu)
{
PlxDestroyDMenu(g_recv_data.hMenu);
g_recv_data.hMenu = NULL;
}
if(g_recv_data.temp_node && g_recv_data.cur_item == -1) // new item
{
MMS_Free((void*)g_recv_data.temp_node);
}
if(g_recv_data.bBoxNumList) //clear list
{
ReleaseBoxNumList();
}
MMS_Memset((void*)&g_recv_data, 0, sizeof(MmsRecvData));
}
/*BOOL CreateRecvEdit(char* numbers, int max_len, char num_type)
{
if(!numbers)
return FALSE;
MMS_Memset((void*)&g_recv_data, 0, sizeof(MmsRecvData));
g_recv_data.numbers = numbers;
g_recv_data.max_len = max_len;
g_recv_data.num_type = num_type;
AnsiiToUnicodeString((S8*)g_recv_data.title, "Receiver");
EnterRecvEdit();
return TRUE;
}
*/
/***************************************************************************
* Function CreateRecvEdit
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
BOOL CreateRecvEdit(MmsEditRecvList* list, char num_type, U16 screen)
{
if(!list)
return FALSE;
MMS_Memset((void*)&g_recv_data, 0, sizeof(MmsRecvData));
if(!CreateRecvEditMenu(TRUE))
{
MMS_Memset((void*)&g_recv_data, 0, sizeof(MmsRecvData));
return FALSE;
}
g_recv_data.list = list;
g_recv_data.type = num_type;
g_recv_data.cur_item = -1;
g_recv_data.back_screen = screen;
if(list->count == 0)
{
//edit a number
enter_no_num();
}
else
{
//enter list
enter_list();
}
return TRUE;
}
/***************************************************************************
* Function CreateBoxNumSave
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
BOOL CreateBoxNumSave(U16 title, char* numbers, U16 screen)
{
if(!numbers)
return FALSE;
MMS_Memset((void*)&g_recv_data, 0, sizeof(g_recv_data));
g_recv_data.bBoxNumList = TRUE;
g_recv_data.cur_item = -1;
g_recv_data.back_screen = screen;
//create list
if(!CreateBoxNumList(numbers))
{
MMS_Memset((void*)&g_recv_data, 0, sizeof(g_recv_data));
return FALSE;
}
//menu
if(!CreateBoxNumMenu())
{
ReleaseBoxNumList();
MMS_Memset((void*)&g_recv_data, 0, sizeof(g_recv_data));
return FALSE;
}
if(!g_recv_data.list ||
g_recv_data.list->count == 0)
{
if(g_recv_data.list)
MMS_Free((void*)g_recv_data.list);
PlxDestroyDMenu(g_recv_data.hMenu);
MMS_Memset((void*)&g_recv_data, 0, sizeof(g_recv_data));
return FALSE;
}
g_recv_data.list->title = title;
enter_list();
return TRUE;
}
/***************************************************************************
* Function CreateBoxNumMenu
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
BOOL CreateBoxNumMenu(void)
{
if(g_recv_data.hMenu)
return TRUE;
g_recv_data.hMenu = PlxCreateDMenu(0);
if(!g_recv_data.hMenu)
return FALSE;
//add items
PlxInsertDMenuItem(g_recv_data.hMenu,
0, MF_BYPOSITION,
g_recvedit_entry_table[MMS_EDITRECV_SAVENUM].id,
(const char *)GetString(g_recvedit_entry_table[MMS_EDITRECV_SAVENUM].string),
g_recvedit_entry_table[MMS_EDITRECV_SAVENUM].icon);
PlxInsertDMenuItem(g_recv_data.hMenu,
1, MF_BYPOSITION,
g_recvedit_entry_table[MMS_EDITRECV_CALL].id,
(const char *)GetString(g_recvedit_entry_table[MMS_EDITRECV_CALL].string),
g_recvedit_entry_table[MMS_EDITRECV_CALL].icon);
return TRUE;
}
/***************************************************************************
* Function CreateSubEdit
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
BOOL CreateSubEdit(U8* sub, int max_len, BOOL* pModified)
{
if(!sub || !pModified)
return FALSE;
MMS_Memset((void*)&g_sub_data, 0, sizeof(MmsSubData));
g_sub_data.sub = sub;
g_sub_data.max_len = max_len;
g_sub_data.pModified = pModified;
MMS_Memcpy((void*)g_sub_data.new_sub, (void*)g_sub_data.sub, max_len);//MAX_SUB_LEN*2);
EnterSubEdit();
return TRUE;
}
//private functions
/***************************************************************************
* Function enter_no_num
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
void enter_no_num(void)
{
g_recv_data.menu_back_screen = g_recv_data.back_screen;
//no del and delall
PlxDeleteDMenuItem(g_recv_data.hMenu, 2, MF_BYPOSITION);
PlxDeleteDMenuItem(g_recv_data.hMenu, 3, MF_BYPOSITION);
PlxSetDMenuDispInfo(STR_GLOBAL_OPTIONS, IMG_ID_PLX_MMS,
STR_GLOBAL_OK, IMG_GLOBAL_OK, STR_GLOBAL_BACK, IMG_GLOBAL_BACK);
PlxShowDMenu(g_recv_data.hMenu, SCR_ID_PLX_MMS_RECVEDIT_MENU2,
STR_ID_PLX_MMS_MENU, RecvEditMenuCallback, EmptyMenuEntry);
// SetRightSoftkeyFunction(RecvMenuGoBack, KEY_EVENT_UP);
}
/***************************************************************************
* Function RecvEditHiliteHandler
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
/*void RecvEditHiliteHandler(S32 i)
{
SetLeftSoftkeyFunction(g_recvedit_entry_table[i].entry, KEY_EVENT_UP);
if(i == 0)
g_recv_data.is_a_num = TRUE;
else if(i == 1)
g_recv_data.is_a_num = FALSE;
}
*/
/***************************************************************************
* Function EnterAddNum
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
void EnterAddNum(void)
{
MmsEditRecvListNode* node;
int max_buf_len;
if(!g_recv_data.temp_node)
{
g_recv_data.cur_item = -1;
node = MMS_Malloc(sizeof(MmsEditRecvListNode));
if(!node)
return;
MMS_Memset((void*)node, 0, sizeof(MmsEditRecvListNode));
g_recv_data.temp_node = node;
pfnUnicodeStrcpy((S8*)g_recv_data.temp_buf, (S8*)node->num);
}
if((MAX_TO_LEN - g_recv_data.list->total_len) > 0)
{
if(g_recv_data.is_a_num)
max_buf_len = MAX_NUM_LEN; //*2;
else
max_buf_len = MAX_MAIL_LEN; //*2;
if((MAX_TO_LEN - g_recv_data.list->total_len) <= max_buf_len) //MAX_NUM_LEN*2)
g_recv_data.max_buf_len = MAX_TO_LEN - g_recv_data.list->total_len;
else
g_recv_data.max_buf_len = max_buf_len; //MAX_NUM_LEN*2;
//
if(g_recv_data.max_buf_len < 2)
{
g_recv_data.max_buf_len = 0;
PLIB_MessageBox(PMBTYPE_WARNING, NULL,
(WCHAR*)GetString(MMS_EDITRECV_STR_MAXLEN), 0);
return;
}
//goto edit
ShowRecvEditInputBox();
}
else
{
g_recv_data.max_buf_len = 0;
PLIB_MessageBox(PMBTYPE_WARNING, NULL,
(WCHAR*)GetString(MMS_EDITRECV_STR_MAXLEN), 0);
}
}
void SetRecvLeftEmptyText(void)
{
ChangeLeftSoftkey (STR_ID_PLX_MMS_EDITRECV_CALLPB, IMG_GLOBAL_OK);
SetLeftSoftkeyFunction(SaveRecv, KEY_EVENT_UP);
SetKeyHandler(SaveRecv, KEY_ENTER, KEY_EVENT_DOWN);
}
void SetRecvLeftNotEmptyText(void)
{
if(g_recv_data.is_a_num)
{
ChangeLeftSoftkey (STR_GLOBAL_OK, IMG_GLOBAL_OK);
SetLeftSoftkeyFunction(SaveRecv, KEY_EVENT_UP);
SetKeyHandler(SaveRecv, KEY_ENTER, KEY_EVENT_DOWN);
}
else
{
ChangeLeftSoftkey (STR_GLOBAL_OPTIONS, IMG_GLOBAL_OPTIONS);
SetLeftSoftkeyFunction(MmsEditRecvOnOk, KEY_EVENT_UP);
SetKeyHandler(MmsEditRecvOnOk, KEY_ENTER, KEY_EVENT_DOWN);
}
}
/***************************************************************************
* Function EnterAddEmail
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
/*void EnterAddEmail(void)
{
}
*/
/***************************************************************************
* Function ExitAddNum
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
void ExitAddNum(void)
{
if(g_recv_data.cur_item < 0) //a new node
{
if(g_recv_data.temp_node)
{
MMS_Free((void*)g_recv_data.temp_node);
g_recv_data.temp_node = NULL;
}
g_recv_data.cur_item = 0;
GoBackHistory();
}
else //edit a number
{
g_recv_data.temp_node = NULL;
GoBackHistory();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -