📄 plxbrowfile.c
字号:
for(i = DeleteID; i<PLXBROW_FILE_SAVEPAGE_MAX_NUM -1; i++)
{
g_plxBrowFileStore[i] = g_plxBrowFileStore[i+1];
g_PageInfo[i].nPageSize = g_PageInfo[i+1].nPageSize;
g_PageInfo[i].nSubDocSize = g_PageInfo[i+1].nSubDocSize;
}
g_plxBrowFileStore[i] = NULL;
g_PageInfo[i].nPageSize = 0;
g_PageInfo[i].nSubDocSize = 0;
}
/****************************************************************************
* Function static void GetPageSavedInfo(const WCHAR* pszWidePageName, PPageSavedInfo pPageInfo)
* Purpose get file size informations of pages saved
* Params
* Return
* Remarks
\****************************************************************************/
static void GetPageSavedInfo(const WCHAR* pszWidePageName, PPageSavedInfo pPageInfo)
{
WCHAR* p;
int nWideNameLen;
char szPageDir[PLXBROW_FILENAME_MAX_LEN ];//no more than 14 chars
char *szSavePath;
char *szCurrPath;
FS_HANDLE handle;
FS_DOSDirEntry file_info;
U8 file_name[PLXBROW_FILENAME_MAX_LEN + 2];
WCHAR szWideChar[7];
if(NULL == pszWidePageName || 0 ==(nWideNameLen = pfnUnicodeStrlen((const S8*)pszWidePageName)))
return;
if(NULL == (szSavePath = PlxAppMalloc(PLXBROW_MAX_PATH*2)))
return ;
if(NULL == (szCurrPath = PlxAppMalloc(PLXBROW_MAX_PATH*2)))
{
PlxAppFree(szSavePath);
return;
}
FS_GetCurrentDir((WCHAR *)szSavePath, (UINT) PLXBROW_MAX_PATH);
// FS_SetCurrentDir((const WCHAR*)PLXBROW_FILE_DOWNLOAD_PATH);
for(p = (WCHAR*) pszWidePageName + nWideNameLen; p>pszWidePageName; p--)
{
AnsiiToUnicodeString((S8 *) szWideChar, (S8 *)".");
if(0 == pfnUnicodeStrncmp((const S8*)p, (const S8*)szWideChar, 1))
{
pfnUnicodeStrncpy((S8*)szPageDir,(const S8*)pszWidePageName,(U32)( p-pszWidePageName));
AnsiiToUnicodeString((S8 *)szWideChar, (S8 *)"_files");
pfnUnicodeStrcat((S8*)szPageDir,(const S8*)szWideChar);
break;
}
}
AnsiiToUnicodeString((S8 *)szCurrPath, (S8 *) GetPBUISavePageDirectory());
pfnUnicodeStrcat((S8*)szCurrPath,(const S8*)szPageDir);
if(FS_NO_ERROR == FS_SetCurrentDir((const WCHAR*)szCurrPath))
{
AnsiiToUnicodeString((S8 *) szWideChar, (S8 *)"*.*");
if (0 <= (handle = FS_FindFirst((WCHAR *)szWideChar, 0, FS_ATTR_DIR, &file_info, (WCHAR *)file_name, PLXBROW_FILENAME_MAX_LEN/2)))
{
pPageInfo->nSubDocSize += file_info.FileSize;
while(FS_NO_ERROR == FS_FindNext(handle,&file_info,(WCHAR*)file_name,PLXBROW_FILENAME_MAX_LEN/2))
{
pPageInfo->nSubDocSize += file_info.FileSize;
}
}
FS_FindClose(handle);
}
// FS_SetCurrentDir((const WCHAR*)PLXBROW_FILE_DOWNLOAD_PATH);
FS_SetCurrentDir((const WCHAR*)szSavePath);
PlxAppFree(szSavePath);
PlxAppFree(szCurrPath);
return ;
}
/****************************************************************************
* Function static void EntryPlxBrowFileScreen(void)
* Purpose enter the file screen
* Params
* Return
* Remarks
\****************************************************************************/
static void EntryPlxBrowFileScreen(void)
{
U8* guiBuffer;
LoadFileStore();
EntryNewScreen(SCR_ID_PLX_BROW_FILE,NULL, EntryPlxBrowFileScreen, NULL);
guiBuffer = GetCurrGuiBuffer(SCR_ID_PLX_BROW_FILE);
RegisterHighlightHandler(GetCurHiliteFileItemID);
ShowCategory184Screen(STR_ID_PLX_BROW_FILE, IMG_ID_PLX_BROW_FILES,
STR_ID_PLX_BROW_OPTION,IMG_GLOBAL_OK,
STR_GLOBAL_BACK, IMG_GLOBAL_BACK,
g_NumOfFileSaved,
GetNextFileItem, GetFileItemHint, g_curHiliteFileID, guiBuffer);
SetKeyHandler(JumpToSelFileScreen, KEY_ENTER, KEY_EVENT_UP);
SetLeftSoftkeyFunction(EntryPlxBrowFileMenu, KEY_EVENT_UP);
SetRightSoftkeyFunction(ExitPlxBrowFileScreen,KEY_EVENT_UP);
// ClearKeyHandler(KEY_END,KEY_EVENT_DOWN);
SetKeyHandler(FileKeyEndHandler,KEY_END,KEY_EVENT_DOWN);
SetKeyHandler(ExitPlxBrowFileScreen,KEY_LEFT_ARROW, KEY_EVENT_DOWN);
SetKeyHandler(EntryPlxBrowFileMenu,KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
}
/****************************************************************************
* Function static void GetCurHiliteFileItemID(S32 itemHilite)
* Purpose
* Params
* Return
* Remarks
\****************************************************************************/
static void GetCurHiliteFileItemID(S32 itemHilite)
{
g_curHiliteFileID = itemHilite;
}
/****************************************************************************
* Function static BOOL GetNextFileItem( S32 item_index, UI_string_type str_buff, UI_image_type* img_buff_p, U8 str_img_mask )
* Purpose
* Params
* Return
* Remarks
\****************************************************************************/
static pBOOL GetNextFileItem( S32 item_index, UI_string_type str_buff, UI_image_type* img_buff_p, U8 str_img_mask )
{
if(0 > item_index || PLXBROW_FILE_SAVEPAGE_MAX_NUM <= item_index)
return FALSE;
pfnUnicodeStrcpy((S8*)str_buff, g_plxBrowFileStore[item_index]);
*img_buff_p = (UI_image_type)GetImage((U16)(IMG_GLOBAL_L1 + item_index));
return TRUE;
}
/****************************************************************************
* Function static S32 GetFileItemHint ( S32 item_index, UI_string_type *hint_array )
* Purpose get tips of file size
* Params
* Return
* Remarks
\****************************************************************************/
static S32 GetFileItemHint ( S32 item_index, UI_string_type *hint_array )
{
char szUtf8SizeStr[20];
char szWideSizeStr[20];
float nSize;
if(0 > item_index || PLXBROW_FILE_SAVEPAGE_MAX_NUM <=item_index)
return -1;
// memset(szUtf8SizeStr,0x0,20);
nSize =(float)(g_PageInfo[item_index].nPageSize + g_PageInfo[item_index].nSubDocSize);
nSize = nSize /1024; // k
sprintf(szUtf8SizeStr,"%.2f",nSize);
// AnsiiNToUnicodeString((S8 *)hint_array[item_index],( S8 *)szUtf8SizeStr,strlen(szUtf8SizeStr));
PlxUTF82UCS2((char * )szWideSizeStr,( char *)szUtf8SizeStr, strlen(szUtf8SizeStr), 20);
pfnUnicodeStrcpy((S8*)hint_array[0],(const S8*)szWideSizeStr);
AnsiiToUnicodeString((S8 *) szWideSizeStr, (S8 *)"K" );
pfnUnicodeStrcat((S8*)hint_array[0],(const S8*)szWideSizeStr);
return 1;
}
/****************************************************************************
* Function static void ExitPlxBrowFileScreen(void)
* Purpose
* Params
* Return
* Remarks
\****************************************************************************/
static void ExitPlxBrowFileScreen(void)
{
DeInitPlxBrowFile();
if(TRUE == IsScreenPresent(SCR_ID_PLX_BROW_VIEW))
GoBackToHistory(SCR_ID_PLX_BROW_VIEW);
else
GoBackHistory();
}
/****************************************************************************
* Function static void EntryPlxBrowFileMenu(void)
* Purpose show menu screen of file screen
* Params
* Return
* Remarks
\****************************************************************************/
static void EntryPlxBrowFileMenu(void)
{
CreateFileMenu();
if (NULL == g_hPlxBrowFileMenu)
return;
ModifyFileMenu();
PlxSetDMenuDispInfo(0, IMG_ID_PLX_BROW_FILES, 0,0, 0,0);
PlxShowDMenu(g_hPlxBrowFileMenu, SCR_ID_PLX_BROW_FILE_MENU, STR_ID_PLX_BROW_FILE,
FileMenuNty,EntryPlxBrowFileMenu);
// ClearKeyHandler(KEY_END,KEY_EVENT_DOWN);
SetKeyHandler(FileKeyEndHandler,KEY_END,KEY_EVENT_DOWN);
}
/****************************************************************************
* Function static int CreateFileMenu(void)
* Purpose
* Params
* Return
* Remarks
\****************************************************************************/
static int CreateFileMenu(void)
{
if(NULL != g_hPlxBrowFileMenu)
return 0;
g_hPlxBrowFileMenu = PlxCreateDMenu(0);
if (NULL == g_hPlxBrowFileMenu)
{
return -1; //create menu failed
}
PlxInsertDMenuItem(g_hPlxBrowFileMenu, -1, MF_ENABLED, DMENU_ID_PLX_BROW_FILE_VIEW,//浏览
(const char *)get_string(STR_ID_PLX_BROW_HISTORY_VIEW), IMG_GLOBAL_L1);
PlxInsertDMenuItem(g_hPlxBrowFileMenu, -1, MF_ENABLED, DMENU_ID_PLX_BROW_FILE_DELETE,//delete
(const char *)get_string(STR_ID_PLX_BROW_BOOKMARK_DELETE), IMG_GLOBAL_L2);
PlxInsertDMenuItem(g_hPlxBrowFileMenu, -1, MF_ENABLED, DMENU_ID_PLX_BROW_FILE_DELETEALL,//删除全部
(const char *)get_string(STR_ID_PLX_BROW_BOOKMARK_DELETEALL), IMG_GLOBAL_L3);
return 0;
}
/****************************************************************************
* Function static void ModifyFileMenu(void)
* Purpose
* Params
* Return
* Remarks
\****************************************************************************/
static void ModifyFileMenu(void)
{
unsigned short isMenuEnabled;
isMenuEnabled = g_NumOfFileSaved > 0 ? MF_ENABLED : MF_DISABLED;
PlxModifyDMenuItem(g_hPlxBrowFileMenu,0,(unsigned short)(isMenuEnabled|MF_BYPOSITION),(unsigned long)DMENU_ID_PLX_BROW_FILE_VIEW,
(const char *)get_string(STR_ID_PLX_BROW_HISTORY_VIEW),(unsigned short)IMG_GLOBAL_L1);
PlxModifyDMenuItem(g_hPlxBrowFileMenu,1,(unsigned short)(isMenuEnabled|MF_BYPOSITION), (unsigned long)DMENU_ID_PLX_BROW_FILE_DELETE,
(const char *)get_string(STR_ID_PLX_BROW_BOOKMARK_DELETE),(unsigned short)IMG_GLOBAL_L2);
PlxModifyDMenuItem(g_hPlxBrowFileMenu,2,(unsigned short)(isMenuEnabled|MF_BYPOSITION), (unsigned long)DMENU_ID_PLX_BROW_FILE_DELETEALL,
(const char *)get_string(STR_ID_PLX_BROW_BOOKMARK_DELETEALL),(unsigned short)IMG_GLOBAL_L3);
return ;
}
/****************************************************************************
* Function static int FileMenuNty(HDMENU hMenu, unsigned long id, unsigned long event)
* Purpose notify function for history menus
* Params
* Return
* Remarks
\****************************************************************************/
static int FileMenuNty(HDMENU hMenu, unsigned long id, unsigned long event)
{
switch(event)
{
case ENT_RIGHT:
case ENT_OK:
switch(id)
{
case DMENU_ID_PLX_BROW_FILE_VIEW:
JumpToSelFileScreen();
//temp solution for the problem of wrong focus item in dynamic menu
//when there are two screen id in history stack but only one menu resoure in memory;
if(FALSE == IsScreenPresent(SCR_ID_PLX_BROW_VIEW))
DeleteBetweenScreen(SCR_ID_PLX_BROW_FILE_MENU,SCR_ID_PLX_BROW_FILE_MENU);
break;
case DMENU_ID_PLX_BROW_FILE_DELETE:
if(ENT_OK == event)
EntryDelFileConfirmScreen();
break;
case DMENU_ID_PLX_BROW_FILE_DELETEALL:
if(ENT_OK == event)
EntryDelAllFileConfirmScreen();
break;
default:
return -1;
}
break;
case ENT_LEFT:
// if(id == DMENU_ID_PLX_BROW_FILE_DELETE || id == DMENU_ID_PLX_BROW_FILE_DELETEALL)
// break;
case ENT_BACK:
GoBackHistory();
if(hMenu)
PlxDestroyDMenu(hMenu);
g_hPlxBrowFileMenu = NULL;
break;
default:
return -1;
}
return 0;
}
/****************************************************************************
* Function static void JumpToSelFileScreen(void)
* Purpose view the selected page saved in browser screen
* Params
* Return
* Remarks
\***************************************************************************/
static void JumpToSelFileScreen(void)
{
char *szUtf8FileName;
char *szWideFileName;
int nWideFileNameLen;
// WCHAR szWideChar[PLXBROW_MAX_PATH];
#ifdef __PLXBROW_SUPPORT_HOTPLUG_
if(PMSDC_OK != PlxBrowIsMemCardPluged())
{
if(TRUE == IsScreenPresent(SCR_ID_PLX_BROW_FILE))
GoBackToHistory(SCR_ID_PLX_BROW_FILE);
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> g_curHiliteFileID || g_curHiliteFileID >= g_NumOfFileSaved )
return;
if(NULL == (szWideFileName = PlxAppMalloc(PLXBROW_MAX_PATH*2)))
return;
if(NULL == (szUtf8FileName = PlxAppMalloc(PLXBROW_MAX_PATH)))
{
PlxAppFree(szWideFileName);
return;
}
AnsiiToUnicodeString((S8 *) szWideFileName, (S8 *)"file://");
// AnsiiToUnicodeString((S8 *) szWideChar, (S8 *)"file://");
// pfnUnicodeStrcpy((S8*)szWideFileName,(const S8*)szWideChar);
AnsiiToUnicodeString((S8 *) szWideFileName+14, (S8 *)GetPBUISavePageDirectory());
// AnsiiToUnicodeString((S8 *) szWideChar, (S8 *)PLXBROW_FILE_DOWNLOAD_PATH);
// pfnUnicodeStrcat((S8*)szWideFileName,(const S8*)szWideChar);
pfnUnicodeStrcat((S8*)szWideFileName,(const S8*)g_plxBrowFileStore[g_curHiliteFileID]);
nWideFileNameLen = pfnUnicodeStrlen((const PS8)szWideFileName);
PlxWideCharToUTF8((const char *)szWideFileName, nWideFileNameLen,szUtf8FileName, PLXBROW_MAX_PATH);
DeInitPlxBrowFile(); //退出file 模块
EntryOfPlxBrowserView((const char*)szUtf8FileName);
PlxAppFree(szWideFileName);
PlxAppFree(szUtf8FileName);
}
/****************************************************************************
* Function static void EntryDelFileConfirmScreen (void)
* Purpose
* Params
* Return
* Remarks
\****************************************************************************/
static void EntryDelFileConfirmScreen (void)
{
int nToneId = WARNING_TONE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -