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

📄 ibookmark.c

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