📄 flmenu.c
字号:
return;
}
#ifdef DATA_DISC_SUPPORT_PLAY_LIST
/**
* Check the return value of command "FLCMD_ADD_TO_PL".
*/
void vFlMnRetAddToPl(void) large
{
WORD wBlkPtr;
BYTE bRCode;
wBlkPtr = FL_CMD_BLK_SA + 1; // - shift to the parameter block
bRCode = bSharedInfo(wBlkPtr ++);
vFlCmdDone();
if (bRCode == FLRET_S_OK)
{
// - successful
// _wFlMnPlLen = bSharedInfo(wBlkPtr ++);
vOsdPosShow(OSD_POS_FS_INFO_BAR, OSD_MSG_FL_ADD_TO_PLAYLIST, OSD_TIMEOUT_SHORT);
}
else
{
// - error occurs
// _wFlMnPlLen = 0xFF;
}
return;
}
#endif
/**
* Display a page with the prepared items. Mark the hovered item by hili if
* necessary.
*
* DES:
* 1. clear the previous display
* 2. redraw the slider
* 3. draw the full path
* 4. draw each items
*
* NOTE: demo how to get the item info when the command "FLCMD_GET_ITEMS"
* suceeds.
*/
static void vFlMnDrawPage(void) large
{
BYTE bItemIdx;
#ifdef CDG_SUPPORT
// 20050608, PL00001079, if CD-G is playing, don't redraw page
if((bSharedInfo(SI_CDG_DISC) == SV_ON) && (bSharedInfo(SI_PBC_STATE) != SV_STOP) && (bSharedInfo(SI_PBC_STATE) != SV_PBC_INIT))
return ;
#endif
// - clear the page first
vFlMnClrPage();
// - redraw the slider
_wStartX = FS_SLIDER_X;
_wEndX = FS_SLIDER_X + FS_SLIDER_W;
_wStartY = FS_SLIDER_Y;
_wEndY = FS_SLIDER_Y + FS_SLIDER_H;
vRectangle(FL_MENU_WB, 0, 0, 1, 0);
#ifdef SHOW_FS_SLIDER
vDrawSlider(wFlGetItemIdx(_bFlMnCurItemIdx), _wFlMnListLen);
#endif
// - draw the full path name
if (!_fgFlIsAutoPlay)
{
if (bSharedInfo(FL_LIST_FIELD(_bFlMnListId)) == FLPARM_LIST_FOLDER)
vDrawFolderName(TRUE);
else
vDrawFolderName(FALSE);
}
_bFlMnMemLock = FALSE;
//vFlClRls();
// - draw items
vSetMsgCol4(FL_MENU_WB, 0, 0, 2, 3);
for (bItemIdx = 0;
(bItemIdx < _bFlMnItemNs) && (bItemIdx < FLMN_PAGE_SZ);
bItemIdx ++)
{
vFlMnDrawItem(bItemIdx);
}
vSetMsgCol4(FL_MENU_WB, 0, 0, 3, 2);
return;
}
/**
* Redraw the display of the object "file list menu".
*/
#ifdef WB_ALLOC_MIN
void vFlMnRecover(void) large
{
// - enable the white boards used by this object
vCreateWBEx(FL_MENU_WB);
vFlMnDrawInfoPanel(_bFlIpState);
vFlMnDrawPage();
vFlMnHiliItem(_bFlMnCurItemIdx, TRUE);
vFlIpShowInfo(IP_INFO_FILE_INDEX, 0, wFlGetItemIdx(_bFlMnCurItemIdx));
#if 1//def JPG_INFO
vOsdPosClear(OSD_POS_FS_INFO_BAR);
#endif
#ifdef JPG_PREVIEW_SUPPORT
if (_bFlMnItemType == FTYPE_STILL)
{
_bPreview = PREVIEW_STATE_START;
}
#endif
vFlUpdateVfd(TRUE);
#ifdef CDG_SUPPORT
if(bSharedInfo(SI_CDG_DISC) == SV_ON)
{
if(bSharedInfo(SI_PBC_STATE) == SV_STOP) // != SV_PLAY //windy
{
// tmp solution, if logo is not changed, not show it again.
if (_bIRKey0 != IR_SETUP)
{
#ifdef SUPPORT_CAPTURE_LOGO
vPlayerShowLogo(ISO_NOMAL_LOGO, ISO_LOGO_COLOR);
#else
vPlayerShowLogo(ISO_STOP_LOGO, ISO_LOGO_COLOR);
#endif
}
vEnableWB(FL_INFO_WB);
vEnableWB(FL_MENU_WB);
}
// 20050527, need to enable FL_MENU_WB to show repeat type..
else
{
vEnableWB(FL_MENU_WB);
vClearWB(FL_MENU_WB);
}
}
#endif
return;
}
#else
void vFlMnRecover(void) large
{
// - disable all white board used outside
//vHideHL(FSMENU_HOVER_HILIT);
//vOsdShowWb(OSD_WB_FULL_SCR);
// - enable the white boards used by this object
vEnableWB(FL_INFO_WB); // - for dynamic info
vEnableWB(FL_MENU_WB); // - for menu
#if 1//def JPG_INFO
vOsdPosClear(OSD_POS_FS_INFO_BAR);
#endif
#ifdef JPG_PREVIEW_SUPPORT
if (_bFlMnItemType == FTYPE_STILL)
{
_bPreview = PREVIEW_STATE_START;
}
#endif
vFlUpdateVfd(TRUE);
return;
}
#endif
/**
* Clear all item on the page.
*/
void vFlMnClrPage(void) large
{
BYTE bItemIdx;
_wStartX = FS_SLIDER_X;
_wEndX = FS_SLIDER_X + FS_SLIDER_W;
_wStartY = FS_SLIDER_Y;
_wEndY = FS_SLIDER_Y + (WORD) FS_SLIDER_H;
vRectangle(FL_MENU_WB, 0, 0, 1, 0);
// - clear OSD message
for (bItemIdx = 0; bItemIdx < FLMN_PAGE_SZ; bItemIdx ++)
{
vOsdClearPosXY(_prFlMnItemTbl[bItemIdx].wLeft,
_prFlMnItemTbl[bItemIdx].wTop,
FL_MENU_WB,
FLMN_ITEM_W, FLMN_ITEM_H);
}
return;
}
static WORD wFlMnGetListBaseDir(BYTE bListId) large
{
WORD wPos, wBaseDir;
if (bListId > 4)
return 0xFFFF;
wPos = FL_LIST_FIELD(bListId);
bLoByte(wBaseDir) = bSharedInfo(wPos + 2);
bHiByte(wBaseDir) = bSharedInfo(wPos + 3);
return wBaseDir;
}
#if 0
static BOOL fgFlMnIsCurrPlay(BYTE bItemIdx) large
{
if ((_wFlCurAdoDir == 0xFFFF) || (_wFlCurAdoIdx == 0xFFFF))
return FALSE;
if ((_wFlCurAdoDir == wFlMnGetListBaseDir(_bFlMnListId)) &&
(_wFlCurAdoIdx == wFlGetItemIdx(bItemIdx)))
return TRUE;
return FALSE;
}
#endif
/**
* Return the icon index of the given type.
*/
BYTE bFlMnGetIconIdx(BYTE bFType) large
{
switch (bFType)
{
case FTYPE_MP3:
case FTYPE_MP2:
case FTYPE_MP1:
return BMP_MP3;
case FTYPE_JPG:
return BMP_PIC;
case FTYPE_WMA:
return BMP_WMA;
case FTYPE_DIR:
return BMP_FOLDER;
case FTYPE_MPG:
case FTYPE_DAT:
case FTYPE_VOB:
case FTYPE_AVI:
return BMP_MPG;
case FTYPE_CDA:
case FTYPE_UNKNOWN:
default:
return BMP_INVALID;
}
}
static BOOL fgFlMnIsCurrPlayItem(BYTE bIdx) large
{
if ((_wFlCurAdoDir == wFlMnGetListBaseDir(_bFlMnListId)) &&
(_wFlCurAdoIdx == wFlGetItemIdx(bIdx)))
return TRUE;
return FALSE;
}
static void vFlMnHiliOn(BYTE bItemIdx, BYTE bHiliIdx, BYTE bColor1, BYTE bColor2) large
{
_wStartX = _prFlMnItemTbl[bItemIdx].wLeft + FL_ICON_W;
_wEndX = _prFlMnItemTbl[bItemIdx].wRight;
_wStartY = _prFlMnItemTbl[bItemIdx].wTop;
_wEndY = _prFlMnItemTbl[bItemIdx].wBottom;
switch (bHiliIdx)
{
case FLMN_HILI_SEL:
// if (_bFlMnHiliPos1 != 0x0F)
// return;
_bFlMnHiliClrSrc1 = bColor1;
_bFlMnHiliClrDes1 = bColor2;
_bFlMnHiliPos1 = bItemIdx;
break;
case FLMN_HILI_PLAY:
// if (_bFlMnHiliPos2 != 0x0F)
// return;
_bFlMnHiliClrSrc2 = bColor1;
_bFlMnHiliClrDes2 = bColor2;
_bFlMnHiliPos2 = bItemIdx;
break;
}
#ifdef CDG_SUPPORT
// 20050527, if CDG changed track, don't show hilight again
if (bSharedInfo(SI_CDG_DISC) == SV_ON && bSharedInfo(SI_PBC_STATE) != SV_STOP)
return ;
#endif
vChgColRep(FL_MENU_WB, bColor1, bColor2);
}
static void vFlMnHiliOff(BYTE bHiliIdx) large
{
switch (bHiliIdx)
{
case FLMN_HILI_SEL:
if (_bFlMnHiliPos1 == 0x0F)
return;
_wStartX = _prFlMnItemTbl[_bFlMnHiliPos1].wLeft + FL_ICON_W;
_wEndX = _prFlMnItemTbl[_bFlMnHiliPos1].wRight;
_wStartY = _prFlMnItemTbl[_bFlMnHiliPos1].wTop;
_wEndY = _prFlMnItemTbl[_bFlMnHiliPos1].wBottom;
//vChgColRep(FL_MENU_WB, _bFlMnHiliClrDes1, _bFlMnHiliClrSrc1);
vChgColRep(FL_MENU_WB, _bFlMnHiliClrDes1, FLMN_CLR_BG);
_bFlMnHiliClrSrc1 = 0x0F;
_bFlMnHiliClrDes1 = 0x0F;
_bFlMnHiliPos1 = 0x0F;
break;
case FLMN_HILI_PLAY:
if (_bFlMnHiliPos2 == 0x0F)
return;
_wStartX = _prFlMnItemTbl[_bFlMnHiliPos2].wLeft + FL_ICON_W;
_wEndX = _prFlMnItemTbl[_bFlMnHiliPos2].wRight;
_wStartY = _prFlMnItemTbl[_bFlMnHiliPos2].wTop;
_wEndY = _prFlMnItemTbl[_bFlMnHiliPos2].wBottom;
//vChgColRep(FL_MENU_WB, _bFlMnHiliClrDes2, _bFlMnHiliClrSrc2);
vChgColRep(FL_MENU_WB, _bFlMnHiliClrDes2, FLMN_CLR_BG);
_bFlMnHiliClrSrc2 = 0x0F;
_bFlMnHiliClrDes2 = 0x0F;
_bFlMnHiliPos2 = 0x0F;
break;
}
}
/**
* The turn on/off the given item.
*
* DES: Use change color to implement this function.
*/
static void vFlMnHiliItem(BYTE bItemIdx, BOOL fgOn) large
{
WORD wYOfst, wXOfst;
BOOL fgIsCurrPlay;
if ((bItemIdx >= _bFlMnItemNs) || (bItemIdx >= FLMN_PAGE_SZ))
return;
_wStartX = _prFlMnItemTbl[bItemIdx].wLeft + FL_ICON_W;
_wEndX = _prFlMnItemTbl[bItemIdx].wRight;
_wStartY = _prFlMnItemTbl[bItemIdx].wTop;
_wEndY = _prFlMnItemTbl[bItemIdx].wBottom;
fgIsCurrPlay = fgFlMnIsCurrPlayItem(bItemIdx);
if (fgOn)
{
#ifdef CDG_SUPPORT
// 20050505, PL00000334, if CD-G is playing, don't display hilight
if((bSharedInfo(SI_CDG_DISC) == SV_ON) && (bSharedInfo(SI_PBC_STATE) != SV_STOP) && (bSharedInfo(SI_PBC_STATE) != SV_PBC_INIT))
return ;
#endif
if (fgIsCurrPlay)
{
//vFlMnHiliOff(FLMN_HILI_PLAY);
vFlMnHiliOff(FLMN_HILI_PLAY);
vFlMnHiliOn(bItemIdx, FLMN_HILI_SEL, FLMN_CLR_BG, FLMN_CLR_SEL);
//vFlMnHiliOn(bItemIdx, FLMN_HILI_PLAY, FLMN_CLR_BG, FLMN_CLR_PLAY);
}
else
{
vFlMnHiliOn(bItemIdx, FLMN_HILI_SEL, FLMN_CLR_BG, FLMN_CLR_SEL);
}
}
else
{
if (fgIsCurrPlay)
{
vFlMnHiliOff(FLMN_HILI_PLAY);//for VBR issue
vFlMnHiliOn(bItemIdx, FLMN_HILI_PLAY, FLMN_CLR_SEL, FLMN_CLR_PLAY);
}
else
{
vFlMnHiliOff(FLMN_HILI_SEL);
}
}
return;
}
/**
* Perform the operation to the given item when the hover cursor leave it.
*/
static BOOL fgFlMnLeavItem(BYTE bItemIdx) large
{
if ((bItemIdx >= _bFlMnItemNs) || (bItemIdx >= FLMN_PAGE_SZ))
return FALSE;
vFlMnHiliItem(bItemIdx, FALSE);
#ifdef ENABLE_ID3
if ((_bFlMnItemType == FTYPE_AUDIO) && fgFlMnIsCurrPlayItem(bItemIdx))
{
_wStartX = (WORD) FLMN_PREVIEW_X - FSMENU_BASIC_WB_LEFT;
_wStartY = (WORD) FLMN_PREVIEW_Y - FSMENU_BASIC_WB_TOP + 15;
vOsdClearPos(FL_MENU_WB, 200, 180);
}
#endif
#ifdef SHOW_FS_SLIDER
vMoveSlider(wFlGetItemIdx(bItemIdx), _wFlMnListLen, FALSE);
#endif
#ifdef JPG_PREVIEW_SUPPORT
// - terminate the JPEG preview timing
_bPreview = PREVIEW_STATE_IDLE;
#endif
return TRUE;
}
/**
* Perform the operation to the given item when the hover cursor enter it.
*/
static BOOL fgFlMnEntItem(BYTE bItemIdx) large
{
WORD wNum;
if ((bItemIdx >= _bFlMnItemNs) || (bItemIdx >= FLMN_PAGE_SZ))
return FALSE;
wNum = wFlGetItemIdx(bItemIdx);
vFlMnHiliItem(bItemIdx, TRUE);
#ifdef SHOW_FS_SLIDER
vMoveSlider(wNum, _wFlMnListLen, TRUE);
#endif
_bFlMnItemType = bFlGetItemType(bItemIdx);
vFlIpShowInfo(IP_INFO_FILE_INDEX, 0, wNum);
#ifdef JPG_PREVIEW_SUPPORT
// - restart the JPEG preview timing if we enter a JPEG file
if (_bFlMnItemType == FTYPE_STILL)
{
_bPreview = PREVIEW_STATE_START;
}
#endif
// - move current item to the given one
_bFlMnCurItemIdx = bItemIdx;
#ifdef ENABLE_ID3
if ((_bFlMnItemType == FTYPE_AUDIO) && fgFlMnIsCurrPlayItem(_bFlMnCurItemIdx))
{
vFlGetId3Info();
}
#endif
vFlUpdateVfd(FALSE);
return TRUE;
}
/**
* Read in the list info from proper shared info group.
*/
void vFlMnRdListInfo(BYTE bId) large
{
BYTE bType, bIncItemType;
WORD wBsDir, wPos;
if (bId >= FL_MAX_LIST_NS)
return;
wPos = FL_LIST_FIELD(bId);
bType = bSharedInfo(wPos);
bIncItemType = bSharedInfo(wPos + 1);
bLoByte(wBsDir) = bSharedInfo(wPos + 2);
bHiByte(wBsDir) = bSharedInfo(wPos + 3);
bLoByte(_wFlMnListLen) = bSharedInfo(wPos + 4);
bHiByte(_wFlMnListLen) = bSharedInfo(wPos + 5);
return;
}
/**
* Leave the current dir to its parent.
*/
// 20040809 by RC. Roll back to version 36 due to issue CR00000187
static BOOL fgFlMnLeavDir(void) large
{
WORD wPos, wBsDir;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -