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

📄 flmenu.c

📁 MTK1389 SOURCE CODE
💻 C
📖 第 1 页 / 共 5 页
字号:
    // - 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;

  // - 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
    {
      vPlayerShowLogo(ISO_STOP_LOGO, ISO_LOGO_COLOR);    
    }
  }
#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_MP2:
//    return BMP_MP2;
//  case FTYPE_MP1:
//    return BMP_MP1;
  case FTYPE_JPG:
    return BMP_PIC;
  case FTYPE_WMA:
//  case FTYPE_ASF:
    return BMP_WMA;
//  case FTYPE_MPG:
//  case FTYPE_DAT:
//  case FTYPE_VOB:
    //return BMP_MPG;
//  case FTYPE_AVI:
//    return BMP_AVI;
  case FTYPE_DIR:
    return BMP_FOLDER;
  case FTYPE_CDA:
#ifdef CDG_SUPPORT
  case FTYPE_CDG:
#endif
    return BMP_MPG;
  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;
  }
  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)
  {
    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)
    {
      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;

  // - check current dir
  wPos = FL_LIST_FIELD(_bFlMnListId);
  bLoByte(wBsDir) = bSharedInfo(wPos + 2);
  bHiByte(wBsDir) = bSharedInfo(wPos + 3);
  if (!wBsDir)
    return FALSE;

  // - get in parent dir
  fgFlMnLeavItem(_bFlMnCurItemIdx); // - leave current item
  if ((wFlGetItemIdx(0) == 0) && (bFlGetItemType(0) == FTYPE_FOLDER))
  {

    if (fgFlClLock(FL_CMDPATH_DIR_UP_1))
    {
      fgFlMnEntDir(0, TRUE);
    }
  }
  else
  {

    //_bFlMnCurItemIdx = 0;  // this should be ".."
    //fgFlCmdGetItems(_bFlMnListId, 0x0, FLCMD_RET_OP_ENTDIR);
    if (fgFlClLock(FL_CMDPATH_DIR_UP_0))
      fgFlCmdGetItems(_bFlMnListId, 0x0);
  }

  return TRUE;
}

/**
 * Enter the dir given by item index.
 */
static BOOL fgFlMnEntDir(BYTE bItemIdx, BOOL fgMoveUp) large
{
  WORD wPos, wBsDir, wIdx;
  BYTE bFType;

  if (bItemIdx >= FL_MIN(_bFlMnItemNs, FLMN_PAGE_SZ))
  {
    return FALSE;
  }
  
  // - check the type of the given item
  wPos = FL_ITEM_FIELD(bItemIdx);

  // - parse the full path
  _bFlMnMemLock = TRUE;
  vParseFolderName(bItemIdx, fgMoveUp);
  
/*
  if (bFlClPath() == FL_CMDPATH_CHG_DIR)
  {
    bLoByte(wIdx) = bSharedInfo(FL_ITEM_FIELD(0) + 12);
    bHiByte(wIdx) = bSharedInfo(FL_ITEM_FIELD(0) + 13);
    _bFlMnCurItemIdx = (BYTE) (wIdx % FLMN_ITEM_N);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -