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

📄 flmenu.c

📁 MTK 1389E SOURCE CODE
💻 C
📖 第 1 页 / 共 5 页
字号:
  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 + -