📄 plxbrowpush.c
字号:
if(0 != listItems)
PlxAppFree(listItems[i]);
}
PlxAppFree(listItems);
listItems = 0;
}
if(0 != listIcons)
PlxAppFree(listIcons);
listIcons = 0;
bakItemsNum = 0;
#endif
DestroyPushChain();
curSelItem = 0;
if(NULL != wbPushMenu)
{
PlxDestroyDMenu(wbPushMenu);
wbPushMenu = NULL;
}
if(NULL != pContent)
{
PlxAppFree(pContent);
pContent = NULL;
}
nPushHistoryFlag = PUSH_NO_IN_HISTORY;
#ifdef __PLXBROW_DEBUG_
PlxTrace("[%d] DeInitPlxBrowPush-----> destroy push chain ", __LINE__);
#endif
}
/****************************************************************************
* Function EntryOfPlxBrowPush
* Purpose
* Params
* Return
* Remarks
\****************************************************************************/
void EntryOfPlxBrowPush(void)
{
#ifdef __PLXBROW_SUPPORT_HOTPLUG_
if(PMSDC_OK != PlxBrowIsMemCardPluged())
{
if(TRUE == IsScreenPresent(SCR_ID_PLX_BROW_VIEW))
GoBackToHistory(SCR_ID_PLX_BROW_VIEW);
if ( PMSDC_NONE == PlxBrowIsMemCardPluged())
PLIB_MessageBox(PMBTYPE_WARNING, NULL, (const WCHAR *)get_string(STR_ID_PLX_BROW_INSERTCARD), UI_POPUP_NOTIFYDURATION_TIME);
else
PLIB_NotifyMSDCWrong();
return;
}
#endif //__PLXBROW_SUPPORT_HOTPLUG_
if(0 > BuildPushItemChain())
{
DeInitPlxBrowPush();
if(TRUE == IsScreenPresent(SCR_ID_PLX_BROW_VIEW))
GoBackToHistory(SCR_ID_PLX_BROW_VIEW);
PLIB_MessageBox(PMBTYPE_ERROR, NULL, (const WCHAR *)get_string(STR_ID_PLX_BROW_ERR_MEMORYMALLOC),UI_POPUP_NOTIFYDURATION_TIME);
// ExternEndKeyDownFuncPtr = NULL;
ClearExEndKeyHandler();
return;
}
if(0 >= curPushItems)
{
DeInitPlxBrowPush();
if(TRUE == IsScreenPresent(SCR_ID_PLX_BROW_VIEW))
GoBackToHistory(SCR_ID_PLX_BROW_VIEW);
PLIB_MessageBox(PMBTYPE_EMPTY, NULL, (const WCHAR *)get_string(STR_GLOBAL_EMPTY), UI_POPUP_NOTIFYDURATION_TIME);
// ExternEndKeyDownFuncPtr = NULL;
ClearExEndKeyHandler();
return;
}
#ifdef __PLXBROW_DEBUG_
PlxTrace("[%d] EntryOfPlxBrowPush-----> Enter push list screen ", __LINE__);
#endif
EnterWBPushScreen();
}
/****************************************************************************
* Function EnterWBPushScreen
* Purpose enter push box screen
* Params
* Return
* Remarks
\****************************************************************************/
static void EnterWBPushScreen(void){
U8* guiBuffer = NULL;
EntryNewScreen(SCR_ID_PLX_BROW_PUSH, NULL, EnterWBPushScreen, NULL);
// guiBuffer = GetCurrGuiBuffer(SCR_ID_PLX_BROW_PUSH);
RegisterHighlightHandler(WBPushMarkCurSel);
if(TRUE == IsScreenPresent(SCR_ID_PLX_BROW_VIEW))
nPushHistoryFlag |= PUSH_AFTER_BROWSER;
else
nPushHistoryFlag |= PUSH_BEFORE_BROWSER;
#ifdef __PLXBROW_DEBUG_
PlxTrace("[%d] EnterWBPushScreen -----> pushnum = %d", __LINE__, curPushItems);
#endif
#if 0
GetWBPushItemInfo();
ShowCategory84Screen(STR_ID_PLX_BROW_PUSHBOX, IMG_ID_PLX_BROW_PUSHBOX, STR_ID_PLX_BROW_OPTION, IMG_GLOBAL_OK,
STR_GLOBAL_BACK, IMG_GLOBAL_BACK,
curPushItems, (U8**)listItems, listIcons,
LIST_MENU, curSelItem,
guiBuffer);
#endif
ShowCategory184Screen(STR_ID_PLX_BROW_PUSHBOX, IMG_ID_PLX_BROW_PUSHBOX, STR_ID_PLX_BROW_OPTION, IMG_GLOBAL_OK,
STR_GLOBAL_BACK, IMG_GLOBAL_BACK, curPushItems, GetNextPushItem, GetNextPushItemHint,
curSelItem, guiBuffer);
SetRightSoftkeyFunction(ExitWbPush,KEY_EVENT_UP);
SetLeftSoftkeyFunction(EntryWBPushMenu, KEY_EVENT_UP);
SetKeyHandler(WBPushUserRead,KEY_ENTER,KEY_EVENT_UP);
SetKeyHandler(WBPushKeyEndHandler,KEY_END,KEY_EVENT_DOWN);
SetDelScrnIDCallbackHandler(SCR_ID_PLX_BROW_PUSH,PushCBHhandler);
SetKeyHandler(ExitWbPush,KEY_LEFT_ARROW, KEY_EVENT_DOWN);
SetKeyHandler(EntryWBPushMenu,KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
#ifdef __PLXBROW_PUSH_TEST_
SetKeyHandler(TestSIPush,KEY_VOL_UP, KEY_EVENT_UP);
SetKeyHandler(TestTextPush,KEY_VOL_DOWN, KEY_EVENT_UP);
SetKeyHandler(TestSIPush,KEY_LEFT_ARROW, KEY_EVENT_UP);
SetKeyHandler(TestTextPush,KEY_RIGHT_ARROW, KEY_EVENT_UP);
#endif //__PLXBROW_PUSH_TEST_
}
/****************************************************************************
* Function PushCBHhandler
* Purpose
* Params
* Return
* Remarks
\****************************************************************************/
static U8 PushCBHhandler(void* param)
{
if( 0 == param && FALSE == IsScreenPresent(SCR_ID_PLX_BROW_VIEW) &&
FALSE == IsScreenPresent(SCR_ID_PLX_BROW_MAIN))
{
PAPP_WapShutDown();
}
return FALSE;
}
/****************************************************************************
* Function GetNextPushItem
* Purpose get push list items and icons
* Params
* Return
* Remarks
\****************************************************************************/
static pBOOL GetNextPushItem( S32 item_index, UI_string_type str_buff, UI_image_type* img_buff_p, U8 str_img_mask )
{
PPUSH pMv;
int i;
char *pUtf8Title;
int nUtf8TitleLen;
int nWideTitleLen;
char szPrefix[] = "...";
char szWideTemp[PLXBROW_MAX_PATH];
if(0 > item_index || item_index >= curPushItems)
return FALSE;
for (pMv = pPushChain, i = 0; i < curPushItems && pMv != NULL; ++ i)
{
if(i == item_index)
break;
pMv = pMv->pNext;
}
if(i == curPushItems || pMv == NULL)
return FALSE;
switch(pMv->fileUnit.class)
{
case PUSH_SI:
if( 0 == ((PSIFILEITEM)(pMv->pData))->nRead)
*img_buff_p = (UI_image_type)GetImage((U16)IMG_ID_PLX_BROW_PUSHLINKUNREAD);
else
*img_buff_p = (UI_image_type)GetImage((U16)IMG_ID_PLX_BROW_PUSHLINKREAD);
pUtf8Title = (char *)(pMv->pData) + sizeof(SIFILEITEM);
nUtf8TitleLen = ((PSIFILEITEM)(pMv->pData))->szTitle;
break;
case PUSH_TEXT:
if(0 ==((PTXTFILEITEM)(pMv->pData))->bRead)
*img_buff_p = (UI_image_type)GetImage((U16) IMG_ID_PLX_BROW_PUSHTXTUNREAD);
else
*img_buff_p = (UI_image_type)GetImage((U16) IMG_ID_PLX_BROW_PUSHTXTREAD);
pUtf8Title = (char*)(pMv->pData) + sizeof(TXTFILEITEM);
if(NULL!= pUtf8Title)
nUtf8TitleLen =strlen(pUtf8Title);
break;
default:
return FALSE;
}
if( PLXBROW_MAX_PATH /2 -2 <= nUtf8TitleLen)
nUtf8TitleLen = PLXBROW_MAX_PATH / 2 - 2;
PlxUTF82UCS2((char *)szWideTemp, (char *)pUtf8Title,nUtf8TitleLen, PLXBROW_MAX_PATH);
nWideTitleLen = pfnUnicodeStrlen((const S8*)szWideTemp);
if(nWideTitleLen > MAX_SUBMENU_CHARACTERS)
{
pfnUnicodeStrncpy((S8*)str_buff,(const S8*)szWideTemp,MAX_SUBMENU_CHARACTERS - 3);
PlxUTF82UCS2((char *)szWideTemp, (char *)szPrefix, strlen((const char*)szPrefix), PLXBROW_MAX_PATH);
pfnUnicodeStrcat((S8*)str_buff,(const S8*)szWideTemp);
}
else
pfnUnicodeStrcpy((S8*)str_buff,(const S8*)szWideTemp);
return TRUE;
}
/****************************************************************************
* Function GetNextPushItemHint
* Purpose get push list items and icons
* Params
* Return
* Remarks
\****************************************************************************/
static S32 GetNextPushItemHint ( S32 item_index, UI_string_type *hint_array )
{
return 0;
}
#if 0
/****************************************************************************
* Function GetWBPushItemInfo
* Purpose get push list items and icons
* Params
* Return
* Remarks
\****************************************************************************/
static void GetWBPushItemInfo(void)
{
PPUSH pMv;
int i;
char *pUtf8Title;
int nUtf8TitleLen;
if(0 < curPushItems)
{
for(i = 0; i<bakItemsNum; i++)
{
if(NULL != listItems && NULL != listItems[i])
PlxAppFree(listItems[i]);
listItems[i] = NULL;
}
if(NULL != listItems)
PlxAppFree(listItems);
if(NULL != listIcons)
PlxAppFree(listIcons);
listIcons = NULL;
if(NULL == (listItems = PlxAppMalloc(sizeof(PU8) * curPushItems)))
{
listItems = NULL;
return;
}
if(NULL == (listIcons= PlxAppMalloc(sizeof(U16) * curPushItems)))
{
listIcons = NULL;
}
#ifdef __PLXBROW_DEBUG_
PlxTrace("%s : %d, pushnum = %d", __FILE__, __LINE__, curPushItems);
#endif
for (pMv = pPushChain, i = 0; i < curPushItems && pMv != 0; ++ i)
{
switch(pMv->fileUnit.class) {
case PUSH_SI:
pUtf8Title = (char *)(pMv->pData) + sizeof(SIFILEITEM);
nUtf8TitleLen = ((PSIFILEITEM)(pMv->pData))->szTitle;
#ifdef __PLXBROW_DEBUG_
PlxTrace("PUSH_SI: num:%d :: push title: %s, len: %d, pMV= %d", i, pUtf8Title,nUtf8TitleLen,pMv);
#endif
if(NULL != listItems)
{
if(0 < nUtf8TitleLen && NULL != (listItems[i] = PlxAppMalloc(nUtf8TitleLen *2 +2)))
PlxUTF82UCS2((char *) listItems[i], (char *) pUtf8Title,nUtf8TitleLen,nUtf8TitleLen*2);
else
listItems[i] = NULL;
}
if(NULL != listIcons )
{
if( 0 == ((PSIFILEITEM)(pMv->pData))->nRead)
listIcons[i] = IMG_ID_PLX_BROW_PUSHLINKUNREAD;
else
listIcons[i] = IMG_ID_PLX_BROW_PUSHLINKREAD;
#ifdef __PLXBROW_DEBUG_
PlxTrace("num: %d :: read = %d", i, (int)( ((PSIFILEITEM)(pMv->pData))->nRead));
#endif
}
break;
case PUSH_TEXT:
pUtf8Title = (char*)(pMv->pData) + sizeof(TXTFILEITEM);
if(NULL!= pUtf8Title)
nUtf8TitleLen =strlen(pUtf8Title);
#ifdef __PLXBROW_DEBUG_
PlxTrace("PUSH_TXT: num:%d :: push title: %s, len: %d, pMV= %d", i, pUtf8Title,nUtf8TitleLen,pMv);
#endif
if(NULL !=listItems)
{
if(0 < nUtf8TitleLen && NULL != (listItems[i] = PlxAppMalloc(nUtf8TitleLen*2+2)))
PlxUTF82UCS2((char *)listItems[i],( char *)pUtf8Title, nUtf8TitleLen,nUtf8TitleLen*2+2);
else
listItems[i] =NULL;
}
if(NULL != listIcons)
{
if(0 ==((PTXTFILEITEM)(pMv->pData))->bRead)
listIcons[i] = IMG_ID_PLX_BROW_PUSHTXTUNREAD;
else
listIcons[i] = IMG_ID_PLX_BROW_PUSHTXTREAD;
}
break;
default:
break;
}
pMv = pMv->pNext;
}
}
bakItemsNum = curPushItems;
}
#endif
/****************************************************************************
* Function WBPushMarkCurSel
* Purpose remember the selected item
* Params
* Return
* Remarks
\****************************************************************************/
void WBPushMarkCurSel(S32 selItem){
curSelItem = selItem;
}
/****************************************************************************
* Function ExitWbPush
* Purpose exit push box screen
* Params
* Return
* Remarks
\****************************************************************************/
void ExitWbPush(void){
PlxBrowSetWapStatusIcon();
DeInitPlxBrowPush();
if(TRUE == IsScreenPresent(SCR_ID_PLX_BROW_VIEW))
GoBackToHistory(SCR_ID_PLX_BROW_VIEW);
else
{
GoBackHistory();
ClearExEndKeyHandler();
}
// ExternEndKeyDownFuncPtr = NULL;
}
#if 0
/****************************************************************************
* Function EnterWBPushMenu
* Purpose enter push menu screen
* Params
* Return
* Remarks
\****************************************************************************/
void EnterWBPushMenu(void){
U16 nStrItemList[MAX_SUB_MENUS]; /* Stores the strings id of submenus returned */
U16 nNumofItem; /* Stores no of children in the submenu*/
U8* guiBuffer; /* Buffer holding history data */
U16 SettingsSubmenuImageList[MAX_SUB_MENUS];
SetHiliteHandler(MENU_ID_PLX_BROW_PUSH_READ, hilight_pushmenu_read);
SetHiliteHandler(MENU_ID_PLX_BROW_PUSH_DEL, hilight_pushmenu_del);
SetHiliteHandler(MENU_ID_PLX_BROW_PUSH_DELALL, hilight_pushmenu_delall);
EntryNewScreen(SCR_ID_PLX_BROW_PUSH_MENU, NULL, EnterWBPushMenu, NULL);
/* 2 Get current screen to gui buffer for history purposes*/
guiBuffer = GetCurrGuiBuffer(SCR_ID_PLX_BROW_MENU);
/* 3. Retrieve no of child of menu item to be displayed */
nNumofItem = GetNumOfChild(MENU_ID_PLX_BROW_PUSH);
/* 5. Retrieve string ids in sequence of given menu item to be displayed */
GetSequenceStringIds(MENU_ID_PLX_BROW_PUSH,nStrItemList);
GetSequenceImageIds(MENU_ID_PLX_BROW_PUSH, SettingsSubmenuImageList);
/* 6 Set current parent id*/
SetParentHandler(MENU_ID_PLX_BROW_PUSH);
/* 7 Register highlight handler to be called in menu screen */
RegisterHighlightHandler(ExecuteCurrHiliteHandler);
/* 8 Display Category1 Screen */
ShowCategory15Screen(STR_ID_PLX_BROW_MENU, IMG_ID_PLX_BROW,
STR_GLOBAL_OK, IMG_GLOBAL_OK,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -