plxbrowbookmark.c

来自「mtk wap和mms代码。。适应mtk 25。26平台」· C语言 代码 · 共 1,913 行 · 第 1/5 页

C
1,913
字号
#endif //__PLXBROW_DEFAULT_BOOKMARK_

//if read error ,init the last bookmark
/*	do not show empty bookmark
	if(-1 ==flag)
	{
		for (i=nReadCount;i < PLXBROW_BOOKMARK_MAX_ITEM ;i++)
		{
//			g_plxBrowBooKMarks[i].isChanged =FALSE;
			pfnUnicodeStrcpy(g_plxBrowBooKMarks[i].szBMName,(char*)get_string(STR_ID_PLX_BROW_BOOKMARK_DEFAULT_BMNAME));//Unicode string
			g_plxBrowBooKMarks[i].szBMUrl=NULL;
		}
	}
*/
	//recalcute the num of bookmarks
	g_curNumOfBookMark =0;
	for (i=0;i < PLXBROW_BOOKMARK_MAX_ITEM ;i++)
	{
		if(NULL != g_plxBrowBooKMarks[i].szBMUrl)
			g_curNumOfBookMark ++;
	}
	
	g_bplxBrowBookMarkIsLoad = TRUE;
	g_bIsAnyBookMarkChanged = FALSE;
	return 0;
}


/****************************************************************************
* Function	static void plxBrowEmptyBookMarks(void)
* Purpose   empty the bookmarks to free memory 	
* Params	
* Return	
* Remarks	
\****************************************************************************/
void plxBrowEmptyBookMarks(void)
{
	int 		i;

	for(i=0 ; i<PLXBROW_BOOKMARK_MAX_ITEM; i++)
	{
//		g_plxBrowBooKMarks[i].isChanged = FALSE;
//		pfnUnicodeStrcpy(g_plxBrowBooKMarks[i].szBMName,(char*)get_string(STR_ID_PLX_BROW_BOOKMARK_DEFAULT_BMNAME));
		if(NULL!=g_plxBrowBooKMarks[i].szBMUrl)
		{
			PlxAppFree(g_plxBrowBooKMarks[i].szBMUrl);
			g_plxBrowBooKMarks[i].szBMUrl= NULL;
		}
	}
	g_curNumOfBookMark = 0; //empty
	g_bplxBrowBookMarkIsLoad = FALSE;
	g_bIsAnyBookMarkChanged = FALSE;
}


/****************************************************************************
* Function	static  BOOL   plxBrowSaveBookMarks(void)
* Purpose	save the bookmarks and free memory
* Params	
* Return	
* Remarks	
\****************************************************************************/
static BOOL   plxBrowSaveBookMarks(void)
{
	
	int			nRetFileSize;
	int			i;
	int			nUrlLen;
	int			nFileLen=0;
	FS_HANDLE	fd;	
	WCHAR		szCurPath[PLXBROW_MAX_PATH];
	char  		*szWbuf;
	char			*szWtmp;
	int			nRetFile;

	if(FALSE == g_bplxBrowBookMarkIsLoad)
		return TRUE;
	if(FALSE == g_bIsAnyBookMarkChanged)
	{
		plxBrowEmptyBookMarks();
		return TRUE;
	}

	AnsiiToUnicodeString((S8 *)szCurPath,(S8 *) GetPBUIBookmarkFilePath());
	if(0 > (fd=FS_Open((const WCHAR *)szCurPath,FS_CREATE | FS_READ_WRITE  | FS_ATTR_HIDDEN  | FS_ATTR_SYSTEM)))
	{
		PLIB_MessageBox(PMBTYPE_ERROR, (const WCHAR *) NULL, (const WCHAR *)get_string(STR_ID_PLX_BROW_SAVEPAGE_ERR_FILEOPENFAIL),UI_POPUP_NOTIFYDURATION_TIME);
		plxBrowEmptyBookMarks();
		return FALSE;
	}		

	for (i = 0;i < PLXBROW_BOOKMARK_MAX_ITEM;i++ )
	{
		nFileLen += PLXBROW_BMNAME_MAX_LEN * 2 ;
		nFileLen += sizeof(int);
		if (NULL != g_plxBrowBooKMarks[i].szBMUrl)
			nFileLen +=	((pfnUnicodeStrlen(g_plxBrowBooKMarks[i].szBMUrl) +1)*2); //include string end char		
	} 
	if(NULL == (szWbuf = (char*)PlxAppMalloc(nFileLen)))
	{
		PLIB_MessageBox(PMBTYPE_ERROR, (const WCHAR *) NULL, (const WCHAR *)get_string(STR_ID_PLX_BROW_ERR_MEMORYMALLOC),UI_POPUP_NOTIFYDURATION_TIME);
		nRetFileSize = -1;
	}
	else
	{
		szWtmp = szWbuf;
		for (i = 0;i < PLXBROW_BOOKMARK_MAX_ITEM;i++ )
		{
//			if(0 == pfnUnicodeStrcmp((const s8*)g_plxBrowBooKMarks[i].szBMName,(const S8*)get_string(STR_ID_PLX_BROW_BOOKMARK_DEFAULT_BMNAME)))
//				PlxAppMemcpy(szWtmp,"",PLXBROW_BMNAME_MAX_LEN * 2);
//			else
			PlxAppMemcpy(szWtmp, g_plxBrowBooKMarks[i].szBMName,PLXBROW_BMNAME_MAX_LEN * 2);
			szWtmp += PLXBROW_BMNAME_MAX_LEN * 2;
			
			nUrlLen=0;
			if (NULL != g_plxBrowBooKMarks[i].szBMUrl)
			{		
				nUrlLen = (pfnUnicodeStrlen(g_plxBrowBooKMarks[i].szBMUrl) +1) * 2;
			}
				
			PlxAppMemcpy(szWtmp,&nUrlLen,sizeof(int));
			szWtmp += sizeof(int);
			if (nUrlLen !=0)
			{
				PlxAppMemcpy(szWtmp,g_plxBrowBooKMarks[i].szBMUrl,nUrlLen);				
				szWtmp += nUrlLen;
			}
			
		}//end for 
		nRetFile = FS_Write(fd, (void *)szWbuf, (UINT)nFileLen, (UINT *)&nRetFileSize);
		PlxAppFree(szWbuf);
		if (FS_NO_ERROR != nRetFile || nRetFileSize != nFileLen)		
			nRetFileSize = -1;
	}
	
	plxBrowEmptyBookMarks();
	if (nRetFileSize == -1)
	{
		FS_Close(fd);
		return FALSE;
	}
	FS_Close(fd);
	return TRUE;
}


/****************************************************************************
* Function	static int plxBrowSetOneBookMark(void) //Unicode
* Purpose	set one bookmark with new infomation	
* Params	
* Return	
* Remarks	
\****************************************************************************/
static int plxBrowSetOneBookMark(void) //Unicode
{
	int 			i;
	int             nNewUrlLen;
	int				nNewNameLen;
	char            *szTempUrl;
	char		    *szTempUtf8Url;
	int             flag= 0;
	int				nUtf8UrlLen;
	
	if(0>g_curHiliteBookMarkID ||PLXBROW_BOOKMARK_MAX_ITEM <= g_curHiliteBookMarkID)
		return PLXBROW_BM_ERR_INVALID_POS;
	if(0 ==(nNewNameLen = pfnUnicodeStrlen((const S8*)g_szPlxBrowBMEditInputName))) 
		return PLXBROW_BM_ERR_NULL_NAME;
	if(0 ==(nNewUrlLen=pfnUnicodeStrlen((const S8*)g_szPlxBrowBMEditInputURL)))
		return PLXBROW_BM_ERR_NULL_URL;

	if(0 == pfnUnicodeStrcmp((const S8*)g_szPlxBrowBMEditInputName, (const S8*)g_plxBrowBooKMarks[g_curHiliteBookMarkID].szBMName))
	{
		if(NULL != g_plxBrowBooKMarks[g_curHiliteBookMarkID].szBMUrl
			&& 0 ==pfnUnicodeStrcmp((const S8*)g_szPlxBrowBMEditInputURL,(const S8*)g_plxBrowBooKMarks[g_curHiliteBookMarkID].szBMUrl))
		return PLXBROW_BM_ERR_NO_CHANGE; // no change
	}
	
//	if(0 == pfnUnicodeStrcmp((const char*)get_string(STR_ID_PLX_BROW_BOOKMARK_DEFAULT_BMNAME),szBMarkName))
//		return PLXBROW_BM_ERR_DEFAULT_NAME;
	for (i=0; i<PLXBROW_BOOKMARK_MAX_ITEM; i++) //check name repeated
	{	
		if(g_curHiliteBookMarkID == i)
			continue;
		 if(0 == pfnUnicodeStrcmp(g_plxBrowBooKMarks[i].szBMName,g_szPlxBrowBMEditInputName))
			return PLXBROW_BM_ERR_REPEAT_NAME;
	/*	if(NULL != g_plxBrowBooKMarks[i].szBMUrl)
		{
			nBMItemUrlLen = pfnUnicodeStrlen(g_plxBrowBooKMarks[i].g_szPlxBrowBMEditInputURL);
			 if(nBMItemUrlLen == nNewUrlLen) 
			{	
				if(0 ==pfnUnicodeStrcmp(g_plxBrowBooKMarks[i].szBMUrl,g_szPlxBrowBMEditInputURL))
					return PLXBROW_BM_ERR_REPEAT_URL;
			 }
		
		}	
	*/
	
	}
	if(NULL == (szTempUtf8Url = (char*)PlxAppMalloc( nNewUrlLen * 3 + 2)))
		return PLXBROW_BM_ERR_NO_MEMORY;
	PlxWideCharToUTF8((const char *)g_szPlxBrowBMEditInputURL, nNewUrlLen, szTempUtf8Url,nNewUrlLen * 3 + 2);
	nUtf8UrlLen = strlen((const char*)szTempUtf8Url);
	if(7 > nUtf8UrlLen ||
		( 7 == nUtf8UrlLen && 	0 != plxBrowStrnicmp((const char*)szTempUtf8Url,(const char*)"http://",7) &&
			0 != plxBrowStrnicmp((const char*)szTempUtf8Url,(const char*)"file://", 7)) ||
		( 8 <= nUtf8UrlLen &&
		0 != plxBrowStrnicmp((const char*)szTempUtf8Url,(const char*)"http://",7) &&
		0 != plxBrowStrnicmp((const char*)szTempUtf8Url,(const char*)"https://", 8) &&
		0 != plxBrowStrnicmp((const char*)szTempUtf8Url,(const char*)"file://", 7))
	)
	{
		flag = 1;
	}

	PlxAppFree(szTempUtf8Url);
		
	if((flag == 1  &&  PLXBROW_URL_NAME_LEN - 7<= nNewUrlLen) ||
		(flag == 0 && PLXBROW_URL_NAME_LEN <= nNewUrlLen))//num of character
		nNewUrlLen = PLXBROW_URL_NAME_LEN-1 ;
	else if(1 == flag)
			nNewUrlLen += 7;
	if(NULL == (szTempUrl =(char*)PlxAppMalloc((nNewUrlLen+1)*2)))
	{
		return  PLXBROW_BM_ERR_NO_MEMORY;
	}
	if(flag == 1)
	{
		AnsiiToUnicodeString((S8 *)szTempUrl, (S8 *)"http://");
		if( PLXBROW_URL_NAME_LEN - 7<= nNewUrlLen)
		{
			pfnUnicodeStrncat((S8*)szTempUrl,(const S8*)g_szPlxBrowBMEditInputURL, PLXBROW_URL_NAME_LEN -8 );
			szTempUrl[nNewUrlLen *2  ]='\0';
			szTempUrl[nNewUrlLen * 2 + 1 ]='\0';
		}
		else
			pfnUnicodeStrcat((S8*)szTempUrl,(const S8*)g_szPlxBrowBMEditInputURL);
	}
	else 
	{
		pfnUnicodeStrncpy((S8*)szTempUrl, (const S8*) g_szPlxBrowBMEditInputURL,nNewUrlLen);
		szTempUrl[nNewUrlLen *2  ]='\0';
		szTempUrl[nNewUrlLen * 2 + 1 ]='\0';
	}
	if(NULL != g_plxBrowBooKMarks[g_curHiliteBookMarkID].szBMUrl) //change a bookmark existed.
		PlxAppFree(g_plxBrowBooKMarks[g_curHiliteBookMarkID].szBMUrl);
	else
		g_curNumOfBookMark ++; //add new bookmark
	g_plxBrowBooKMarks[g_curHiliteBookMarkID].szBMUrl=szTempUrl;
	g_bIsAnyBookMarkChanged = TRUE;
	
	pfnUnicodeStrncpy((S8*)g_plxBrowBooKMarks[g_curHiliteBookMarkID].szBMName,(const S8*)g_szPlxBrowBMEditInputName,nNewNameLen);
	return PLXBROW_BM_ERR_NO_ERROR;
}


/****************************************************************************
* Function	static int plxBrowDeleteOneBookMark(int nDeleteID)
* Purpose	delete on bookmark in memory but not save it to flash	
* Params	
* Return	
* Remarks	
\****************************************************************************/
static int plxBrowDeleteOneBookMark(int nDeleteID)
{
	int		i;
	
	if(0 > nDeleteID || PLXBROW_BOOKMARK_MAX_ITEM <= nDeleteID)
		return -1;
	if(NULL == g_plxBrowBooKMarks[nDeleteID].szBMUrl)
		return 0;
//	pfnUnicodeStrcpy(g_plxBrowBooKMarks[nDeleteID].szBMName,(char*)get_string(STR_ID_PLX_BROW_BOOKMARK_DEFAULT_BMNAME));
	PlxAppFree(g_plxBrowBooKMarks[nDeleteID].szBMUrl);
	g_plxBrowBooKMarks[nDeleteID].szBMUrl= NULL;
	//memset(g_plxBrowBooKMarks[nDeleteID].szBMName,0x0,PLXBROW_BMNAME_MAX_LEN *2);
	//g_plxBrowBooKMarks[nDeleteID].isChanged = TRUE;
	g_bIsAnyBookMarkChanged = TRUE;
	for (i = nDeleteID; i<g_curNumOfBookMark -1; i++)
	{
		g_plxBrowBooKMarks[i].szBMUrl = g_plxBrowBooKMarks[i+1].szBMUrl;
		PlxAppMemcpy((void*)g_plxBrowBooKMarks[i].szBMName,(const void*)g_plxBrowBooKMarks[i+1].szBMName,(unsigned int)PLXBROW_BMNAME_MAX_LEN * 2);
//		g_plxBrowBooKMarks[i].isChanged = g_plxBrowBooKMarks[i+1].isChanged;
	}
	g_plxBrowBooKMarks[i].szBMUrl = NULL;
	memset(g_plxBrowBooKMarks[i].szBMName,0x0,PLXBROW_BMNAME_MAX_LEN);

	g_curNumOfBookMark --;
	return 0;
}


//////////////////////////// UI  Screen ////////////////////////////

/****************************************************************************
* Function	static void EntryPlxBrowBookMarkScreen(void)
* Purpose	load and init bookmarks,entry the bookmark list screen 	
* Params	
* Return	
* Remarks	
\****************************************************************************/
static void EntryPlxBrowBookMarkScreen(void)
{
	U8* guiBuffer = NULL;

	plxBrowLoadBookMarks();
	g_bSelBooMarkChanged = FALSE;

	memset(g_szPlxBrowBMEditInputName,0x00,PLXBROW_BMNAME_MAX_LEN *2);
	memset(g_szPlxBrowBMEditInputURL,0x00,PLXBROW_URL_NAME_LEN *2);

	if(FALSE == CheckIsBackHistory())
		g_curHiliteBookMarkID = 0;
	
	EntryNewScreen(SCR_ID_PLX_BROW_BOOKMARK,NULL, EntryPlxBrowBookMarkScreen, NULL);
//	guiBuffer = GetCurrGuiBuffer(SCR_ID_PLX_BROW_BOOKMARK);	
	RegisterHighlightHandler(plxBrowGetCurHiliteBookMarkItemID);
	ShowCategory184Screen(STR_ID_PLX_BROW_BOOKMARK, IMG_ID_PLX_BROW_BOOKMARK,
				STR_ID_PLX_BROW_OPTION,IMG_GLOBAL_OK,
				STR_GLOBAL_BACK, IMG_GLOBAL_BACK,
				g_curNumOfBookMark/*PLXBROW_BOOKMARK_MAX_ITEM*/,
				plxBrowGetNextBookMarkItem, NULL, g_curHiliteBookMarkID, guiBuffer);

	SetKeyHandler(EntryPlxBrowSelBookMarkScreen, KEY_ENTER, KEY_EVENT_UP);//press enter key to view the bookmark url 
	SetRightSoftkeyFunction(ExitPlxBrowBookMarkScreen,KEY_EVENT_UP);
	SetLeftSoftkeyFunction(EntryPlxBrowBookMarkMenu, KEY_EVENT_UP);
//	ClearKeyHandler(KEY_END,KEY_EVENT_DOWN);
	SetKeyHandler(BookMarkKeyEndHandler,KEY_END,KEY_EVENT_DOWN);
	SetKeyHandler(ExitPlxBrowBookMarkScreen,KEY_LEFT_ARROW, KEY_EVENT_DOWN);
	SetKeyHandler(EntryPlxBrowBookMarkMenu,KEY_RIGHT_ARROW, KEY_EVENT_DOWN);

}


/****************************************************************************
* Function	static void plxBrowGetCurHiliteBookMarkItemID(S32 itemHilite)
* Purpose	get the ID of hilite bookmark 	
* Params	
* Return	
* Remarks	
\****************************************************************************/
static void plxBrowGetCurHiliteBookMarkItemID(S32 itemHilite)
{
	g_curHiliteBookMarkID = itemHilite;
}


/****************************************************************************
* Function	static pBOOL plxBrowGetNextBookMarkItem( S32 item_index, UI_string_type str_buff, UI_image_type* img_buff_p, U8 str_img_mask )
* Purpose	get the bookmark item by item index 	
* Params	
* Return	
* Remarks	
\****************************************************************************/

static pBOOL plxBrowGetNextBookMarkItem( S32 item_index, UI_string_type str_buff, UI_image_type* img_buff_p, U8 str_img_mask )
{	
	if(0 > item_index || PLXBROW_BOOKMARK_MAX_ITEM <= item_index)
		return FALSE;

	pfnUnicodeStrcpy((S8*)str_buff, g_plxBrowBooKMarks[item_index].szBMName);
	*img_buff_p = (UI_image_type)GetImage((U16)(IMG_GLOBAL_L1 + item_index));
	return TRUE;
}


/****************************************************************************
* Function	static void ExitPlxBrowBookMarkScreen(void)
* Purpose	exit the bookmark screen	
* Params	
* Return	
* Remarks	
\****************************************************************************/
static void ExitPlxBrowBookMarkScreen(void)
{
//	plxBrowSaveBookMarks();
	if(TRUE == IsScreenPresent(SCR_ID_PLX_BROW_VIEW))
		GoBackToHistory(SCR_ID_PLX_BROW_VIEW);
	else
	{
		GoBackHistory();
	}
	DeInitPlxBrowBookMark();
	
}

⌨️ 快捷键说明

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