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

📄 stpmain.c

📁 MTK1389 SOURCE CODE
💻 C
📖 第 1 页 / 共 5 页
字号:
  // find first valid item
  if (_wInvalid == 0)
    return;
  while (!(_wInvalid & (0x01<<_bEntry-1)))
  {
    _bEntry ++;
  }

  if (!(_wInvalid & (0x01<<_bPrevItem-1)))
  {
    _bPrevItem = INVALID_ENTRY;
  }

// 3. run the page special function
  vDrawSpecificPage(prMenu->bMenuType);

  bTempItem = _bEntry;
  _bPrevMenu = _bMenu;

  if ((prMenu->bType == PAGE_TYPE_MAINMENU) || 
      (prMenu->bType == PAGE_NML))
  {
    bStart = bCalMaxMinShow(prMenu->bType, prMenu->bTotalEntry, _rMenuRoot.bEntryNo);

#ifdef CHK_PASSWD_VCD_EN
    if ((_bMenu == THREED_PAGE) && (bEepromReadByte(VCD_PASSWRD_POSITION) == FALSE))
    {
      bStart = 1;
      _bMinShowData = 2;
    }
#endif

    //Show page title. [runma] add block
    if((prMenu->bType == PAGE_NML)||(_bOsdState == STPSTT_MAINMENU)) //r
    {

      _wStartX = 0; 
      _wStartY = 0; //STP_MENU_START_Y - NML_SPACE;
      _wEndX =  SETUP_ITEM_END_X - SETUP_ITEM_START_X-1;
      _wEndY = _wStartY + STP_MENU_ENTRY_H;       
      vRectangle(WB_SETUP_ITEM, 0, 0, TRUE, ENTRY_COL_DARKGRAY);
    
      vSetItemPos(1,1); //set page title position. 0,1 is not good .
      _wStartY = 0;    

      vSetMsgCol4(WB_SETUP_ITEM, ENTRY_COL_DARKGRAY, ENTRY_COL_DARKGRAY, ENTRY_COL_BLACK, ENTRY_COL_PINK); //[runma], modify for pro design. 
      vOsdPasteMsgXY(_wStartX,_wStartY, WB_SETUP_ITEM,prMenu->wHdrMsg);    
    }
    //[runma] end of block
    for(bTemp = _bMinShowData - 1; bTemp < _bMaxShowData; bTemp++)
    {
      if (prMenu->prEntry[bTemp]->wType == ENTRY_TYPE_NULL)
      {
        continue;
      }
      _bEntry = bTemp;
      vSetItemPos(bTemp+1, _bMinShowData);
      
      if (_wInvalid & (1<<bTemp))
        vSetMsgCol4(WB_SETUP_ITEM, ENTRY_COL_BG, ENTRY_COL_BG, ENTRY_COL_BLACK, ENTRY_COL_WHITE); //[runma], _bg -> _black
      else
        vSetMsgCol4(WB_SETUP_ITEM, ENTRY_COL_BG, ENTRY_COL_BG, ENTRY_COL_BG /*ENTRY_COL_BLACK*/, ENTRY_COL_DARKGRAY); //[runma], _bg -> _black, yellow->green

        vSetupEntryShow(prMenu->prEntry[bTemp]->wEntryMsg, WB_SETUP_ITEM);
        vShowEntryValue(prMenu->prEntry[bTemp],TRUE);

#ifdef ITEM_SHOW_BMP
      _wStartX = 10;
      if (prMenu->prEntry[bTemp]->wBmpIdx != 0xFFFF)
      {
        vPasteBmp(WB_SETUP_ITEM, prMenu->prEntry[bTemp]->wBmpIdx);
      }
#endif
    }
  }

  _bEntry = bTempItem;
  if(_bOsdState != STPSTT_MAINMENU)
  {
    vEntryAct();
    vShowRelatedMsg(prMenu);
  }
  else
  {
    vShowRelatedMsg(_rMenuRoot.prMenu[0]);
  }

#if (SETUP_MENU_DATA_STYLE == STP_STICK_DATA)
  #if 0 //r add 1 -> 0
  _bDataCur = prMenu->prEntry[_bEntry-1]->wMaxOpt+1;
  _bDataSel = bGetOptFromEeprom(prMenu->prEntry[_bEntry-1]);  
  if(_bOsdState != STPSTT_MAINMENU) //r
    vCtrlDraw(prMenu->prEntry[_bEntry-1]->wType, _bEntry);
  _bDataCur=_bDataSel;
  #else
  if(_bOsdState != STPSTT_MAINMENU) //r
  {
     _bDataCur = prMenu->prEntry[_bEntry-1]->wMaxOpt+1;
    _bDataSel = bGetOptFromEeprom(prMenu->prEntry[_bEntry-1]);  
    vCtrlDraw(prMenu->prEntry[_bEntry-1]->wType, _bEntry);
    _bDataCur=_bDataSel;
  }
  #endif
#endif
}

static void vEnVerMenu(void) large
{
  if ((_bMenu == GENERAL_PAGE) && (_bEnVerIdx != 0x0F))
  {
    if ((_bEnVerIdx < sizeof(_pbEnVerMenu)/sizeof(BYTE)) && (_bIRKey == _pbEnVerMenu[_bEnVerIdx]))
    {
      _bEnVerIdx++;
    }
    else
    {
      _bEnVerIdx = 0;
    }
    
    if (_bEnVerIdx == sizeof(_pbEnVerMenu)/sizeof(BYTE))
    {
      _bEnVerIdx = 0x0F;
      _bDlgId = DLG_VERSION;
      _bOsdState = STPSTT_DIALOG;
      _bMenu = VER_PAGE;
      vRedrawMenu(ENTRY_FUN_REDRAW);
    }
  }
}

#ifdef ENABLE_USER_LANG_CODE
BYTE bCheckLangCode(WORD wEEPos, BYTE bValue) large
{
  BYTE  bTmp1, bTmp2;
  
  bTmp1 = bSharedInfo(SH_DLG_VAL_0) * 10 + bSharedInfo(SH_DLG_VAL_1);
  bTmp2 = bSharedInfo(SH_DLG_VAL_2) * 10 + bSharedInfo(SH_DLG_VAL_3);
  
  switch(_bDlgId)
  {
    case DLG_AUDIO_LANG_CODE:
      fgEepromWriteByte(AUDIO_LCD_POSITION_0, bTmp1);
      fgEepromWriteByte(AUDIO_LCD_POSITION_1, bTmp2);
      vSystemPrefAuLang('a'-'A' + bTmp1, 'a'-'A' + bTmp2);
      break;
    case DLG_MENU_LANG_CODE:
      fgEepromWriteByte(MENU_LCD_POSITION_0, bTmp1);
      fgEepromWriteByte(MENU_LCD_POSITION_1, bTmp2);
      vSystemPrefMenuLang('a'-'A' + bTmp1, 'a'-'A' + bTmp2);
      break;
    case DLG_SP_LANG_CODE:
      fgEepromWriteByte(SP_LCD_POSITION_0, bTmp1);
      fgEepromWriteByte(SP_LCD_POSITION_1, bTmp2);
      vSystemPrefSpLang('a'-'A' + bTmp1, 'a'-'A' + bTmp2);
      break;
  }

  return RESULT_SUCCESS;
}
#endif

static BOOL fgMainMenuPrev(sMenu *prMenu) large
{
  BYTE bPrevPage = _bMenuCur;
  BYTE bPrevMenu = _bMainMenu;
  
  vDrawMenuBtn(prMenu, _bMainMenu, FALSE);

  do {
    _bMainMenu--;
    if (_bMainMenu < 1 )
    {
  #ifdef SETUP_CIRCULAR_ITEM
      _bMainMenu = prMenu->bTotalEntry;
  #else
      _bMainMenu = bPrevMenu;
      return (FALSE);
  #endif
    }
  } while(((_wMenuInvalid & (1<<(_bMainMenu-1))) == 0)
          ||(prMenu->prEntry[_bMainMenu-1]->wType == ENTRY_TYPE_NULL));


#if 0
#ifndef SETUP_CIRCULAR_ITEM
  if(_bMainMenu == 1)
  {
    return(FALSE);
  }
#endif
#ifdef SETUP_CIRCULAR_ITEM
  if (_bMainMenu == 1)
  {
    _bMainMenu = prMenu->bTotalEntry;
  }
  else
#endif
  {
    _bMainMenu--;
  }
  while (!(_wMenuInvalid & (0x01<<_bMainMenu-1)) ||
          (prMenu->prEntry[_bMainMenu-1]->wType == ENTRY_TYPE_NULL))
  {
    if(_bMainMenu == 0)
    {
      break;
    }
    _bMainMenu --;
  }
  if ((_bMainMenu == 0) && (bPrevPage == prMenu->bTotalEntry))
  {
    _bMainMenu = prMenu->bTotalEntry;
  }
  else if (_bMainMenu == 0)
  {
    while (!(_wMenuInvalid & (0x01<<_bMainMenu-1)) || (prMenu->prEntry[_bMainMenu-1]->wType == ENTRY_TYPE_NULL))
    {
      _bMainMenu++;
    }
  }
#endif
  vDrawMenuBtn(prMenu, _bMainMenu, TRUE);
  _bMenu = prMenu->prEntry[_bMainMenu-1]->wEEPos;
  _bEntry = 1;
  _bOsdState = STPSTT_MAINMENU; //r

  return (TRUE);
}

static BOOL fgMainMenuNext(sMenu *prMenu) large
{
  BYTE bPrevMenu;

  bPrevMenu = _bMainMenu;
  
  vDrawMenuBtn(prMenu, _bMainMenu, FALSE);
  //[runma] modify block
  do {
    _bMainMenu++;
    if (_bMainMenu > prMenu->bTotalEntry)
    {
  #ifdef SETUP_CIRCULAR_ITEM
      _bMainMenu = 1;
  #else
        _bMainMenu = bPrevMenu;
      return (FALSE);
  #endif
    }
  } while(((_wMenuInvalid & (1<<(_bMainMenu-1))) == 0)
          ||(prMenu->prEntry[_bMainMenu-1]->wType == ENTRY_TYPE_NULL));

  vDrawMenuBtn(prMenu, _bMainMenu, TRUE);

  _bMenu = prMenu->prEntry[_bMainMenu-1]->wEEPos;
  _bEntry = 1;
  _bOsdState = STPSTT_MAINMENU;
  return TRUE;
}

static void vSetItemPos(BYTE bIndex, BYTE bOffset) large
{
  switch(_rMenuRoot.prMenu[_bMenu]->bType)
  {
    case PAGE_TYPE_V_DIALOG:
      _wStartX = DIALOG_X + DIALOG_START_X;
      _wEndX = DIALOG_X + DIALOG_W - DIALOG_START_X;
      _wStartY = (SETUP_ITEM_H - (bOffset + 2) * DIALOG_LINE_H) / 2 + (bIndex * DIALOG_LINE_H);
      _wEndY = _wStartY + DIALOG_LINE_H;
      break;
    default:
      _wStartX = STP_ENTRY_START_X;
      _wStartY = STP_MENU_START_Y + (WORD) STP_MENU_ENTRY_H * (bIndex - bOffset) + bIndex;
      _wEndX = STP_ENTRY_START_X + STP_ENTRY_END_X;
      _wEndY = _wStartY + STP_MENU_ENTRY_H - 1;
      break;
  }
}

static void vEntryAct(void) large
{
  sMenu *prMenu = _rMenuRoot.prMenu[_bMenu];

  if (_bOsdState == STPSTT_DIALOG)
  {
    vSetItemPos(_bEntry, prMenu->bTotalEntry);

    if ((_bEntry == prMenu->bTotalEntry) && (prMenu->prEntry[_bEntry-1]->wType == ENTRY_TYPE_RETURN))
    {
      vSetBtnCol(WB_SETUP_ITEM, ENTRY_COL_DARKGRAY, ENTRY_COL_YELLOW, ENTRY_COL_BLACK, ENTRY_COL_WHITE);
      vSetMsgCol4(WB_SETUP_ITEM, ENTRY_COL_DARKGRAY, ENTRY_COL_DARKGRAY, ENTRY_COL_DARKGRAY, ENTRY_COL_YELLOW);
      vSelButton(WB_SETUP_ITEM, 10);
      return;
    }
    else
    {
      vSetMsgCol4(WB_SETUP_ITEM, ENTRY_COL_DARKGRAY, ENTRY_COL_DARKGRAY, ENTRY_COL_DARKGRAY, ENTRY_COL_YELLOW);
      vSetBtnCol(WB_SETUP_ITEM, ENTRY_COL_YELLOW, ENTRY_COL_DARKGRAY, ENTRY_COL_BLACK, ENTRY_COL_WHITE);
      vUnselButton(WB_SETUP_ITEM, 10);
    }
  }
  else
  {
    vSetItemPos(_bEntry, _bMinShowData);
  }

  _wStartX -= 4; //[runma] add line
  vChgColRep(WB_SETUP_ITEM, 0, ENTRY_COL_GREEN); //[runma] add line
}

// return true : need redraw
static BOOL fgEntryPrev(sMenu *prMenu) large
{
  BYTE  bPrevItem;

  if(prMenu->bTotalEntry == 1)
    return(FALSE);
  
#ifndef SETUP_CIRCULAR_ITEM
  if(_bEntry == 1)
  {
    return(FALSE);
  }
#else

  if (prMenu->bType != PAGE_TYPE_V_DIALOG)
    _bDataPrev = INVALID_DATA;

  if (_bEntry == 1)
  {
    bPrevItem = 1;
    _bEntry = prMenu->bTotalEntry;

  }
  else
#endif
  {
    bPrevItem = _bEntry;
    _bEntry--;
  }
#if 0
  while ((_bEntry != 1) &&
          ((prMenu->prEntry[_bEntry-1]->wType == ENTRY_TYPE_EDITBOX_ORDERED) ||
           (prMenu->prEntry[_bEntry-1]->wType == ENTRY_TYPE_NULL)) )
  {
    _bEntry--;
  }
#endif
  while (!(_wInvalid & (0x01<<_bEntry-1)) ||
          (prMenu->prEntry[_bEntry-1]->wType == ENTRY_TYPE_NULL))
  {
    //[runma] modify the block.
    #ifdef SETUP_CIRCULAR_ITEM
    if(_bEntry == bPrevItem) //[runma] 0 -> bPrevItem
    {
      break;
    }
    else if (_bEntry==1)
    {
        _bEntry=prMenu->bTotalEntry;
    }
    #else
    if(_bEntry==1)
    {
      _bEntry=bPrevItem; //not circular item and not found a suitable item.
      break;
    }
    #endif
    else
    {
    _bEntry --;
  }
    //[runma] end of block.
  }
#if 0 //[runma] add line
  if (_bEntry == 0)
  {
    if (bPrevItem == _rMenuRoot.prMenu[_bMenu]->bTotalEntry)
    {
      _bEntry = prMenu->bTotalEntry;
    }
    else
    {
      while (!(_wInvalid & (0x01<<_bEntry-1)) || (prMenu->prEntry[_bEntry-1]->wType == ENTRY_TYPE_NULL))
      {
        _bEntry ++;
      }
    }
  }
#endif //[runma] add line
  //_bDataCur = _bDataSel = bGetOptFromEeprom(prMenu->prEntry[_bEntry-1]);
  
  if (fgCalEntryShowRange(prMenu->bTotalEntry, _rMenuRoot.bEntryNo))
  {
    vShowMenu(_rMenuRoot.prMenu[_bMenu]);
  }

  vSetItemPos(bPrevItem, _bMinShowData);
  _wStartX -=4;
  vChgColRep(WB_SETUP_ITEM,ENTRY_COL_GREEN,0); 

  vEntryAct(); 
  
  if (_bOsdState == STPSTT_DIALOG)
  {
    _bDataCur = 0;
#ifdef IR_SUPPORT_SHIFT_KEY  
    if ((prMenu->prEntry[_bEntry-1]->wType == ENTRY_TYPE_EDITBOX) ||
        (prMenu->prEntry[_bEntry-1]->wType == ENTRY_TYPE_EDITBOX_ORDERED))
    {
      vSetShiftKeyMode(FALSE);
    }
#endif
  }
  else
  {
    vCtrlClear(prMenu->prEntry[bPrevItem-1]->wType, bPrevItem);
   
#if (SETUP_MENU_DATA_STYLE == STP_STICK_DATA)
    if(prMenu->prEntry[_bEntry-1]->wEEPos)
    {
      //_bDataSel = bGetOptFromEeprom(prMenu->prEntry[_bEntry-1]);
      _bDataSel = bGetOptFromEeprom(prMenu->prEntry[_bEntry-1]);
    }
    else
    {
      _bDataSel = 0;
    }
    _bDataCur = _bDataSel;
    vCtrlDraw(prMenu->prEntry[_bEntry-1]->wType, _bEntry);
#endif
  }

  return (TRUE);
}

BOOL fgEntryNext(sMenu *prMenu) large
{
  BYTE  bPrevItem;
  if(prMenu->bTotalEntry==1)
    return(FALSE);

  if (prMenu->bType != PAGE_TYPE_V_DIALOG)
    _bDataPrev = INVALID_DATA;
  
  _bPrevItem = _bEntry;
  bPrevItem = _bEntry;
  _bEntry++;
  if (_bEntry > prMenu->bTotalEntry)
  {
#ifdef SETUP_CIRCULAR_ITEM
    _bEntry = 1;
#else
    _bEntry -= 1;
    return (FALSE);
#endif
  }
#if 0
  while ((_bEntry != 1) && (prMenu->prEntry[_bEntry-1]->wType == ENTRY_TYPE_EDITBOX_ORDERED) && (_bEntry - 1 < prMenu->bTotalEntry))
  {
    _bEntry++;
  }
#endif
  while (!(_wInvalid & (0x01<<_bEntry-1)) || (prMenu->prEntry[_bEntry-1]->wType == ENTRY_TYPE_NULL))
  {
    _bEntry ++;
    if (_bEntry > prMenu->bTotalEntry)
      _bEntry = 1;
  }

  _bDataCur = _bDataSel = bGetOptFromEeprom(prMenu->prEntry[_bEntry-1]);

⌨️ 快捷键说明

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