📄 thumb.c
字号:
//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 + -