📄 plxbrow.c
字号:
/***************************************************************************
*
* Pollex Mobile Platform
*
* Copyright (c) 2004 by Pollex Mobile Software Co., Ltd.
* All Rights Reserved
*
* Module :
*
* Purpose :
*
\**************************************************************************/
#include "StdC.h"
#include "CommonScreens.h"
#include "MMI_features.h"
#include "gui.h"
#include "gdi_include.h"
#include "wgui_categories.h"
#include "wgui_categories_inputs.h"
#include "SettingProfile.h"
#include "SettingProt.h"
#include "CommonScreens.h"
#ifdef __MMI_TOUCH_SCREEN__
#include "wgui_touch_screen.h"
#endif
#include "PWBE.h"
#include "plxbrowPort.h"
#include "guicallback.h"
#include "../main/plxDefs.h"
#include "plxBrowDefs.h"
#include "plxbrow.h"
#include "../Public/PlxPublic.h"
#include "../public/plxPubDefs.h"
#include "plxBrowPublic.h"
#include "plxBrowHistory.h"
#include "plxbrowBookMark.h"
#include "plxBrowFile.h"
#include "plxBrowSetting.h"
#include "plxBrowPush.h"
/*
#if defined(__MMI_MAINLCD_128X160__)
#define BAR_HEIGHT 13
#elif defined(__MMI_MAINLCD_176X220__)
#define BAR_HEIGHT 17
#endif
*/
#define PLXBROW_EXITTING_TIMER_DELAY 100
//#define PLXBROW_FORCE_RESET_EXITFLAG_DELAY (60000/PLXBROW_EXITTING_TIMER_DELAY + 5) //61 secondss
static const LIBLIST_GUI guiFuncList = {
PWBCBDrawLine,
PWBCBDrawRect,
PWBCBDrawEllipse,
PWBCBDrawPolygon,
PWBCBSetTextStyle,
PWBCBDrawText,
PWBCBGetTextInfo,
PWBCBEditText,
PWBCBDrawImage,
(LIB_ENDIMAGE)PWBCBEndImageDraw,
(LIB_GETIMAGEINFO)PWBCBGetImageInfo,
PWBCBSelectOption,
(LIB_STARTRING)PWBCBStartRing,
PWBCBStopRing,
PWBCBBeginDisplay,
PWBCBEndDisplay,
PWBCBGetUIStr
};
BROWINFO plxBrowInfo={
0
};
#if 0
typedef enum {
EXIT_FLAG_INVALID,
EXIT_FLAG_RSKPRESSED,
EXIT_FLAG_KEYEND,
EXIT_FLAG_RESTART
}ExittingFlags;
static int nExittingBrowserFlags = EXIT_FLAG_INVALID;
#endif
typedef enum{
BROWSER_NORMAL,
BROWSER_EXIT,
BROWSER_START_WAIT_EXIT,
BROWSER_RESTART_WAIT_EXIT,
}BrowserStatus;
U8 jumpToBuffer[PLXBROW_URL_NAME_LEN * 2];
static char * szOldLinkInput = NULL;
static BOOL bInExittingStatus = FALSE;
static int nBrowserStatus = BROWSER_NORMAL;
static char* szTempSavedUrl = NULL;
static int nTempSavedUrlLen = 0;//buffer length
static BOOL bWaitBrowViewExKeyEndFlag = FALSE;
static BOOL bIsLinkInput = FALSE;
static HDMENU g_hPlxBrowserMenu = NULL;
static HDMENU g_hPlxBrowserOptionSubMenu = NULL;
extern char pWebPageTitle[];
void EntryPlxBrowserScreen(void);
void EntryOfPlxBrowUrlInput(void);
static void EntryOfPlxBrowserJumptoScreen(void);
static void EnterJumpToUrlOK (void);
void ConfirmInputJumpTo(void);
void ExitInputJumpto(void);
static void SaveInputLink(void);
//static void InitPollexBrowser(void);
//static void OpenHomePage(void);
#ifdef __PLXBROW_KEYENTER_NOSUPPORT_
static void MenuViewCurrFocusPage(void);
#endif
static void MenuOpenHomePage(void);
static void MenuRefreshCurPage(void);
static void MenuGoBack(void);
static void MenuStop(void);
static void rePaintBrowser(void);
static void PWBProcessKeyEvent(void);
static void PWBProcessCharEvent(void);
//int PlxWideCharToUTF8(const char * lpWideCharStr, int cWideCharLen, char * lpUtf8Str, int cUtf8Len);
static void LeaveBrowserScreen(void);
static void PlxDrawBrowserScreen(U16 title,U16 title_icon,U16 left_softkey,U16 left_softkey_icon,U16 right_softkey,U16 right_softkey_icon,U8* history_buffer);
static void PlxBrowSetCallBackFunc(void);
static U8 BrowserHistoryCBHhandler(void* param);
//extern void wbtestfunc(void);
extern void PWBDrawStatusBar(WB_RECT *prcBar, U16 strInfoID);
void MenuSetHomePage(void);
#ifndef __PLXBROW_DISABLE_HANGUP_
void MenuHangUp(void);
#endif
static void TryDestroyAllMenus(void);
static void ExitBrowserRskFunc(void);
static void ExitBrowserLskFunc(void);
static void EntryPlxBrowserExitConfirm(void);
static void ExitBrowserConfirmCB(PLIBEVENT event);
//static void BrowserKeyEndExitConfirmCB(PLIBEVENT event);
static void BrowserKeyEndExitLskFunc(void);
static void EntryPlxBrowserMenuScreen(void);
static int CreatePlxBrowserMenu(void);
static void ModifyPlxBrowserMenu(void);
static int PlxBrowserMenuNty(HDMENU hMenu, unsigned long id, unsigned long event);
static void InitPlxBrowserEngine(void);
static void InitPlxBrowserEngineOption(void);
static void InitPlxBrowserUI(void);
static void InitPlxBrowserUIData(void);
#ifdef __PLXBROW_SWITCH_PROTOCOL_
static void PlxBrowResetProtocol(void);
#endif
static void StartPlxBrowser(void);
#if 0
static void RskPressedDeInitPlxBrowser(void);
void KeyEndDeInitPlxBrowser(void);
static void ExittingBrowserTimerHandler(void);
void RefreshExittingBrowserScreen(U16 message_id);
static void EntryExittingBrowserScreen(void);
static void LeaveExittingBrowserScreen(void);
#endif
static void DeInitPlxBrowserEngine(void);
static void DeInitPlxBrowserUI(void);
static void DeInitPlxBrowserUIData(void);
static void BrowserKeyEndHandler(void);
static void BrowserRskToMainList(void);
#ifdef __MMI_TOUCH_SCREEN__
static void PWBOnTouchPenDown(mmi_pen_point_struct pos);
static void PWBOnTouchPenMove(mmi_pen_point_struct pos);
static void PWBOnTouchPenUp(mmi_pen_point_struct pos);
static void PWBOnTouchPenRepeat(mmi_pen_point_struct pos);
static BOOL PWBProcessPenOnScrollbar(mmi_pen_point_struct pos, mmi_pen_event_type_enum pen_event);
static BOOL PWBProcessPenOnSoftkey(mmi_pen_point_struct pos, mmi_pen_event_type_enum pen_event);
static BOOL PWBUsePenSelectItem(mmi_pen_point_struct pos, mmi_pen_event_type_enum pen_event);
#endif //__MMI_TOUCH_SCREEN__
extern void GUICBExteriorKeyEndHandler(void);
extern void TryDestroyPlxBrowMainMenu(void);
extern void RedrawCategory66Screen(void);
#ifdef __PLXBROW_DEBUG_
extern void PlxTrace(const char* fmt, ...);
#endif
#ifdef __PLXBROW_PUSH_TEST_
extern void TestSIPush(void);
extern void TestTextPush(void);
#endif
/****************************************************************************
* Function GetBrowserVScrollWidth
* Purpose
* Params
* Return
* Remarks
\****************************************************************************/
int GetBrowserVScrollWidth(void)
{
#ifdef __PLXBROW_DISABLE_VSCROLL_
return 0;
#else
return current_MMI_theme->scrollbar_size;
#endif
}
/****************************************************************************
* Function GetBrowserHScrollWidth
* Purpose
* Params
* Return
* Remarks
\****************************************************************************/
int GetBrowserHScrollWidth(void)
{
#ifdef __PLXBROW_DISABLE_HSCROLL_
return 0;
#else
return current_MMI_theme->scrollbar_size;
#endif
}
/****************************************************************************
* Function GetBrowserStatusBarHeight
* Purpose
* Params
* Return
* Remarks
\****************************************************************************/
int GetBrowserStatusBarHeight(void)
{
#ifdef __PLXBROW_DISABLE_STATUSBAR_
return 0;
#else
int fontW;
int fontH;
int barHeight = 14 + 1;
#if defined(__MMI_MAINLCD_128X128__)
barHeight = 14 + 1;
#elif defined(__MMI_MAINLCD_128X160__)
barHeight = 14 + 1;
#elif defined(__MMI_MAINLCD_176X220__)
barHeight = 17 + 1;
#endif
pixtel_UI_measure_string(get_string(STR_ID_PLX_BROW_STATUS_CONNECTSTART),&fontW,&fontH);
if(fontH <= 0)
return barHeight;
else
{
if(fontH == 14)
return fontH + 1;
else
return fontH + 1 + 1;
}
#endif //__PLXBROW_DISABLE_STATUSBAR_
}
/****************************************************************************
* Function HBROWSER PlxBrowGetBrowserHandle(void)
* Purpose
* Params
* Return
* Remarks
\****************************************************************************/
HBROWSER PlxBrowGetBrowserHandle(void)
{
return plxBrowInfo.hBrow;
}
/****************************************************************************
* Function
* Purpose
* Params
* Return
* Remarks
\****************************************************************************/
void PlxBrowOpenWebPage(char *pUtf8Url)
{
int nUrlLen;
char* pNewUrl;
char* strTempUrl = NULL;
char* pURL=pUtf8Url;
while(*pURL == ' ')
pURL ++;
pNewUrl = pURL;
if(NULL == pURL || 0 ==(nUrlLen = strlen(pURL)))
return;
if(7 > nUrlLen ||
(7 == nUrlLen && 0 != plxBrowStrnicmp((const char*)pURL,(const char*)"http://",7) &&
0 != plxBrowStrnicmp((const char*)pURL,(const char*)"file://", 7)) ||
(8 <= nUrlLen && 0 != plxBrowStrnicmp((const char*)pURL,(const char*)"http://",7) &&
0 != plxBrowStrnicmp((const char*)pURL,(const char*)"https://", 8) &&
0 != plxBrowStrnicmp((const char*)pURL,(const char*)"file://", 7))
)
{
if(NULL ==(strTempUrl = PlxAppMalloc(nUrlLen+8)))
{
PLIB_MessageBox(PMBTYPE_ERROR, NULL, (const WCHAR *)GetString(STR_ID_PLX_BROW_ERR_MEMORYMALLOC),UI_POPUP_NOTIFYDURATION_TIME);
return;
}
strcpy(strTempUrl,"http://");
if( PLXBROW_URL_NAME_LEN - 7<= nUrlLen)
{
strncat(strTempUrl,pURL, PLXBROW_URL_NAME_LEN - 8);
strTempUrl[PLXBROW_URL_NAME_LEN - 1] = '\0';
}
else
strcat(strTempUrl,pURL);
pNewUrl = strTempUrl;
}
//must do this for that the url changed notify message cannot be sent when the url is invalid.
PlxBrowSaveCurrentUrl((const char *)pNewUrl);
PWBE_NewPage(plxBrowInfo.hBrow, pNewUrl, WBTRANS_GET, 0, 0);
if(strTempUrl)
PlxAppFree(strTempUrl);
#ifdef __PLXBROW_DEBUG_
PlxTrace("[%d] PlxBrowOpenWebPage -----> Open pUrl = %s \n",__LINE__, pURL);
#endif
}
/****************************************************************************
* Function void EntryOfPlxBrowserViewScreen(const char* szUtf8Url)
* Purpose entry of browser's view screen
* Params
* Return
* Remarks
\****************************************************************************/
void EntryOfPlxBrowserView(const char* szUtf8Url)
{
int nUtf8UrlLen;
char* pTemp;
if(NULL == szUtf8Url || 0 == (nUtf8UrlLen = strlen(szUtf8Url)))
{
// DisplayPopup((U8 *)get_string(STR_ID_PLX_BROW_ERR_INVALIDURL), IMG_ID_PLX_PUBLIC_SUBMENU_POPFAIL, 0, UI_POPUP_NOTIFYDURATION_TIME, WARNING_TONE);
PLIB_MessageBox(PMBTYPE_WARNING, NULL, (const WCHAR *)get_string(STR_ID_PLX_BROW_ERR_INVALIDURL), UI_POPUP_NOTIFYDURATION_TIME);
return;
}
if(TRUE == IsScreenPresent(SCR_ID_PLX_BROW_VIEW))
GoBackToHistory(SCR_ID_PLX_BROW_VIEW);
else if(SCR_ID_PLX_BROW_VIEW != GetExitScrnID())
EntryPlxBrowserScreen();
if(FALSE == bInExittingStatus)
PlxBrowOpenWebPage((char*)szUtf8Url);
else if(BROWSER_START_WAIT_EXIT == nBrowserStatus)
{
if(NULL != (pTemp = PlxAppRealloc(szTempSavedUrl, nUtf8UrlLen + 1)))
{
szTempSavedUrl = pTemp;
strcpy(szTempSavedUrl,szUtf8Url);
nTempSavedUrlLen = nUtf8UrlLen + 1;
}
else
{
if(nTempSavedUrlLen > nUtf8UrlLen + 1 && szTempSavedUrl != NULL)
strcpy(szTempSavedUrl, szUtf8Url);
else
{
if(szTempSavedUrl)
PlxAppFree(szTempSavedUrl);
nTempSavedUrlLen = 0;
PLIB_MessageBox(PMBTYPE_ERROR, NULL, (const WCHAR *)get_string(STR_ID_PLX_BROW_ERR_MEMORYMALLOC),UI_POPUP_NOTIFYDURATION_TIME);
return;
}
}
}
}
/****************************************************************************
* Function PlxBrowSaveCurrentUrl
* Purpose
* Params
* Return
* Remarks
\****************************************************************************/
void PlxBrowSaveCurrentUrl(const char* szUtf8Url)
{
#ifndef __PLXBROW_SWITCH_PROTOCOL_
#define URL_LEN_INTERVAL 100
int nUtf8UrlLen;
static int nAverageUrlLen = URL_LEN_INTERVAL * 4;
char* pTemp;
if(NULL == szUtf8Url)
return;
if(NULL == szTempSavedUrl || 0 != strcmp((const char*)szUtf8Url, (const char*)szTempSavedUrl))
{
nUtf8UrlLen = strlen(szUtf8Url);
nAverageUrlLen = (nAverageUrlLen + nUtf8UrlLen ) / 2;
if(nAverageUrlLen <= 0)
nAverageUrlLen = URL_LEN_INTERVAL + 50;
if(nUtf8UrlLen >= nTempSavedUrlLen)
{
pTemp = PlxAppRealloc(szTempSavedUrl, nUtf8UrlLen + URL_LEN_INTERVAL);
if(NULL != pTemp)
{
szTempSavedUrl = pTemp;
nTempSavedUrlLen = nUtf8UrlLen + URL_LEN_INTERVAL;
strcpy(szTempSavedUrl,szUtf8Url);
}
else
{
if(szTempSavedUrl)
PlxAppFree(szTempSavedUrl);
nTempSavedUrlLen = 0;
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -