⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ibookmark.c

📁 以栈结构实现的多级菜单
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -