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

📄 stpmain.c

📁 mtk1389L latest sourcecode enjoy
💻 C
📖 第 1 页 / 共 5 页
字号:
    if (prMenu->prEntry[i-1]->wType == ENTRY_TYPE_NULL)
    {
      return;
    }

    _wStartY = 2;
    _wEndY = 32;
    _wStartX = 30 + (50+30) * (i-1);
    _wEndX = _wStartX + 50;

    switch(i)
    {
      case 1:  vGrpButtonCreate(CODE_PAGE_ASC, WB_SETUP_HEAD, i+20, MENU_BUTTON_GROUP, 2, OSD_MSG_1, 20, 0);
               break;
      case 2:  vGrpButtonCreate(CODE_PAGE_ASC, WB_SETUP_HEAD, i+20, MENU_BUTTON_GROUP, 2, OSD_MSG_2, 20, 0);
               break;
      case 3:  vGrpButtonCreate(CODE_PAGE_ASC, WB_SETUP_HEAD, i+20, MENU_BUTTON_GROUP, 2, OSD_MSG_3, 20, 0);
               break;
      case 4:  vGrpButtonCreate(CODE_PAGE_ASC, WB_SETUP_HEAD, i+20, MENU_BUTTON_GROUP, 2, OSD_MSG_4, 20, 0);
               break;
      case 5:  vGrpButtonCreate(CODE_PAGE_ASC, WB_SETUP_HEAD, i+20, MENU_BUTTON_GROUP, 2, OSD_MSG_5, 20, 0);
               break;
      case 6:  vGrpButtonCreate(CODE_PAGE_ASC, WB_SETUP_HEAD, i+20, MENU_BUTTON_GROUP, 2, OSD_MSG_6, 20, 0);
               break;
    }

    if (i==_bMenuCur)
    {
      vGrpButtonActivate(WB_SETUP_HEAD, i+20, BTN_STYLE_HILIGHT);
    }
    else if (_wMenuInvalid & (1<<i))
      vGrpButtonDeactivate(WB_SETUP_HEAD, i+20, BTN_STYLE_NORMAL);
    else
      vGrpButtonDeactivate(WB_SETUP_HEAD, i+20, BTN_STYLE_INVALID);
  }
#endif
}

static void vDrawMenuBtn(sMenu *prMenu, BYTE bIndex, BOOL fgEnable) large
{
  WORD  wGap;

  wGap = (SETUP_HEAD_W - MENU_BMP_W * prMenu->bTotalEntry) / (prMenu->bTotalEntry + 1);
  _wStartX = wGap * bIndex + MENU_BMP_W * (bIndex-1);
  _wEndX = _wStartX + MENU_BMP_W;
  _wStartY = (SETUP_HEAD_H - MENU_BMP_H) / 2;
  _wEndY = _wStartY + MENU_BMP_H;

  if (prMenu->prEntry[bIndex-1]->wBmpIdx != 0xFFFF)
  {
    if (fgEnable == TRUE)
    {
      vPasteBmp(WB_SETUP_HEAD, prMenu->prEntry[bIndex-1]->wBmpIdx);
    }
    else
    {
      //vRectangle(WB_SETUP_HEAD, 0, 0, 1, 0); [runma] del line
      vPasteBmp(WB_SETUP_HEAD, prMenu->prEntry[bIndex-1]->wBmpIdx);
      //make icon be gray.
      //vChgColRep(WB_SETUP_HEAD, 1,0);
      #ifdef STPMN_HEAD_GRAY
      vChgColRep(WB_SETUP_HEAD, 4,13);
      vChgColRep(WB_SETUP_HEAD, 5,11);
      vChgColRep(WB_SETUP_HEAD, 6,10);
      vChgColRep(WB_SETUP_HEAD, 8,11);
      vChgColRep(WB_SETUP_HEAD, 12,13);
      vChgColRep(WB_SETUP_HEAD, 15,13);
      #else
        #if (SETUP_HEAD_BITMAP == BITMAP_JYC2)
      vChgColRep(WB_SETUP_HEAD, 1,11);
      vChgColRep(WB_SETUP_HEAD, 14,11); //r add line for sinco. Joyce RD1...
        #else
      vChgColRep(WB_SETUP_HEAD, 1,0);
        #endif
      #endif


    }
  }
}

void vShowEntryValue(sEntry *prEntry, BOOL fgIfAutoSetXY) large
{
  BYTE bOpt=1;
  WORD wMsg;
  BYTE pbStr[7];
  BYTE bTemp;
  WORD wEntryType;

  // Set to empty string.
  pbStr[0] = 3; //[runma] 4 -> 3
  pbStr[1] = pbStr[2] = pbStr[3] = 32; //' ';

  wEntryType = prEntry->wType;

  if (wEntryType == ENTRY_TYPE_DIALOG)
  {
    prEntry = _rMenuRoot.prMenu[prEntry->wEEPos]->prEntry[0];
  }
  else if (wEntryType == ENTRY_TYPE_SUBMENU)
  {
    return;
  }
  else if (wEntryType == TYPE_SPK_CONFIG)
  {
    if(_bOsdState != STPSTT_OPTION) return;
     prEntry = _rMenuRoot.prMenu[prEntry->wEEPos]->prEntry[_bDataCur];
     if(prEntry == NULL) return; //this option is not tunable.
    // pbStr[0]=5;
   // pbStr[4]='c';
   // pbStr[5]='m';
    //bOpt=10; //[runma] add line, for chanel delay only.
  }

  if(fgIfAutoSetXY)
  {
    _wStartX = STP_ENTRY_START_X + STP_VALUE_START_X;
    _wEndX = STP_ENTRY_START_X + STP_ENTRY_END_X; //[runma] add word -6
    _wEndY = _wStartY + STP_MENU_ENTRY_H;
    vRectangle(WB_SETUP_ITEM, 0, 0, 1, ENTRY_COL_BG);
  }

  vSetMsgCol4(WB_SETUP_ITEM, 0, 0, ENTRY_COL_BLACK, ENTRY_COL_YELLOW);
  bOpt = bGetOptFromEeprom(prEntry);

  switch(prEntry->wType)
  {
    case ENTRY_TYPE_V_SLIDER_SIGNED:
    case ENTRY_TYPE_H_SLIDER_SIGNED:
      bTemp=1;
      if ((char) bOpt < 0)
      {
        pbStr[bTemp++] = 45; //'-';
        bOpt = (BYTE )(0 - (char) bOpt);
      }
      if(bOpt>99) bOpt=99; //[runma] add line
      bOpt = bHEXToBCD(bOpt);
     // if ((char) bOpt < 0)
     // {
        pbStr[bTemp++] = BCD_HI(bOpt) + 48;//'0';
        pbStr[bTemp++] = BCD_LO(bOpt) + 48;//'0';
     // }
     // else
     // {
     //   pbStr[1] = BCD_HI(bOpt) + 48;//'0';
     //   pbStr[2] = BCD_LO(bOpt) + 48;//'0';
     // }
      vOsdShowStr(WB_SETUP_ITEM, pbStr);

    break;
    case ENTRY_TYPE_V_SLIDER:
    case ENTRY_TYPE_H_SLIDER:
    case ENTRY_TYPE_NUM:

      bTemp=0;
      if(bOpt>199)
      {
        pbStr[++bTemp]=50;//'2';
        bOpt = bOpt -200;
      }
      else if(bOpt>99)
      {
        pbStr[++bTemp]=49;//'1';
        bOpt = bOpt -100;
      }

      bOpt = bHEXToBCD(bOpt);
      pbStr[++bTemp] = BCD_HI(bOpt) + 48;//'0';
      pbStr[++bTemp] = BCD_LO(bOpt) + 48;//'0';
      if(wEntryType == TYPE_SPK_CONFIG)
      {
          if(pbStr[1]=='0')
          {
            pbStr[1]=' ';
            if(pbStr[2]=='0')
              pbStr[2]=' ';
          }
          pbStr[++bTemp] = '0';
          pbStr[++bTemp] = 'c';
          pbStr[++bTemp] = 'm';
          pbStr[0]=bTemp;
      }
      //pbStr[0]=bTemp;
      vOsdShowStr(WB_SETUP_ITEM, pbStr);
      break;
    default:
      // pbStr[0] = 0;
      if(prEntry->prData==0) //[runma] add block
      {
        pbStr[0] = 3;
        pbStr[1] = 32;//' ';
        pbStr[2] = 32;//' ';
        pbStr[3] = 32;//' ';
        vOsdShowStr(WB_SETUP_ITEM, pbStr); //[runma] end of block
      }
      else
      {
        wMsg = prEntry->prData[bOpt]->wValMsg;

        if (wMsg == OSD_MSG_EMPTY)
        {
          pbStr[0] = 3;
          pbStr[3] = 32;//' '; //[runma] 1->3
          bOpt = bHEXToBCD(bOpt);
          pbStr[1] = 32;//' ';//BCD_HI(bOpt) + '0'; //[runma] 2->1
          pbStr[2] = 32;//' ';//BCD_LO(bOpt) + '0'; //[runma] 3->2
          vOsdShowStr(WB_SETUP_ITEM, pbStr);
        }

        else if((wMsg == OSD_MSG_FUNC_NUMBER) ||(wMsg == OSD_MSG_FUNC_MINUS3))
        {
          if(wMsg == OSD_MSG_FUNC_MINUS3)
            bOpt = (char)bOpt -3;

          bTemp=1;
          if ((char) bOpt < 0)
          {
            pbStr[bTemp++] = 45; //'-';
            bOpt = (BYTE )(0 - (char) bOpt);
          }

          if(bOpt>99) bOpt=99; //[runma] add line
          bOpt = bHEXToBCD(bOpt);
          pbStr[bTemp++] = BCD_HI(bOpt) + 48;//'0';
          pbStr[bTemp++] = BCD_LO(bOpt) + 48;//'0';
          vOsdShowStr(WB_SETUP_ITEM, pbStr);
        }

        else
        {
          vOsdMsgPaste(WB_SETUP_ITEM, wMsg);
        }
      }
    break;
  }

  //return prEntry->prData[bOpt]->wEntryMsg;
}

// *********************************************************************
// Function : void vShowMenu(void) large
// Description : show a Menu
//                1. clear setup screen
//                2. get valid item
//                3. run the page special function
//                4. show head and message wb message
//                5. show item wb
// Parameter : None
// Return    : None
// *********************************************************************
static void vShowMenu(sMenu *prMenu) large
{
  if ((prMenu->bType == PAGE_TYPE_H_DIALOG) || (prMenu->bType == PAGE_TYPE_V_DIALOG))
  {
    vDrawDialog(prMenu);
    //vDialogInit(prMenu);
    //vDialogDrawEntry(prMenu);
    //[runma] add these four lines here is a waste.
#ifndef IC_CHECK_OSD
    vOsdPasteBmpXY(0, 0, WB_SETUP_HEAD, BMP_LT_CORNER);
#endif
    vOsdPasteBmpXY(0, SETUP_MSG_END_Y-SETUP_MSG_START_Y-15, WB_SETUP_MSG, BMP_LB_CORNER);
#ifndef IC_CHECK_OSD
    vOsdPasteBmpXY(SETUP_HEAD_END_X - SETUP_HEAD_START_X - 15, 0, WB_SETUP_HEAD, BMP_RT_CORNER);
#endif
    vOsdPasteBmpXY(SETUP_MSG_END_X - SETUP_MSG_START_X - 15,  SETUP_MSG_END_Y-SETUP_MSG_START_Y-15, WB_SETUP_MSG, BMP_RB_CORNER);
  }
  else
  {
    vDrawMenu(prMenu);
  }
}

static void vDrawMenu(sMenu *prMenu) large
{
  BYTE  (code *bDeal)(WORD wEEPos, BYTE bValue) large;
  BYTE bTemp;
  BYTE bTempItem;
  BYTE bStart;
  BYTE  pbStr[10];

  // 1. clear setup screen
  vClearItemRng();
  vClearMsgRng();
#ifndef IC_CHECK_OSD
  vOsdPasteBmpXY(0, 0, WB_SETUP_HEAD, BMP_LT_CORNER);
#endif
  vOsdPasteBmpXY(0, SETUP_MSG_END_Y-SETUP_MSG_START_Y-15, WB_SETUP_MSG, BMP_LB_CORNER);
#ifndef IC_CHECK_OSD
  vOsdPasteBmpXY(SETUP_HEAD_END_X - SETUP_HEAD_START_X - 15, 0, WB_SETUP_HEAD, BMP_RT_CORNER);
#endif
  vOsdPasteBmpXY(SETUP_MSG_END_X - SETUP_MSG_START_X - 15,  SETUP_MSG_END_Y-SETUP_MSG_START_Y-15, WB_SETUP_MSG, BMP_RB_CORNER);

  bTempItem = _bEntry;
//  2. get valid item
  _wInvalid = 0xFFFF;
//  _wHidden = 0xFFFF;
  vChkValid(prMenu->bInvType);
  // 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);

#if 0 //?
#ifdef SETUP_ENABLE_TEST_TONE
  if (!_fgTestTone)
#endif
  {
    //if (_bPrevMenu != 0xFE)
    if (_bPrevMenu != INVALID_MENU)
    {
      vShowSetupMsg(prMenu->wMsgMsg);
    }
    else
    {
      // first time to page
      //vShowSetupMsg(prMenu->prEntry[_bEntry-1]->wMsgMsg);
      vShowSetupMsg(prMenu->prEntry[bTempItem-1]->wMsgMsg);
    }
  }
#endif
  bTempItem = _bEntry;
  _bPrevMenu = _bMenu;

//  vSetMsgCol4(WB_SETUP_HEAD, 0, 0, 0, 2);
//  vSetupEntryShowXY(MSG_X_IN_CENTER, HEAD_MSG_Y, _rMenuRoot.prMenu[_bMenu]->wHdrMsg, WB_SETUP_HEAD);
  //_fgHeadInfChg = FALSE;

  if ((prMenu->bType == PAGE_TYPE_MAINMENU) ||
      (prMenu->bType == PAGE_NML))
//      || (prMenu->bType == PAGE_TXT))
  {
    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 ((_bMenu==MAIN_PAGE) && (prMenu->prEntry[bTemp]->wEEPos == VER_PAGE) && (_bShowVerIdx != 0x0F))
//        continue;

      if (prMenu->prEntry[bTemp]->wType == ENTRY_TYPE_NULL)
      {
        continue;
      }

//      if (!(_wHidden & (1 << bTemp)))
//        continue;

      _bEntry = bTemp;
      vSetItemPos(bTemp+1, _bMinShowData);
//      _bEntry = bGetItemIdx(bTemp+1);
//      vSetItemPos(_bEntry, _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);

          //if (prMenu->bType != PAGE_TYPE_SUBMENU) //[runma] mark off.
          //{
            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) //r
  {
    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]);
#if(defined(DOWNMIX_SHOW_UI)||defined(SETUP_INVALID_ITEM)||defined(SETUP_CHECK_INVALID_HDCD))
     _bInvalidItem = 0xff;
     vChkItemValid(_bMenu,_bEntry);
   #endif
    vCtrlDraw(prMenu->prEntry[_bEntry-1]->wType, _bEntry);
    _bDataCur=_bDataSel;
  }
  #endif
#endif
}

#if 0
void vSetPanelStartPos(BYTE bCtrlType, BYTE bIndex) large
{
  //WORD w = (WORD) STP_MENU_START_Y + (WORD)(bIndex + 1) * STP_MENU_ENTRY_H;

  switch(bCtrlType)
  {
    case ENTRY_TYPE_H_SLIDER:
      //_wStartX = STP_ENTRY_START_X + STP_MENU_ENTRY_H * (bIndex-bStart);
      _wStartX = STP_ENTRY_START_X + bDistance * (bIndex-bStart);
      _wStartY = STP_MENU_START_Y + 100;
      _wEndY = 180 + 100;
      _wEndX = _wStartX + H_SLIDER_WIDTH;
      break;
    case ENTRY_TYPE_H_SLIDER_SIGNED:
      break;
  }

  _wStartX = STP_ENTRY_START_X + STP_MENU_ENTRY_H * (bTemp-bStart);
  _wStartY = STP_MENU_START_Y + 120;
  _wEndY = _wStartY + ((WORD)bOptMaxEntryNum(_rMenuRoot, _bMenu, bTemp+1))<<3;


  _wStartX = STP_ENTRY_START_X + STP_MENU_ENTRY_H * (bTemp-bStart);
  _wStartY = STP_MENU_START_Y + 100;
  _wEndY = 180 + 100;
}

⌨️ 快捷键说明

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