📄 ibookmark.c
字号:
#include "IBookMark.h"
#include "IBookmarkFile.h"
#include "MenuList_res.h"
#include "Windowstack.h"
////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
typedef enum
{
INPUT_SOFTKEY_ITEM = 1,
INPUT_SOFTKEY_ITEM_GOTO,
INPUT_SOFTKEY_ITEM_EDIT,
INPUT_SOFTKEY_ITEM_NEW,
INPUT_SOFTKEY_ITEM_DEL
}TBMWinWinItems;
////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
static boolean IBOOKMARKWIN_HandleKeyEvent(IBookMarkWin* pWin,uint16 wParam);
static boolean IBOOKMARKWIN_HandleSoftButtonsEvent(IBookMarkWin *pWin, uint16 wParam);
////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
void* IBOOKMARKWIN_Create(IShell* pShell,void* pParam)
{
AEERect MenuRect;
AEERect SoftRect;
IBookMarkWin *ptBookmarkWin=NULL;
if(!pShell) return NULL;
ptBookmarkWin= MALLOCREC(IBookMarkWin);
if (!ptBookmarkWin)
return NULL;
//创建菜单
if(SUCCESS!=ISHELL_CreateInstance(pShell, AEECLSID_MENUCTL, (void **)&(ptBookmarkWin->m_pMenuCtl)))
{
IBOOKMARKWIN_Release(pShell,&ptBookmarkWin);
return NULL;
}
//创建软键
if(SUCCESS!=ISHELL_CreateInstance(pShell, AEECLSID_SOFTKEYCTL, (void **)&(ptBookmarkWin->m_pSoftKeyCtl)))
{
IBOOKMARKWIN_Release(pShell,&ptBookmarkWin);
return NULL;
}
IMENUCTL_AddItem(ptBookmarkWin->m_pSoftKeyCtl, MENULIST_RES_FILE, IDS_GOTO,INPUT_SOFTKEY_ITEM_GOTO, NULL, 0);
IMENUCTL_AddItem(ptBookmarkWin->m_pSoftKeyCtl, MENULIST_RES_FILE, IDS_EDIT, INPUT_SOFTKEY_ITEM_EDIT, NULL, 0);
IMENUCTL_AddItem(ptBookmarkWin->m_pSoftKeyCtl,MENULIST_RES_FILE, IDS_NEW, INPUT_SOFTKEY_ITEM_NEW, NULL, 0);
IMENUCTL_AddItem(ptBookmarkWin->m_pSoftKeyCtl, MENULIST_RES_FILE, IDS_DEL,INPUT_SOFTKEY_ITEM_DEL, NULL, 0);
//设置显示区域
IMENUCTL_GetRect(ptBookmarkWin->m_pMenuCtl, &MenuRect);
IMENUCTL_GetRect(ptBookmarkWin->m_pSoftKeyCtl, &SoftRect);
MenuRect.dy = (int16)(SoftRect.y);
IMENUCTL_SetRect(ptBookmarkWin->m_pMenuCtl, &MenuRect);
//打开书签文件
IBOOKMARKFILE_CreateInstance();
return ptBookmarkWin;
}
boolean IBOOKMARKWIN_Release(IShell* pShell,void** pWin)
{
IBookMarkWin *ptBookmarkWin=*pWin;
if(ptBookmarkWin)
{
if(ptBookmarkWin->m_pMenuCtl)
IMENUCTL_Release(ptBookmarkWin->m_pMenuCtl);
if(ptBookmarkWin->m_pSoftKeyCtl)
IMENUCTL_Release(ptBookmarkWin->m_pSoftKeyCtl);
}
FREEIF(*pWin);
return IBOOKMARKFILE_Release();
}
boolean IBOOKMARKWIN_Redraw(IShell* pShell,void* pWin)
{
AECHAR* pName=NULL;
uint32 ulID=0;
uint16 usItemID=1;
IBookMarkWin *ptBookmarkWin=(IBookMarkWin*)pWin;
if(!ptBookmarkWin||!ptBookmarkWin->m_pMenuCtl||!ptBookmarkWin->m_pSoftKeyCtl)
return FALSE;
//初始化数据
IBOOKMARKFILE_StartToSeek();
IMENUCTL_DeleteAll(ptBookmarkWin->m_pMenuCtl);
//将数据读入列表
while(IBOOKMARKFILE_GetNext(&pName,&ulID))
{
if(pName)
IMENUCTL_AddItem(ptBookmarkWin->m_pMenuCtl, MENULIST_RES_FILE, 0, usItemID++, pName, ulID);
}
//绘制控键
IMENUCTL_SetActive(ptBookmarkWin->m_pMenuCtl,TRUE);
IMENUCTL_SetActive(ptBookmarkWin->m_pSoftKeyCtl,FALSE);
IMENUCTL_Redraw(ptBookmarkWin->m_pMenuCtl);
IMENUCTL_Redraw(ptBookmarkWin->m_pSoftKeyCtl);
return TRUE;
}
boolean IBOOKMARKWIN_EventHandle(void* pWin,AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
IBookMarkWin* pInputWin=(IBookMarkWin*)pWin;
switch(eCode)
{
case EVT_KEY:
return IBOOKMARKWIN_HandleKeyEvent(pInputWin,wParam);
case EVT_COMMAND:
return IBOOKMARKWIN_HandleSoftButtonsEvent(pInputWin,wParam);
default:
return FALSE;
}
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
static boolean IBOOKMARKWIN_HandleKeyEvent(IBookMarkWin* pWin,uint16 wParam)
{
boolean bDispatched = FALSE;
if(!pWin||!pWin->m_pMenuCtl||!pWin->m_pSoftKeyCtl) return FALSE;
switch(wParam)
{
case AVK_UP:
case AVK_DOWN:
if(IMENUCTL_IsActive(pWin->m_pSoftKeyCtl))
{
IMENUCTL_SetActive(pWin->m_pSoftKeyCtl, FALSE);
bDispatched = TRUE;
}
else
bDispatched=IMENUCTL_HandleEvent(pWin->m_pMenuCtl,EVT_KEY,wParam,0);
break;
case AVK_CLR:
IWINSTACK_CloseWindow(TRUE);
bDispatched = TRUE;
break;
case AVK_SELECT:
if(!IMENUCTL_IsActive(pWin->m_pSoftKeyCtl))
{
IMENUCTL_SetActive(pWin->m_pSoftKeyCtl, TRUE);
bDispatched = TRUE;
}
else
bDispatched=IMENUCTL_HandleEvent(pWin->m_pSoftKeyCtl,EVT_KEY,wParam,0);
break;
case AVK_RIGHT:
case AVK_LEFT:
if(IMENUCTL_IsActive(pWin->m_pSoftKeyCtl))
bDispatched = IMENUCTL_HandleEvent(pWin->m_pSoftKeyCtl, EVT_KEY, wParam, 0);
break;
}
return bDispatched;
}
static boolean IBOOKMARKWIN_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;
}
#if 0
/////////////////////////Static Function//////////////////////
static boolean BOOKMARKWIN_HandleKeyEvent(IBookMarkWin* pWin,uint16 wParam);
static boolean BOOKMARKWIN_HandleSoftButtonsEvent(IBookMarkWin *pWin, uint16 wParam);
static void ReadBookmarks(IFileMgr *pIFileMgr, IFile *pIFile, IBookMarkWin *ptBookmarkWin);
static boolean WAPSetHdl_SetNewBookMarkDlgResponse(void*Applet, void* pPtr, const AECHAR *response1, const AECHAR *response2, boolean bOK);
static boolean WAPSetHdl_SetEditBookMarkDlgResponse(void*Applet, void* pPtr, const AECHAR *response1, const AECHAR *response2, boolean bOK);
static boolean UpdateBookmark(IBookMarkWin *pWin);
static void WriteBookmarks(IBookMarkWin*ptBookmarkWin);
#define BOOKMARKLEN 160+2
#define MENU_X 7 //3级菜单正文区起始横坐标
#define MENU_Y (32) //3级菜单正文区起始纵坐标
#define MENU_W (SCREEN_W-7-8) //161,3级菜单正文区宽度
#define MENU_SK_2LINE_H (SCREEN_H-32-9-22-16) //123,3级菜单(有2行softkey)中MENU控件高度
#define MENU_SK_1LINE_H (SCREEN_H-32-9-22)
//#define INPUT_TEXT_X_START 2
//#define INPUT_TEXT_Y_START 0
//#define INPUT_TEXT_MAX_SIZE 150
#define WAP_BOOKMARKS_FILENAME "MenuList/bookmarks.dat"
//窗口的控件
typedef enum
{
INPUT_SOFTKEYCTL=0,
INPUT_MENUCTL
}TBMWinCtlType;
//软键控件的ItemId定义
typedef enum
{
INPUT_SOFTKEY_ITEM = 1,
INPUT_SOFTKEY_ITEM_GOTO,
INPUT_SOFTKEY_ITEM_EDIT,
INPUT_SOFTKEY_ITEM_NEW,
INPUT_SOFTKEY_ITEM_DEL
}TBMWinWinItems;
///////////////////////////////////////////////////////////////////
AECHAR* m_pBookmarkURL=NULL;
AECHAR* m_pBookmarkName=NULL;
//按键事件的处理
//static boolean IINPUTWINDOW_HandleKeyEvent(IInputWin* pWin,uint16 wParam);
//软键菜单的处理
//static boolean IINPUTWINDOW_HandleCommandEvent(IInputWin* pWin,uint16 wParam);
//设置窗口中控件的激活状态
//static boolean IINPUTWINDOW_SetActiveCtl(IInputWin* pWin,TInputCtlType nTextCtl);
/////////////////////////Public Function//////////////////////
boolean BookmarksDlg()
{
AEEApplet* pApp=(AEEApplet*)GETAPPINSTANCE();
AEERect MenuRect;
AEERect SoftRect;
IFile *pIFile;
IFileMgr *pIFileMgr = NULL;
IBookMarkWin *ptBookmarkWin = (IBookMarkWin *)MALLOC(sizeof(IBookMarkWin));
//AEERect m_rc;
if (NULL == ptBookmarkWin)
return FALSE;
ISHELL_CreateInstance(pApp->m_pIShell, AEECLSID_MENUCTL, (void **)&(ptBookmarkWin->m_pMenuCtl));
if(SUCCESS!=ISHELL_CreateInstance(pApp->m_pIShell,AEECLSID_SOFTKEYCTL,(void **)&(ptBookmarkWin->m_pSoftKeyCtl)))
{
BOOKMARKWIN_Release(pApp->m_pIShell,&ptBookmarkWin);
return FALSE;
}
IMENUCTL_AddItem(ptBookmarkWin->m_pSoftKeyCtl, MENULIST_RES_FILE, IDS_GOTO,INPUT_SOFTKEY_ITEM_GOTO, NULL, 0);
IMENUCTL_AddItem(ptBookmarkWin->m_pSoftKeyCtl, MENULIST_RES_FILE, IDS_EDIT, INPUT_SOFTKEY_ITEM_EDIT, NULL, 0);
IMENUCTL_AddItem(ptBookmarkWin->m_pSoftKeyCtl,MENULIST_RES_FILE, IDS_NEW, INPUT_SOFTKEY_ITEM_NEW, NULL, 0);
IMENUCTL_AddItem(ptBookmarkWin->m_pSoftKeyCtl, MENULIST_RES_FILE, IDS_DEL,INPUT_SOFTKEY_ITEM_DEL, NULL, 0);
if (ISHELL_CreateInstance(pApp->m_pIShell, AEECLSID_FILEMGR, (void **)&pIFileMgr) != SUCCESS) {
BOOKMARKWIN_Release(pApp->m_pIShell, &ptBookmarkWin);
return FALSE ;
}
if (IFILEMGR_Test(pIFileMgr, WAP_BOOKMARKS_FILENAME) == EFAILED) {
pIFile = IFILEMGR_OpenFile(pIFileMgr, WAP_BOOKMARKS_FILENAME, _OFM_CREATE);
}
else {
if ((pIFile = IFILEMGR_OpenFile(pIFileMgr, WAP_BOOKMARKS_FILENAME, _OFM_READWRITE)) == NULL) {
IFILEMGR_Release(pIFileMgr);
// free menus here
return FALSE;
}
ReadBookmarks(pIFileMgr, pIFile, ptBookmarkWin);
}
IMENUCTL_Sort(ptBookmarkWin->m_pSoftKeyCtl, MCS_NAME_ASCENDING);
IMENUCTL_GetRect(ptBookmarkWin->m_pMenuCtl, &MenuRect);
IMENUCTL_GetRect(ptBookmarkWin->m_pSoftKeyCtl, &SoftRect);
MenuRect.dy = (int16)(SoftRect.y);
IMENUCTL_SetRect(ptBookmarkWin->m_pMenuCtl, &MenuRect);
//IMENUCTL_SetActive(ptBookmarkWin->m_pSoftKeyCtl,TRUE);
IMENUCTL_Redraw((IMenuCtl *) ptBookmarkWin->m_pMenuCtl);
IMENUCTL_SetActive(ptBookmarkWin->m_pMenuCtl, TRUE);
IMENUCTL_Redraw((IMenuCtl *) ptBookmarkWin->m_pSoftKeyCtl); //liting 20040605
IFILE_Release(pIFile);
IFILEMGR_Release(pIFileMgr);
return IWINSTACK_OpenWindow(WAPWINID_BOOKMARK, ptBookmarkWin);
}
void* BOOKMARKWIN_Create(IShell* pShell,void* pParam)
{
pShell=pShell;
return pParam;
}
boolean BOOKMARKWIN_Release(IShell* pShell,void** pWin)
{
IBookMarkWin* pInputWin=*pWin;
AECHAR *url;
FREEIF(m_pBookmarkURL);
FREEIF(m_pBookmarkName);
if(pInputWin)
{
if(pInputWin->m_pSoftKeyCtl)
IMENUCTL_DeleteAll(pInputWin->m_pSoftKeyCtl);
IMENUCTL_Release(pInputWin->m_pSoftKeyCtl);
if(pInputWin->m_pMenuCtl)
{
while (IMENUCTL_GetItemCount(pInputWin->m_pMenuCtl))
{
uint16 itemid = IMENUCTL_GetItemID(pInputWin->m_pMenuCtl, 0);
IMENUCTL_GetItemData(pInputWin->m_pMenuCtl, itemid, (uint32 *) &url);
FREEIF(url);
IMENUCTL_DeleteItem(pInputWin->m_pMenuCtl, itemid);
}
IMENUCTL_Release(pInputWin->m_pMenuCtl);
}
FREEIF(*pWin);
}
return TRUE;
}
boolean BOOKMARKWIN_Redraw(IShell* pShell,void* pWin)//读文件并显示出来
{
IFile *pIFile;
IFileMgr *pIFileMgr = NULL;
AEERect rect;
AECHAR buf[30];
uint16 MenuItemID;
IBookMarkWin* pBookmarkWin=pWin;
AEEApplet* pApp=(AEEApplet*)GETAPPINSTANCE();
if(pBookmarkWin&&pApp)
{
if(m_pBookmarkURL)
{
UpdateBookmark(pBookmarkWin);
FREEIF(m_pBookmarkURL);
FREEIF(m_pBookmarkName);
}
if (ISHELL_CreateInstance(pApp->m_pIShell, AEECLSID_FILEMGR, (void **)&pIFileMgr) != SUCCESS)
{
BOOKMARKWIN_Release(pApp->m_pIShell, &pBookmarkWin);
return FALSE ;
}
pIFile = IFILEMGR_OpenFile(pIFileMgr, WAP_BOOKMARKS_FILENAME, _OFM_READWRITE);
ReadBookmarks(pIFileMgr, pIFile, pBookmarkWin);//显示出来
IFILEMGR_Release(pIFileMgr);
IFILE_Release(pIFile);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -