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

📄 plxmms_recvedit.c

📁 mtk wap和mms代码。。适应mtk 25。26平台
💻 C
📖 第 1 页 / 共 4 页
字号:
/***************************************************************************
* Function	CallPhoneBook
* Purpose	
* Params	
* Return	
* Remarks	
\**************************************************************************/
void CallPhoneBook(void)
{
    g_recv_data.bAddFromPB = TRUE;
    if(g_recv_data.is_a_num)
    {
        PLIB_SelectPhbookRecord(PFIELD_NUMBER, 0, PBCallback);
    }
    else //find email
    {
        PLIB_SelectPhbookRecord(PFIELD_EMAIL, 0, PBCallback);
    }
#ifdef MMI_ON_WIN32
    PBCallback(NULL, 0);
#endif
}

/***************************************************************************
* Function	PBCallback
* Purpose	
* Params	
* Return	
* Remarks	
\**************************************************************************/
void PBCallback(void * info, int count)
{
    PPLIBPBRECORD pInfo;
    int max_buf_len;

    if(!info || count == 0)
    {
#ifdef MMI_ON_WIN32
    MMS_Memset((void*)g_recv_data.temp_buf, 0, sizeof(g_recv_data.temp_buf));
    pfnUnicodeStrcpy((S8*)g_recv_data.temp_buf, 
		(S8*)L"123456789012345");
#endif
        return;
    }

    pInfo = (PPLIBPBRECORD)info;
    MMS_Memset((void*)g_recv_data.temp_buf, 0, sizeof(g_recv_data.temp_buf));

    if(g_recv_data.is_a_num)
    {
        max_buf_len = 
            (g_recv_data.max_buf_len == MAX_NUM_LEN) ? MAX_NUM_LEN : g_recv_data.max_buf_len;
    }
    else
    {
        max_buf_len = 
            (g_recv_data.max_buf_len == MAX_MAIL_LEN) ? MAX_MAIL_LEN : g_recv_data.max_buf_len;
    }

    if(pfnUnicodeStrlen((S8*)pInfo->field) >= max_buf_len) //MAX_NUM_LEN)
    {
        pfnUnicodeStrncpy((S8*)g_recv_data.temp_buf, 
            (S8*)pInfo->field, max_buf_len-1);//MAX_NUM_LEN-1);
        ((unsigned short*)g_recv_data.temp_buf)[max_buf_len-1] = 0x0000;
    }
    else
    {
        pfnUnicodeStrcpy((S8*)g_recv_data.temp_buf, (S8*)pInfo->field);
    }
}

/***************************************************************************
* Function	SaveRecv
* Purpose	
* Params	
* Return	
* Remarks	g_recv_data.temp_buf has new number string
\**************************************************************************/
void SaveRecv(void)
{
    int len;

    if(!g_recv_data.temp_node) //no editing node
    {
        if(g_recv_data.list->head)
        {
            //enter_list();
            if(IsScreenPresent(SCR_ID_PLX_MMS_RECVLIST))
                GoBackToHistory(SCR_ID_PLX_MMS_RECVLIST);
            else
            {
                enter_list();
                DeleteScreenIfPresent(SCR_ID_PLX_MMS_RECVEDIT_MENU2);
            }
        }
//        g_recv_data.temp_node = NULL;
    }
    else //save num in editing node
    {
        RemoveRN((WCHAR*)g_recv_data.temp_buf);
//        if((len = pfnUnicodeStrlen((S8*)g_recv_data.temp_node->num)) == 0)
        if((len = pfnUnicodeStrlen((S8*)g_recv_data.temp_buf)) == 0) //call pb
        {
            CallPhoneBook();
            return;
        }
        
        if(g_recv_data.cur_item < 0) //new one
        {
            if(ExistInList(g_recv_data.temp_buf, TRUE))
            {
                //enter_list();
                if(IsScreenPresent(SCR_ID_PLX_MMS_RECVLIST))
                    GoBackToHistory(SCR_ID_PLX_MMS_RECVLIST);
                else
                {
                    enter_list();
                    DeleteScreenIfPresent(SCR_ID_PLX_MMS_RECVEDIT_MENU2);
                }
                g_recv_data.temp_node = NULL;
                PLIB_MessageBox(PMBTYPE_WARNING, NULL, 
                    (WCHAR*)GetString(STR_ID_PLX_MMS_EDITRECV_NUMEXIST), 0);
                return;
            }
            AddNumItem(g_recv_data.temp_node);
            g_recv_data.list->total_len += len;            
        }
        else //edit a old num
        {
            if(ExistInList(g_recv_data.temp_buf, FALSE))
            {
                //enter_list();
                if(IsScreenPresent(SCR_ID_PLX_MMS_RECVLIST))
                    GoBackToHistory(SCR_ID_PLX_MMS_RECVLIST);
                else
                {
                    enter_list();
                    DeleteScreenIfPresent(SCR_ID_PLX_MMS_RECVEDIT_MENU2);
                }

                g_recv_data.temp_node = NULL;
                PLIB_MessageBox(PMBTYPE_WARNING, NULL, 
                    (WCHAR*)GetString(STR_ID_PLX_MMS_EDITRECV_NUMEXIST), 0);
                return;
            }

            g_recv_data.list->total_len = g_recv_data.list->total_len + len - 
                pfnUnicodeStrlen((S8*)g_recv_data.temp_node->num);
        }

        pfnUnicodeStrcpy((S8*)g_recv_data.temp_node->num, 
                    (S8*)g_recv_data.temp_buf);
/*
        if(MMS_WFindCharFromEnd(g_recv_data.temp_node->num, 
            pfnUnicodeStrlen((S8*)g_recv_data.temp_node->num), '@'))//(const unsigned short)pAt[0]))
            g_recv_data.temp_node->bEMail = TRUE;
*/
        g_recv_data.temp_node->bEMail = !g_recv_data.is_a_num;

        g_recv_data.list->modified = TRUE;
        g_recv_data.temp_node = NULL;

        //enter_list();
        if(IsScreenPresent(SCR_ID_PLX_MMS_RECVLIST))
            GoBackToHistory(SCR_ID_PLX_MMS_RECVLIST);
        else
        {
            enter_list();
            DeleteScreenIfPresent(SCR_ID_PLX_MMS_RECVEDIT_MENU2);
        }
    }
}

/***************************************************************************
* Function	AddNumItem
* Purpose	
* Params	
* Return	
* Remarks	
\**************************************************************************/
void AddNumItem(MmsEditRecvListNode* node)
{
    MmsEditRecvListNode* tail = NULL;

    if(!node)
        return;

    tail = g_recv_data.list->head;
    
    if(!tail)
    {
        g_recv_data.list->head = node;
        g_recv_data.list->count ++;
    }
    else
    {
        while(tail->next)
        {
            tail = tail->next;
        }
        tail->next = node;
        g_recv_data.list->count++;
    }

    g_recv_data.cur_item = g_recv_data.list->count-1;
}

/***************************************************************************
* Function	DelNumItem
* Purpose	
* Params	
* Return	
* Remarks	
\**************************************************************************/
void DelNumItem(MmsEditRecvListNode* node)
{
    MmsEditRecvListNode* prev = NULL;

    prev = g_recv_data.list->head;
    if(!prev)
        return;

    if(prev == node)
    {
        g_recv_data.list->head = node->next;
        g_recv_data.list->count--;
    }
    else
    {
        while(prev && prev->next!= node)
        {
            prev = prev->next;
        }

        if(prev)
        {
            prev->next = node->next;
            g_recv_data.list->count--;
        }
    }

    MMS_Free((void*)node);
    if(g_recv_data.cur_item == g_recv_data.list->count)
        g_recv_data.cur_item --;
}

/***************************************************************************
* Function	GetNumItem
* Purpose	
* Params	
* Return	
* Remarks	
\**************************************************************************/
MmsEditRecvListNode* GetNumItem(int index)
{
    MmsEditRecvListNode* p;
    int i = 0;

    if(!g_recv_data.list->head)
        return NULL;

    if(index == 0)
        return g_recv_data.list->head;

    p = g_recv_data.list->head;
    while(p)
    {
        p = p->next;
        i++;

        if(i == index)
            return p;
    }

    return NULL;
}

/***************************************************************************
* Function	enter_list
* Purpose	
* Params	
* Return	
* Remarks	
\**************************************************************************/
void enter_list(void)
{
    U8* guiBuffer = NULL;
//    U8* pTip = NULL;

    if(GetActiveScreenId() != SCR_ID_PLX_MMS_RECVLIST)
    {
        if(!g_recv_data.list || !g_recv_data.list->head) //empty list, go back
        {
            switch(g_recv_data.type)
            {
            case 0: //recv
                RecvGoBack();
                PLIB_MessageBox(PMBTYPE_ERROR, NULL,
                    (WCHAR*)GetString(STR_ID_PLX_MMS_EDITRECV_EMPTYRECV), 0);
                break;
            case 1: //CC
                RecvGoBack();
                PLIB_MessageBox(PMBTYPE_ERROR, NULL,
                    (WCHAR*)GetString(STR_ID_PLX_MMS_EDITRECV_EMPTYCC), 0);
                break;
            case 2: //BCC
                RecvGoBack();
                PLIB_MessageBox(PMBTYPE_ERROR, NULL,
                    (WCHAR*)GetString(STR_ID_PLX_MMS_EDITRECV_EMPTYBCC), 0);
                break;
            default:;
            }
            return;
        }
        
        EntryNewScreen(SCR_ID_PLX_MMS_RECVLIST, NULL, enter_list, NULL);	
//		    SetParentHandler(SCR_ID_PLX_MMS_EDIT);
//		guiBuffer = GetCurrGuiBuffer(SCR_ID_PLX_MMS_RECVLIST);
        
        g_recv_data.menu_back_screen = SCR_ID_PLX_MMS_RECVLIST;
    }

	RegisterHighlightHandler(RecvListHiliteHandler);
    if(g_recv_data.cur_item < 0)
        g_recv_data.cur_item = 0;

    if(g_recv_data.bBoxNumList)
    {
        ShowCategory184Screen(g_recv_data.list->title, IMG_ID_PLX_MMS, 
							STR_GLOBAL_OPTIONS, IMG_GLOBAL_OK,
							STR_GLOBAL_BACK, IMG_GLOBAL_BACK,
							g_recv_data.list->count, RecvListGetItemText,
							RecvListGetItemHint, g_recv_data.cur_item, guiBuffer);
        SetLeftSoftkeyFunction(EnterBoxNumMenu, KEY_EVENT_UP);
        SetKeyHandler(EnterBoxNumMenu, KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
//        SetKeyHandler(EnterBoxNumMenu, KEY_ENTER, KEY_EVENT_DOWN);
    }
    else
    {
        ShowCategory184Screen(g_recv_data.list->title, IMG_ID_PLX_MMS, 
							STR_GLOBAL_OPTIONS, IMG_GLOBAL_OK,
							STR_GLOBAL_BACK, IMG_GLOBAL_BACK,
							g_recv_data.list->count, RecvListGetItemText,
							RecvListGetItemHint, g_recv_data.cur_item, guiBuffer);
        SetLeftSoftkeyFunction(EnterRecvListMenu, KEY_EVENT_UP);
        SetKeyHandler(EnterRecvListMenu, KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
//        SetKeyHandler(EnterRecvListMenu, KEY_ENTER, KEY_EVENT_DOWN);
    }
    
    SetKeyHandler(PlxMmsGoBackToIdle, KEY_END, KEY_EVENT_DOWN);
	SetRightSoftkeyFunction(RecvGoBack, KEY_EVENT_UP);
    SetKeyHandler(RecvGoBack, KEY_LEFT_ARROW, KEY_EVENT_DOWN);
}

/***************************************************************************
* Function	EnterBoxNumMenu
* Purpose	
* Params	
* Return	
* Remarks	
\**************************************************************************/
void EnterBoxNumMenu(void)
{
    MmsEditRecvListNode* node;
	char				 ascNum[MAX_MAIL_LEN];

    if(!g_recv_data.hMenu)
        return;

    node = GetNumItem(g_recv_data.cur_item);
    if(!node)
        return;

	UnicodeToAnsii((S8*)ascNum, (S8*)node->num);
    //save
    if(node->bEMail) //mail
    {
		if(MMS_Stristr(ascNum, "@monternet.com"))
		{
			PlxModifyDMenuItem(g_recv_data.hMenu, 
				MMS_EDITRECV_SAVENUM, MF_BYCOMMAND | MF_ENABLED,
				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);
		}
		else
		{
			PlxModifyDMenuItem(g_recv_data.hMenu, 
				MMS_EDITRECV_SAVENUM, MF_BYCOMMAND | MF_DISABLED,
				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);
		}
    }
    else //number
    {
		PlxModifyDMenuItem(g_recv_data.hMenu, 
            MMS_EDITRECV_SAVENUM, MF_BYCOMMAND | MF_ENABLED,
            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);
    }

    //call
    if(node->bEMail) //mail
    {
		if(MMS_Stristr(ascNum, "@monternet.com"))
		{
			PlxModifyDMenuItem(g_recv_data.hMenu, 
				MMS_EDITRECV_CALL, MF_BYCOMMAND | MF_ENABLED,
				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);
		}
		else
		{
			PlxModifyDMenuItem(g_recv_data.hMenu, 
				MMS_EDITRECV_CALL, MF_BYCOMMAND | MF_DISABLED,
				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);
		}
    }
    else //number
    {
        PlxModifyDMenuItem(g_recv_data.hMenu, 
            MMS_EDITRECV_CALL, MF_BYCOMMAND | MF_ENABLED,
            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);
    }

    //show
    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,//SCR_ID_PLX_MMS_RECVEDIT_MENU4,
        STR_ID_PLX_MMS_MENU, RecvEditMenuCallback, EmptyMenuEntry);
//    SetRightSoftkeyFunction(RecvMenuGoBack, KEY_EVENT_UP);
}

/***************************************************************************
* Function	RecvListHiliteHandler
* Purpose	
* Params	
* Return	
* Remarks	
\**************************************************************************/
void RecvListHiliteHandler(S32 index)
{
    g_recv_data.cur_item = index;
}

/***************************************************************************
* Function	RecvListGetItemText
* Purpose	
* Params	
* Return	
* Remarks	
\**************************************************************************/
pBOOL RecvListGetItemText(S32 item_index, UI_string_type str_buff, 
                         UI_image_type* img_buff_p, U8 str_img_mask)
{
    MmsEditRecvListNode* p;
//    U8* string_show = NULL;
    U8 name[MAX_NAME_LEN*2];

    p = GetNumItem(item_index);
    if(!p) //no number
    {
        pfnUnicodeStrcpy((S8*)str_buff, (S8*)GetString(MMS_EDITRECV_STR_NONUM));
        *img_buff_p = NULL;
        return TRUE;
    }

/*    string_show = p->name;
    if(pfnUnicodeStrlen((S8*)string_show) == 0) //no name
    {
        string_show = p->num;
        if(pfnUnicodeStrlen((S8*)string_show) == 0)
        {
            pfnUnicodeStrcpy((S8*)str_buff, (S8*)GetString(MMS_EDITRECV_STR_NONUM));
            *img_buff_p = NULL;
            return TRUE;
        }
    }

    pfnUnicodeStrcpy((S8*)str_buff, (S8*)string_show);
    *img_buff_p = (UI_image_type)GetImage((U16)(IMG_GLOBAL_L1+item_index));
*/
    if(p->num[0] == 0 &&
       p->num[1] == 0)  //no number
    {
        pfnUnicodeStrcpy((S8*)str_buff, (S8*)GetString(MMS_EDITRECV_STR_NONUM));
    }
    else
    {
        //find name
        if(p->bEMail) //mail

⌨️ 快捷键说明

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