📄 menu_new_pal.c
字号:
/******************************************************************************
Copyright (c) 2003 MStar Semiconductor, Inc.
All rights reserved.
[Module Name]: Menu.c
[Date]: 06-Jan-2003
[Comment]:
OSD relative subroutines.
[Reversion History]:
*******************************************************************************/
#include "board.h"
#define _MENU_C_
// System
// Common
#include "define.h"
#include "msreg.h"
#include "userpref.h"
#include "global.h"
#include "common.h"
// External
#include "msosd.h"
#include "msio.h"
#include "msfb.h"
#include "keypad.h"
#include "DevVD.h"
#include "DevAudio.h"
#include "panel.h"
#include "power.h"
#include "ir.h"
#include "msACE.h"
#include "msModeHandler.h"
#include "MenuTbl.h"
#include "font.h"
#include "MenuFunc.h"
#include "uart.h"
#include "debug.h"
#include "palette.h"
#include "tv.h"
#include "msModeDetect.h"
#include "msModeTbl.h"
#include "msFunction.h"
#include "global.h"
#include "msmcu.h"
// Internal
#include "Menu.h"
#include "mstt.h"
#include "msMultiLanguage.h"
#include "MenuStr.h"
//=========================================================================
code StuFontInfo g_tFontInfoTbl[] =
{
{ CPTBL_GENERAL, 0, 0, NO_DOWNLOAD_FONT, 0 }, // For basic mono font
{ CPTBL_GENERAL, 0, 1, NO_DOWNLOAD_FONT, 0 }, // For basic color font
// Main menu color icon
// order => 1:Picture 2:Sound 3:Function 4:Osd 5:Channel 6:PC
{ CPTBL_PICTURE, 1, 0, NO_DOWNLOAD_FONT, 0 },
{ CPTBL_SOUND, 2, 0, NO_DOWNLOAD_FONT, 0 },
{ CPTBL_FUNCTION, 3, 0, NO_DOWNLOAD_FONT, 0 },
{ CPTBL_OSD, 4, 0, NO_DOWNLOAD_FONT, 0 },
{ CPTBL_CHANNEL, 5, 0, NO_DOWNLOAD_FONT, 0 },//channel
{ CPTBL_PC, 6, 0, NO_DOWNLOAD_FONT, 0 },
{ CPTBL_BAR_UNSEL, 7, 0, NO_DOWNLOAD_FONT, 0 }, // tBarPaletteUnsel
{ CPTBL_BAR_SEL, 8, 0, NO_DOWNLOAD_FONT, 0 }, // tBarPalettesel
{ CPTBL_BAR_CANTSEL, 9, 0, NO_DOWNLOAD_FONT, 0 }, // tBarPaletteCANTsel
{ CPTBL_LOGO, 10, 0, NO_DOWNLOAD_FONT, 0 } // tLogo
};
//=========================================================================
// Total sect = 3 + 6 * (ucLength - 2) + 3 = 6 * (ucLength - 1)
void DrawColorGuage(BYTE ucX, BYTE ucY, BYTE ucLength, BYTE ucValue, BYTE ucColor)
{
WORD pLead;
WORD ucLoop;
BYTE ucTemp;
ucTemp = g_ucOsdFontColor;
// Set color font
msWriteByte(BK0_00, 0x00);
msWriteByte(BK0_AE, msReadByte(BK0_AE) | _BIT3);
g_ucOsdFontColor = ucColor; //0x70; // palette 8
pLead = (WORD)ucValue * (ucLength - 1) * 6 / 100; // sect to be draw
if (pLead <= 3)
{
msOsdDrawChar(ucX, ucY, ColorGuageStart0_3+ pLead);
for(ucLoop=pLead/6+1; ucLoop<ucLength-1; ucLoop++) // 空格
{
msOsdDrawChar(ucX + ucLoop, ucY, ColorGuage0_6);
}
msOsdDrawChar(ucX+ucLength-1, ucY, ColorGuageEnd0_3);
}
else
{
msOsdDrawChar(ucX, ucY, ColorGuageStart3_3);
pLead -= 3;
for (ucLoop = 1; ucLoop <= ucLength - 2; ucLoop++) // // 满格
{
if (pLead >= 6)
{
msOsdDrawChar(ucX+ucLoop, ucY, ColorGuage6_6);
pLead -= 6;
}
else if (pLead > 0)
{
msOsdDrawChar(ucX+ucLoop, ucY, ColorGuage0_6+pLead);
pLead = 0;
}
else
{
msOsdDrawChar(ucX+ucLoop, ucY, ColorGuage0_6);
}
}
ucLoop = pLead;
if (ucLoop > 3)
ucLoop = 3;
msOsdDrawChar(ucX+ucLength-1, ucY, ColorGuageEnd0_3+ucLoop);
}
g_ucOsdFontColor = ucTemp;
}
//=========================================================================
// draw menu item display value
void DrawOsdSubMenuGroup(MenuPageIndexType MenuPageIdx, BYTE MenuItemIdx)
{
BYTE ucColor;
MenuItemType* menuItem = &tblMenus[MenuPageIdx].MenuItems[MenuItemIdx];
DrawSubMenuGroupType* pSubMenuGroup = menuItem->DrawSubMenuGroup;
if( NULL == pSubMenuGroup )
return;
while(1)
{
if((&CURRENT_MENU_ITEM)->DrawSubMenuGroup == pSubMenuGroup)
{
ucColor = pSubMenuGroup->UnSelColorType;
}
else
{
if(!IsItemSelectable(menuItem->Flags))
ucColor = CT_MENU_HIDDEN;
else
ucColor = pSubMenuGroup->UnSelColorType;
}
switch( pSubMenuGroup->Flags&0x7F )
{
case DSI_TEXT:
msOsdSetTextColor(ucColor, MONOFONT);
msOsdDrawStr_M(pSubMenuGroup->XPos,pSubMenuGroup->YPos,pSubMenuGroup->DisplayText());
break;
case DSI_COLORGAUGE:
if (ucColor == CT_MENU_HIDDEN)
{
ucColor = 0x90;
}
else
{
ucColor = 0x70;
}
DrawColorGuage(pSubMenuGroup->XPos, pSubMenuGroup->YPos, pSubMenuGroup->Length, pSubMenuGroup->GetValue(), ucColor);
break;
case DSI_NUMBER:
msOsdSetTextColor(ucColor, MONOFONT);
msOsdDrawNumber(pSubMenuGroup->XPos, pSubMenuGroup->YPos, pSubMenuGroup->Length, pSubMenuGroup->GetValue());
break;
case DSI_HEX_NUMBER:
msOsdSetTextColor(ucColor, MONOFONT);
msOsdDrawHexLong(pSubMenuGroup->XPos, pSubMenuGroup->YPos, pSubMenuGroup->Length, pSubMenuGroup->GetValue());
break;
break;
case DSI_TEXT_IN0:
if (g_ucMenuAction <=MIA_INFO)
{
msOsdSetTextColor(pSubMenuGroup->UnSelColorType, MONOFONT);
if ((g_ucMenuAction >=MIA_KEY0) && (g_ucMenuAction <=MIA_KEY100))
{
msOsdDrawNumber(pSubMenuGroup->XPos+1, pSubMenuGroup->YPos, 3, g_ucInputNum);
}
else if (SRC_TYPE_IS_TV())
{
XDATA BYTE ucTmp;
XDATA BYTE strBff[6];
for (ucTmp=0;ucTmp<5;ucTmp++)
strBff[ucTmp] = g_PalCurChannelData.acStationName[ucTmp];
strBff[ucTmp] = 0;
msOsdDrawNumber(pSubMenuGroup->XPos+1, pSubMenuGroup->YPos, 3, g_TVChSetting.ucCurChannelNO);
msOsdDrawStr(pSubMenuGroup->XPos+3+ucTmp, pSubMenuGroup->YPos, strBff); //Eason 0815
}
else
{
msOsdDrawStr_M(pSubMenuGroup->XPos,pSubMenuGroup->YPos,pSubMenuGroup->DisplayText() );
}
}
break;
case DSI_TEXT_IN1://Mute
if( (g_ucMenuAction == MIA_INFO) || (g_ucMenuAction == MIA_MUTE) )
{
msOsdSetTextColor(pSubMenuGroup->UnSelColorType, MONOFONT);
msOsdDrawStr_M(pSubMenuGroup->XPos,pSubMenuGroup->YPos,pSubMenuGroup->DisplayText());
}
break;
case DSI_TEXT_IN2://Zoom
if( (g_ucMenuAction == MIA_INFO) || (g_ucMenuAction == MIA_ZOOM) )
{
msOsdSetTextColor(pSubMenuGroup->UnSelColorType, MONOFONT);
msOsdDrawStr_M(pSubMenuGroup->XPos,pSubMenuGroup->YPos,pSubMenuGroup->DisplayText());
}
break;
case DSI_TEXT_IN3://Picturemode
if( (g_ucMenuAction == MIA_INFO) || (g_ucMenuAction == MIA_PICTURE_MODE) )
{
msOsdSetTextColor(pSubMenuGroup->UnSelColorType, MONOFONT);
msOsdDrawStr_M(pSubMenuGroup->XPos,pSubMenuGroup->YPos,pSubMenuGroup->DisplayText());
}
break;
case DSI_TEXT_IN4://MTS
if( (g_ucMenuAction == MIA_INFO) || (g_ucMenuAction == MIA_MTS) )
{
msOsdSetTextColor(pSubMenuGroup->UnSelColorType, MONOFONT);
msOsdDrawStr_M(pSubMenuGroup->XPos,pSubMenuGroup->YPos,pSubMenuGroup->DisplayText());
}
break;
case DSI_TEXT_IN6://Sleep
if( (g_ucMenuAction == MIA_INFO) || (g_ucMenuAction == MIA_SLEEP) )
{
msOsdSetTextColor(pSubMenuGroup->UnSelColorType, MONOFONT);
msOsdDrawStr_M(pSubMenuGroup->XPos,pSubMenuGroup->YPos,pSubMenuGroup->DisplayText());
}
break;
case DSI_NUMBER_IN6: //Sleep
if( (g_ucMenuAction == MIA_INFO) || (g_ucMenuAction == MIA_SLEEP) )
{
msOsdSetTextColor(pSubMenuGroup->UnSelColorType, MONOFONT);
msOsdDrawNumber(pSubMenuGroup->XPos, pSubMenuGroup->YPos, pSubMenuGroup->Length, pSubMenuGroup->GetValue());
}
break;
case DSI_TEXT_FREQ:
if(SrcTypeIsPC() && IsSrcHasSignal())
{
BYTE ucShift;
msOsdSetTextColor(pSubMenuGroup->UnSelColorType, MONOFONT);
ucShift = pSubMenuGroup->XPos;
msOsdDrawStr_M(ucShift,pSubMenuGroup->YPos,pSubMenuGroup->DisplayText());
msOsdDrawNumber(ucShift+4, pSubMenuGroup->YPos, pSubMenuGroup->Length, pSubMenuGroup->GetValue()/10);
msOsdDrawNumber(ucShift+10, pSubMenuGroup->YPos, 1, pSubMenuGroup->GetValue());
}
break;
default:
break;
}
if(pSubMenuGroup->Flags & DSI_END)
break;
else
pSubMenuGroup++;
}
}
//=========================================================================
// draw menu item display text
void DrawOsdMenuItemText(MenuPageIndexType MenuPageIdx, BYTE MenuItemIdx)
{
BYTE ucFontColor;
MenuItemType* menuItem = &tblMenus[MenuPageIdx].MenuItems[MenuItemIdx];
if(menuItem->DrawItemMethod == DWI_TEXT)
{
if(menuItem == &CURRENT_MENU_ITEM)
{
ucFontColor = menuItem->UnSelColorType;
}
else
{
if(!IsItemSelectable(menuItem->Flags))
ucFontColor = CT_MENU_HIDDEN;
else
ucFontColor = menuItem->UnSelColorType;
}
msOsdSetTextColor(ucFontColor, MONOFONT);
msOsdDrawStr_M(menuItem->XPos,menuItem->YPos,menuItem->DisplayText());
}
else if(menuItem->DrawItemMethod == DWI_COLORICON)
{
BYTE ucX, ucY;
ucX = menuItem->XPos;
ucY = menuItem->YPos;
if( (ucX == POSITION_X_AUTO)||(ucY == POSITION_Y_AUTO) )
{
// Find out current item's index
MenuItemType* pMenuItem = CURRENT_MENU_ITEMS;
BYTE index = 0;
while( menuItem != pMenuItem )
{
if( IsItemSelectable( pMenuItem->Flags ) )
index ++;
pMenuItem ++;
}
if( ucX == POSITION_X_AUTO )
ucX = SUB_ICON1_X + index*SUB_ICON_DX;
if( ucY == POSITION_Y_AUTO )
ucY = SUB_ICON1_Y + index*SUB_ICON_DY;
}
if(menuItem == &CURRENT_MENU_ITEM)
DrawOsdColorIcon_M(ucX, ucY, menuItem->DisplayText(), 1);
else
DrawOsdColorIcon_M(ucX, ucY, menuItem->DisplayText(), 0);
}
else if (menuItem->DrawItemMethod == DWI_LOGOICON)
{
msClearFbBlock(FONT_ASCII_SPACE, WRITECODEBASE, CURRENT_MENU.XSize, CURRENT_MENU.YSize); // Clear code
msClearFbBlock(CP_BLEND, WRITEATTRBASE, CURRENT_MENU.XSize, CURRENT_MENU.YSize); // Clear attribute
DrawOsdColorIcon_M(menuItem->XPos, menuItem->YPos, menuItem->DisplayText(), 0);
}
else if (menuItem->DrawItemMethod == DWI_INFORMATION)
{
msOsdSetTextColor(CT_MENU_HIDDEN, MONOFONT); //menuItem->UnSelColorType
switch(GetInputSrcType())
{
case INPUTSOURCE_VGA:
#if(ENABLE_DVI)
case INPUTSOURCE_DVI:
#endif
{
msOsdDrawStr_M(menuItem->XPos,menuItem->YPos,OsdInformationSubVGA());
#if(FONT_UNIT==UI_1x1)
msOsdDrawNumber(menuItem->XPos+2, menuItem->YPos, 4, GetStdModeResH(g_SrcInfo.ucModeIndex) );
msOsdDrawNumber(menuItem->XPos+9, menuItem->YPos, 4, GetStdModeResV(g_SrcInfo.ucModeIndex) );
#else
msOsdDrawNumber(menuItem->XPos+4, menuItem->YPos, 4, GetStdModeResH(g_SrcInfo.ucModeIndex) );
msOsdDrawNumber(menuItem->XPos+18, menuItem->YPos, 4, GetStdModeResV(g_SrcInfo.ucModeIndex) );
#endif
}
break;
case INPUTSOURCE_TV:
msOsdDrawStr_M(menuItem->XPos,menuItem->YPos,InputTVText());
msOsdDrawNumber(menuItem->XPos+4, menuItem->YPos, 3, g_TVChSetting.ucCurChannelNO);
break;
case INPUTSOURCE_CVBS:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -