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

📄 menucontroler.cpp

📁 BREW 应用
💻 CPP
字号:
// MenuControler.cpp: implementation of the CMenuControler class.
//
//////////////////////////////////////////////////////////////////////

#include "MenuControler.h"
#include "ImageController.h"
#include "MainHandler.h"

#include "TextController.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMenuController::CMenuController(CAppMainHandler *pAppMain)
{
	m_pAppMain = pAppMain;
	m_nMenuCount = m_nSelIdx = m_nPastSelIdx = 0;
	m_pImageMenu = NULL;
}

CMenuController::~CMenuController()
{

}

void CMenuController::SetMenuOption(char *szRes, short nPos, short nType, short nImgWidth, short nImgHeight)
{
	AEEDeviceInfo aeeDI;
	m_pchResName = szRes;
	m_menuopt.nMenuType = nType;
	m_menuopt.nMenuPos = nPos;
	m_menuopt.nImgWidth = nImgWidth;
	m_menuopt.nImgHeight = nImgHeight;


	ISHELL_GetDeviceInfo(m_pAppMain->m_pIShell, &aeeDI);//拳搁俊 焊老 皋春肮荐甫 拌魂

	m_menuopt.nHorzCnt = aeeDI.cxScreen / (m_menuopt.nImgWidth+4);
	m_menuopt.nVertCnt = aeeDI.cyScreen / (m_menuopt.nImgHeight+4);

	m_menuopt.xAxis = aeeDI.cxScreen - nImgWidth - 4;
	m_menuopt.yAxis = aeeDI.cyScreen - nImgHeight - 4;
	m_nStartIdx = 0;
	m_nEndIdx = m_menuopt.nHorzCnt;
}	

boolean CMenuController::CreateMenu(uint16 nImageID, uint16 nTag, char *chComment)
{
	if( m_pImageMenu )
		return FALSE;	
	m_nMenuCount = 1;

	m_pImageMenu = new IMAGEMENUITEM;
	m_pImageMenu->imgData.nImageID = nImageID;
	m_pImageMenu->imgData.nMenuTag = nTag;
	STRCPY(m_pImageMenu->imgData.chComment, chComment);
	m_pImageMenu->pLink = NULL;

	m_pLastAddr = m_pImageMenu;	// 付瘤阜 皋春林家 历厘

	return TRUE;
}

short CMenuController::AddItem(uint16 nImageID, uint16 nTag, char *chComment)
{
	m_nMenuCount += 1;
	PIMAGEMENUITEM pMenuItem = new IMAGEMENUITEM;
	pMenuItem->imgData.nImageID = nImageID;
	pMenuItem->imgData.nMenuTag = nTag;
	STRCPY(pMenuItem->imgData.chComment, chComment);
	pMenuItem->pLink = NULL;

	m_pLastAddr->pLink = pMenuItem;
	m_pLastAddr = pMenuItem;

	(m_nMenuCount > m_menuopt.nHorzCnt ? m_nEndIdx = m_menuopt.nHorzCnt - 1 : m_nEndIdx = m_nMenuCount -1);
	return m_nMenuCount;
}

PIMAGEMENUITEM CMenuController::GetItem(short nIdx)
{
	int nCount = 0;
	PIMAGEMENUITEM pMenuItem = NULL ;

	pMenuItem = m_pImageMenu;
	while( pMenuItem )
	{
		if( nIdx == nCount )
			return pMenuItem;
		pMenuItem = pMenuItem->pLink;
		nCount++;
	}
	return NULL;
}


PIMAGEMENUITEM CMenuController::GetItem2(uint32 nImageID)
{
	PIMAGEMENUITEM pMenuItem = NULL;

	pMenuItem = m_pImageMenu;
	while( pMenuItem )
	{
		if( pMenuItem->imgData.nImageID == nImageID )
			return pMenuItem;
		pMenuItem = pMenuItem->pLink;
	}
	return NULL;
}

void CMenuController::DrawMenu()		//First, Test Horizon Menu
{
	CTextController *pTxtCtl = new CTextController(m_pAppMain);

	CImageController *pImgCtl = new CImageController(m_pAppMain);
	PIMAGEMENUITEM pMenuItem = NULL ;

	IDISPLAY_ClearScreen(m_pAppMain->m_pIDisplay);
	int16 i=0;
	int16 x; 
	pMenuItem = m_pImageMenu;

	for( int j = 0; j < m_nStartIdx; j++)
		pMenuItem = pMenuItem->pLink;
	
	while( pMenuItem )
	{
		i++;
		if( i > m_menuopt.nHorzCnt )
			break;
		(i == 1?(x = 4):(x += 19 ));
		pImgCtl->DrawImage(x, m_menuopt.yAxis+2, m_pchResName, pMenuItem->imgData.nImageID);
		pMenuItem = pMenuItem->pLink;		
	}
	IDISPLAY_Update(m_pAppMain->m_pIDisplay);
	SelectMenu();
	// RestoreMenu();
	delete pImgCtl;
}

void CMenuController::SelectMenu()		//Select Menu by m_nSelIdx
{
	int16 x, nAbs;
	CImageController *pImgCtl = new CImageController(m_pAppMain);
	nAbs = m_nSelIdx - m_nStartIdx;
	pImgCtl->DrawFillRect(nAbs*20 + 2, m_menuopt.yAxis-2, m_menuopt.nImgWidth+4, m_menuopt.nImgHeight+6, RGB_NAVY);
	
	x = nAbs * 20 + 4;
	PIMAGEMENUITEM pMenuItem = NULL;
	pMenuItem = GetItem(m_nSelIdx);
	pImgCtl->DrawImage(x, m_menuopt.yAxis+2, m_pchResName, pMenuItem->imgData.nImageID);
	IDISPLAY_Update(m_pAppMain->m_pIDisplay);
	delete pImgCtl;
}

void CMenuController::RestoreMenu()		//Restore Menu by m_nPastSelIdx
{
	int16 x, nAbs;
	CImageController *pImgCtl = new CImageController(m_pAppMain);
	nAbs = m_nPastSelIdx - m_nStartIdx;
	pImgCtl->DrawFillRect(nAbs*20 + 2, m_menuopt.yAxis-2, m_menuopt.nImgWidth+4, m_menuopt.nImgHeight+6, RGB_WHITE);
	
	x = nAbs * 20 + 4;
	PIMAGEMENUITEM pMenuItem = NULL;
	pMenuItem = GetItem(m_nPastSelIdx);
	pImgCtl->DrawImage(x, m_menuopt.yAxis+2, m_pchResName, pMenuItem->imgData.nImageID);
	IDISPLAY_Update(m_pAppMain->m_pIDisplay);
	delete pImgCtl;
} 

short CMenuController::NextMenu()		//Select Next Menu
{
	( m_nMenuCount-1 > m_nSelIdx ? m_nSelIdx++ : m_nSelIdx = m_nMenuCount - 1 );
	if( m_nSelIdx > m_nEndIdx )
	{
		m_nStartIdx++;
		m_nEndIdx++;
		m_nPastSelIdx = m_nSelIdx;
		DrawMenu();
		return m_nSelIdx;
	}
	RestoreMenu();
	m_nPastSelIdx = m_nSelIdx;
	SelectMenu();
	return m_nSelIdx;
}

short CMenuController::PreviousMenu()	//Select Previous Menu
{
	( m_nSelIdx > 0 ? m_nSelIdx-- : m_nSelIdx = 0 );
	if( m_nSelIdx < m_nStartIdx )
	{
		m_nStartIdx--;
		m_nEndIdx--;
		m_nPastSelIdx = m_nSelIdx;
		DrawMenu();
		return m_nSelIdx;
	}
	RestoreMenu();
	m_nPastSelIdx = m_nSelIdx;
	SelectMenu();
	return m_nSelIdx;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -