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

📄 menu.c

📁 在优龙fs2410开发板上做的电子琴
💻 C
字号:
/*
*********************************************************************************************************
*                                   Samsung ARM S3C2410 Software Frame
*
*                          			(c) Copyright 2008-2010, LastRitter
*                                           All Rights Reserved
*
* File : 
* By   : LastRitter
*********************************************************************************************************
*/
#include "SystemTool.h"	


static menu sta_Menu[SW_MENU_MAX];

uint16 ui_MenuSelect=1000;

/*
*********************************************************************************************************
*                                               
*
* Description:
* 
* Arguments  : 
*
* Returns    : 
*
* Note(s)    :  
*               
*********************************************************************************************************
*/
void SW_MeunInit(void)
{
	uint16 uiCount;
	for(uiCount=0;uiCount<SW_MENU_MAX;uiCount++)
	{
		sta_Menu[uiCount].stFront=SW_MENU_DEF_FRONT;
		sta_Menu[uiCount].stBack=SW_MENU_DEF_BACK;
		sta_Menu[uiCount].uiHigh=SW_MENU_DEF_HIGH;
		sta_Menu[uiCount].uiSelect=SW_MENU_DEF_SELECT;
		sta_Menu[uiCount].uiNumber=SW_MENU_DEF_NUMBER;
		sta_Menu[uiCount].uiFirstLine=SW_MENU_DEF_FIRST;
		sta_Menu[uiCount].pstList=NULL;
	}
}

/*
*********************************************************************************************************
*                                               
*
* Description:
* 
* Arguments  : 
*
* Returns    : 
*
* Note(s)    :  
*               
*********************************************************************************************************
*/
uint16 SW_CreateMenu(menulist *pstList,colour stFront,colour stBack,uint16 uiHigh)
{
	uint16 uiCount,uiCount2;
	
	if(pstList==NULL)
	{
		UART_TextOut("Error param.(SW_CreateMenu)\n");
		return 1;
	}
	
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	for(uiCount=0;uiCount<SW_MENU_MAX;uiCount++)
		if(sta_Menu[uiCount].pstList==NULL)
			break;
	
	if(uiCount==SW_MENU_MAX)
	{
		UART_TextOut("Can't create more menu.(SW_CreateMenu)\n");
		return 1;
	}
	
//******************************************************************************************************
	uiCount2=0;
	while(pstList[uiCount2++].pscTitle!=0);	
	sta_Menu[uiCount].uiNumber=uiCount2-1;
	
	sta_Menu[uiCount].pstList=pstList;
	sta_Menu[uiCount].stFront=stFront;
	sta_Menu[uiCount].stBack=stBack;
	sta_Menu[uiCount].uiHigh=uiHigh;
	
	return 0;
}


/*
*********************************************************************************************************
*                                               
*
* Description:
* 
* Arguments  : 
*
* Returns    : 
*
* Note(s)    :  
*               
*********************************************************************************************************
*/
uint16 SW_DeleteMenu(uint16 uiMenu)
{
	return 0;
}

/*
*********************************************************************************************************
*                                               
*
* Description:
* 
* Arguments  : 
*
* Returns    : 
*
* Note(s)    :  
*               
*********************************************************************************************************
*/
uint16 SW_ShowMenu(uint16 uiMenu,paintarea *pstArea)
{
	uint16 uiCount=0,uiShowNumber;
	uint16 uiX0=pstArea->uiX0;
	uint16 uiY0=pstArea->uiY0;
	uint16 uiX1=pstArea->uiX1;
	uint16 uiY1=pstArea->uiY1;
	uint16 uiFirstLine=sta_Menu[uiMenu].uiFirstLine;
	menulist *pstList;
	
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	if(uiMenu>=SW_MENU_MAX)
	{
		UART_TextOut("Error Param uiMenu=%d .(SW_ShowMenu)\n",uiMenu);
		return 1;
	}
	
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	pstList=sta_Menu[uiMenu].pstList;
	if(pstList==NULL)
	{
		UART_TextOut("Can't find this menu.(SW_ShowMenu)\n");
		return 1;
	}
	
//******************************************************************************************************
	EG_RectFill(uiX0	,uiY0	,uiX1	,uiY1	,sta_Menu[uiMenu].stBack);
	EG_Rect(uiX0	,uiY0	,uiX1	,uiY1	,SW_MENU_FRAME_COLOUR);
	EG_Rect(uiX0+1	,uiY0+1	,uiX1-1,uiY1-1	,SW_MENU_FRAME_COLOUR);
	EG_SetFontColour(sta_Menu[uiMenu].stFront);
	
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	uiShowNumber=(uiY1-uiY0-SW_MENU_FRAME_WIDTH)/(SW_MENU_DEF_HIGH);
	
	if(uiShowNumber<sta_Menu[uiMenu].uiNumber)
	{
    	uiX1-=SW_MENU_DEF_HIGH;
    	EG_LineEx(uiX1,uiY0,uiX1,uiY1,SW_MENU_FRAME_WIDTH,SW_MENU_FRAME_COLOUR);
    	EG_LineEx(uiX1,(uiY0+uiY1)/2,uiX1+SW_MENU_DEF_HIGH,(uiY0+uiY1)/2,SW_MENU_FRAME_WIDTH,SW_MENU_FRAME_COLOUR);
    	
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    	if(sta_Menu[uiMenu].uiFirstLine)
    		EG_TextOutEx(uiX1+SW_MENU_DEF_HIGH/6,(uiY0+uiY1)/4	,"↑");
    	if((sta_Menu[uiMenu].uiFirstLine+uiShowNumber)<sta_Menu[uiMenu].uiNumber)
     		EG_TextOutEx(uiX1+SW_MENU_DEF_HIGH/6,(uiY0+uiY1)/4*3-SW_DEF_FONT_HIGH,"↓");
    }
    else
    {
		uiShowNumber=sta_Menu[uiMenu].uiNumber;
	}

//******************************************************************************************************
	for(uiCount=0;uiCount<uiShowNumber;uiCount++)
	{
		EG_TextOutEx(uiX0+SW_MENU_FRAME_WIDTH+SW_MENU_FRAME_SPACE,
			uiY0+SW_MENU_DEF_HIGH*uiCount+SW_MENU_FRAME_SPACE+SW_MENU_FRAME_WIDTH,
			pstList[uiCount+uiFirstLine].pscTitle);
		EG_LineEx(uiX0,uiY0+SW_MENU_DEF_HIGH*uiCount,
			uiX1,uiY0+SW_MENU_DEF_HIGH*uiCount,SW_MENU_FRAME_WIDTH,SW_MENU_FRAME_COLOUR);
	}
	
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	return 0;
}

/*
*********************************************************************************************************
*                                               
*
* Description:
* 
* Arguments  : 
*
* Returns    : 
*
* Note(s)    :  
*               
*********************************************************************************************************
*/
uint16 SW_GetMenuSelect(uint16 uiMenu,paintarea *pstArea,uint16 uiX,uint16 uiY)
{
	uint16 uiCount=0,uiShowNumber;
	uint16 uiY0=pstArea->uiY0;
	uint16 uiX1=pstArea->uiX1;
	uint16 uiY1=pstArea->uiY1;
	uint16 uiFirstLine=sta_Menu[uiMenu].uiFirstLine;
	menulist *pstList;
	
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	if(uiMenu>=SW_MENU_MAX)
	{
		UART_TextOut("Error Param uiMenu=%d .(SW_GetMenuSelect)\n",uiMenu);
		return SW_MENU_NO_SELECT;
	}
	
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	pstList=sta_Menu[uiMenu].pstList;
	if(pstList==NULL)
	{
		UART_TextOut("Can't find this menu.(SW_GetMenuSelect)\n");
		return SW_MENU_NO_SELECT;
	}
	
//******************************************************************************************************
	uiShowNumber=(uiY1-uiY0-SW_MENU_FRAME_WIDTH)/(SW_MENU_DEF_HIGH);
	
	if(uiShowNumber<sta_Menu[uiMenu].uiNumber)
	{
    	uiX1-=SW_MENU_DEF_HIGH;
    	if(uiX>uiX1)
    	{
    		if(uiY<((uiY0+uiY1)/2))
    		{
    			if(sta_Menu[uiMenu].uiFirstLine)
    			{
    				sta_Menu[uiMenu].uiFirstLine--;
    				SW_RefreshWindow();
 //   				UART_TextOut("Menu move up.\n");
    			}
    			return SW_MENU_NO_SELECT;
    		}
    		else
    		{
    			if((sta_Menu[uiMenu].uiFirstLine+uiShowNumber)<sta_Menu[uiMenu].uiNumber)
    			{
//    				UART_TextOut("Menu move Down.\n");
    				sta_Menu[uiMenu].uiFirstLine++;
     				SW_RefreshWindow();
    			}
   				return SW_MENU_NO_SELECT;
    		}
    	}
    }
    else
    {
		uiShowNumber=sta_Menu[uiMenu].uiNumber;
	}

//******************************************************************************************************
	for(uiCount=1;uiCount<(uiShowNumber+1);uiCount++)
	{
		if(uiY<(uiY0+SW_MENU_DEF_HIGH*uiCount))
			return (uiFirstLine+uiCount-1);
	}
	
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	return SW_MENU_NO_SELECT;
}

/*
*********************************************************************************************************
*                                               
*
* Description:
* 
* Arguments  : 
*
* Returns    : 
*
* Note(s)    :  
*               
*********************************************************************************************************
*/
uint16 SW_RunMenu(uint16 uiMenu,paintarea *pstArea,uint16 uiX,uint16 uiY)
{
	uint16 uiSelect;
	
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	uiSelect=SW_GetMenuSelect(uiMenu,pstArea,uiX,uiY);

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	if(uiSelect==SW_MENU_NO_SELECT)
		return 1;
	
	UART_TextOut("%s\n",sta_Menu[uiMenu].pstList[uiSelect].pscTitle);
	
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//	sta_Menu[uiMenu].pstList[uiSelect].CallBack();
	ui_MenuSelect=uiSelect;
	
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	return 0;
}

⌨️ 快捷键说明

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