📄 ibookmark.c
字号:
SETAEERECT(&rect, 20, 10, 150, 25);
ISHELL_LoadResString (pApp->m_pIShell,
MENULIST_RES_FILE,
IDS_BOOKMARK,
buf,
sizeof(buf));
//Display
(void) IDISPLAY_DrawText(pApp->m_pIDisplay,
AEE_FONT_NORMAL,
buf,
-1,
0,
0,
&rect,
IDF_ALIGN_RIGHT
|IDF_ALIGN_MIDDLE
|IDF_TEXT_TRANSPARENT);
IDISPLAY_Update(pApp->m_pIDisplay);
IDISPLAY_SetColor(pApp->m_pIDisplay,CLR_USER_TEXT, MAKE_RGB(0,0,0));
IMENUCTL_SetActive(pBookmarkWin->m_pMenuCtl, TRUE);
MenuItemID = IMENUCTL_GetItemID(pBookmarkWin->m_pMenuCtl, IMENUCTL_GetItemCount(pBookmarkWin->m_pMenuCtl) - 1);
IMENUCTL_Sort(pBookmarkWin->m_pMenuCtl, MCS_NAME_ASCENDING);
IMENUCTL_SetSel(pBookmarkWin->m_pMenuCtl, MenuItemID);
IMENUCTL_Redraw(pBookmarkWin->m_pMenuCtl);
IMENUCTL_SetSel(pBookmarkWin->m_pSoftKeyCtl, IDS_GOTO);
IMENUCTL_Redraw(pBookmarkWin->m_pSoftKeyCtl);
IDISPLAY_ClearScreen(pApp->m_pIDisplay);
if(pBookmarkWin->m_pMenuCtl)
IMENUCTL_Redraw(pBookmarkWin->m_pMenuCtl);
if(pBookmarkWin->m_pSoftKeyCtl)
IMENUCTL_Redraw(pBookmarkWin->m_pSoftKeyCtl);
IDISPLAY_Update(pApp->m_pIDisplay);
}
return TRUE;
}
boolean BOOKMARKWIN_EventHandle(void* pWin,AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
IBookMarkWin* pInputWin=pWin;
boolean bDispatched = FALSE;
//CMenuList *pApp = (CMenuList *) pWin;
if(NULL==pInputWin) return FALSE;
switch(eCode)
{
case EVT_KEY:
bDispatched=BOOKMARKWIN_HandleKeyEvent(pInputWin,wParam);
break;
case EVT_COMMAND:
bDispatched=BOOKMARKWIN_HandleSoftButtonsEvent(pInputWin,wParam);
break;
}
return bDispatched;
}
///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
static boolean BOOKMARKWIN_HandleKeyEvent(IBookMarkWin* pWin,uint16 wParam)
{
IBookMarkWin* pInputWin=pWin;
boolean bDispatched = FALSE;
if(NULL==pInputWin) return FALSE;
switch(wParam)
{
case AVK_UP:
case AVK_DOWN:
if(IMENUCTL_IsActive(pInputWin->m_pSoftKeyCtl))
{
IMENUCTL_SetActive(pInputWin->m_pMenuCtl, TRUE);
IMENUCTL_SetActive(pInputWin->m_pSoftKeyCtl, FALSE);
IMENUCTL_SetSel(pInputWin->m_pMenuCtl, INPUT_MENUCTL);
bDispatched = TRUE;//保证每个分支都有返回
}
else //若当前激活是菜单控件则交由下面自己处理
bDispatched=IMENUCTL_HandleEvent(pInputWin->m_pMenuCtl,EVT_KEY,wParam,0);
break;
case AVK_CLR://关闭窗口
IWINSTACK_CloseWindow(TRUE);
bDispatched = TRUE;
break;
case AVK_SELECT:
//当软键不在激活状态时按Select会将软键设为激活
if(pInputWin->m_pMenuCtl&&IMENUCTL_IsActive(pInputWin->m_pMenuCtl))
{
IMENUCTL_SetActive(pInputWin->m_pMenuCtl, FALSE);
IMENUCTL_SetActive(pInputWin->m_pSoftKeyCtl, TRUE);
}
else if(pInputWin->m_pSoftKeyCtl&&IMENUCTL_IsActive(pInputWin->m_pSoftKeyCtl))
bDispatched=IMENUCTL_HandleEvent(pInputWin->m_pSoftKeyCtl,EVT_KEY,wParam,0);
//bDispatched = TRUE;
break;
case AVK_RIGHT:
case AVK_LEFT:
bDispatched = IMENUCTL_HandleEvent(pInputWin->m_pSoftKeyCtl, EVT_KEY, wParam, 0);
break;
}
return bDispatched;
}
static boolean BOOKMARKWIN_HandleSoftButtonsEvent(IBookMarkWin* pWin,uint16 wParam)
{
//CtlAddItem InfoStruct;
InputTextInfo Info1;
InputTextInfo Info2;
boolean bDispatched = FALSE;
//AECHAR DlgTitle[BOOKMARKLEN];
AECHAR DlgTitle[BOOKMARKLEN];
AECHAR DlgUrl[BOOKMARKLEN];
AECHAR *AWideUrl=NULL;
AECHAR BkMrkStr[] = { '\0' };
AECHAR BktitleStr[] = { '\0' };
AEEApplet* pApp=(AEEApplet*)GETAPPINSTANCE();
IBookMarkWin *ptBookmarkWin = NULL;
CtlAddItem InfoStruct;
ptBookmarkWin = pWin;
switch (wParam)
{
case INPUT_SOFTKEY_ITEM_NEW:
ISHELL_LoadResString(pApp->m_pIShell, MENULIST_RES_FILE, IDS_BOOKMARKTITLE, DlgTitle, sizeof(DlgTitle));
ISHELL_LoadResString(pApp->m_pIShell, MENULIST_RES_FILE, IDS_URL, DlgUrl, sizeof(DlgUrl));
IMENUCTL_SetActive(ptBookmarkWin->m_pMenuCtl, FALSE);
IMENUCTL_SetActive(ptBookmarkWin->m_pSoftKeyCtl, TRUE);
Info1.m_inputType=IT_TEXT;
Info1.m_pText=ISETTINGFILE_GetStr(WAP_BOOKMARKNAME);
Info1.m_pTitle=DlgTitle;
Info2.m_inputType=IT_TEXT;
Info2.m_pText=ISETTINGFILE_GetStr(WAP_BOOKMARKURL);
Info2.m_pTitle=DlgUrl;
//bDispatched = TRUE;
return NewTextInputDialog(&Info1,&Info2,WAPSetHdl_SetNewBookMarkDlgResponse);
case INPUT_SOFTKEY_ITEM_EDIT:
if (IMENUCTL_GetItemCount(ptBookmarkWin->m_pMenuCtl) == 0)
return TRUE;
ISHELL_LoadResString(pApp->m_pIShell, MENULIST_RES_FILE, IDS_BOOKMARKTITLE, DlgTitle, sizeof(DlgTitle));
ISHELL_LoadResString(pApp->m_pIShell, MENULIST_RES_FILE, IDS_URL, DlgUrl, sizeof(DlgUrl));
IMENUCTL_GetItem(ptBookmarkWin->m_pMenuCtl, IMENUCTL_GetSel(ptBookmarkWin->m_pMenuCtl), &InfoStruct);
IMENUCTL_SetActive(ptBookmarkWin->m_pMenuCtl, FALSE);
AWideUrl=WSTRDUP(InfoStruct.dwData);
Info1.m_inputType=IT_TEXT;
Info1.m_pText=InfoStruct.pText;
Info1.m_pTitle=DlgTitle;
Info2.m_inputType=IT_TEXT;
Info2.m_pText=AWideUrl;
Info2.m_pTitle=DlgUrl;
FREEIF(m_pBookmarkURL);
FREEIF(m_pBookmarkName);
return NewTextInputDialog(&Info1,&Info2,WAPSetHdl_SetEditBookMarkDlgResponse);
case INPUT_SOFTKEY_ITEM_DEL:
if (IMENUCTL_GetItemCount(ptBookmarkWin->m_pMenuCtl) == 0)
return TRUE;
IMENUCTL_GetItem(ptBookmarkWin->m_pMenuCtl, IMENUCTL_GetSel(ptBookmarkWin->m_pMenuCtl), &InfoStruct);
FREEIF(InfoStruct.dwData);
IMENUCTL_DeleteItem(ptBookmarkWin->m_pMenuCtl, IMENUCTL_GetSel(ptBookmarkWin->m_pMenuCtl));
WriteBookmarks(ptBookmarkWin);
IMENUCTL_Redraw(ptBookmarkWin->m_pMenuCtl);
bDispatched = TRUE;
break;
}
return TRUE;
}
static boolean WAPSetHdl_SetNewBookMarkDlgResponse(const AECHAR *response1, const AECHAR *response2, boolean bOK)
{
IFile *pIFile;
IFileMgr *pIFileMgr = NULL;
AEEApplet* pApp= (AEEApplet*)GETAPPINSTANCE();
AECHAR pBug[] = {'\r','\n','\0'};
if (response2 != NULL && bOK == TRUE)
{
if (ISHELL_CreateInstance(pApp->m_pIShell, AEECLSID_FILEMGR, (void **)&pIFileMgr) != SUCCESS)
return FALSE;
if ((pIFile = IFILEMGR_OpenFile(pIFileMgr, WAP_BOOKMARKS_FILENAME, _OFM_READWRITE)) == NULL)
{
IFILEMGR_Release(pIFileMgr);
return FALSE;
}
IFILE_Seek(pIFile, _SEEK_END, 0); // goto end of file...
IFILE_Write(pIFile, response1, 2*WSTRLEN(response1));
IFILE_Write(pIFile, pBug, sizeof(pBug));//以回车换行区别每条
IFILE_Write(pIFile, response2, 2*WSTRLEN(response2));
IFILE_Write(pIFile, pBug, sizeof(pBug));
IFILE_Release(pIFile);
IFILEMGR_Release(pIFileMgr);
}
return TRUE;
}
static boolean WAPSetHdl_SetEditBookMarkDlgResponse(const AECHAR *response1, const AECHAR *response2, boolean bOK)
{
AEEApplet *pApp = (AEEApplet*)GETAPPINSTANCE();
if((response2 == NULL)||(bOK != TRUE))
return FALSE;
if(response2)
m_pBookmarkURL=WSTRDUP(response2);
if(response1)
m_pBookmarkName=WSTRDUP(response1);
return TRUE;
}
static void ReadBookmarks(IFileMgr *pIFileMgr, IFile *pIFile, IBookMarkWin *ptBookmarkWin)
{
FileInfo Info;
AECHAR* AWideTitle=NULL;
AECHAR *Inbuff = NULL;
uint16 MenuID = 0;
AECHAR *url;
//int bmLen;
AECHAR *lfpos;
AECHAR *strpos;
// delete all items, and corresponding data
while (IMENUCTL_GetItemCount(ptBookmarkWin->m_pMenuCtl)) {
uint16 itemid = IMENUCTL_GetItemID(ptBookmarkWin->m_pMenuCtl, 0);
IMENUCTL_GetItemData(ptBookmarkWin->m_pMenuCtl, itemid, (uint32 *) &url);
FREEIF(url);
IMENUCTL_DeleteItem(ptBookmarkWin->m_pMenuCtl, itemid);
}
IFILEMGR_GetInfo(pIFileMgr, WAP_BOOKMARKS_FILENAME, &Info);
if (Info.dwSize > 1) {
Inbuff = MALLOC(Info.dwSize + 2);
if (NULL == Inbuff)
return ;
IFILE_Read(pIFile, Inbuff, Info.dwSize);
strpos = Inbuff;
for (MenuID = 1; (uint32)(strpos - Inbuff) < Info.dwSize; MenuID++) {
lfpos = WSTRCHR(strpos, '\r');
if (!lfpos || !lfpos[0])
break; //
lfpos[0] = '\0'; // nullterminate the string
//STRTOWSTR(strpos, AWideTitle, BOOKMARKLEN);
AWideTitle=MALLOC(2*WSTRLEN(strpos));
WSTRCPY(AWideTitle, strpos);
strpos = lfpos + 3;
lfpos = WSTRCHR(strpos, '\r');
if (!lfpos || !lfpos[0])
break; //
lfpos[0] = '\0'; // 在找到的一条记录末尾添零表示这是一条字符串
url = WSTRDUP(strpos);
strpos = lfpos + 3;
IMENUCTL_AddItem(ptBookmarkWin->m_pMenuCtl, MENULIST_RES_FILE, 0, MenuID, AWideTitle, (uint32)url);
FREEIF(AWideTitle);
}
FREE(Inbuff);
}
}
static void WriteBookmarks(IBookMarkWin*ptBookmarkWin)
{
IFile *pIFile;
int Index;
int NumBkmrks;
CtlAddItem InfoStruct;
AECHAR* ATitle;
AEEApplet *pApp = (AEEApplet*)(GETAPPINSTANCE());
IFileMgr *pIFileMgr = NULL;
AECHAR pBug[] = {'\r','\n','\0'};
if (ISHELL_CreateInstance(pApp->m_pIShell, AEECLSID_FILEMGR, (void **)&pIFileMgr) != SUCCESS)
return ;
IFILEMGR_Remove(pIFileMgr, WAP_BOOKMARKS_FILENAME);
if ((pIFile = IFILEMGR_OpenFile(pIFileMgr, WAP_BOOKMARKS_FILENAME, _OFM_CREATE)) == NULL) {
IFILEMGR_Release(pIFileMgr);
return ;
}
NumBkmrks = IMENUCTL_GetItemCount(ptBookmarkWin->m_pMenuCtl);
for (Index = 0; Index < NumBkmrks; Index++)
{
IMENUCTL_GetItem(ptBookmarkWin->m_pMenuCtl, IMENUCTL_GetItemID(ptBookmarkWin->m_pMenuCtl, Index), &InfoStruct);
//WSTRTOUTF8(InfoStruct.pText, WSTRLEN(InfoStruct.pText)+1, (byte *) ATitle, BOOKMARKLEN);
ATitle=WSTRDUP(InfoStruct.pText);
if(!ATitle) continue;
IFILE_Write(pIFile, ATitle, 2*WSTRLEN((const char *)ATitle));
IFILE_Write(pIFile, pBug, sizeof(pBug));
IFILE_Write(pIFile, (char *)InfoStruct.dwData, 2*WSTRLEN((const char *)InfoStruct.dwData));
IFILE_Write(pIFile, pBug,sizeof(pBug));
FREE(ATitle);
}
IFILEMGR_Release(pIFileMgr);
IFILE_Release(pIFile);
}
/*static boolean IINPUTWINDOW_HandleCommandEvent(IInputWin* pWin,uint16 wParam)
{
IInputWin* pInputWin=pWin;
boolean bDispatched = FALSE;
if(NULL==pInputWin) return FALSE;
//
switch(wParam)
{
case INPUT_SOFTKEY_ITEM_INPUT_MODE:
break;
case INPUT_SOFTKEY_ITEM_DONE:
if(pWin->tpResponseFunction)
{
AECHAR* pText1=NULL;
AECHAR* pText2=NULL;
pText1=ITEXTCTL_GetTextPtr(pWin->m_pText1);
if(pWin->m_pText2)
pText2=ITEXTCTL_GetTextPtr(pWin->m_pText2);
pWin->tpResponseFunction(pText1,pText2);
}
IWINSTACK_CloseWindow(TRUE);
break;
default:
IWINSTACK_CloseWindow(TRUE);
}
return TRUE;
}
static boolean IINPUTWINDOW_SetActiveCtl(IInputWin* pWin,TInputCtlType nTextCtl)
{
//当nTextCtl=INPUT_SOFTKEYCTL,不显示任何文本控件
//当text2不存在时,无论nTextCtl的值为多少,都显示text1
//当text2存在时,nTextCtl=INPUT_TEXT1CTL,显示text1,否则显示text2
switch(nTextCtl)
{
case INPUT_SOFTKEYCTL:
ITEXTCTL_SetActive(pWin->m_pText1, FALSE);
if ((pWin->m_pText2) && (ITEXTCTL_IsActive(pWin->m_pText2)))
ITEXTCTL_SetActive(pWin->m_pText2, FALSE);
IMENUCTL_SetActive(pWin->m_pSoftKeyCtl, TRUE);
IMENUCTL_SetSel(pWin->m_pSoftKeyCtl, INPUT_SOFTKEY_ITEM_INPUT_MODE);
break;
case INPUT_TEXT2CTL:
if(pWin->m_pText2)
{
ITEXTCTL_SetInputMode(pWin->m_pText2, pWin->m_wMode);
IMENUCTL_SetActive(pWin->m_pSoftKeyCtl, FALSE);
ITEXTCTL_SetActive(pWin->m_pText1, FALSE);
ITEXTCTL_SetCursorPos(pWin->m_pText2, TC_CURSOREND);
ITEXTCTL_SetActive(pWin->m_pText2, TRUE);
break;
}
default:
ITEXTCTL_SetInputMode(pWin->m_pText1, pWin->m_wMode);
IMENUCTL_SetActive(pWin->m_pSoftKeyCtl, FALSE);
if (pWin->m_pText2)
ITEXTCTL_SetActive(pWin->m_pText2, FALSE);
ITEXTCTL_SetCursorPos(pWin->m_pText1, TC_CURSOREND);
ITEXTCTL_SetActive(pWin->m_pText1, TRUE);
}
return TRUE;
}*/
static boolean UpdateBookmark(IBookMarkWin *pWin)
{
char* url=NULL;
AECHAR* pUrl=WSTRDUP(m_pBookmarkURL);
IBookMarkWin *ptBookmarkWin = (IBookMarkWin*)pWin;
uint16 MenuItemID = IMENUCTL_GetSel(ptBookmarkWin->m_pMenuCtl);
IMENUCTL_GetItemData(ptBookmarkWin->m_pMenuCtl, MenuItemID, (uint32 *) &url);
FREEIF(url);
IMENUCTL_DeleteItem(ptBookmarkWin->m_pMenuCtl, MenuItemID);
if (m_pBookmarkName)
IMENUCTL_AddItem(ptBookmarkWin->m_pMenuCtl, WAP_BOOKMARKS_FILENAME, 0, MenuItemID, (AECHAR *)m_pBookmarkName, (uint32)pUrl);
else
IMENUCTL_AddItem(ptBookmarkWin->m_pMenuCtl, WAP_BOOKMARKS_FILENAME, 0, MenuItemID, (AECHAR *)pUrl, (uint32)pUrl);
IMENUCTL_SetSel(ptBookmarkWin->m_pMenuCtl, MenuItemID);
WriteBookmarks(ptBookmarkWin);
return TRUE;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -