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

📄 fllrc.c

📁 手机8032的完整代码。吐血推荐。小做改动就可以生产。
💻 C
📖 第 1 页 / 共 5 页
字号:
  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 + -