📄 menu.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 + -