?? selmenu.c
字號:
{
if (bItem == (bTmp - 1))
{
vSelMenuSetItem(bItem, 0, 0);
}
else
{
for (bIdx = bItem; bIdx < (bTmp - 1); bIdx ++)
{
bItem = bSelMenuReadItem(bIdx + 1, pbTime);
vSelMenuSetItem(bIdx, bItem, pbTime);
}
vSelMenuSetItem(bTmp - 1, 0, 0);
}
vSetSharedInfo(SI_USR_PROGRAM_NS, bTmp - 1);
vSelMenuShowPage(_rSelMenu.bPage, OSD_PROG_ITEM_NORMAL);
#ifdef HILI_USE_OSD
vOsdPosHili(OSD_POS_HILI_SHOW, OSD_POS_PROG_ITEM_1 + (bCurItem%SELMENU_PAGE_SIZE), 0);
#endif /* HILI_USE_OSD */
}
return (TRUE);
case IR_ENTER:
case IR_PLAY:
case IR_PLAY_ENTER:
case IR_PLAY_PAUSE:
if (_rSelMenu.bItemType == PROG_ITEM_TYPE_TT_CH)
{
vSelMenuTtChInputStart();
}
else /* if (_rSelMenu.bItemType == PROG_ITEM_TYPE_TIME) */
{
vSelMenuTimeInputStart();
}
return (TRUE);
default:
return (TRUE);
}
if (bItem != bSelMenuHiliItemNo(_rSelMenu.bPage, _rSelMenu.bHili))
{
vSelMenuGotoItem(bItem);
}
return (TRUE);
}
// *********************************************************************
// Function :
// Description :
// Parameter :
// Return :
// *********************************************************************
static BOOL fgSelMenuBarState(void) large
{
BYTE bState;
BYTE pbTime[3];
BYTE bType = bSharedInfo(SI_USR_PROGRAM_TYPE);
switch (_bIRKey)
{
case IR_UP:
if (bType != SV_PROGRAM_NONE_ITEM)
{
vSelMenuGotoItem(bSelMenuHiliItemNo(_rSelMenu.bPage, SELMENU_PAGE_SIZE - 1));
}
return (TRUE);
case IR_LEFT:
bState = bSelMenuGetBarPrevValid(_rSelMenu.bState);
if (bState == PROG_STATE_SELECT)
{
/* goto last item of current page */
if (bType != SV_PROGRAM_NONE_ITEM)
{
vSelMenuGotoItem(bSelMenuHiliItemNo(_rSelMenu.bPage, SELMENU_PAGE_SIZE - 1));
}
return (TRUE);
}
else
{
vSelMenuGotoBar(bState);
}
break;
case IR_RIGHT:
case IR_DOWN:
bState = bSelMenuGetBarNextValid(_rSelMenu.bState);
if (bState == PROG_STATE_SELECT)
{
return (TRUE); /* not goto next page */
}
else
{
vSelMenuGotoBar(bState);
}
break;
case IR_ENTER:
case IR_PLAY:
case IR_PLAY_ENTER:
case IR_PLAY_PAUSE:
vSelMenuBarActive(_rSelMenu.bState);
return (TRUE);
default:
return (TRUE);
}
if (_rSelMenu.bState != bState)
{
vSelMenuGotoBar(_rSelMenu.bState);
}
return (TRUE);
}
// *********************************************************************
// Function :
// Description :
// Parameter :
// Return :
// *********************************************************************
static void vSelMenuProgTypeChange(BYTE bType) large
{
switch (bType)
{
case SV_PROGRAM_TRACK_ITEM:
_rSelMenu.bSelNoMax = bSharedInfo(SI_TRACK_NS);
_rSelMenu.bItemType = PROG_ITEM_TYPE_TIME;
break;
case SV_PROGRAM_CHAPTER_ITEM:
/* chapter program mode is only valid for one title only DVD */
_rSelMenu.bSelNoMax = bSharedInfo(SI_DVD_TT_CH); /* assume offset 0 is title 1 */
_rSelMenu.bItemType = PROG_ITEM_TYPE_TIME;
break;
case SV_PROGRAM_TT_ITEM:
_rSelMenu.bSelNoMax = bSharedInfo(SI_TT_NS);
_rSelMenu.bItemType = PROG_ITEM_TYPE_TIME;
break;
case SV_PROGRAM_TT_CH_ITEM:
_rSelMenu.bSelNoMax = bSharedInfo(SI_TT_NS);
_rSelMenu.bItemType = PROG_ITEM_TYPE_TT_CH;
break;
case SV_PROGRAM_NONE_ITEM:
default:
_rSelMenu.bSelNoMax = 0;
bType = SV_PROGRAM_NONE_ITEM;
if (fgIsDvdPlay())
{
_rSelMenu.bItemType = PROG_ITEM_TYPE_TT_CH;
}
else
{
_rSelMenu.bItemType = PROG_ITEM_TYPE_TIME;
}
break;
} /* switch (bType) */
if (bType != bSharedInfo(SI_USR_PROGRAM_TYPE))
{
vSetSharedInfo(SI_USR_PROGRAM_TYPE, bType);
vSelMenuResetItem();
}
#ifdef PROGRAM_STOP_CLEAR
else if (bSharedInfo(SI_USR_PBC_CTRL) != SV_PROGRAM)
{
vSelMenuResetItem();
}
#endif
/* show program type */
vOsdShowProgType(OSD_PROG_TYPE_CLEAR, 0, 0); // we need to clear it manually
if (bType == SV_PROGRAM_TT_CH_ITEM)
{
vOsdShowProgType(bType, _rSelMenu.bSelNoMax, 0);
}
else
{
vOsdShowProgType(bType, 1, _rSelMenu.bSelNoMax);
}
/* clear command sync flag */
_rSelMenu.fgWaitProgStop = FALSE;
/* default is page 0, item 0 */
_rSelMenu.bPage = 0;
_rSelMenu.bHili = 0;
/* Page refresh */
vSelMenuShowPage(0, OSD_PROG_ITEM_HEADER);
/* default hili position */
if (bType == SV_PROGRAM_NONE_ITEM)
{
vSelMenuGotoBar(PROG_STATE_EXIT);
}
else if (bSharedInfo(SI_USR_PBC_CTRL) == SV_PROGRAM)
{
vSelMenuGotoBar(PROG_STATE_START_STOP);
}
else
{
vSelMenuGotoItem(0);
}
}
// *********************************************************************
// Function :
// Description :
// Parameter :
// Return :
// *********************************************************************
BYTE bSelMenuNextType(BYTE bCurrType) large
{
BYTE bType = SV_PROGRAM_NONE_ITEM;
/* switch program type */
if (fgIsDvdPlay())
{
if (bCurrType == SV_PROGRAM_NONE_ITEM)
{
if (bSharedInfo(SI_TT_NS) > 1)
{
bType = SV_PROGRAM_TT_CH_ITEM;
}
else /* if (bSharedInfo(SI_TT_NS) == 1) */
{
/* chapter program mode is only valid for one title only DVD */
bType = SV_PROGRAM_CHAPTER_ITEM;
}
}
#ifndef PROGRAM_KEY_EXIT
else if (bCurrType == SV_PROGRAM_TT_CH_ITEM)
{
bType = SV_PROGRAM_TT_ITEM;
}
#endif
else /* if ((bCurrType == SV_PROGRAM_TT_ITEM) || (bCurrType == SV_PROGRAM_CHAPTER_ITEM)) */
{
bType = SV_PROGRAM_NONE_ITEM;
}
}
else if (fgIsVcdPlay() || fgIsCddaPlay())
{
if (bCurrType == SV_PROGRAM_NONE_ITEM)
{
bType = SV_PROGRAM_TRACK_ITEM;
}
else /* if (bCurrType == SV_PROGRAM_TRACK_ITEM) */
{
bType = SV_PROGRAM_NONE_ITEM;
}
}
else if (fgIsIsoPlay())
{
/* not supported */
bType = SV_PROGRAM_NONE_ITEM;
}
return (bType);
}
// *********************************************************************
// Function :
// Description :
// Parameter :
// Return :
// *********************************************************************
void vSelectInit(BYTE fgInit) large
{
BYTE bType;
/* chnage OSD mode to user mode */
vOsdShowWb(OSD_WB_USER);
bType = bSharedInfo(SI_USR_PROGRAM_TYPE);
#ifdef ALL_WB_USE_TRUECOLOR
vCreateWB(WB_SELMENU, TRUE);
vSetWBTcColor(WB_SELMENU);
#else
vCreateWB(WB_SELMENU, FALSE);
#endif
#ifdef FONT_NO_BORDER
vSetMsgCol4(WB_SELMENU, 0, 1, 1, 3);
#else
#ifdef HILI_USE_OSD
vSetMsgCol4(WB_SELMENU, 0, 0, 2, 3);
#else
vSetMsgCol4(WB_SELMENU, 0, 1, 2, 3);
#endif
#endif
vEnableWB(WB_SELMENU);
#ifndef HILI_USE_OSD
/* set hilight color */
vSetHLCol(HL_1, 0x0000); /* green */
#endif
if (fgIsIsoPlay())
{
/* not supported */
vSetExitInputState();
return;
}
else if (bType == SV_PROGRAM_NONE_ITEM)
{
bType = bSelMenuNextType(bType);
}
vSelMenuProgTypeChange(bType);
}
// *********************************************************************
// Function :
// Description :
// Parameter :
// Return :
// *********************************************************************
BOOL fgSelectState(void) large
{
BOOL fgRet = TRUE;
BYTE bType = bSharedInfo(SI_USR_PROGRAM_TYPE);
if (_bIRKey <= IR_ADD10 || _bIRKey == IR_ADD5) // megaa ADD5
{
if (_rSelMenu.bItemType == PROG_ITEM_TYPE_TT_CH)
{
vSelMenuTtChInputStart();
}
else /* if (_rSelMenu.bItemType == PROG_ITEM_TYPE_TIME) */
{
vSelMenuTimeInputStart();
}
}
if ((_rSelMenu.bState == PROG_STATE_INPUT) ||
(_rSelMenu.bState == PROG_STATE_INPUT_1))
{
if (_rSelMenu.bItemType == PROG_ITEM_TYPE_TT_CH)
{
if (fgSelMenuTtChInputState() == TRUE)
{
return (TRUE);
}
}
else /* if (_rSelMenu.bItemType == PROG_ITEM_TYPE_TIME) */
{
if (fgSelMenuTimeInputState() == TRUE)
{
return (TRUE);
}
}
}
// FIXME: use global to get current disc type
switch (_bIRKey)
{
#ifdef SUPPORT_DEVMNG
case IR_MUTE:
{
if (bSharedInfo(SI_EMD_ATTACH) || bSharedInfo(SI_MCR_ATTACH) ||
bSharedInfo(SI_DEVMNG_SWITCH_MODE) != SV_DEVMNG_SWITCH_DEFAULT)
{
vSetExitInputState();
fgRet = FALSE;
}
break;
}
#endif
case IR_PROGRAM:
{
#ifdef PROGRAM_KEY_EXIT
vSetExitInputState();
#else /* PROGRAM key switch type */
if (bSharedInfo(SI_USR_PBC_CTRL) == SV_PROGRAM)
{
/* program off first then change program type */
vSendUopCmd(UOP_PROGRAM, SV_PROGRAM_STOP, 0, 0);
}
bType = bSelMenuNextType(bType);
vSelMenuProgTypeChange(bType);
#endif
break;
} /* case IR_PROGRAM: */
case IR_TITLE_MENU:
/* switch title no when play DVD */
/* vOsdPosShow(OSD_POS_NORMAL, ); */
break;
case IR_NEXT:
if (_rSelMenu.fgNextValid)
{
vSelMenuBarActive(PROG_STATE_NEXT);
}
break;
case IR_PREV:
if (_rSelMenu.fgPrevValid)
{
vSelMenuBarActive(PROG_STATE_PREV);
}
break;
default:
{
if (fgIsAVContrlKey(_bIRKey))
{
/* pass the A/V control key */
fgRet = FALSE;
}
else if (_rSelMenu.bState == PROG_STATE_SELECT)
{
fgRet = fgSelMenuSelectState();
}
else if ((_rSelMenu.bState == PROG_STATE_INPUT) ||
(_rSelMenu.bState == PROG_STATE_INPUT_1))
{
/* error handle: force input end */
if (_rSelMenu.bItemType == PROG_ITEM_TYPE_TT_CH)
{
_rNumInStateCtx.wNum = bSelMenuReadItem(bSelMenuHiliItemNo(_rSelMenu.bPage, _rSelMenu.bHili),
_rNumInStateCtx.bDig);
vSelMenuTtChInputEnd(_rNumInStateCtx.wNum, _rNumInStateCtx.bDig[0]);
}
else /* if (_rSelMenu.bItemType == PROG_ITEM_TYPE_TIME) */
{
vSelMenuTimeInputEnd(bSelMenuReadItem(bSelMenuHiliItemNo(_rSelMenu.bPage, _rSelMenu.bHili),0));
}
}
else /* default is in BAR state */
{
fgRet = fgSelMenuBarState();
}
break;
} /* default */
} /* switch (_bIRKey) */
return (fgRet);
}
// *********************************************************************
// Function :
// Description :
// Parameter :
// Return :
// *********************************************************************
void vSelectExit(void) large
{
if ((_rSelMenu.bState == PROG_STATE_INPUT) ||
(_rSelMenu.bState == PROG_STATE_INPUT_1))
{
/* force input end */
if (_rSelMenu.bItemType == PROG_ITEM_TYPE_TT_CH)
{
_rNumInStateCtx.wNum = bSelMenuReadItem(bSelMenuHiliItemNo(_rSelMenu.bPage, _rSelMenu.bHili),
_rNumInStateCtx.bDig);
vSelMenuTtChInputEnd(_rNumInStateCtx.wNum, _rNumInStateCtx.bDig[0]);
}
else /* if (_rSelMenu.bItemType == PROG_ITEM_TYPE_TIME) */
{
vSelMenuTimeInputEnd(bSelMenuReadItem(bSelMenuHiliItemNo(_rSelMenu.bPage, _rSelMenu.bHili),0));
}
}
vDeleteWB(WB_SELMENU);
vOsdShowProgType(OSD_PROG_TYPE_CLEAR, 0, 0);
vOsdPosHili(OSD_POS_HILI_CLEAR, 0, 0);
/* restore OSD mode */
vOsdShowWb(OSD_WB_RESTORE);
}
// *********************************************************************
// Function :
// Description :
// Parameter :
// Return :
// *********************************************************************
void vSelMenuUsrPbcChange(void) large
{
if ((bSharedInfo(SI_USR_PBC_CTRL) != SV_PROGRAM) &&
(_rSelMenu.fgWaitProgStop == TRUE))
{
_rSelMenu.fgWaitProgStop = FALSE;
#ifdef PROGRAM_STOP_CLEAR
vSelMenuResetItem();
#endif
//[CQ]PL00205271
vSelMenuShowPage(_rSelMenu.bPage, OSD_PROG_ITEM_NORMAL); /* update current page */
}
}
#else /* PLAYER_PROGRAM dummy function */
static code BYTE pbSelMenuCodeSegment[1] = { FALSE }; /* for code segment */
void vSelectInit(BYTE fgInit) large { return; }
BOOL fgSelectState(void) large
{
vOsdShowProgType(0, 0, 0);
return (pbSelMenuCodeSegment[0]);
}
void vSelectExit(void) large { return; }
void vSelMenuReset(void) large { return; }
void vSelMenuUsrPbcChange(void) large { return; }
#endif /* PLAYER_PROGRAM */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -