📄 o_search_display.c
字号:
case MS_OP_ENTER:
{
MSO_TRACK __NEAR* pChapter = (MSO_TRACK __NEAR*)pThis;
MSO_CONTAINER __NEAR* pParent = pThis->mpParent;
MSO_TRACK __NEAR* pTitle = (MSO_TRACK __NEAR*)MS_FindObjectFromDescriptor(pParent, (MS_DESCRIPTOR*)&oTitleDescriptor);
UINT16 wTitle = pTitle->moParam.mwTrack;
UINT16 wChapter = pChapter->moParam.mwTrack;
if(INVALID_TRACK == wTitle)
wTitle = CoreAPI_GetCurrentTitleGroupNum();
if(!_IsTitleChapterValid(wTitle, wChapter))
{
pTitle->moParam.mwTrack = INVALID_TRACK;
pChapter->moParam.mwTrack = INVALID_TRACK;
MS_DisplayAddObject(pThis);
MS_DisplayAddObject((MSO_OBJECT __NEAR* )pTitle);
}
else if(CoreAPI_GotoEntry(wTitle, wChapter))
{
return MS_OP_CLOSE_PARENT;
}
else
{
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_BY_DISC);
return MS_OP_CLOSE_PARENT;
}
}
return MS_OP_NONE;
}
return _BasicTrackEditOperation(pThis, MsOp, lParam);
}
/***************************************************************************************
* Function : _TrackOperation
*
* In :
*
* Out :
*
* Desc : The Track operation function.
****************************************************************************************/
#pragma argsused
STATIC MS_OP _TrackOperation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{
switch(MsOp)
{
case MS_OP_INIT:
{
MSO_TRACK __NEAR* pTrack = (MSO_TRACK __NEAR*)pThis;
pTrack->moParam.mwTrack = CoreAPI_GetCurrentChapterTrackNum();
pTrack->moParam.mwTotalTrack = CoreAPI_GetTotalChapterTrackNum(0);
}
break;
case MS_OP_TICK:
{
if (!MS_IsFocused(pThis))
{
MSO_TRACK __NEAR* pTrack = (MSO_TRACK __NEAR*)pThis;
BOOL bTrackChanged = FALSE;
UINT16 wTrack;
wTrack = CoreAPI_GetCurrentChapterTrackNum();
if (pTrack->moParam.mwTrack != wTrack)
{
pTrack->moParam.mwTrack = wTrack;
bTrackChanged = TRUE;
}
wTrack = CoreAPI_GetTotalChapterTrackNum(0);
if (pTrack->moParam.mwTotalTrack != wTrack)
{
pTrack->moParam.mwTotalTrack = wTrack;
bTrackChanged = TRUE;
}
if (bTrackChanged)
MS_DisplayAddObject(pThis);
}
}
break;
case MS_OP_ENTER:
{
MSO_TRACK __NEAR* pTrack = (MSO_TRACK __NEAR*)pThis;
UINT16 wTrack = pTrack->moParam.mwTrack;
switch (g_disc_type)
{
case DEC_DISC_TYPE_VCD: // Fall Through !!!
case DEC_DISC_TYPE_SVCD:
if (CoreAPI_GotoEntry(0, wTrack))
return MS_OP_CLOSE_PARENT;
else
{
MS_SendOperation(pThis, MS_OP_CLEAR, 0);
return MS_OP_NONE;
}
default: // Clips
if(INVALID_TRACK != wTrack)
{
if ((wTrack > CoreAPI_GetTotalChapterTrackNum(0)) || (!wTrack))
{
MS_SendOperation(pThis, MS_OP_CLEAR, 0);
return MS_OP_NONE;
}
else
{
MSO_OBJECT __NEAR* pParent = (MSO_OBJECT __NEAR*)pThis->mpParent;
pParent = (MSO_OBJECT __NEAR*)pParent->mpParent;
MS_SendOperation((MSO_OBJECT __NEAR*)MS_GetParentPtr(pParent), MS_OP_JUMP_TO_TRACK, wTrack - 1);
MS_SendOperation((MSO_OBJECT __NEAR*)pParent, MS_OP_CLOSE_PARENT, 0);
return MS_OP_JUMP_TO_TRACK;
}
}
return MS_OP_NONE;
}
}
}
return _BasicTrackEditOperation(pThis, MsOp, lParam);
}
/***************************************************************************************
* Function : _TitleTextOperation
*
* In :
*
* Out :
*
* Desc : Title Text user operation function.
****************************************************************************************/
STATIC MS_OP _TitleTextOperation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{
switch(MsOp)
{
case MS_OP_FOCUS_CHANGE:
if (!MS_IsFocused(pThis))
{
MSO_CONTAINER __NEAR* pParent = pThis->mpParent;
MSO_TRACK __NEAR* pTitle = (MSO_TRACK __NEAR*)MS_FindObjectFromDescriptor(pParent, (MS_DESCRIPTOR*)&oTitleDescriptor);
if (MS_IsFocused(pTitle))
{
MSO_TRACK __NEAR* pChapter = (MSO_TRACK __NEAR*)MS_FindObjectFromDescriptor(pParent, (MS_DESCRIPTOR*)&oChapterDescriptor);
pChapter->moParam.mwTrack = INVALID_TRACK;
MS_DisplayAddObject((MSO_OBJECT __NEAR* )pChapter);
}
else
{
pTitle->moParam.mwTrack = INVALID_TRACK;
MS_DisplayAddObject((MSO_OBJECT __NEAR* )pTitle);
}
}
break;
case MS_OP_ENTER:
MsOp = MS_OP_RIGHT;
break;
}
return OTEXT_Operation(pThis, MsOp, lParam);
}
/***************************************************************************************
* Function : _TrackTextOperation
*
* In :
*
* Out :
*
* Desc : Track Text user operation function.
****************************************************************************************/
STATIC MS_OP _TrackTextOperation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{
switch(MsOp)
{
case MS_OP_ENTER:
MsOp = MS_OP_RIGHT;
break;
}
return OTEXT_Operation(pThis, MsOp, lParam);
}
/***************************************************************************************
* Function : _TimeTextOperation
*
* In :
*
* Out :
*
* Desc : Time Text user operation function.
****************************************************************************************/
STATIC MS_OP _TimeTextOperation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{
switch(MsOp)
{
case MS_OP_ENTER:
MsOp = MS_OP_RIGHT;
break;
}
return OTEXT_Operation(pThis, MsOp, lParam);
}
/***************************************************************************************
* Function : _BasicTimeEditOperation
*
* In :
*
* Out :
*
* Desc : Basic operation for all the time edits.
****************************************************************************************/
#pragma argsused
STATIC MS_OP _BasicTimeEditOperation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{
switch(MsOp)
{
case MS_OP_FOCUS_CHANGE:
{
MSO_TIME __NEAR* pTime = (MSO_TIME __NEAR*)pThis;
pTime->moParam.mdwTime = INVALID_TIME;
MS_DisplayAddObject(pThis);
}
break;
case MS_OP_0: // Fall Through
case MS_OP_1: // Fall Through
case MS_OP_2: // Fall Through
case MS_OP_3: // Fall Through
case MS_OP_4: // Fall Through
case MS_OP_5: // Fall Through
case MS_OP_6: // Fall Through
case MS_OP_7: // Fall Through
case MS_OP_8: // Fall Through
case MS_OP_9:
{
MSO_TIME __NEAR* pTime = (MSO_TIME __NEAR*)pThis;
UINT16 wValue = MsOp - MS_OP_0;
if (pTime->moParam.mwNumDigits < 6)
pTime->moParam.mwNumDigits++;
else
pTime->moParam.mdwTime = (pTime->moParam.mdwTime) % 100000ul;
if(INVALID_TIME == pTime->moParam.mdwTime)
pTime->moParam.mdwTime = wValue;
else
pTime->moParam.mdwTime = (pTime->moParam.mdwTime * 10) + wValue;
MS_DisplayAddObject(pThis);
}
return MS_OP_NONE;
case MS_OP_CLEAR:
{
MSO_TIME __NEAR* pTime = (MSO_TIME __NEAR*)pThis;
if(INVALID_TIME != pTime->moParam.mdwTime)
{
pTime->moParam.mdwTime = INVALID_TIME;
pTime->moParam.mwNumDigits = 0;
MS_DisplayAddObject(pThis);
}
}
return MS_OP_NONE;
default:
break;
}
return MsOp;
}
/***************************************************************************************
* Function : _TimeOperation
*
* In :
*
* Out :
*
* Desc : The Track/Title time object operation function.
****************************************************************************************/
#pragma argsused
STATIC MS_OP _TimeOperation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{
switch(MsOp)
{
case MS_OP_INIT:
{
MSO_TIME __NEAR* pTime = (MSO_TIME __NEAR*)pThis;
pTime->moParam.mdwTime = CoreAPI_GetElapseTime();
switch(CoreAPI_GetCurrentMediaType())
{
case MEDIA_TYPE_VCD:
case MEDIA_TYPE_SVCD:
pTime->moParam.mwTotalTime = CoreAPI_GetTotalChapterTrackTime();
break;
default:
pTime->moParam.mwTotalTime = CoreAPI_GetTotalTime();
break;
}
pTime->moParam.mwNumDigits = 0;
}
break;
case MS_OP_TICK:
{
MSO_TIME __NEAR* pTime = (MSO_TIME __NEAR*)pThis;
BOOL bTimeChanged = FALSE;
UINT32 dwTime;
if (!MS_IsFocused(pThis))
{
dwTime = CoreAPI_GetElapseTime();
if (pTime->moParam.mdwTime != dwTime)
{
pTime->moParam.mdwTime = dwTime;
bTimeChanged = TRUE;
}
}
switch(CoreAPI_GetCurrentMediaType())
{
case MEDIA_TYPE_VCD:
case MEDIA_TYPE_SVCD:
dwTime = CoreAPI_GetTotalChapterTrackTime();
break;
default:
dwTime = CoreAPI_GetTotalTime();
break;
}
if (pTime->moParam.mwTotalTime != dwTime)
{
pTime->moParam.mwTotalTime = dwTime;
bTimeChanged = TRUE;
}
if (bTimeChanged)
MS_DisplayAddObject(pThis);
}
break;
case MS_OP_ENTER:
{
MSO_TIME __NEAR* pTime = (MSO_TIME __NEAR*)pThis;
UINT32 dwSeconds = NUM_NumberToSeconds(pTime->moParam.mdwTime);
switch(g_disc_type)
{
case DEC_DISC_TYPE_VCD: // Fall Through !!!
case DEC_DISC_TYPE_SVCD:
{
if(CoreAPI_GotoTime(dwSeconds, FALSE))
return MS_OP_CLOSE_PARENT;
MS_SendOperation(pThis, MS_OP_CLEAR, 0);
}
return MS_OP_NONE;
case DEC_DISC_TYPE_DVD_VIDEO: // Fall Through !!!
#ifdef DVD_AUDIO_SUPPORT
case DEC_DISC_TYPE_DVD_AUDIO: // Fall Through !!!
#endif // DVD_AUDIO_SUPPORT
#ifdef DVD_VR_SUPPORT
case DEC_DISC_TYPE_DVD_VR:
#endif // DVD_VR_SUPPORT
{
if(!_IsTitleTimeValid(dwSeconds))
{
MS_SendOperation(pThis, MS_OP_CLEAR, 0);
return MS_OP_NONE;
}
else if(CoreAPI_GotoTime(dwSeconds, FALSE))
return MS_OP_CLOSE_PARENT;
else
{
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_BY_DISC);
return MS_OP_CLOSE_PARENT;
}
}
default: // Clips
{
if(INVALID_TIME != pTime->moParam.mdwTime)
{
if(dwSeconds > CoreAPI_GetTotalTime())
{
MS_SendOperation(pThis, MS_OP_CLEAR, 0);
return MS_OP_NONE;
}
else
{
MSO_OBJECT __NEAR* pParent = (MSO_OBJECT __NEAR*)pThis->mpParent;
pParent = (MSO_OBJECT __NEAR*)pParent->mpParent;
MS_SendOperation((MSO_OBJECT __NEAR*)MS_GetParentPtr(pParent), MS_OP_JUMP_TO_TIMEINDEX, dwSeconds);
MS_SendOperation((MSO_OBJECT __NEAR*)pParent, MS_OP_CLOSE_PARENT, 0);
return MS_OP_JUMP_TO_TIMEINDEX;
}
}
return MS_OP_NONE;
}
}
} // End of case MS_OP_ENTER
default:
break;
}
return _BasicTimeEditOperation(pThis, MsOp, lParam);
}
/***************************************************************************************
* Function : _BtnRepeatOperation
*
* In : pThis = Pointer to the "Repeat" tool button object.
*
* MsOp = Operation ID.
*
* lParam = Parameter associated with an MS_OP if any.
*
* Out : None.
*
* Return : ID of the operation that is to be propagated once processing is done,
* otherwise MS_OP_NONE.
*
* Desc : This function processes all operations/events received by the "Repeat" button.
****************************************************************************************/
#pragma argsused
static MS_OP _BtnRepeatOperation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{
switch(MsOp)
{
case MS_OP_INIT:
case MS_OP_ON_DEFROST:
{
MSO_REPEAT __NEAR* pRepeat = (MSO_REPEAT __NEAR*)pThis;
pRepeat->moParam.mwRepeatMode = _GetRepeatNum();
}
break;
case MS_OP_FOCUS_CHANGE:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -