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

📄 menu_new_pal.c

📁 lcd tv : MST9E19A原代码
💻 C
📖 第 1 页 / 共 5 页
字号:
              ||(g_ucMenuPageIndex>=MENU_PICTURE_MODE && g_ucMenuPageIndex<=MENU_SLEEP_MODE)
		   || g_ucMenuPageIndex>=MENU_FACTORY)
            bRedraw = TRUE;

        if(bRedraw)
        {
            msOsdHide();
            msOsdSetWindowSize(CURRENT_MENU.XSize, CURRENT_MENU.YSize);
            msDynamicLoadLanguage();
            msClearFbBlock(CP_BLACKCOLOR, WRITECODEBASE, CURRENT_MENU.XSize, CURRENT_MENU.YSize); // Clear code
            if (g_ucMenuPageIndex==MENU_INPUT_MESSAGE)
                msClearFbBlock(CP_TRANSPARENT, WRITEATTRBASE, CURRENT_MENU.XSize, CURRENT_MENU.YSize); // Clear attribute
            else
                msClearFbBlock(CP_BLEND, WRITEATTRBASE, CURRENT_MENU.XSize, CURRENT_MENU.YSize); // Clear attribute

            if (g_ucMenuPageIndex == MENU_INPUT_MESSAGE)
                SetOsdMainMenuSpace();
            else
                msOsdSetWindowSpace(0,0,0,0);
            // OSD Position
            if(g_ucMenuPageIndex<MENU_ROOT)
                SetOsdMenuPos(50, 50);
            else if((g_ucMenuPageIndex >= MENU_PICTURE_SUB_CONTRAST) && (g_ucMenuPageIndex <= MENU_OSD_SUB_HALFTONE))
                SetOsdMenuPos(50, 94);
            else if(g_ucMenuPageIndex==MENU_VOLUME)
                SetOsdMenuPos(50, 94);
            else if (g_ucMenuPageIndex == MENU_SOURCE)
                SetOsdMenuPos( 0, 0 );
            else if (g_ucMenuPageIndex == MENU_INPUT_MESSAGE)
                SetOsdMenuPos(0, 0);
            else if ((g_ucMenuPageIndex > MENU_INPUT_MESSAGE)&&(g_ucMenuPageIndex < MENU_PICTURE_MODE))
                SetOsdMenuPos(50, 50);
            else if ((g_ucMenuPageIndex >= MENU_PICTURE_MODE)&&(g_ucMenuPageIndex < MENU_FACTORY))
                SetOsdMenuPos(50, 94);
            else if(g_ucMenuPageIndex == MENU_CHANNEL_FINETUNE)
                SetOsdMenuPos(50, 91);
            else if(g_ucMenuPageIndex == MENU_CHANNEL_AUTO_SCAN)
                SetOsdMenuPos(50, 91);
            else if(g_ucMenuPageIndex >= MENU_FACTORY)
                SetOsdMenuPos(0, 0);
            else if(g_ucMenuPageIndex == MENU_CHANNEL_MANUAL_SCAN)
                SetOsdMenuPos(50, 91);
            else
                SetOsdMenuPos(g_SysSetting.OSDHPos, g_SysSetting.OSDVPos);

            // Level 3 menu ==> MENU_MAIN ==> level 2 menu
            if( GetMenuDeep( g_ucPrevMenuPageIndex ) == 3 && GetMenuDeep( g_ucMenuPageIndex ) == 2 )
            {
                BYTE uc;
                BYTE ucPage,ucItem;

                ucPage = g_ucMenuPageIndex;
                ucItem = g_ucMenuItemIndex;

                msOsdDisableSubWinAll();
                DrawOsdMainFrame();
                
                g_ucMenuItemIndex = GetMenuItemIndex(MENU_MAIN, g_ucMenuPageIndex);
                g_ucMenuPageIndex = MENU_MAIN;
                for(uc = 0; uc < tblMenus[MENU_MAIN].MenuItemCount; uc++)
                {
                    DrawOsdMenuItemText(MENU_MAIN, uc);
                }
                DrawOsdSubMenuGroup(MENU_MAIN, g_ucMenuItemIndex);

                g_ucMenuPageIndex = ucPage;
                g_ucMenuItemIndex = ucItem;
                // Redraw the Items
                DrawOsdMenuPage(g_ucMenuPageIndex);
                // Draw level 2 menu
                DrawOsdItemSelect(&CURRENT_MENU, g_ucMenuItemIndex);
            }
            else
            {
                if (g_ucMenuPageIndex == MENU_MAIN)
                {
                    BYTE uc;

                    msOsdDisableSubWinAll();
                    DrawOsdMainFrame();

                    for(uc = 0; uc < tblMenus[MENU_MAIN].MenuItemCount; uc++)
                    {
                        DrawOsdMenuItemText(MENU_MAIN, uc);
                    }
                    DrawOsdSubMenuGroup(MENU_MAIN, g_ucMenuItemIndex);

                    DrawOsdMenuPage(MENU_MAIN+g_ucMenuItemIndex+1);
                }
                else
                {
                    DrawOsdMenuPage(g_ucMenuPageIndex);
                    DrawOsdItemSelect(&CURRENT_MENU, g_ucMenuItemIndex);
                }
            }
        }
        else
        {
            if( GetMenuDeep( g_ucPrevMenuPageIndex ) == 2 && GetMenuDeep( g_ucMenuPageIndex ) == 2 )
            {
                msOsdDisableSubWinAll();
                msClearFbBlock(CP_BLACKCOLOR, WRITECODEBASE+MAIN_MENU_H_SIZE*SUB_AREA_Y+SUB_AREA_X, SUB_AREA_WIDTH, SUB_AREA_HEIGHT); // Clear code
                msClearFbBlock(CP_BLEND, WRITEATTRBASE+MAIN_MENU_H_SIZE*SUB_AREA_Y+SUB_AREA_X, SUB_AREA_WIDTH, SUB_AREA_HEIGHT); // Clear attribute

                DrawOsdMenuPage(g_ucMenuPageIndex);
                DrawOsdItemSelect(&CURRENT_MENU, g_ucMenuItemIndex);
            }
            else
            {
                DrawOsdItemSelect(&CURRENT_MENU, g_ucMenuItemIndex);
            }
        }
        msOsdShow();
    }
    msWriteByte( BK0_00, ucBank );
}

///////////////////////////////////////////////////////////////////////////////
void SetOsdMainMenuSpace(void)
{
    WORD wXs, wYs;
    BYTE ucWidth, ucHeight;

    ucWidth = ((FONT_SIZE&0xF0)>>4)+12;
    ucHeight = ((FONT_SIZE&0x0F)+9)*2;

    // X position
    wXs = (WORD)g_ucOsdWindowWidth * OSD_DOUBLE_SIZE * ucWidth;
    if (PANEL_WIDTH > wXs) // check OSD width
        wXs = (PANEL_WIDTH - wXs) / 8;
    else
        wXs = 0;
    // Y position
    wYs = (WORD)g_ucOsdWindowHeight * OSD_DOUBLE_SIZE * ucHeight;

    if (PANEL_HEIGHT > wYs) // check OSD height
        wYs = (PANEL_HEIGHT - wYs) / 8;
    else
        wYs = 0;
    msOsdSetWindowSpace(g_ucOsdWindowWidth/2,g_ucOsdWindowHeight/2,wXs,wYs);
}
//============================================================================

BYTE CurrentMenuGetPrevItem()
{
    signed char sc;

    if(g_ucMenuItemIndex)
    {
        for(sc=g_ucMenuItemIndex-1; sc>=0; sc--)
            if( IsItemSelectable(CURRENT_MENU_ITEMS[sc].Flags) )
                return sc;
    }
    for(sc=CURRENT_MENU_ITEM_COUNT-1; sc>=0; sc--)
        if( IsItemSelectable(CURRENT_MENU_ITEMS[sc].Flags) )
            return sc;
    return g_ucMenuItemIndex;
}

BYTE CurrentMenuGetNextItem()
{
    BYTE uc;

    if(g_ucMenuItemIndex < CURRENT_MENU_ITEM_COUNT - 1) // current item is not last item.
    {
        for(uc=g_ucMenuItemIndex+1; uc<CURRENT_MENU_ITEM_COUNT; uc++)
            if( IsItemSelectable(CURRENT_MENU_ITEMS[uc].Flags) )
                return uc;
    }
    for(uc=0; uc<g_ucMenuItemIndex; uc++)
        if( IsItemSelectable(CURRENT_MENU_ITEMS[uc].Flags) )
            return uc;
    return g_ucMenuItemIndex;
}

//============================================================================

BYTE GetMenuItemIndex( BYTE ucTargetParentMenuIdx, BYTE ucSonMenuIdx )
{
    BYTE ucFatherMenuIdx;

    do
    {
        ucFatherMenuIdx = tblMenus[ucSonMenuIdx].PrevMenuPage;
        if( ucTargetParentMenuIdx != ucFatherMenuIdx )
        {
            ucSonMenuIdx = ucFatherMenuIdx;
        }
        else
        {
            MenuItemType* pMenuItem;
            BYTE ucMenuItemNum, ucItemIdx;

            pMenuItem = tblMenus[ucTargetParentMenuIdx].MenuItems; // intialize menu pointer
            ucMenuItemNum = tblMenus[ucTargetParentMenuIdx].MenuItemCount; // intialize menu items number
            for( ucItemIdx = 0; ucItemIdx < ucMenuItemNum; ++ ucItemIdx )
            {
                if( pMenuItem->NextMenuPage == ucSonMenuIdx )
                {
                    return ucItemIdx;
                }
                ++ pMenuItem;
            }
            return 0;
        }

    } while( MENU_ROOT != ucFatherMenuIdx );

    return 0;
}
//============================================================================
// <Function>   ConvertInputSourceIndexToMenuItemIndex
//
// <Description>  convert Input source Enum to proper Menu item index
//============================================================================
BYTE ConvertInputSourceIndexToMenuItemIndex(void)
{
    return GetInputSrcType();
}
//============================================================================
// <Function>   ConvertMenuItemIndexToInputSouceIndex
//
// <Description>  convert source menu selected item index to input source enum
//============================================================================
BYTE ConvertMenuItemIndexToInputSouceIndex(BYTE ucItemIndex)
{
    return ucItemIndex;
}

//============================================================================
BOOL ExecuteKeyEvent(MenuItemActionType menuAction)
{
    BOOL bProcessEvent = TRUE;

    g_ucMenuAction = menuAction;

    if((g_ucFactoryFlag&0x80))
    {
        g_ucOsdTimeCounter=0;
    }
    else
    {
        g_ucOsdTimeCounter = g_SysSetting.OSDTime;  // Reset OSD timeout timer.
    }
    
    if (menuAction < MIA_KEY0 || menuAction > MIA_KEY100)
    {
        g_ucInputNum = 0;
        g_ucInputNumCounter = 0;
        g_bInputNumType = 0;
    }
    
    if (menuAction < MIA_FAC0 || menuAction > MIA_FAC9)
    {
        g_uwFacPassWord = 0;        
    }

#if AUTO_SLEEP
    if (g_ucAutoSleepCounter != 0)
    {
        g_ucAutoSleepCounter = AUTO_TURN_OFF_COUNTER;
    }
#endif

#if ENABLE_POWER_SAVING
    if (g_ucPowerDownCounter != 0)
    {
        g_ucPowerDownCounter = POWER_SAVING_COUNTER;
    }
#endif

    while(bProcessEvent)
    {
        bProcessEvent = FALSE;

        //printf("\r\nPageT=%x",g_ucMenuPageIndex);
        //printf("\r\nItemT=%x",g_ucMenuItemIndex);
        //printf("\r\nAction=%x", menuAction);

        switch(menuAction)
        {
            case MIA_KEY0:
            case MIA_KEY1:
            case MIA_KEY2:
            case MIA_KEY3:
            case MIA_KEY4:
            case MIA_KEY5:
            case MIA_KEY6:
            case MIA_KEY7:
            case MIA_KEY8:
            case MIA_KEY9:
                if( !IsTVInUse() )
                {
                    break;
                }

                if (g_ucMenuPageIndex != MENU_INPUT_MESSAGE)
                {
                    g_ucInputNum = 0;
                    g_bInputNumType = 0;
                    g_ucInputNumCounter = 0;
                }

                if (!g_bInputNumType)
                {
                    g_ucInputNum += (menuAction - MIA_KEY0);
                    g_bInputNumType = 1;
                    g_ucInputNumCounter = 3;

                    g_ucMenuPageIndex = MENU_INPUT_MESSAGE;
                    g_ucMenuItemIndex = 0;
                    menuAction=MIA_REDRAWMENU;
                    bProcessEvent=TRUE;
                }
                else
                {
                    BYTE temp;

                    temp = g_ucInputNum - g_ucInputNum%100;
                    g_ucInputNum %= 100;
                    g_ucInputNum = (temp+g_ucInputNum*10+(menuAction-MIA_KEY0));
                    g_bInputNumType = 0;
                    g_ucInputNumCounter = 0;
                    g_ucInputNum %= 200;

                    TV_SelectChannel(g_ucInputNum);
                    g_ucInputNum = 0;
                }
                break;

            case MIA_KEY100:
                if( !IsTVInUse() )
                {
                    break;
                }

                g_ucInputNum = 100;
                g_bInputNumType = 0;
                g_ucInputNumCounter = 3;

                g_ucMenuPageIndex = MENU_INPUT_MESSAGE;
                g_ucMenuItemIndex = 0;
                menuAction=MIA_REDRAWMENU;
                bProcessEvent=TRUE;
                break;

            case MIA_FAC0:
            case MIA_FAC1:
            case MIA_FAC2:
            case MIA_FAC3:
            case MIA_FAC4:
            case MIA_FAC5:
            case MIA_FAC6:
            case MIA_FAC7:
            case MIA_FAC8:
            case MIA_FAC9:
                if ((menuAction - MIA_FAC0) != (g_uwFacPassWord&0x0f))
                {
                    g_uwFacPassWord  = ((g_uwFacPassWord  << 4) +(menuAction - MIA_FAC0));

⌨️ 快捷键说明

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