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