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

📄 plxmms_recvedit.c

📁 mtk wap和mms代码。。适应mtk 25。26平台
💻 C
📖 第 1 页 / 共 4 页
字号:
/***************************************************************************
 *
 *                      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 + -