📄 stpmain.c
字号:
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;
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;
_wEndY = _wStartY + 32 * _rMenuRoot.bEntryNo + 15;
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 ((_bMinShowDat <= _bDataCur) && (_bMinShowDat + bLength >/*=*/ _bDataCur)) //[runma] remove word =
{
return FALSE;
}
if (bTotal > bLength)
{
if (_bDataPrev == INVALID_DATA)
{
_bMinShowDat = _bDataSel;
}
else if (_bDataCur != INVALID_DATA)
{
_bMinShowDat = _bDataCur;
}
if ((_bMinShowDat + bLength) >= bTotal)
{
_bMinShowDat = bTotal - bLength;
}
_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;
vRectangle(WB_SETUP_ITEM, 0, 0, 1, ENTRY_COL_BG);
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);
}
}
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;
}
}
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;
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';
}
else if (cLevel != 0)
{
cLevel = bHEXToBCD(cLevel);
pbStr[12] = fgPlus ? '+' : '-' ;
pbStr[13] = BCD_HI(cLevel) + '0';
pbStr[14] = BCD_LO(cLevel) + '0';
}
for(i=0; i<cPos/2; i++)
pbStr[i+1] = ICON_VOL_1;//6;
if (cPos%2)
{
pbStr[i+1] = ICON_VOL_2;//7;
i ++;
}
for(; i<10; i++)
{
pbStr[i+1] = ICON_VOL_0;//5;
}
pbStr[11] = ' ';
vSetItemPos(_bEntry, _rMenuRoot.prMenu[_bMenu]->bTotalEntry);
vSetMsgCol4(WB_SETUP_ITEM, ENTRY_COL_GRAY, ENTRY_COL_GRAY, ENTRY_COL_GRAY, ENTRY_COL_YELLOW);
vPasteMsgStr(WB_SETUP_ITEM, _rMenuRoot.prMenu[_bMenu]->prEntry[_bEntry-1]->wEntryMsg, pbStr);
break;
case ENTRY_TYPE_EDITBOX:
case ENTRY_TYPE_EDITBOX_ORDERED:
vSetItemPos(_bEntry, _rMenuRoot.prMenu[_bMenu]->bTotalEntry);
vSetMsgCol4(WB_SETUP_ITEM, ENTRY_COL_GRAY, ENTRY_COL_GRAY, ENTRY_COL_GRAY, ENTRY_COL_BLACK);
vSetupEntryShow(prEntry->wEntryMsg, WB_SETUP_ITEM);
_wStartX = STP_DATA_START_X;
_wEndX = STP_DATA_START_X + prEntry->wMaxOpt * 20;
vCreateButton(WB_SETUP_ITEM, DATA_BTN_BASE+_bEntry, 3);
if (_bEntry == 1)
vSetBtnCol(WB_SETUP_ITEM, ENTRY_COL_YELLOW, ENTRY_COL_DARKGRAY, ENTRY_COL_BLACK, ENTRY_COL_WHITE);
else
vSetBtnCol(WB_SETUP_ITEM, ENTRY_COL_DARKGRAY, ENTRY_COL_YELLOW, ENTRY_COL_BLACK, ENTRY_COL_WHITE);
vSelButton(WB_SETUP_ITEM, DATA_BTN_BASE+_bEntry);
break;
case ENTRY_TYPE_STATIC:
pbStr[0] = 11;
pbStr[3] = pbStr[6] = pbStr[9] = '.';
for(i=0; i<4; i++)
{
pbStr[3*i+1] = bDigToAsc(BCD_HI(bSharedInfo(prEntry->wSIPos + i)));
pbStr[3*i+2] = bDigToAsc(BCD_LO(bSharedInfo(prEntry->wSIPos + i)));
}
_wStartX = DIALOG_X + DIALOG_START_X;
_wStartY = STP_MENU_START_Y + STP_MENU_ENTRY_H * (_bEntry - 1) + 15,
vSetMsgCol4(WB_SETUP_ITEM, ENTRY_COL_GRAY, ENTRY_COL_GRAY, ENTRY_COL_GRAY, 3);
vOsdMsgPaste(WB_SETUP_ITEM, prEntry->wEntryMsg);
_wStartX = DIALOG_X + DIALOG_START_X + 200;
vOsdShowStr(WB_SETUP_ITEM, pbStr);
break;
case ENTRY_TYPE_CNUM:
pbStr[0] = 1;
pbStr[1] = '0' + bEepromReadByte(REGION_CODE_POSITION);
_wStartX = DIALOG_X + DIALOG_START_X;
_wStartY = STP_MENU_START_Y + STP_MENU_ENTRY_H * (_bEntry - 1) + 15,
vSetMsgCol4(WB_SETUP_ITEM, ENTRY_COL_GRAY, ENTRY_COL_GRAY, ENTRY_COL_GRAY, 3);
vOsdMsgPaste(WB_SETUP_ITEM, prEntry->wEntryMsg);
_wStartX = DIALOG_X + DIALOG_START_X + 268;
vOsdShowStr(WB_SETUP_ITEM, pbStr);
_wStartX -= 64;
vShowWbHiliXY(WB_SETUP_ITEM, HL_2,
_wStartX, _wStartY, _wStartX + 150, _wStartY + 30);
vSetHLRng(HL_2, WB_SETUP_ITEM);
vShowHL(HL_2);
break;
}
}
static BOOL fgProcCtrl(BYTE bCtrlType, sEntry *prEntry, BOOL fgInc) large
{
BYTE bTemp;
WORD wEEPos, wSIPos;
if(prEntry == NULL)
return FALSE;
wEEPos = prEntry->wEEPos;
wSIPos = prEntry->wSIPos;
switch (bCtrlType)
{
case TYPE_USER_1:
if (fgInc == TRUE)
{
if (_bDataCur /*bEepromReadByte(DRNG_POS)*/ < 8) //[runma] -> _bDataCur
{
//fgEepromWriteByte(DRNG_POS, bEepromReadByte(DRNG_POS) + 1); //[runma] del line, do we need to write for every ctrlmove?
_bDataCur ++; //[runma] add line.
}
else
{
return FALSE;
}
}
else
{
if (_bDataCur /*bEepromReadByte(DRNG_POS)*/ > 0) //[runma] -> _bDataCur
{
//fgEepromWriteByte(DRNG_POS, bEepromReadByte(DRNG_POS)-1); //[runma] del line.
_bDataCur --; //[runma] add line.
}
else
{
return FALSE;
}
}
fgEepromWriteByte(wEEPos, _bDataCur);
break;
case ENTRY_TYPE_GROUPBUTTON:
if (fgInc == FALSE)
{
_bDataPrev = _bDataCur;
if (_bDataCur > 0)
{
_bDataCur--;
}
else
{
#if 1
return FALSE;
#else
_bDataCur = bOptMaxEntryNum(_rMenuRoot, _bMenu, _bEntry);
#endif
}
}
else
{
_bDataPrev = _bDataCur;
_bDataCur++;
if (_bDataCur == (bOptMaxEntryNum(_rMenuRoot, _bMenu, _bEntry) + 1))
{
#if 0
_bDataCur = 0;
#else
_bDataCur = bOptMaxEntryNum(_rMenuRoot, _bMenu, _bEntry);
return (TRUE);
#endif
}
}
break;
case ENTRY_TYPE_H_SLIDER_SIGNED:
if (fgInc)
{
if ((char) _bDataCur < (char) prEntry->wMaxOpt)
{
_bDataPrev = _bDataCur;
_bDataCur++;
fgEepromWriteByte(wEEPos, (char)_bDataCur);
if(wSIPos != NULL_SI)
{
vSetSharedInfo(wSIPos, (char)_bDataCur);
}
}
}
else
{
if ((char)_bDataCur > (char) (0 - prEntry->wMaxOpt))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -