📄 plxuilib.c
字号:
#include "SMSStruct.h"
void mmi_frm_sms_search_phb (void);
extern MMI_PHB_LIST_VIEW phbListView;
extern U8 g_bBeCalled;
static void SearchPhbEntry (void);
#endif
void PLIB_SelectPhbookRecord (unsigned char fieldMask, int bMultiSel, void (*callback)(void * info, int count))
{
if ( fieldMask & PFIELD_NUMBER == 0
&& fieldMask & PFIELD_EMAIL == 0 )
return;
// if ( gUserNotify.cbSelectPbook )
// return;
//
gSelPhbPara.fieldMask = fieldMask;
gSelPhbPara.bMultiSel = (unsigned char)bMultiSel;
gUserNotify.cbSelectPbook = callback;
gScreenID = GetActiveScreenId();
#ifndef _PHB_SEARCH_SURNAME
mmi_phb_generic_enter_list (cbInternalLstPhbook);
#else
EntryNewScreen (SCR_ID_PLX_UIL_SELPHBOOK, NULL, SearchPhbEntry, NULL);
mmi_frm_sms_search_phb ();
// mmi_msg_search_phb ();
#endif
#if 0
mmi_phb_entry_list(PhoneBookEntryCount, /*Total Entry*/
0, /*Title String*/
0, /*Title Image*/
STR_GLOBAL_OK, /*LSK*/
IMG_GLOBAL_OK, /*LSK*/
mmi_phb_get_index_second_level, /*Highlight Callback*/
mmi_phb_sms_send_data_choose_entry, /*LSK Callback*/
mmi_phb_sms_send_data_choose_entry, /*SEND Key Callback*/
mmi_phb_list_get_item, /*List Callback*/
mmi_phb_list_get_hint, /*Hint Callback*/
mmi_phb_frm_enter_send_entry, /*Re-Entry Callback*/
TRUE, /*Alpha Index*/
TRUE); /*Right Arrow Key*/
SetRightSoftkeyFunction (GoBackHistory, KEY_EVENT_UP);
#endif
}
#ifdef _PHB_SEARCH_SURNAME
static void SearchPhbEntry (void)
{
if ( phbListView == MMI_PHB_LIST_FOR_FRM ) {//|| g_bBeCalled == SURNAME_CALLED_BY_SMS_SINGLE ) {
PLIBPBRECORD record;
pfnUnicodeStrcpy ((char*)record.field, (char*)g_frm_sms_cntx.mmi_frm_sms_number);
g_frm_sms_cntx.mmi_frm_sms_number[0] = 0;
g_frm_sms_cntx.mmi_frm_sms_number[1] = 0;
phbListView = MMI_PHB_LIST_FOR_MMS_NUMBER;
// g_bBeCalled = 0;
SelPhbookBack ((void *)&record, 1);
}
else {
SelPhbookBack (NULL, 0);
}
}
#endif
static void cbInternalLstPhbook (MMI_PHB_VCARD_STRUCT * info)
{
if ( info == NULL ) {
SelPhbookBack (NULL, 0);
}
else {
GetPhbookRecNumber (&gSelPhbPara.nums, info);
if ( gSelPhbPara.nums.cnt == 0 ) {
DisplayPopup ((U8*)GetString(STR_ID_PLX_UIL_DATANOTFOUND),
IMG_GLOBAL_UNFINISHED, 1, 1000, EMPTY_LIST_TONE);
}
else if ( gSelPhbPara.nums.cnt == 1 ) {
PLIBPBRECORD record;
MakePhbookRecord (&record, &gSelPhbPara.nums);
SelPhbookBack ((void *)&record, 1);
}
else {
ChooseNumEntry ();
}
}
}
static void ChooseNumEntry (void)
{
unsigned char * guiBuffer;
EntryNewScreen(SCR_ID_PLX_UIL_CHOOSENUM, NULL, NULL, NULL);
guiBuffer = GetCurrGuiBuffer(STR_ID_PLX_UIL_CHOOSENUM);
RegisterHighlightHandler(ChooseNumOnHilight);
ShowCategory53Screen(STR_ID_PLX_UIL_CHOOSENUM,
IMG_SCR_PBOOK_CAPTION,
STR_GLOBAL_OK,
IMG_GLOBAL_OK,
STR_GLOBAL_BACK,
IMG_GLOBAL_BACK,
gSelPhbPara.nums.cnt,
(unsigned char**)gSelPhbPara.nums.strlst,
gSelPhbPara.nums.imglst,
NULL, 0, 0, guiBuffer);
SetLeftSoftkeyFunction(ChooseNumOnOK, KEY_EVENT_UP);
SetKeyHandler(ChooseNumOnOK, KEY_SEND, KEY_EVENT_UP);
SetRightSoftkeyFunction(ChooseNumOnCancel,KEY_EVENT_UP);
}
static void SelPhbookBack (void * info, int count)
{
SELPBRECCALLBACK callback = gUserNotify.cbSelectPbook;
if ( callback ) {
gUserNotify.cbSelectPbook = NULL;
callback (info, count);
}
GoBackToHistory (gScreenID);
}
static void GetPhbookRecNumber (PNUMLIST list, MMI_PHB_VCARD_STRUCT * info)
{
int cnt = 0;
pfnUnicodeStrcpy ((char*)list->name, (char*)info->name);
if ( gSelPhbPara.fieldMask & PFIELD_NUMBER ) {
if ( strlen (info->number) > 0 ) {
AnsiiToUnicodeString ((char*)list->data[0], (char *)info->number);
list->strlst[cnt] = (unsigned char *)list->data[0];
list->imglst[cnt] = IMG_MOBILE_NUMBER;
cnt ++;
}
if ( strlen (info->homeNumber) > 0 ) {
AnsiiToUnicodeString ((char*)list->data[1], (char *)info->homeNumber);
list->strlst[cnt] = (unsigned char *)list->data[1];
list->imglst[cnt] = IMG_HOME_NUMBER;
cnt ++;
}
if ( strlen (info->officeNumber) > 0 ) {
AnsiiToUnicodeString ((char*)list->data[2], (char *)info->officeNumber);
list->strlst[cnt] = (unsigned char *)list->data[2];
list->imglst[cnt] = IMG_OFFICE_NUMBER;
cnt ++;
}
if ( strlen (info->faxNumber) > 0 ) {
AnsiiToUnicodeString ((char*)list->data[3], (char *)info->faxNumber);
list->strlst[cnt] = (unsigned char *)list->data[3];
list->imglst[cnt] = IMG_FAX_NUMBER;
cnt ++;
}
}
if ( gSelPhbPara.fieldMask & PFIELD_EMAIL ) {
if ( strlen (info->emailAddress) > 0 ) {
AnsiiToUnicodeString ((char*)list->data[4], (char*)info->emailAddress);
list->strlst[cnt] = (unsigned char *)list->data[4];
list->imglst[cnt] = IMG_EMAIL_ADDRESS;
cnt ++;
}
}
list->actIdx = 0;
list->cnt = cnt;
}
static void MakePhbookRecord (PPLIBPBRECORD rec, PNUMLIST info)
{
pfnUnicodeStrcpy ((char*)rec->name, (char*)info->name);
pfnUnicodeStrcpy ((char*)rec->field, (char*)info->strlst[info->actIdx]);
}
static void ChooseNumOnHilight (S32 idx)
{
gSelPhbPara.nums.actIdx = (int)idx;
}
static void ChooseNumOnOK (void)
{
PLIBPBRECORD record;
MakePhbookRecord (&record, &gSelPhbPara.nums);
SelPhbookBack ((void *)&record, 1);
}
static void ChooseNumOnCancel (void)
{
mmi_phb_generic_enter_list (cbInternalLstPhbook);
}
/************************************************************************/
/* Query Phonebook related name string by number or EmailAddress */
/************************************************************************/
static char * lookUpMailAddress (char * addr);
void PLIB_GetPhbookName (WCHAR * nameBuf, int bufSize, unsigned char fieldMask, const WCHAR * data)
{
char * ptr;
if ( nameBuf == NULL || bufSize <= 0 )
return;
if ( fieldMask & PFIELD_EMAIL == 0
&& fieldMask & PFIELD_NUMBER == 0
&& fieldMask & PFIELD_NAME == 0 )
goto NAMENOTFOUND;
if ( data == NULL )
goto NAMENOTFOUND;
if ( fieldMask & PFIELD_NUMBER ) {
ptr = lookUpNumber ((char*)data);
if ( ptr != NULL )
goto NAMEFOUND;
}
if ( fieldMask & PFIELD_NAME ) {
ptr = lookUpName ((char*)data);
if ( ptr != NULL )
goto NAMEFOUND;
}
if ( fieldMask & PFIELD_EMAIL ) {
ptr = lookUpMailAddress ((char*)data);
if ( ptr != NULL )
goto NAMEFOUND;
}
goto NAMENOTFOUND;
NAMEFOUND:
pfnUnicodeStrncpy ((char*)nameBuf, ptr, bufSize/2);
return;
NAMENOTFOUND:
nameBuf[0] = 0x0000;
return;
}
extern unsigned short g_phb_name_index[];
extern unsigned short PhoneBookEntryCount;
extern MMI_PHB_ENTRY_BCD_STRUCT PhoneBook[MAX_PB_ENTRIES];
#include "nvramprot.h"
#include "nvramenum.h"
static char * lookUpMailAddress (char * mailaddr)
{
unsigned short idx;
int i;
char addr[MAX_PB_FIELD_LEN];
UnicodeToAnsii (addr, mailaddr);
for(i = 0; i < PhoneBookEntryCount; i++)
{
idx = g_phb_name_index[i];
if ( idx >= MAX_PB_PHONE_ENTRIES )
continue;
if ( PhoneBook[idx].field & MMI_PHB_ENTRY_FIELD_EMAIL ) {
PHB_OPTIONAL_FIELDS_STRUCT fields;
short err;
ReadRecord(NVRAM_EF_PHB_FIELDS_LID, (unsigned short)(idx + 1), (void*)&fields, OPTIONAL_FIELDS_RECORD_SIZE, &err);
if ( strcmp ((char*)addr, (char*)fields.emailAddress) == 0 )
return (char*)PhoneBook[idx].alpha_id.name;
}
}
return NULL;
}
/************************************************************************/
/* Select a file path from File Manager */
/************************************************************************/
static void ChooseFileEntry (void);
static void ChooseFileOnExit (void);
static unsigned char ChooseFileOnDelete (void * inhis);
static int selfileback = 0;
void PLIB_SelectFile (PLIBFILEFILTER type, const WCHAR* defPath, void (*callback)(WCHAR* path))
{
FMGR_FILTER filter;
char tbuf[64];
if ( gUserNotify.cbSelectFile )
return;
selfileback = 0;
gUserNotify.cbSelectFile = callback;
gScreenID = GetActiveScreenId ();
FMGR_FILTER_INIT(&filter);
switch ( type ) {
case PFFILTER_IMAGE:
FMGR_FILTER_SET_IMAGE(&filter);
break;
case PFFILTER_AUDIO:
FMGR_FILTER_SET_AUDIO(&filter);
break;
case PFFILTER_VIDEO:
FMGR_FILTER_SET_VIDEO(&filter);
break;
default:
FMGR_FILTER_SET_ALL(&filter);
break;
}
FMGR_FILTER_SET(&filter, FMGR_TYPE_FOLDER);
if ( defPath )
pfnUnicodeStrcpy (tbuf, (char*)defPath);
else
AnsiiToUnicodeString (tbuf, DEFAULTPATH);
EntryNewScreen (SCR_ID_PLX_UIL_CHOOSEFILE, ChooseFileOnExit, NULL, NULL);
SetDelScrnIDCallbackHandler(SCR_ID_PLX_UIL_CHOOSEFILE, ChooseFileOnDelete);
#ifdef PROJECT_SIMCOM_6217
mmi_fmgr_select_path_and_enter (APP_MULTIMEDIA, FMGR_SELECT_FILE, filter, (char*)tbuf, (PsFuncPtr) cbInteralSelFile);
#else
mmi_fmgr_select_path_and_enter (APP_MULTIMEDIA, FMGR_SELECT_FILE, filter, (char*)tbuf, (PsExtFuncPtr) cbInteralSelFile);
#endif
}
#ifdef SIMCOM_6217
static void cbInteralSelFile (void * info)
#else
static void cbInteralSelFile (void * info, int count)
#endif
{
selfileback = 1;
if ( gUserNotify.cbSelectFile != NULL ) {
SELFILECALLBACK callback = gUserNotify.cbSelectFile;
gUserNotify.cbSelectFile = NULL;
callback ((WCHAR*)info);
}
}
static void ChooseFileEntry (void)
{
}
static void ChooseFileOnExit (void)
{
history ScrDA; /* Variable to hold the history data*/
ScrDA.scrnID = SCR_ID_PLX_UIL_CHOOSEFILE;
ScrDA.entryFuncPtr = ChooseFileEntry;
AddHistory(ScrDA);
}
static unsigned char ChooseFileOnDelete (void * inhis)
{
if ( gUserNotify.cbSelectFile != NULL && !selfileback) {
SELFILECALLBACK callback = gUserNotify.cbSelectFile;
gUserNotify.cbSelectFile = NULL;
selfileback = 1;
// we here use keyword to indicate that we callback because of user back to idle
// it is not a good idea but it should work well
callback ((WCHAR*)"BACKIDLE");
}
return 0;
}
/************************************************************************/
/* Save data to the user selected path */
/************************************************************************/
#ifdef SIMCOM_6217
static void cbInteralSelPath (void * info);
#else
static void cbInteralSelPath (void * info, int count);
#endif
static void InputFilenameEntry (void);
static void InputNameOnOK (void);
static void InputNameOnCancel (void);
static void InputNameMenuOnOK (void);
static void SavedataNotify (int result);
static WCHAR * MakeFullPathName (void);
typedef enum {
MEDIA_IMAGE = 1,
MEDIA_AUDIO,
MEDIA_VIDEO,
MEDIA_UNKNOWN
} MEDIATYPE;
typedef struct tagCONTENTTYPETABLE {
const char * name;
const char * ext;
} CONTENTTYPETABLE, *PCONTENTTYPETABLE;
static const CONTENTTYPETABLE gContentTab[] = {
{"application/octet-stream", "exe"},
{"application/octet-stream", "bin"},
{"application/octet-stream", "class"},
{"application/octet-stream", "dms"},
{"application/octet-stream", "lha"},
{"application/octet-stream", "lzh"},
{"application/sdp", "sdp"},
{"application/vnd.poc.refer-to", ""},
{"application/vcard", "vcf"},
{"application/hbs-vcs", "vcs"},
{"application/zip", "zip"},
{"application/pdf", "pdf"},
{"application/x-dvi", "dvi"},
{"application/vnd.Nokia.ringing-tone", "rng"},
{"application/vnd.smaf", "mmf"},
{"application/x-smaf", "mmf"},
{"application/x-pmd", "pmd"},
{"audio/basic", "au"},
{"audio/basic", "snd"},
{"audio/mid", "mid"},
{"audio/mid", "rmi"},
{"audio/vm", "vm"},
{"audio/aac", "aac"},
{"audio/rmf", "rmf"},
{"audio/x-aiff", "aif"},
{"audio/x-aiff", "aifc"},
{"audio/x-aiff", "aiff"},
{"audio/m4a", "m4a"},
{"audio/x-mpegurl", "m3u"},
{"audio/x-pn-realaudio", "ra"},
{"audio/x-pn-realaudio", "ram"},
{"audio/wav", "wav"},
{"audio/x-wav", "wav"},
{"audio/amr", "amr"},
{"audio/amr-wb", "awb"},
{"audio/mid", "mid"},
{"audio/imelody", "imy"},
{"audio/x-imy", "imy"},
{"audio/mp3", "mp3"},
{"audio/mpeg", "mp3"},
{"audio/midi", "mid"},
{"audio/x-midi", "mid"},
{"audio/sp-midi", "mid"},
{"audio/x-epoc-wve", "wve"},
{"audio/3gpp", "3gp"},
{"audio/x-ms-wma", "wma"},
{"message/rfc822", "mht"},
{"message/rfc822", "mhtml"},
{"message/rfc822", "nws"},
{"image/bmp", "bmp"},
{"image/cis-cod", "cod"},
{"image/gif", "gif"},
{"image/ief", "ief"},
{"image/jpeg", "jpg"},
{"image/jpeg", "jpe"},
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -