📄 stpmain.c
字号:
#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]);
if (fgCalEntryShowRange(prMenu->bTotalEntry, _rMenuRoot.bEntryNo))
{
vShowMenu(prMenu);
}
vSetItemPos(bPrevItem, _bMinShowData);
_wStartX -=4; //[runma] add line
vChgColRep(WB_SETUP_ITEM,ENTRY_COL_GREEN,0);
vEntryAct();
if (_bOsdState != STPSTT_DIALOG)
vCtrlClear(prMenu->prEntry[bPrevItem-1]->wType, bPrevItem);
else
{
// _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
}
#if (SETUP_MENU_DATA_STYLE == STP_STICK_DATA)
vCtrlDraw(prMenu->prEntry[_bEntry-1]->wType, _bEntry);
#endif
return TRUE;
}
static void vCtrlClear(BYTE bCtrlType, BYTE bIndex) large
{
WORD wH;
switch(bCtrlType)
{
case TYPE_USER_1:
vDelButton(WB_SETUP_ITEM, DATA_BTN_BASE);
vDelButton(WB_SETUP_ITEM, DATA_BTN_BASE+1);
//#ifdef popup option automatically.
vChgColRep(WB_SETUP_ITEM,0,ENTRY_COL_RED); //[runma] add line.
//#endif
break;
#ifdef PLAYER_KARAOKE
case ENTRY_TYPE_V_SLIDER:
vCalSliderPos(bIndex);
_wStartY -= 10;
_wEndY += 10;
vRectangle(WB_SETUP_ITEM, 0, 0, 1, ENTRY_COL_BG);
break;
#endif
case ENTRY_TYPE_GROUPBUTTON:
// clean Data Area except up down mark.
_wStartX = STP_ENTRY_START_X + STP_DATA_START_X;
_wEndX = _wStartX + DATA_LEN; //32 for Up Down Mark.
_wStartY = STP_MENU_START_Y;
#ifdef MTK_SHRINK_STP
_wEndY = SETUP_ITEM_H - 1;
#else
_wEndY = _wStartY + 32 * _rMenuRoot.bEntryNo + 15;
#endif
vRectangle(WB_SETUP_ITEM,0,0, TRUE, ENTRY_COL_BG);
break;
case ENTRY_TYPE_EDITBOX:
case ENTRY_TYPE_EDITBOX_ORDERED:
if ((_bEntry > bIndex) || !(_wInvalid << (_bEntry - 1)) )
vSelButton(WB_SETUP_ITEM, DATA_BTN_BASE+bIndex);
break;
}
}
static void vCtrlMove(BYTE bCtrlType, BYTE bIndex) large
{
BYTE bOptNum; //[runma] add line.
BYTE bOffset;
BYTE bPrevMinShowOpt;
sEntry *prEntry = _rMenuRoot.prMenu[_bMenu]->prEntry[bIndex-1]; //[runma] add line
switch (bCtrlType)
{
case TYPE_USER_1:
if (_bDataCur /*bEepromReadByte(DRNG_POS)*/ < 9) //[runma]
{
vShowDynBtn();
vShowDynMsg();
}
break;
case ENTRY_TYPE_GROUPBUTTON:
//[runma] add block which is copied from draw ctrl.
bPrevMinShowOpt = _bMinShowDat;
bOptNum = prEntry->wMaxOpt;
if ((bOptNum+1) > _rMenuRoot.bEntryNo) //[runma] add word +1
{
if(fgCalDataShowRange(prEntry->wMaxOpt+1, _rMenuRoot.bEntryNo)) //[runma] add word +1
{
vCtrlDraw(bCtrlType, bIndex);
}
//[runma] if minshowoption is changed , do we need to ctrldraw again??
bOptNum = _rMenuRoot.bEntryNo - 1;
bOffset = bIndex - _bMinShowData;
}
else
{
_bMinShowDat = 0;
bOffset = 0;
if ((bIndex + bOptNum - _bMinShowData) >= _rMenuRoot.bEntryNo)
{
bOffset = bIndex + bOptNum - _bMinShowData - _rMenuRoot.bEntryNo + 1;
}
}
//[runma] end of copy.
vSetDataPos(_bDataPrev-bPrevMinShowOpt, bOffset);
if (_bDataPrev == _bDataSel)
vChgColRep(WB_SETUP_ITEM, OPT_CURR_CLR, OPT_SEL_CLR);
else
vChgColRep(WB_SETUP_ITEM, OPT_CURR_CLR, OPT_NONE_CLR);
vSetDataPos(_bDataCur-_bMinShowDat, bOffset);
vChgColRep(WB_SETUP_ITEM, OPT_SEL_CLR, OPT_CURR_CLR);
vChgColRep(WB_SETUP_ITEM, OPT_NONE_CLR, OPT_CURR_CLR);
break;
}
}
static BOOL fgCalDataShowRange(BYTE bTotal, BYTE bLength) large
{
#if 0 // 20050420, this code did not make sense. Basically if bTotal > bLength, we should draw up or down mark
if ((_bMinShowDat <= _bDataCur) && (_bMinShowDat + bLength >/*=*/ _bDataCur)) //[runma] remove word =
{
return FALSE;
}
#endif
if (bTotal > bLength)
{
if (_bDataPrev == INVALID_DATA)
{
_bMinShowDat = _bDataSel;
}
else if (_bDataCur != INVALID_DATA)
{
_bMinShowDat = _bDataCur;
}
if ((_bMinShowDat + bLength) >= bTotal)
{
_bMinShowDat = bTotal - bLength;
}
#if 1
vCleanMark () ;
#else
_wStartX = SETUP_ITEM_W - 42;
_wEndX = _wStartX+40;
_wStartY = 34;
_wEndY = 66;
vRectangle(WB_SETUP_ITEM, 0, 0, 1, ENTRY_COL_BG);
// _wStartY = 266;
// _wEndY = 266+32;
// 20050419, if MTK_SHRINK_STP is defined, down mark position should also be changed
_wStartY = SETUP_ITEM_END_Y - 133;
_wEndY = _wStartY + 32;
vRectangle(WB_SETUP_ITEM, 0, 0, 1, ENTRY_COL_BG);
#endif
vSetMsgCol4(WB_SETUP_ITEM, ENTRY_COL_BG, ENTRY_COL_BG, ENTRY_COL_BLACK, ENTRY_COL_WHITE);
if (_bMinShowDat != 0)
{
vSetupEntryShowXY(SETUP_ITEM_W-42, 34 , OSD_MSG_MARK_UP, WB_SETUP_ITEM);
}
if (_bMinShowDat + bLength < bTotal)
{
// vSetupEntryShowXY(SETUP_ITEM_W-42, 266, OSD_MSG_MARK_DOWN, WB_SETUP_ITEM);
// 20050419, if MTK_SHRINK_STP is defined, down mark position should also be changed
vSetupEntryShowXY(SETUP_ITEM_W-42, SETUP_ITEM_END_Y - 133, OSD_MSG_MARK_DOWN, WB_SETUP_ITEM);
}
}
else
{
_bMinShowDat = 0;
}
return (TRUE);
}
//[runma] bOffset means the distance shifting back to top from current item.
// bIndex means the offset from minshowopt.
void vSetDataPos(BYTE bIndex, BYTE bOffset) large
{
_wStartX = STP_ENTRY_START_X + STP_DATA_START_X;
_wStartY = STP_MENU_START_Y + (STP_MENU_ENTRY_H+1) * (_bEntry + bIndex - _bMinShowData - bOffset);
_wEndX = _wStartX + DATA_LEN;
_wEndY = _wStartY + STP_MENU_ENTRY_H;
}
void vCalSliderPos(BYTE bIndex) large
{
WORD wH;
{
wH = ((WORD)bOptMaxEntryNum(_rMenuRoot, _bMenu, bIndex)) << 2;
_wStartX = STP_ENTRY_START_X + STP_DATA_START_X + H_SLIDER_WIDTH * 2;
_wEndX = _wStartX + H_SLIDER_WIDTH;
_wStartY = (WORD)STP_MENU_START_Y + STP_MENU_ENTRY_H * (bIndex - _bMinShowData) + STP_MENU_ENTRY_H/2;
if (_wStartY < STP_MENU_START_Y+wH+10) //[runma] "- wh -10 <" => "<.. +wh+10";
{
_wStartY = (WORD)STP_MENU_START_Y + 20;
}
else if (_wStartY + wH + 10 > SETUP_ITEM_H)
{
_wStartY = SETUP_ITEM_H - 50 - (wH * 2);
}
else
{
_wStartY -= wH;
}
_wEndY = _wStartY + wH * 2 + 6;
}
}
#ifdef PLAYER_KARAOKE
void vSetSliderClr(BYTE bBG, BYTE bLine1, BYTE bLine2, BYTE bBtn, BYTE bBtnLT, BYTE bBtnRB) large
{
vSetSharedInfo(SH_CMP_CLR0, bBG);
vSetSharedInfo(SH_CMP_CLR1, bLine1);
vSetSharedInfo(SH_CMP_CLR2, bLine2);
vSetSharedInfo(SH_CMP_CLR3, bBtn);
vSetSharedInfo(SH_CMP_CLR4, bBtnLT);
vSetSharedInfo(SH_CMP_CLR5, bBtnRB);
}
void vDrawVSlider(BYTE bWB, BYTE bCurr, BYTE bTotal) large
{
_wStartY -= 10;
_wEndY += 10;
vRectangle(bWB, 0, 0, 1, bSharedInfo(SH_CMP_CLR0+SLIDER_CLR_BG));
_wStartY += 10;
_wEndY -= 10;
}
void vMoveVSlider(BYTE bWB, BYTE bPrev, BYTE bCurr, BYTE bTotal) large
{
WORD wH, wOffset, wTmp;
WORD wStartX, wStartY, wEndX, wEndY;
wStartX = _wStartX;
wStartY = _wStartY;
wEndX = _wEndX;
wEndY = _wEndY;
wOffset = (wEndY - wStartY - 6) * (bTotal - bPrev) / bTotal;
_wStartX = wStartX + 4;
//_wStartY = wStartY + wH;
_wStartY = wStartY + wOffset;
_wEndX = wStartX + 28;
_wEndY = _wStartY;
//vOsdShowLine(bWB, ITEM_COL_BTN_BG, 9);
vOsdShowLine(bWB, bSharedInfo(SH_CMP_CLR0+SLIDER_CLR_BG), 9);
//_wStartX = wStartX + 16;
_wStartX = wStartX + 15;
_wEndX = _wStartX;
_wStartY = wStartY;
_wEndY = wEndY;
//vOsdShowLine(bWBIdx, ITEM_COL_WHITE, 1);
vOsdShowLine(bWB, bSharedInfo(SH_CMP_CLR0+SLIDER_CLR_LINE1), 1);
//_wStartX = wStartX + 17;
_wStartX = wStartX + 16;
_wEndX = _wStartX;
_wStartY = wStartY;
_wEndY = wEndY;
//vOsdShowLine(bWBIdx, ITEM_COL_BLACK, 1);
vOsdShowLine(bWB, bSharedInfo(SH_CMP_CLR0+SLIDER_CLR_LINE2), 1);
wOffset = (wEndY - wStartY - 6) * (bTotal - bCurr) / bTotal;
//_wStartX = wStartX + 4;
//_wEndX = wStartX + 28;
_wStartX = wStartX + 3;
_wEndX = wStartX + 27;
//_wStartY = wStartY + wH;
_wStartY = wStartY + wOffset;
_wEndY = _wStartY;
//vOsdShowLine(bWBIdx, ITEM_COL_BTN_BG, 9);
vOsdShowLine(bWB, 4, 9);
_wStartX += 1;
_wEndX -= 1;
_wStartY += 1;
_wEndY = _wStartY + 6;
//vSetBtnCol(WB_SETUP_ITEM, 0, 0, ITEM_COL_BLACK, ITEM_COL_WHITE);
//vSetBtnCol(bWB, 0, 0, 2, 3);
vSetBtnCol(bWB, 0, bSharedInfo(SH_CMP_CLR0+SLIDER_CLR_BTN),
bSharedInfo(SH_CMP_CLR0+SLIDER_CLR_BTNLT),
bSharedInfo(SH_CMP_CLR0+SLIDER_CLR_BTNRB));
vCreateButton(bWB, 9, 2);
vUnselButton(bWB, 9);
}
#endif
void vCtrlDraw(BYTE bCtrlType, BYTE bIndex) large
{
BYTE bOptNum, bOffset, i, bNum;
char cPos, cLevel;
BOOL fgPlus;
BYTE pbStr[16];
WORD wH, wMsg, wTmp;
sEntry *prEntry = _rMenuRoot.prMenu[_bMenu]->prEntry[bIndex-1];
switch (bCtrlType)
{
case TYPE_USER_1:
if (_bDataCur < 9)
{
vDrawDynRngBtn();
vShowDynMsg();
}
break;
#ifdef PLAYER_KARAOKE
case ENTRY_TYPE_V_SLIDER:
vCalSliderPos(bIndex);
if (_bOsdState == STPSTT_OPTION) //[runma] add for slider changing color.
vSetSliderClr(ENTRY_COL_10, ENTRY_COL_BLACK, ENTRY_COL_WHITE,
0, ENTRY_COL_BLACK, ENTRY_COL_WHITE);
else
vSetSliderClr(ENTRY_COL_RED, ENTRY_COL_BLACK, ENTRY_COL_WHITE,
0, ENTRY_COL_BLACK, ENTRY_COL_WHITE);
vDrawVSlider(WB_SETUP_ITEM, 0, 0);
vMoveVSlider(WB_SETUP_ITEM, _bDataPrev, _bDataCur, prEntry->wMaxOpt);
break;
#endif
case ENTRY_TYPE_GROUPBUTTON:
vCtrlClear(bCtrlType, _bEntry);
vCleanMark(); //r
bOptNum = prEntry->wMaxOpt;
if ((bOptNum+1) > _rMenuRoot.bEntryNo)
{
fgCalDataShowRange(prEntry->wMaxOpt+1, _rMenuRoot.bEntryNo);
bOptNum = _rMenuRoot.bEntryNo - 1;
bOffset = bIndex - _bMinShowData;
}
else
{
_bMinShowDat = 0;
bOffset = 0;
if ((bIndex + bOptNum - _bMinShowData) >= _rMenuRoot.bEntryNo)
{
bOffset = bIndex + bOptNum - _bMinShowData - _rMenuRoot.bEntryNo + 1;
}
/* temp solution for item number bigger then _rMenuRoot.bEntryNo */
if (bOptNum == _rMenuRoot.bEntryNo)
{
bOffset = bIndex + bOptNum - _bMinShowData - _rMenuRoot.bEntryNo;
}
}
vSetMsgCol4(WB_SETUP_ITEM, ENTRY_COL_BG, ENTRY_COL_BG, ENTRY_COL_BLACK, ENTRY_COL_YELLOW);
for(i=0; i <= bOptNum; i++)
{
vSetDataPos(i, bOffset);
_wStartX+=8;
_wEndX+=8;
// Fix Me
if (prEntry->prData[i+_bMinShowDat]->wEntryMsg != OSD_MSG_OSDLANG_CHINESE)
vSetupEntryShow(prEntry->prData[i+_bMinShowDat]->wEntryMsg, WB_SETUP_ITEM);
else
{
vOsdSetLang(EV_OSD_CHINESE);
vSetupEntryShow(prEntry->prData[i+_bMinShowDat]->wEntryMsg, WB_SETUP_ITEM);
vOsdSetLang(bEepromReadByte(OSD_LANG_POSITION));
}
_wStartX-=8;
_wEndX-=8;
if((_bMinShowDat+i) == _bDataSel)
vChgColRep(WB_SETUP_ITEM, OPT_NONE_CLR, OPT_SEL_CLR);
}
break;
case ENTRY_TYPE_H_SLIDER_SIGNED:
cPos = (char) prEntry->wMaxOpt;
cLevel = (char)_bDataCur;
cPos = (char)((WORD)(cLevel+cPos)*10/cPos);
pbStr[0] = 14;
fgPlus = TRUE;
if (cLevel == 0)
{
pbStr[12] = ' ';
pbStr[13] = ' ';
pbStr[14] = '0';
}
else if ((char)cLevel < 0)
{
fgPlus = FALSE;
cLevel = - cLevel;
}
if ((cLevel < 10) && (cLevel != 0))
{
pbStr[12] = ' ';
pbStr[13] = fgPlus ? '+' : '-' ;
pbStr[14] = cLevel + '0';
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -