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

📄 thumb.c

📁 车载电子影音系统dvd播放系统原程序代码
💻 C
📖 第 1 页 / 共 5 页
字号:
                
                //clear the frames from the cursor
                _THUMBNAIL_DrawThumbnailFrame(_bTHUMBNAILTemp, THUMBNAIL_FRAME_CLEAR);
            }

            _wThumbnailPlayIndex = _bProgramPageNo * PROGRAM_LIST_TOTAL_NUM_IN_PAGE;

            //Delete the thumbnail from the program list.
            LINEAR_ProgramEntryOperation(LINEAR_DELETE_ENTRY_BY_INDEX_W_REARRANGE, (BYTE)_wThumbnailIndex, 0, 0);
            __bProgramMaxEntry--;

            //CoCo1.00, to fix the bug about the EXT name is wrong in Program List.
            FM_PreparePage(FM_PREPARE_PROGLIST, 0);

            _wThumbTotalFiles--;

            //There is no programmed thumbnail or all thumbnails has been deleted in this page.
            if ((_wThumbTotalFiles == 0) || (_wThumbnailPlayIndex == _wThumbTotalFiles))
            {
                _THUMBNAIL_ProcessEmptyProgramList();                
            }
            else if (_wThumbnailPlayIndex < _wThumbTotalFiles)
            {
                //To prevent cursor at an empty thumbnail
                if (_wThumbnailIndex > (_wThumbTotalFiles - 1))
                {
                    _THUMBNAIL_UpdateHighlight(THUMBNAIL_UPDATE_HIGHLIGHT_CLEAR);
                    _wThumbnailIndex = _wThumbTotalFiles - 1; 
                }

                _wThumbnailPlayIndex = _wThumbnailIndex;

                //Start to decode the thumbnails
                _THUMBNAIL_InitialStage(); 
                
                if (!_THUMBNAIL_CheckChangePageValid(THUMBNAIL_NEXT_PAGE))
                {
                    _bTHUMBNAILTemp = _THUMBNAIL_GetButtonPosIndex(THUMBNAIL_BUTTON_NEXT);
                    if (_bTHUMBNAILTemp != THUMBNAIL_BUTTON_END)
                    {
                        if (__ThumbCtlBTNList[_bTHUMBNAILTemp].bStatus == THUMBNAIL_BUTTON_STATE_ENABLE)
                        {
                            _THUMBNAIL_UpdateButtonState(THUMBNAIL_BUTTON_NEXT, THUMBNAIL_BUTTON_STATE_DISABLE, TRUE);
                            
                            //update the page info.
                            _THUMBNAIL_DisplayPageInfo();
                        }
                    }
                }                
            }
            break;
        default:
            break;
        }
    }
    else //the cursor is at the button
        return _THUMBNAIL_ProcessButton();
#else
    return _THUMBNAIL_ToSlideShow(THUMBNAIL_PLAY_CURRENT);
#endif //SUPPORT_FM_BUTTONS

    return KEY_NO_KEY;
}

//***************************************************************************
//  Function    :   _THUMBNAIL_ChangePageAction
//  Abstract    :   Call this function when changing the page.
//  Arguments   :   bAction: THUMBNAIL_NEXT_PAGE: Change to the next page.
//              :            THUMBNAIL_PREVIOUS_PAGE: Change to the previous page.
//  Return		:   KEY_NO_KEY: The key is processced.
//              :   INVALID_KEY: It is an invalid key.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
BYTE _THUMBNAIL_ChangePageAction(BYTE bAction)
{
    if (!_THUMBNAIL_CheckChangePageValid(bAction))
        return INVALID_KEY;

    if (__btPause)
        CC_KeyCommand(KEY_PLAY); //CoCo2.81, support pause in Thumbnail mode

    //_THUMBNAIL_UpdateHighlight(THUMBNAIL_UPDATE_HIGHLIGHT_CLEAR);

    //use _wThumbnailIndex to represent page No.
    //use _wThumbnailPlayIndex to represent max files.
#ifdef SUPPORT_FM_BUTTONS
    if (_bThumbnailSubMode == THUMBNAIL_SUBMODE_PROGRAM_LIST) //"Program List" mode    
    {
        _wThumbnailIndex = (WORD)_bProgramPageNo;
        _THUMBNAIL_ClearRegion(THUMBNAIL_CLEAR_PROGRAM_LIST_FRAME_REGION);
    }
    else
    {
        _wThumbnailIndex = (WORD)__bPageNO;
        _THUMBNAIL_ClearRegion(THUMBNAIL_CLEAR_GENERAL_MODE_FRAME_REGION);
    }

    if (bAction == THUMBNAIL_NEXT_PAGE)
    {
        _wThumbnailIndex++;
        _bTHUMBNAILTemp = _THUMBNAIL_GetButtonPosIndex(THUMBNAIL_BUTTON_PREVIOUS);
        if (_bTHUMBNAILTemp != THUMBNAIL_BUTTON_END)
        {
            if (__ThumbCtlBTNList[_bTHUMBNAILTemp].bStatus == THUMBNAIL_BUTTON_STATE_DISABLE)
            {
                _THUMBNAIL_UpdateButtonState(THUMBNAIL_BUTTON_PREVIOUS, THUMBNAIL_BUTTON_STATE_ENABLE, TRUE);
            }
        }
        
        if (((_wThumbnailIndex + 1) * _bThumbnailTotalNum[_bThumbnailSubMode]) >= _wThumbTotalFiles) //No "Next" page.            
        {
            _bTHUMBNAILTemp = _THUMBNAIL_GetButtonPosIndex(THUMBNAIL_BUTTON_NEXT);
            if (_bTHUMBNAILTemp != THUMBNAIL_BUTTON_END)
            {
                if ((__ThumbCtlBTNList[_bTHUMBNAILTemp].bStatus == THUMBNAIL_BUTTON_STATE_HIGHLIGHT) && (_bCursorType == THUMBNAIL_CURSOR_BUTTON))
                {
                    _THUMBNAIL_SearchValidButtonHighlight(THUMBNAIL_CURSOR_DIRECTION_RIGHT);
                }
                _THUMBNAIL_UpdateButtonState(THUMBNAIL_BUTTON_NEXT, THUMBNAIL_BUTTON_STATE_DISABLE, TRUE);
            }
        }
    }
    else if (bAction == THUMBNAIL_PREVIOUS_PAGE)
    {
        _wThumbnailIndex--;
        
        _bTHUMBNAILTemp = _THUMBNAIL_GetButtonPosIndex(THUMBNAIL_BUTTON_NEXT);
        if (_bTHUMBNAILTemp != THUMBNAIL_BUTTON_END)
        {
            if (__ThumbCtlBTNList[_bTHUMBNAILTemp].bStatus == THUMBNAIL_BUTTON_STATE_DISABLE)
            {
                //Add the judgement because in Program List, the page may have no thumbnails and will go to the
                //previos page. In such condition, it's wrong if we don't judge "next" action and just enable it.
                if (_bThumbnailSubMode == THUMBNAIL_SUBMODE_PROGRAM_LIST)   
                {
                    _bProgramPageNo--;
                    if (_THUMBNAIL_CheckChangePageValid(THUMBNAIL_NEXT_PAGE))
                        _THUMBNAIL_UpdateButtonState(THUMBNAIL_BUTTON_NEXT, THUMBNAIL_BUTTON_STATE_ENABLE, TRUE);
                }
                else
                    _THUMBNAIL_UpdateButtonState(THUMBNAIL_BUTTON_NEXT, THUMBNAIL_BUTTON_STATE_ENABLE, TRUE);
            }
        }

        if (_wThumbnailIndex == 0) //No last page
        {
            _bTHUMBNAILTemp = _THUMBNAIL_GetButtonPosIndex(THUMBNAIL_BUTTON_PREVIOUS);
            if (_bTHUMBNAILTemp != THUMBNAIL_BUTTON_END)
            {
                if ((__ThumbCtlBTNList[_bTHUMBNAILTemp].bStatus == THUMBNAIL_BUTTON_STATE_HIGHLIGHT) && (_bCursorType == THUMBNAIL_CURSOR_BUTTON))
                {
                    _THUMBNAIL_SearchValidButtonHighlight(THUMBNAIL_CURSOR_DIRECTION_RIGHT);
                }
                _THUMBNAIL_UpdateButtonState(THUMBNAIL_BUTTON_PREVIOUS, THUMBNAIL_BUTTON_STATE_DISABLE, TRUE);
            }
        }
    }

    _wThumbnailPlayIndex = _wThumbnailIndex * _bThumbnailTotalNum[_bThumbnailSubMode];

    //recover the page No.
    if (_bThumbnailSubMode == THUMBNAIL_SUBMODE_PROGRAM_LIST)   
        _bProgramPageNo = (BYTE)_wThumbnailIndex;
    else
        __bPageNO = (BYTE)_wThumbnailIndex;

	//update decoding mode
	_bThumbnailDecodeMode = THUMBNAIL_DECODE_PAGE;
#else
    //use _wThumbnailPlayIndex to represent max files.
#ifndef USE_PSFB_DRAW_THUMB_FRAME
    _THUMBNAIL_ClearRegion(THUMBNAIL_CLEAR_GENERAL_MODE_FRAME_REGION);
#endif

    if (bAction == THUMBNAIL_NEXT_PAGE)
    {
        __bPageNO++;
    }
    else if (bAction == THUMBNAIL_PREVIOUS_PAGE)
    {
        __bPageNO--;
    }

    _wThumbnailPlayIndex = __bPageNO * TOTAL_NUM_IN_PAGE;
#endif //SUPPORT_FM_BUTTONS
    
    //Prepare thumbnail decoding for Previous/Next page.
    _THUMBNAIL_ClearScreen();
    _THUMBNAIL_InitialStage();
    
    //update cursor
    _wThumbnailIndex = _wThumbnailPlayIndex;        
    
    //_THUMBNAIL_UpdateHighlight(THUMBNAIL_UPDATE_HIGHLIGHT_DRAW);
    _THUMBNAIL_DisplayPageInfo();
    
    return KEY_NO_KEY;
}

//***************************************************************************
//  Function    :   _THUMBNAIL_ToSlideShow
//  Abstract    :   This function will leave the thumbnail mode and go to slide show mode.
//  Arguments   :   THUMBNAIL_PLAY_START: Slide show from the first file of the folder.
//              :   THUMBNAIL_PLAY_CURRENT: Slide show form the current selected file.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
BYTE _THUMBNAIL_ToSlideShow(BYTE bType)
{
    CC_KeyCommand (KEY_STOP);

    switch (bType)
    {
    case THUMBNAIL_PLAY_START:
        __wPlayItem = _wThumbStartPlayItem+1; //from the first File.
        if (__btProgram)
        {
            __bProgramPlayingIndex = 0;
            __btPlayingProgram = TRUE;
        }
        break;
    case THUMBNAIL_PLAY_CURRENT:
        __wPlayItem = _wThumbStartPlayItem+_wThumbnailIndex + 1;
        break;
    default:
        break;
    }

    THUMBNAIL_Exit();

    //CoCo0.88, fix the bug about the one-line display is wrong because of KEY_ENTER
    _CC_MapKeyMessage(KEY_PLAY);

    return KEY_PLAY;
}

//***************************************************************************
//  Function    :   _THUMBNAIL_CheckPlayEnd
//  Abstract    :   Call this function to check if we've played the last thumbnail.
//  Arguments   :   none.
//  Return		:   TRUE: play end.
//              :   FALSE: You can go on playing the next thumbnail.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
BYTE _THUMBNAIL_CheckPlayEnd(void)
{
    if ((_wThumbnailPlayIndex + 1) <= _wThumbTotalFiles)            
        return FALSE;

    return TRUE;
}

//***************************************************************************
//  Function    :   _THUMBNAIL_CheckPagePlayEnd
//  Abstract    :   Call this function to check if we've played the last thumbnail
//              :   in this page.
//  Arguments   :   none.
//  Return		:   TRUE: play end.
//              :   FALSE: You can go on playing the next thumbnail.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
BYTE _THUMBNAIL_CheckPagePlayEnd(void)
{
#ifndef NO_PICTURECD

#ifdef SUPPORT_FM_BUTTONS
    if (_bThumbnailSubMode == THUMBNAIL_SUBMODE_PROGRAM_LIST) //"Program List" mode
        _bTHUMBNAILTemp = _bProgramPageNo;
    else //general mode
        _bTHUMBNAILTemp = __bPageNO;

    if (((_wThumbnailPlayIndex + 1) / _bThumbnailTotalNum[_bThumbnailSubMode]) > _bTHUMBNAILTemp)
        return TRUE;
#else
    if (((_wThumbnailPlayIndex + 1) / TOTAL_NUM_IN_PAGE) > __bPageNO)
        return TRUE;
#endif

    return FALSE;
#endif
}

//***************************************************************************
//  Function    :   _THUMBNAIL_CheckChangePageValid
//  Abstract    :   Call this function to see if the action of changing page is
//              :   valid or not.
//  Arguments   :   bAction: THUMBNAIL_NEXT_PAGE: Change to the next page.
//              :            THUMBNAIL_PREVIOUS_PAGE: Change to the previous page.
//  Return		:   TRUE: It's valid.
//              :   FALSE: It's invalid.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
BYTE _THUMBNAIL_CheckChangePageValid(BYTE bAction)
{
#ifdef SUPPORT_FM_BUTTONS
    if (_bThumbnailSubMode == THUMBNAIL_SUBMODE_PROGRAM_LIST) //"Program List" mode
        _bTHUMBNAILTemp = _bProgramPageNo;
    else //general mode
        _bTHUMBNAILTemp = __bPageNO;

    if (bAction == THUMBNAIL_NEXT_PAGE)
    {
        if (((_bTHUMBNAILTemp + 1) * _bThumbnailTotalNum[_bThumbnailSubMode]) < _wThumbTotalFiles) //has "Next" page
            return TRUE;
    }
    else if (bAction == THUMBNAIL_PREVIOUS_PAGE)
    {
        if (_bTHUMBNAILTemp > 0)
            return TRUE;        
    }
#else
    if (bAction == THUMBNAIL_NEXT_PAGE)
    {
        if (((__bPageNO + 1) * TOTAL_NUM_IN_PAGE) < _wThumbTotalFiles) //has "Next" page
            return TRUE;
    }
    else if (

⌨️ 快捷键说明

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