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

📄 menu_new_pal.c

📁 lcd tv : MST9E19A原代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/******************************************************************************
 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 + -