📄 fllrc.c
字号:
BYTE pbStr[4];
BOOL fgIsPrnt = TRUE;
wPos = FL_ITEM_FIELD(bItemIdx);
// - collect misc info
bFType = bSharedInfo(wPos + 5);
bLoByte(wIdx) = bSharedInfo(wPos + 6);
bHiByte(wIdx) = bSharedInfo(wPos + 7);
if (bFType == FTYPE_DIR)
{
bLoByte(wDirIdx) = bSharedInfo(wPos + 12);
bHiByte(wDirIdx) = bSharedInfo(wPos + 13);
}
// - collect name info
dwAddr = dwMakeDWord(wPos);
bStrLen = bSharedInfo(wPos + 4);
// - preprocess the name string
if (!((bStrLen == 1) && (bReadDRAMTbl(bLoByte(wHiWord(dwAddr)), wLoWord(dwAddr)) == 0x01)))
{
fgIsPrnt = FALSE;
vFlLrcPProcName(&dwAddr, &bStrLen);
}
if(bItemIdx == _bFlMnCurItemIdx)
{
vSetMsgCol4(MP3LRC_MENU_WB, 3, 3, 3, 2);
}
else
{
vSetMsgCol4(MP3LRC_MENU_WB, 5, 5, 5, 1);
}
_wStartX = _prFlMp3LrcMnItemTbl[bItemIdx].wLeft;
_wStartY = _prFlMp3LrcMnItemTbl[bItemIdx].wTop;
if (fgIsPrnt)
{
// - special case " .." as the string of parent dir
pbStr[0] = 3;
pbStr[1] = ' ';
pbStr[2] = pbStr[3] = '.';
vOsdShowStr(MP3LRC_MENU_WB, pbStr);
}
else
{
//vSetFsCodePage(0);
#ifdef SUPPORT_KOREAN_FILE_NAME
vPasteMsgAddr(MP3LRC_MENU_WB, bStrLen, dwAddr, bSharedInfo(SI_JOLIET_LEVEL));
#else
vPasteMsgAddr(MP3LRC_MENU_WB, bStrLen, dwAddr);
#endif
//vSetFsCodePage(CODE_PAGE_MENU);
}
if(bItemIdx == _bFlMnCurItemIdx)
{
_wStartX = _prFlMp3LrcMnItemTbl[bItemIdx].wLeft;
_wEndX = _prFlMp3LrcMnItemTbl[bItemIdx].wRight;
_wStartY = _prFlMp3LrcMnItemTbl[bItemIdx].wTop;
_wEndY = _prFlMp3LrcMnItemTbl[bItemIdx].wBottom;
vChgColRep(MP3LRC_MENU_WB, 5, 3);
}
return;
}
/**
* 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 vFlLrcDrawPage(void) large
{
BYTE bItemIdx;
// - clear the page first
vFlLrcClrPage();
vLrcDrawFolderName(bGetStackTop());
_bFlMnMemLock = FALSE;
//vFlClRls();
// - draw items
for (bItemIdx = 0;
(bItemIdx < _bFlMnItemNs) && (bItemIdx < FLMP3LRCMN_ITEM_N);
bItemIdx ++)
{
vFlLrcDrawItem(bItemIdx);
}
return;
}
/**
* Clear all item on the page.
*/
static void vFlLrcClrPage(void) large
{
BYTE bItemIdx;
for (bItemIdx = 0; bItemIdx < FLMP3LRCMN_ITEM_N; bItemIdx ++)
{
_wStartX = _prFlMp3LrcMnItemTbl[bItemIdx].wLeft;
_wEndX = _prFlMp3LrcMnItemTbl[bItemIdx].wRight - 1;
_wStartY = _prFlMp3LrcMnItemTbl[bItemIdx].wTop;
_wEndY = _prFlMp3LrcMnItemTbl[bItemIdx].wBottom - 1;
vRectangle(MP3LRC_MENU_WB, 0, 0, TRUE, 5);
}
return;
}
static void vFlLrcDrawPLItem(BYTE bItemIdx) large
{
DWRD dwAddr,dwAddrTemp;
WORD wPos;
BYTE bFType, bStrLen,bStrLenTemp,IdxTemp;
WORD wIdx, wDirIdx;
BYTE pbStr[4];
BOOL fgIsPrnt = TRUE;
wPos = FL_ITEM_FIELD(bItemIdx);
// - collect misc info
bFType = bSharedInfo(wPos + 5);
bLoByte(wIdx) = bSharedInfo(wPos + 6);
bHiByte(wIdx) = bSharedInfo(wPos + 7);
if (bFType == FTYPE_DIR)
{
bLoByte(wDirIdx) = bSharedInfo(wPos + 12);
bHiByte(wDirIdx) = bSharedInfo(wPos + 13);
}
// - collect name info
dwAddr = dwMakeDWord(wPos);
bStrLen = bSharedInfo(wPos + 4);
dwAddrTemp = dwAddr;
bStrLenTemp = bStrLen;
// dwAddrTemp += (DWRD)bStrLenTemp;
// - preprocess the name string
if (!((bStrLen == 1) && (bReadDRAMTbl(bLoByte(wHiWord(dwAddr)), wLoWord(dwAddr)) == 0x01)))
{
fgIsPrnt = FALSE;
vFlLrcPProcName(&dwAddr, &bStrLen);
}
for (IdxTemp = 0; IdxTemp < bStrLenTemp; IdxTemp++)
{
dwAddrTemp++;
}
// - paste the message of file name
_wStartX = _prFlMp3LrcMnListTbl[bItemIdx].wLeft;
_wStartY = _prFlMp3LrcMnListTbl[bItemIdx].wTop;
#ifdef MP3_LYRICS_PL_15_SONGS
if(bItemIdx == _bFlMnCurItemIdx && _fgIsInPlayList)
{
vSetMsgCol4(MP3LRC_MENU_WB, 3, 3, 3, 2);
}
else
#endif
{
vSetMsgCol4(MP3LRC_MENU_WB, 5, 5, 5, 1);
}
//vSetFsCodePage(0);
#ifdef SUPPORT_KOREAN_FILE_NAME
vPasteMsgAddr(MP3LRC_MENU_WB, bStrLen, dwAddr, bSharedInfo(SI_JOLIET_LEVEL));
#else
vPasteMsgAddr(MP3LRC_MENU_WB, bStrLen, dwAddr);
#endif
//vSetFsCodePage(CODE_PAGE_MENU);
#ifdef MP3_LYRICS_PL_15_SONGS
if(_fgIsInPlayList)
{
if(bItemIdx == _bFlMnCurItemIdx)
{
_wStartX = _prFlMp3LrcMnListTbl[bItemIdx].wLeft;
_wEndX = _prFlMp3LrcMnListTbl[bItemIdx].wRight;
_wStartY = _prFlMp3LrcMnListTbl[bItemIdx].wTop;
_wEndY = _prFlMp3LrcMnListTbl[bItemIdx].wBottom;
vChgColRep(MP3LRC_MENU_WB, 5, 3);
}
}
#endif
}
static void vFlLrcDrawPlList(void) large
{
BYTE bItemIdx;
// - clear the playlist part
vFlLrcClrPlList();
_bFlMnMemLock = FALSE;
for (bItemIdx = 0; (bItemIdx < _bFlMnItemNs) && (bItemIdx < FLMP3LRCMN_ITEM_N); bItemIdx++)
{
vFlLrcDrawPLItem(bItemIdx);
}
}
static void vFlLrcClrPlList(void) large
{
BYTE bItemIdx;
for (bItemIdx = 0; bItemIdx < FLMP3LRCMN_ITEM_N; bItemIdx ++)
{
_wStartX = _prFlMp3LrcMnListTbl[bItemIdx].wLeft;
_wEndX = _prFlMp3LrcMnListTbl[bItemIdx].wRight - 1;
_wStartY = _prFlMp3LrcMnListTbl[bItemIdx].wTop;
_wEndY = _prFlMp3LrcMnListTbl[bItemIdx].wBottom - 1;
vRectangle(MP3LRC_MENU_WB, 0, 0, TRUE, 5);
}
}
static BOOL fgFlMp3LrcRedrawPlList(void) large
{
if (!fgFlClLock(FL_CMDPATH_REDRAW_PLAYLIST))
{
return TRUE;
}
fgFlCmdGetItems(_bFlPlListId, 0);
}
static void vFlLrcHiliOnIdx(BYTE bItemIdx) large
{
#ifdef MP3_LYRICS_PL_15_SONGS
if(_fgIsInPlayList)
{
_wStartX = _prFlMp3LrcMnListTbl[bItemIdx].wLeft;
_wEndX = _prFlMp3LrcMnListTbl[bItemIdx].wRight;
_wStartY = _prFlMp3LrcMnListTbl[bItemIdx].wTop;
_wEndY = _prFlMp3LrcMnListTbl[bItemIdx].wBottom - 1;
vChgColRep(MP3LRC_MENU_WB, 5, 3);
vChgColRep(MP3LRC_MENU_WB, 1, 2);
}
else
#endif
{
_wStartX = _prFlMp3LrcMnItemTbl[bItemIdx].wLeft;
_wEndX = _prFlMp3LrcMnItemTbl[bItemIdx].wRight;
_wStartY = _prFlMp3LrcMnItemTbl[bItemIdx].wTop;
_wEndY = _prFlMp3LrcMnItemTbl[bItemIdx].wBottom - 1;
vChgColRep(MP3LRC_MENU_WB, 5, 3);
vChgColRep(MP3LRC_MENU_WB, 1, 2);
}
}
static void vFlLrcHiliOffIdx(BYTE bItemIdx) large
{
#ifdef MP3_LYRICS_PL_15_SONGS
if(_fgIsInPlayList)
{
_wStartX = _prFlMp3LrcMnListTbl[bItemIdx].wLeft;
_wEndX = _prFlMp3LrcMnListTbl[bItemIdx].wRight;
_wStartY = _prFlMp3LrcMnListTbl[bItemIdx].wTop;
_wEndY = _prFlMp3LrcMnListTbl[bItemIdx].wBottom - 1;
vChgColRep(MP3LRC_MENU_WB, 3, 5);
vChgColRep(MP3LRC_MENU_WB, 2, 1);
}
else
#endif
{
_wStartX = _prFlMp3LrcMnItemTbl[bItemIdx].wLeft;
_wEndX = _prFlMp3LrcMnItemTbl[bItemIdx].wRight;
_wStartY = _prFlMp3LrcMnItemTbl[bItemIdx].wTop;
_wEndY = _prFlMp3LrcMnItemTbl[bItemIdx].wBottom - 1;
vChgColRep(MP3LRC_MENU_WB, 3, 5);
vChgColRep(MP3LRC_MENU_WB, 2, 1);
}
}
static void vFlMp3LrcDrawInitPage(void) large
{
BYTE bItemIdx;
vOsdPasteBmpXY(0, 0, MP3LRC_MENU_WB, BMP_LRCMENU);
_wStartX = MP3_LRC_MENU_WIDTH - FLMP3LRCMN_ITEM_W - FLMP3LRCMN_ITEM_L;
_wStartY = (FLMP3LRCMN_HEAD_H - FLMP3LRCMN_ITEM_H) / 2;
vSetMsgCol4(MP3LRC_MENU_WB, 6, 6, 6, 1);
vOsdMsgPaste(MP3LRC_MENU_WB, OSD_MSG_CHOSEN/*OSD_MSG_CHOSEN*/);
}
#ifdef MP3_LYRICS_SHOW_INTRO_PANEL
static void vFlLrcDrawMp3Intro(void) large
{
vOsdPasteBmpXY(0, 0, MP3LRC_INTRO_WB, BMP_LRCINFO);
}
#endif
/**
* Redraw the display of the object "file list menu".
*/
void vFlLrcRecover(void) large
{
if (_wFlMnListLen)
{
if (_fgIsMp3LrcMnOn)
{
vOsdSetSt(OSD_ST_BURST);
vCreateWBEx(MP3LRC_MENU_WB);
// vCreateWBEx(MP3LRC_INTRO_WB);
vEnableWB(MP3LRC_MENU_WB);
vEnableWB(MP3LRC_INTRO_WB);
vOsdSetSt(OSD_ST_NML);
vI2CDelay2us(250);
vI2CDelay2us(250);
vFlMp3LrcDrawInitPage();
vFlLrcDrawPage();
vFlLrcHiliItem(_bFlMnCurItemIdx, TRUE);
while (bSharedInfo(SI_CMD_CNT));
vI2CDelay2us(250);
vI2CDelay2us(250);
if(_bFlMnPLNs > 0)
{
_fgFlRedrawPlPlay = FALSE;
fgFlMp3LrcRedrawPlList();
}
#ifdef MP3_LYRICS_SHOW_INTRO_PANEL
// Modified by Hiker Hauk on 20071018 for CR(PL00108572)
if ((bSharedInfo(SI_MP3_MOD) == SV_STOP) && ((bSharedInfo(SI_FS_PLLISTNS) == 0)))
{
vFlLrcDrawMp3Intro();
}
#endif
}
else
{
vOsdSetSt(OSD_ST_BURST);
vCreateWBEx(WB_NORMAL_HEAD1);
vEnableWB(WB_NORMAL_HEAD1);
vCreateWBEx(WB_NORMAL_HEAD2);
vEnableWB(WB_NORMAL_HEAD2);
//vCreateWBEx(MP3LRC_INTRO_WB);
if (bSharedInfo(SI_MP3_MOD) == SV_STOP)
{
vOsdPosClear(OSD_POS_TIME_RIGHT);
}
vEnableWB(MP3LRC_INTRO_WB);
vOsdSetSt(OSD_ST_NML);
}
vFlUpdateVfd(TRUE);
}
else
{
}
return;
}
////////////////////////////////////////////////////////////////////////////////
//
// Utility Function
//
static BOOL fgFlLrcIsCurrPlayItem(BYTE bIdx) large
{
if ((_wFlCurAdoDir == wFlMnGetListBaseDir(_bFlMnListId)) &&
(_wFlCurAdoIdx == wFlGetItemIdx(bIdx))&&
// (_bFlCurAdoFileType == bSharedInfo(FL_LIST_FIELD(_bFlMnListId)))&&
(_bFlMnListType == _bFlCurAdoListType))//061208 xinzhen add for CQ(PL00103667)
return TRUE;
return FALSE;
}
/**
* The turn on/off the given item.
*
* DES: Use change color to implement this function.
*/
static void vFlLrcHiliItem(BYTE bItemIdx, BOOL fgOn) large
{
WORD wYOfst, wXOfst;
BOOL fgIsCurrPlay;
if ((bItemIdx >= _bFlMnItemNs) || (bItemIdx >= FLMP3LRCMN_ITEM_N))
return;
fgIsCurrPlay = fgFlLrcIsCurrPlayItem(bItemIdx);
if (fgOn)
{
vFlLrcHiliOnIdx(bItemIdx);
}
else
{
vFlLrcHiliOffIdx(bItemIdx);
}
return;
}
/**
* Perform the operation to the given item when the hover cursor leave it.
*/
static BOOL fgFlLrcLeavItem(BYTE bItemIdx) large
{
if ((bItemIdx >= _bFlMnItemNs) || (bItemIdx >= FLMP3LRCMN_ITEM_N))
return FALSE;
vFlLrcHiliItem(bItemIdx, FALSE);
// - terminate the JPEG preview timing
//_bPreview = PREVIEW_STATE_IDLE;
return TRUE;
}
/**
* Perform the operation to the given item when the hover cursor enter it.
*/
static BOOL fgFlLrcEntItem(BYTE bItemIdx) large
{
WORD wNum;
if ((bItemIdx >= _bFlMnItemNs) || (bItemIdx >= FLMP3LRCMN_ITEM_N))
return FALSE;
wNum = wFlGetItemIdx(bItemIdx);
vFlLrcHiliItem(bItemIdx, TRUE);
_bFlMnItemType = bFlGetItemType(bItemIdx);
/*
// - restart the JPEG preview timing if we enter a JPEG file
if (_bFlMnItemType == FTYPE_STILL)
{
_bPreview = PREVIEW_STATE_START;
}
*/
#ifdef FSMENU_WITH_FILE_INFO
else if (_bFlMnItemType == FTYPE_AV)
{
if (bSharedInfo(SI_MP3_STT) != MP3STT_PB_STRT)
{
vSetSharedInfo(SI_DDISC_FILE_INFO_MODE, SV_FI_GET_START);
vFlCmdQueryItem(_bFlMnListId, wFlGetItemIdx(bItemIdx));
}
}
#endif
// - move current item to the given one
_bFlMnCurItemIdx = bItemIdx;
vFlUpdateVfd(FALSE);
return TRUE;
}
/**
* Leave the current dir to its parent.
*/
static BOOL fgFlLrcLeavDir(void) large
{
BYTE bICfg;
WORD wPos, wBsDir;
// Prevent doing fgFlLrcEntDir() before other command returns.
if (fgFlClIsLock())
{
return FALSE;
}
// - check current dir
wPos = FL_LIST_FIELD(_bFlMnListId);
bICfg = bSharedInfo(wPos + 1);
bLoByte(wBsDir) = bSharedInfo(wPos + 2);
bHiByte(wBsDir) = bSharedInfo(wPos + 3);
if (!wBsDir)
return FALSE;
if (fgFlClLock(FL_CMDPATH_DIR_UP_2))
{
LRC_DBGLogS("fgPopStack");
if (fgPopStack(&_wBaseDir, &_wCurrItem))
{
fgFlLrcLeavItem(_bFlMnCurItemIdx); // - leave current item
vFlCmdSet(_bFlMnListId, FLPARM_LIST_FOLDER, 0,
_wBaseDir, FLPARM_FF_DIR | FLPARM_FF_MP3, FLPARM_SO_GDIR);
}
else
{
fgFlLrcLeavItem(_bFlMnCurItemIdx); // panwei modify
vFlCmdSet(_bFlMnListId, FLPARM_LIST_FOLDER, 0,
0, FLPARM_FF_DIR | FLPARM_FF_MP3, FLPARM_SO_GDIR);
//vFlClRls(); // jiaqi modify to unlock if pop failed
}
}
return TRUE;
}
/**
* Enter the dir given by item index.
*/
static BOOL fgFlLrcEntDir(BYTE bItemIdx, BOOL fgMoveUp) large
{
WORD wPos, wBsDir, wIdx;
BYTE bFType;
if (bItemIdx >= FL_MIN(_bFlMnItemNs, FLMP3LRCMN_ITEM_N))
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -