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

📄 plxuilib.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  :    User interface library
*
*  Purpose :    Provide kinds of UI standard interface (keep updating)
*  
\**************************************************************************/

#define __NEWSIMULATOR
#include  "Stdc.h"
#include "L4Dr1.h"
#include "L4Dr.h"
#include "ProtocolEvents.h"
#include "CommonScreens.h"
#include "EventsGprot.h"
#include "wgui_categories_inputs.h"
/* 11-22 modified for 06A */
#include "PlxConfig.h"
#if defined(PROJECT_BRANCH_06A)
#include "DataAccountCommon.h"
#else
#include "DataAccount.h"
#endif // defined(PROJECT_BRANCH_06A)
/* 11-22 modified for 06A end */
#include "FileMgr.h"
#include "SettingProfile.h"
#undef __NEWSIMULATOR
#include "PlxConfig.h"
#include "PlxUILib.h"
#include "UILibRes.h"
#include "PlxAppMem.h"

//#define UILIB_DEBUG

#define UIL_TRUE        1
#define UIL_FALSE       0

#define DEFAULTPATH     "root"
#define IMAGEPATH       "D:\\Images"
#define AUDIOPATH       "D:\\Audio"
#define VIDEOPATH       "D:\\Video"

#define _SAVEDATA_TEMPFILE

#define MAX_SAVEDATA_PATH   FMGR_MAX_PATH_LEN
#define MAX_SAVEDATA_NAME   FMGR_MAX_INPUT_FILE_LEN
#define MAX_SAVEDATA_EXT    FMGR_MAX_EXT_LEN
#define MAX_MEDIAINFO		256		

typedef void    (*GETDTCNTCALLBACK)    (void * info);
typedef void    (*SETDTCNTCALLBACK)    (void * info);
typedef void    (*SELFILECALLBACK)     (WCHAR* path);
typedef void    (*SAVEDATACALLBACK)    (PLIBEVENT evnt);
typedef void    (*SELPBRECCALLBACK)    (void * info, int count);
typedef void    (*DISPCONFIRMCALLBACK)  (PLIBEVENT evnt);
typedef void	(*IMEOPTIONCALLBACK)	(void);
typedef void    (*GETIMEICALLBACK)      (char * imeistr);

typedef struct tagUILCALLBACK {
    GETDTCNTCALLBACK    cbAccountInfo;
    SETDTCNTCALLBACK    cbSetAccount;
    SELFILECALLBACK     cbSelectFile;
    SAVEDATACALLBACK    cbSaveData;
    SELPBRECCALLBACK    cbSelectPbook;
    DISPCONFIRMCALLBACK cbDispConfirm;
	IMEOPTIONCALLBACK	cbIMEOption;
    GETIMEICALLBACK     cbGetIMEI;             
} UILIBCALLBACK;

typedef struct tagDATACNT {
    int          gsmActed;
    PACCOUNTINFO actInfo;
    char         defname[NAME_LEN];
    ACCOUNTINFO  gsm[MAX_DATA_ACCOUNT_GSM_LIMIT];
    ACCOUNTINFO  gprs[MAX_DATA_ACCOUNT_GPRS_LIMIT];
} DATACNT, *PDATACNT;

typedef struct tagSAVEDATAPARAM {
    void *          pdata;
    int             datalen;
#ifdef _SAVEDATA_TEMPFILE
	int				fhandle;
	int				fsize;
	WCHAR			tmppath[MAX_SAVEDATA_PATH];
#endif
	char			info[MAX_MEDIAINFO];
	int				isback;
    WCHAR           path[MAX_SAVEDATA_PATH];
    WCHAR           name[MAX_SAVEDATA_NAME+1];
    WCHAR           ext[MAX_SAVEDATA_EXT+1];
} SAVEDATAPARAM;

typedef struct tagNUMLIST {
    int cnt;
    int actIdx;
    unsigned char * strlst[5];
    unsigned short imglst[5];
    WCHAR name[MAX_PB_NAME_LEN];
    WCHAR data[5][MAX_PB_FIELD_LEN];
} NUMLIST, *PNUMLIST;

typedef struct tagSELPHBRECPARAM {
    unsigned char fieldMask;
    unsigned char bMultiSel;
    unsigned char  unused[2];
    NUMLIST     nums;
} SELPHBRECPARAM, *PSELPHBRECPARAM;

int PlxPostMessage (void * receiver, unsigned int message, long wparam, long lparam);

static void ClearKeyEndHandler (void);
#ifdef SIMCOM_6217
static void cbInteralSelFile (void * info);
#else
static void cbInteralSelFile (void * info, int count);
#endif
static void GetGSMAccountReq (int accID);
static void GetGSMAccountRsp (void* para);
static void GetGPRSAccountReq (int accID);
static void GetGPRSAccountRsp(void* para);
static void SetDefDataAccountName(char *name, int index);
static void GetIMEIRsp (void * data);
extern U16 GetActiveScreenId (void);
static WCHAR * myunicodestrchr (const WCHAR * str, char ch);
static unsigned char mytolower (unsigned char ch);
static char mystrnicmp (char *src, char *dest, int maxlen);
static char mystricmp (char *src, char *dest);

static UILIBCALLBACK gUserNotify;
static unsigned short gScreenID;
DATACNT gDtcnt;
SAVEDATAPARAM gSaveDataPara;
SELPHBRECPARAM gSelPhbPara;

#ifdef MMI_ON_WIN32
enum {
    LIBMSG_GETACCOUNT = 0x10,
    LIBMSG_GETIMEI,
    LIBMSG_MAX
};
#endif

#ifdef MMI_ON_WIN32
int wndproc (void * hwnd, int msg, unsigned long wparam, unsigned long lparam)
{
    switch (msg) {
    case LIBMSG_GETACCOUNT:
        if ( lparam )
            GetGPRSAccountRsp(NULL);
        else
            GetGSMAccountRsp (NULL);
        break;
    case LIBMSG_GETIMEI:
        GetIMEIRsp ("123456789012345");
        break;
    default:
        // discard message
        break;
    }
    return 0;
}
#endif

/************************************************************************/
/*                                                                      */
/************************************************************************/
#define DEFAULT_MSGDELAY        (3000)
void PLIB_MessageBox (PLIBMBTYPE type, const WCHAR * title, const WCHAR * message, int duration)
{
    unsigned char toneID;
    unsigned short imgID;

    if ( message == NULL )
        return;
    if ( duration == 0 )
        duration = DEFAULT_MSGDELAY;

    switch (type) {
    case PMBTYPE_SUCCESS:   
        imgID = (unsigned short)IMG_GLOBAL_ACTIVATED;
        toneID = (unsigned char)SUCCESS_TONE;
        break;
    case PMBTYPE_NOTIFY:
        imgID = (unsigned short)IMG_GLOBAL_INFO;
        toneID = (unsigned char)MESSAGE_TONE;
        break;
    case PMBTYPE_WARNING:
        imgID = (unsigned short)IMG_GLOBAL_WARNING;
        toneID = (unsigned char)WARNING_TONE;  
        break;
    case PMBTYPE_ERROR:
        imgID = (unsigned short)IMG_GLOBAL_ERROR;
        toneID = (unsigned char)ERROR_TONE;    
        break;
    case PMBTYPE_EMPTY:
        imgID = (unsigned short)IMG_GLOBAL_EMPTY;
        toneID = (unsigned char)EMPTY_LIST_TONE;
        break;
	case PMBTYPE_MSGARRIVE:
		imgID = IMG_ID_PLX_UIL_MSG_ARRIVED;
		toneID = 0;
		break;
	case PMBTYPE_MSGRECVED:
		imgID = IMG_ID_PLX_UIL_MSG_RECEIVED;
		toneID = 0;
		break;
	case PMBTYPE_PUSHARRIVE:
		imgID = IMG_ID_PLX_UIL_PUSH_ARRIVED;
		toneID = (unsigned char)MESSAGE_TONE;
		break;
    default:
        imgID = (unsigned short)IMG_GLOBAL_INFO;
        toneID = (unsigned char)GENERAL_TONE;
        break;
    }
 
    DisplayPopup((PU8)message, imgID, 1, duration, toneID);
    ClearKeyEndHandler ();
}

/************************************************************************/
/*                                                                      */
/************************************************************************/
static void OnPositiveRsp (void);
static void OnNegativeRsp (void);

void PLIB_ConfirmBox (const WCHAR * title, const WCHAR * message, const WCHAR *posLabel, const WCHAR * negLabel,
                      void * imgData, int imgDatalen, void * toneData, int toneDatalen, void (*callback)(PLIBEVENT event))
{
    UI_image_ID_type imgID;
    unsigned char   toneID;

    if ( message == NULL )
        return;

//    if ( gUserNotify.cbDispConfirm )
//        return;

    gUserNotify.cbDispConfirm = callback;

    if ( imgData == NULL ) 
        imgID = IMG_GLOBAL_QUESTION;
    else
        imgID = (UI_image_ID_type)(*(int*)imgData);
    if ( toneData == NULL )
        toneID = WARNING_TONE;
    else
        toneID = (unsigned char)(*(int*)toneData);

    DisplayConfirm (STR_GLOBAL_YES, IMG_GLOBAL_YES,
                    STR_GLOBAL_NO, IMG_GLOBAL_NO,
                    (UI_string_type)message, imgID, toneID);

    if ( posLabel ) {
        set_left_softkey_label ((UI_string_type)posLabel);
        redraw_left_softkey();
    }
    if ( negLabel ) {
        set_right_softkey_label ((UI_string_type)negLabel);
        redraw_right_softkey();
    }

    ClearKeyEndHandler ();
    SetLeftSoftkeyFunction (OnPositiveRsp,KEY_EVENT_UP);
    SetRightSoftkeyFunction (OnNegativeRsp,KEY_EVENT_UP);
}

static void OnPositiveRsp (void)
{
    DISPCONFIRMCALLBACK callback = gUserNotify.cbDispConfirm;

    if ( callback ) {
        gUserNotify.cbDispConfirm = NULL;
        callback (PEVENT_POSITIVE);
    }
}

static void OnNegativeRsp (void)
{
    DISPCONFIRMCALLBACK callback = gUserNotify.cbDispConfirm;

    if ( callback ) {
        gUserNotify.cbDispConfirm = NULL;
        callback (PEVENT_NEGTIVE);
    }
}

/************************************************************************/
/*      Make Call  (fake callback event now)                                                              */
/************************************************************************/
extern void MakeCall (char * strNumber);
void PLIB_MakeCall (const WCHAR * number, void (*callback)(PLIBCALLEVENT event))
{
    if ( number == NULL )
        return;

    MakeCall ((char*)number);

    if ( callback )
        callback (CALLEVENT_SUCCESS);
}

/************************************************************************/
/*      Send Short Message                                              */
/************************************************************************/
#ifndef MT6217
#include "SMSApi.h"
#include "MessagesExDcl.h"
static void cbInternalSendSMS(void* dummy, module_type mod, U16 flag);
extern U8 IsMessagesReEntering (void);
void PLIB_SendSMS (const WCHAR * message, const WCHAR* number)
{
    gScreenID = GetActiveScreenId();

    if ( message == NULL ) {
        mmi_msg_set_phb_send_case(MMI_SEND_SMS_FROM_PHB);
        if ( number == NULL )
            mmi_msg_get_number_from_phb (NULL, NULL);
        else {
            WCHAR name[64];
            PLIB_GetPhbookName (name, sizeof(name), PFIELD_NUMBER, number);
            mmi_msg_get_number_from_phb ((PU8)name, (PU8)number);
        }
    }
    else {
        mmi_frm_sms_send_struct * sendData=PlxAppMalloc(sizeof(mmi_frm_sms_send_struct));
        memset((char*)sendData, 0, sizeof(mmi_frm_sms_send_struct));
        sendData->stringlength = pfnUnicodeStrlen((char*)message);
		sendData->string = OslMalloc ((sendData->stringlength+1) * 2);
        pfnUnicodeStrcpy ((char*)sendData->string, (char*)message);
        sendData->dcs = SMSAL_UCS2_DCS;
        if ( number != NULL ) {
			sendData->sendcheck |= MMI_FRM_SMS_DA;
//	        sendData->sendrequire |= MMI_FRM_SMS_NUM_SCR;
            UnicodeToAnsii ((char*)sendData->number, (char*)number);
        }
        if ( IsMessagesReEntering() ) {
		    DisplayPopup ((PU8)GetString(STR_ID_PLX_UIL_MSGNOTREADY), IMG_GLOBAL_UNFINISHED, 1, 2000, (U8)ERROR_TONE);
		    PlxAppFree(sendData);
		    return;
	    }
	    mmi_frm_sms_send_sms(cbInternalSendSMS, MOD_MMI, sendData);
	    PlxAppFree(sendData);
    }

}

static void cbInternalSendSMS(void* dummy, module_type mod, U16 flag)
{
	switch (flag)
	{
		case MMI_FRM_SMS_OK:
            GoBackToHistory (gScreenID);
		    DisplayPopup ((PU8)GetString(STR_ID_PLX_UIL_MSGSENDSUCC), IMG_GLOBAL_OK, 1, 2000, (U8)SUCCESS_TONE);
			break;
		case MMI_FRM_SMS_RETURN:
		case MMI_FRM_SMS_END:
			break;
		case MMI_FRM_SMS_DATAEXCEED:
            DisplayPopup ((PU8)GetString(STR_ID_PLX_UIL_MSGTOOLONG), IMG_GLOBAL_UNFINISHED, 1, 2000, (U8)ERROR_TONE);
			break;
		case MMI_FRM_SMS_NOTREADY:
            DisplayPopup ((PU8)GetString(STR_ID_PLX_UIL_MSGNOTREADY), IMG_GLOBAL_UNFINISHED, 1, 2000, (U8)ERROR_TONE);
			break;
		default:
			break;		
	}
}
#else
void PLIB_SendSMS (const WCHAR * message, const WCHAR* number)
{
}
#endif

/************************************************************************/
/*  Add Phonebook record base on specified field(Phone Number or Email Address) */
/************************************************************************/
#include "PhoneBookTypes.h"
#include "PhoneBookDef.h"
#include "PhoneBookGprot.h"

extern void SaveNumberFromIdleScrn (char *, unsigned char);
void PLIB_AddPhbookRecord (PLIBPHBFIELD field, const WCHAR * data)
{
    if ( data == NULL )
        return;

    switch (field) {
    case PFIELD_NUMBER:
        SaveNumberFromIdleScrn ((char*)data, MMI_PHB_ENTER_NONE);
        break;
    case PFIELD_NAME:
    case PFIELD_EMAIL:
        // noting to do yet
        break;
    }
}

#if 0
void SaveMailAddr (char * addr, unsigned char enter) 
{
	/*Check number length first*/
	if(pfnUnicodeStrlen(addr) > MAX_PB_EMAIL_LENGTH+1) 
	{
		DisplayPopup((PU8)GetString(STR_NUMBER_TOO_LONG), IMG_GLOBAL_ERROR, FALSE, PHB_NOTIFY_TIMEOUT, ERROR_TONE);		
	}
	else 
	{
		g_phb_cntx.set_done_flag = 1;
		pfnUnicodeStrcpy(pbNumber, number);

		/*Avoid add entry while copy all and delete all*/
		if(!g_phb_cntx.phb_ready || g_phb_cntx.processing) 
		{
			mmi_phb_entry_not_ready();
		}
		else 
		{
			g_phb_enter_from = enter;
			mmi_phb_clear_old_history();
			mmi_phb_op_add_pre_entry();
		}
	}
}
#endif

/************************************************************************/
/*   Provide Phonebook general list UI and give the user choice back    */
/************************************************************************/
static void GetPhbookRecNumber (PNUMLIST list, MMI_PHB_VCARD_STRUCT * info);
static void cbInternalLstPhbook (MMI_PHB_VCARD_STRUCT * info);
static void MakePhbookRecord (PLIBPBRECORD * record, PNUMLIST info);
static void SelPhbookBack (void * info, int count);
static void ChooseNumOnHilight (S32 idx);
static void ChooseNumOnOK (void);
static void ChooseNumOnCancel (void);
static void ChooseNumEntry (void);

#ifdef _PHB_SEARCH_SURNAME
#include "PhoneBookTypes.h"
#include "PhoneBookDef.h"
#include "PhoneBookGprot.h"
#include "MessagesMiscell.h"

⌨️ 快捷键说明

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