📄 o_search_display.c
字号:
pSearchDisplayContainer->moParam.mwComponentType = eComponentTypeTitleChapterOrTrack;
break;
default://Clips
if (DeviceManager_IsDiscCDDA())
{
MS_ComponentOpen( (MS_DESCRIPTOR_COMPONENT*)&oSearchDisplayTrackDescriptor,
(MSO_CONTAINER __NEAR*)pThis);
pSearchDisplayContainer->moParam.mwComponentType = eComponentTypeTitleChapterOrTrack;
}
else
{
switch (CoreAPI_GetCurrentClipType())
{
case eClipType_JPEG:
case eClipType_MPEG:
case eClipType_AVI:
MS_ComponentOpen( (MS_DESCRIPTOR_COMPONENT*)&oSearchDisplayTrackDescriptor,
(MSO_CONTAINER __NEAR*)pThis);
pSearchDisplayContainer->moParam.mwComponentType = eComponentTypeTitleChapterOrTrack;
break;
default:
MS_ComponentOpen( (MS_DESCRIPTOR_COMPONENT*)&oSearchDisplayTimeDescriptor,
(MSO_CONTAINER __NEAR*)pThis);
pSearchDisplayContainer->moParam.mwComponentType = eComponentTypeTime;
break;
}
}
break;
}
if (!_IsTrackComponentFocusable())
MS_ScreenSetFocusObject(pThis);
}
break;
#ifdef D_CLOSE_SEARCH_DISPLAY_WHEN_NO_USER_INPUT
case MS_OP_LEFT:
case MS_OP_RIGHT:
case MS_OP_ENTER:
{
MSO_SEARCH_DISPLAY_CONTAINER __NEAR* pSearchDisplayContainer = (MSO_SEARCH_DISPLAY_CONTAINER __NEAR*)pThis;
pSearchDisplayContainer->moParam.mwCloseSearchDisplayTimeOut = CLOSE_SEARCH_DISPLAY_TIMEOUT_SECONDS * 10;
}
break;
case MS_OP_TICK:
{
MSO_SEARCH_DISPLAY_CONTAINER __NEAR* pSearchDisplayContainer = (MSO_SEARCH_DISPLAY_CONTAINER __NEAR*)pThis;
if (pSearchDisplayContainer->moParam.mwCloseSearchDisplayTimeOut)
{
pSearchDisplayContainer->moParam.mwCloseSearchDisplayTimeOut--;
if (0 == pSearchDisplayContainer->moParam.mwCloseSearchDisplayTimeOut)
{
MS_SendOperation(pThis, MS_OP_CLOSE_PARENT, 0);
}
}
}
break;
#endif
case MS_OP_DISPLAY:
{
MSO_SEARCH_DISPLAY_CONTAINER __NEAR* pSearchDisplayContainer = (MSO_SEARCH_DISPLAY_CONTAINER __NEAR*)pThis;
switch (pSearchDisplayContainer->moParam.mwComponentType)
{
case eComponentTypeTitleChapterOrTrack:
switch (CoreAPI_GetCurrentMediaType())
{
case MEDIA_TYPE_DVD_VIDEO:
MS_ComponentClose((MS_DESCRIPTOR_COMPONENT*)&oSearchDisplayTitleChapterDescriptor, FALSE);
break;
default:
MS_ComponentClose((MS_DESCRIPTOR_COMPONENT*)&oSearchDisplayTrackDescriptor, FALSE);
break;
}
if (_IsTimeComponentExist())
{
MS_ComponentOpen( (MS_DESCRIPTOR_COMPONENT*)&oSearchDisplayTimeDescriptor,
(MSO_CONTAINER __NEAR*)pThis);
pSearchDisplayContainer->moParam.mwComponentType = eComponentTypeTime;
}
else if (_IsAngleRepeatComponentExist())
{
MS_ComponentOpen( (MS_DESCRIPTOR_COMPONENT*)&oAngleRepeatDescriptor,
(MSO_CONTAINER __NEAR*)pThis);
pSearchDisplayContainer->moParam.mwComponentType = eComponentTypeAngleRepeat;
}
else
{
MS_SendOperation(pThis, MS_OP_CLOSE_PARENT, 0);
}
break;
case eComponentTypeTime:
if (_IsAngleRepeatComponentExist())
{
MS_ComponentClose((MS_DESCRIPTOR_COMPONENT*)&oSearchDisplayTimeDescriptor, FALSE);
MS_ComponentOpen( (MS_DESCRIPTOR_COMPONENT*)&oAngleRepeatDescriptor,
(MSO_CONTAINER __NEAR*)pThis);
pSearchDisplayContainer->moParam.mwComponentType = eComponentTypeAngleRepeat;
}
else
{
MS_SendOperation(pThis, MS_OP_CLOSE_PARENT, 0);
}
break;
case eComponentTypeAngleRepeat:
MS_SendOperation(pThis, MS_OP_CLOSE_PARENT, 0);
break;
}
return MS_OP_NONE;
}
case MS_OP_EJECT: // Fall through !!!
case MS_OP_MENU: // Fall through !!!
case MS_OP_PBC: // Fall through !!!
case MS_OP_STOP:
MS_SendOperation(pThis, MS_OP_CLOSE_PARENT, 0);
break;
}
return MS_ComponentBasicOperation(pThis, MsOp, lParam);
}
/***************************************************************************************
* Function : _SearchDisplayOperation
*
* In :
*
* Out :
*
* Desc : The component user operation function.
****************************************************************************************/
STATIC MS_OP _SearchDisplayTrackComponentOperation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{
switch(MsOp)
{
case MS_OP_INIT:
{
if (_IsTrackComponentFocusable())
MS_ComponentInitFocus((MSO_COMPONENT __NEAR*)pThis);
}
break;
}
//Frank: Important, we shouldn't use MS_ComponentBasicOperation.
MsOp = MS_BasicContainerOperation(pThis, MsOp, lParam);
switch(MsOp)
{
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:
return MS_OP_NONE;
default:
return MsOp;
}
}
/***************************************************************************************
* Function : _SearchDisplayOperation
*
* In :
*
* Out :
*
* Desc : The component user operation function.
****************************************************************************************/
STATIC MS_OP _SearchDisplayComponentOperation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{
switch(MsOp)
{
case MS_OP_INIT:
{
MS_ComponentInitFocus((MSO_COMPONENT __NEAR*)pThis);
}
break;
}
//Frank: Important, we shouldn't use MS_ComponentBasicOperation.
MsOp = MS_BasicContainerOperation(pThis, MsOp, lParam);
switch(MsOp)
{
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:
return MS_OP_NONE;
default:
return MsOp;
}
}
/***************************************************************************************
* Function : _BasicTrackEditOperation
*
* In :
*
* Out :
*
* Desc : Basic operation for Title, chapter and track objects.
****************************************************************************************/
#pragma argsused
STATIC MS_OP _BasicTrackEditOperation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{
switch(MsOp)
{
case MS_OP_FOCUS_CHANGE:
{
if (MS_IsFocused(pThis))
{
MSO_TRACK __NEAR* pTrack = (MSO_TRACK __NEAR*)pThis;
pTrack->moParam.mwTrack = INVALID_TRACK;
}
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_TRACK __NEAR* pTrack = (MSO_TRACK __NEAR*)pThis;
UINT8 cValue = MsOp - MS_OP_0;
if(INVALID_TRACK == pTrack->moParam.mwTrack )
{
pTrack->moParam.mwTrack = cValue;
MS_DisplayAddObject(pThis);
}
else
{
pTrack->moParam.mwTrack = (pTrack->moParam.mwTrack * 10) + cValue;
pTrack->moParam.mwTrack = (pTrack->moParam.mwTrack) % 1000;
MS_DisplayAddObject(pThis);
}
}
return MS_OP_NONE;
case MS_OP_CLEAR:
{
MSO_TRACK __NEAR* pTrack = (MSO_TRACK __NEAR*)pThis;
if(INVALID_TRACK != pTrack->moParam.mwTrack)
{
pTrack->moParam.mwTrack = INVALID_TRACK;
MS_DisplayAddObject(pThis);
}
}
return MS_OP_NONE;
}
return MsOp;
}
/***************************************************************************************
* Function : _TitleOperation
*
* In :
*
* Out :
*
* Desc : The Title operation function.
****************************************************************************************/
#pragma argsused
STATIC MS_OP _TitleOperation(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_GetCurrentTitleGroupNum();
pTrack->moParam.mwTotalTrack = CoreAPI_GetTotalTitleGroupNum();
}
break;
case MS_OP_TICK:
{
MSO_CONTAINER __NEAR* pParent = pThis->mpParent;
MSO_TEXT __NEAR* pTitleText = (MSO_TEXT __NEAR*)MS_FindObjectFromDescriptor(pParent, (MS_DESCRIPTOR*)&oTitleTextDescriptor);
if (MS_IsFocused(pTitleText))
{
MSO_TRACK __NEAR* pTitle = (MSO_TRACK __NEAR*)pThis;
BOOL bTitleChanged = FALSE;
UINT16 wTitle;
wTitle = CoreAPI_GetCurrentTitleGroupNum();
if (pTitle->moParam.mwTrack != wTitle)
{
pTitle->moParam.mwTrack = wTitle;
bTitleChanged = TRUE;
}
wTitle = CoreAPI_GetTotalTitleGroupNum();
if (pTitle->moParam.mwTotalTrack != wTitle)
{
pTitle->moParam.mwTotalTrack = wTitle;
bTitleChanged = TRUE;
}
if (bTitleChanged)
MS_DisplayAddObject(pThis);
}
}
break;
case MS_OP_FOCUS_CHANGE:
{
MSO_CONTAINER __NEAR* pParent = pThis->mpParent;
MSO_TRACK __NEAR* pChapter = (MSO_TRACK __NEAR*)MS_FindObjectFromDescriptor(pParent, (MS_DESCRIPTOR*)&oChapterDescriptor);
if ((!MS_IsFocused(pThis)) && MS_IsFocused(pChapter))
{
MSO_TRACK __NEAR* pTitle = (MSO_TRACK __NEAR*)pThis;
UINT16 wTitleNum = pTitle->moParam.mwTrack;
UINT16 wAvailableChapterNum = 0;
if (wTitleNum > CoreAPI_GetTotalTitleGroupNum())
{
pTitle->moParam.mwTrack = INVALID_TRACK;
MS_DisplayAddObject(pThis);
wTitleNum = CoreAPI_GetCurrentTitleGroupNum();
}
wAvailableChapterNum = CoreAPI_GetTotalChapterTrackNum(wTitleNum);
if ( pChapter->moParam.mwTotalTrack != wAvailableChapterNum)
{
pChapter->moParam.mwTotalTrack = (UINT16)wAvailableChapterNum;
MS_DisplayAddObject((MSO_OBJECT __NEAR*)pChapter);
}
}
}
break;
case MS_OP_ENTER:
{
MSO_TRACK __NEAR* pTitle = (MSO_TRACK __NEAR*)pThis;
MSO_CONTAINER __NEAR* pParent = pThis->mpParent;
MSO_TRACK __NEAR* pChapter = (MSO_TRACK __NEAR*)MS_FindObjectFromDescriptor(pParent, (MS_DESCRIPTOR*)&oChapterDescriptor);
UINT16 wTitle = pTitle->moParam.mwTrack;
UINT16 wChapter = pChapter->moParam.mwTrack;
if(INVALID_TRACK == wChapter)
wChapter = 1;
if(!_IsTitleChapterValid(wTitle, wChapter))
{
pTitle->moParam.mwTrack = INVALID_TRACK;
pChapter->moParam.mwTrack = INVALID_TRACK;
MS_DisplayAddObject(pThis);
MS_DisplayAddObject((MSO_OBJECT __NEAR* )pChapter);
}
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 : _ChapterOperation
*
* In :
*
* Out :
*
* Desc : The Chapter operation function.
****************************************************************************************/
#pragma argsused
STATIC MS_OP _ChapterOperation(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:
{
MSO_CONTAINER __NEAR* pParent = pThis->mpParent;
MSO_TEXT __NEAR* pTitleText = (MSO_TEXT __NEAR*)MS_FindObjectFromDescriptor(pParent, (MS_DESCRIPTOR*)&oTitleTextDescriptor);
if (MS_IsFocused(pTitleText))
{
MSO_TRACK __NEAR* pChapter = (MSO_TRACK __NEAR*)pThis;
BOOL bChapterChanged = FALSE;
UINT16 wChapter;
wChapter = CoreAPI_GetCurrentChapterTrackNum();
if (pChapter->moParam.mwTrack != wChapter)
{
pChapter->moParam.mwTrack = wChapter;
bChapterChanged = TRUE;
}
wChapter = CoreAPI_GetTotalChapterTrackNum(0);
if (pChapter->moParam.mwTotalTrack != wChapter)
{
pChapter->moParam.mwTotalTrack = wChapter;
bChapterChanged = TRUE;
}
if (bChapterChanged)
MS_DisplayAddObject(pThis);
}
}
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -