?? o_program.c
字號:
/***************************************************************************************
* Operation functions
****************************************************************************************/
/***************************************************************************************
* Function : _ProgramComponentOperation
*
* In :
*
* Out :
*
* Desc : MSO_PROGRAM user operation function.
****************************************************************************************/
STATIC MS_OP _ProgramComponentOperation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{
switch(MsOp)
{
case MS_OP_MENU:
case MS_OP_TITLE:
case MS_OP_RETURN:
case MS_OP_PBC:
case MS_OP_AUDIO:
case MS_OP_SUBTITLE:
case MS_OP_ANGLE:
case MS_OP_JPEG_ROTATION:
case MS_OP_PLAY_MODE:
case MS_OP_MARKAB:
case MS_OP_REPEAT:
case MS_OP_SHUFFLE:
case MS_OP_INTRO_PLAY:
case MS_OP_SKIPB:
case MS_OP_SKIPF:
case MS_OP_FASTB:
case MS_OP_FASTF:
case MS_OP_SLOWF:
case MS_OP_SLOWB:
case MS_OP_STEPF:
case MS_OP_CHAPTER_MARKER_SKIP:
case MS_OP_BOOKMARK:
case MS_OP_PREV_INDEX:
case MS_OP_NEXT_INDEX:
case MS_OP_PAUSE:
case MS_OP_STOP:
case MS_OP_RESUME_STOP:
case MS_OP_KARAOKE:
case MS_OP_3D:
case MS_OP_LR:
case MS_OP_SIX_CHANNEL:
case MS_OP_MIC_ON_OFF:
case MS_OP_EQUALIZER:
case MS_OP_SPECTRUM:
case MS_OP_PROLOGIC:
case MS_OP_ZOOM:
case MS_OP_TV_SYS:
case MS_OP_VIDEO_OUTMODE:
case MS_OP_VIDEO_ENHANCE:
case MS_OP_PSO_MODE:
case MS_OP_HD_RESOLUTION:
case MS_OP_DISPLAY:
case MS_OP_MAESTROLINK:
case MS_OP_DIGEST:
case MS_OP_SEARCH:
case MS_OP_MPP:
case MS_OP_DD_EX:
case MS_OP_MUTE:
case MS_OP_0:
case MS_OP_1:
case MS_OP_2:
case MS_OP_4:
case MS_OP_5:
case MS_OP_6:
case MS_OP_7:
case MS_OP_8:
case MS_OP_9:
#ifdef D_DIRECT_KEY_SMART_PICTURE
case MS_OP_SMART_PICTURE:
#endif
case MS_OP_VOLUME_DOWN:
case MS_OP_VOLUME_UP:
return MS_OP_NONE;
case MS_OP_EJECT:
case MS_OP_SETUP:
{
MSO_PROGRAM __NEAR* pProgram = (MSO_PROGRAM __NEAR*)pThis;
pProgram->moParam.mbIsPlayBeforeOpened = FALSE;
// Indicate that the menu is to be closed
MS_SendOperation(pThis, MS_OP_CLOSE_PARENT, 0);
}
break;
case MS_OP_CLEAR:
{
MSO_OBJECT __NEAR* pObject = (MSO_OBJECT __NEAR*)MS_FindObjectFromDescriptor((MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&oClearButtonDescriptor);
MS_SendOperation(pObject, MS_OP_ENTER, 0);
}
return MS_OP_NONE;
case MS_OP_PLAY:
case MS_OP_PLAY_PAUSE:
{
MSO_OBJECT __NEAR* pObject = (MSO_OBJECT __NEAR*)MS_FindObjectFromDescriptor((MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&oPlayButtonDescriptor);
MsOp = MS_SendOperation(pObject, MS_OP_ENTER, 0);
}
case MS_OP_INIT:
MS_ComponentInitFocus((MSO_COMPONENT __NEAR*)pThis);
_ProgramListInit((MSO_PROGRAM __NEAR*)pThis);
break;
case MS_OP_PROGRAM:
MsOp = MS_OP_CLOSE_PARENT;
break;
}
MsOp = MS_BasicContainerOperation(pThis, MsOp, lParam);
switch (MsOp)
{
case MS_OP_CLOSE_PARENT:
#ifdef D_GUI_SINGLE_LINE_COMPONENT
//switch to runtime layout
OSDTurnOff();
usleep(10000);
LayoutRuntime();
VPU_SetOSDStatus(VPU_OSD_STATUS_START_E);
{
MSO_OBJECT __NEAR* pPopupContainer = (MSO_OBJECT __NEAR*)pThis->mpParent;
MS_ObjectResize(pPopupContainer, AREA_POPUP_W, AREA_POPUP_H);
MS_ObjectMove(pPopupContainer, AREA_POPUP_X, AREA_POPUP_Y);
}
#endif // D_GUI_SINGLE_LINE_COMPONENT
MS_SetToBeRemoved(pThis);
MS_DisplayAddObject(pThis);
// Restore the focus to the object that was focus before component poped-up.
// This object gaining focus will ask itself for display if required.
if (MS_IsFocused(pThis))
MS_ScreenSetFocusObject(MS_ScreenGetPrevFocusObjectInMenu(pThis));
_ProgramPendingPlay((MSO_PROGRAM __NEAR*)pThis);
return MS_OP_NONE;
}
return MsOp;
}
/***************************************************************************************
* Function : _ProgramListDisplayOperation
*
* In :
*
* Out :
*
* Desc : user operation function for oProgramListDisplayDescriptor.
****************************************************************************************/
#pragma argsused
STATIC MS_OP _ProgramListDisplayOperation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{
return MsOp;
}
/***************************************************************************************
* Function : _TrackVScrollListOperation
*
* In :
*
* Out :
*
* Desc : user operation function for oTrackVScrollListDescriptor.
****************************************************************************************/
STATIC MS_OP _TrackVScrollListOperation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{
switch(MsOp)
{
case MS_OP_RIGHT:
{
MSO_CONTAINER __NEAR* pParent = (MSO_CONTAINER __NEAR*)pThis->mpParent;
MSO_OBJECT __NEAR* pObject = (MSO_OBJECT __NEAR*)MS_FindObjectFromDescriptor((MSO_CONTAINER __NEAR*)pParent, (MS_DESCRIPTOR*)&oPlayButtonDescriptor);
MS_ScreenSetFocusObject(pObject);
return MS_OP_NONE;
}
}
MsOp = VScrollListOperation(pThis, MsOp, lParam);
// Post-processing
switch(MsOp)
{
case MS_OP_REFRESH:
{
MSO_VLIST __NEAR* pList = (MSO_VLIST __NEAR*)MS_GetObjectListPtr(pThis);
MS_ASSERT(NULL != pList);
if(pList->moParam.mwTotalItems > pList->moParam.mcNumVisibleItems)
{
// Remove all items.
MS_SendOperation((MSO_OBJECT __NEAR*)pList, MS_OP_EMPTY, 0);
switch(CoreAPI_GetCurrentMediaType())
{
case MEDIA_TYPE_SVCD:
case MEDIA_TYPE_VCD:
_AddItemsToVCDTrackList((MSO_VLIST __NEAR*)pList);
break;
case MEDIA_TYPE_DVD_VIDEO:
if (0 == pList->moParam.mdwData)
_AddItemsToTitleList((MSO_VLIST __NEAR*)pList);
else
_AddItemsToChapterList((MSO_VLIST __NEAR*)pList);
break;
}
MS_DisplayAddObject(pThis);
// Set focus to the appropriate list item.
if(MS_IsFocused(pList))
{
MSO_OBJECT __NEAR* pObject = MS_GetObjectListPtr(pList);
if(!MS_IS_FOCUS_ON_LASTITEM(pList))
MS_ScreenSetFocusObject(pObject);
else
{
// Make sure we do not set focus on the Value VScroll list.
while(NULL != pObject->mpNext)
pObject = pObject->mpNext;
MS_ScreenSetFocusObject(pObject);
}
}
}
}
return MS_OP_NONE;
default:
break;
return MsOp;
}
/***************************************************************************************
* Function : _TrackVListOperation
*
* In :
*
* Out :
*
* Desc : user operation function for oTrackVListDescriptor.
****************************************************************************************/
STATIC MS_OP _TrackVListOperation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{
switch(MsOp)
{
case MS_OP_INIT:
{
MSO_OBJECT __NEAR* pObject = MS_GetObjectListPtr(pThis);
MS_ScreenSetFocusObject(pObject);
}
return MS_OP_NONE;
case MS_OP_OPEN:
{
MSO_VLIST __NEAR* pList = (MSO_VLIST __NEAR*)pThis;
switch(CoreAPI_GetCurrentMediaType())
{
case MEDIA_TYPE_SVCD:
case MEDIA_TYPE_VCD:
pList->moParam.mwTotalItems = CoreAPI_GetTotalChapterTrackNum(0);
_AddItemsToVCDTrackList((MSO_VLIST __NEAR*)pThis);
break;
case MEDIA_TYPE_DVD_VIDEO:
pList->moParam.mwTotalItems = CoreAPI_GetTotalTitleGroupNum();
pList->moParam.mdwData = 0;
_AddItemsToTitleList((MSO_VLIST __NEAR*)pThis);
break;
}
}
return MS_OP_NONE;
}
return VListOperation(pThis, MsOp, lParam);
}
/***************************************************************************************
* Function : _TrackOperation
*
* In :
*
* Out :
*
* Desc : user operation function for oProgramTrackDescriptor.
****************************************************************************************/
#pragma argsused
STATIC MS_OP _TrackOperation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{
switch(MsOp)
{
case MS_OP_FOCUS_CHANGE:
MS_DisplayAddObject(pThis);
break;
case MS_OP_ENTER:
{
MSO_PROGRAM_TRACK __NEAR* pTrack = (MSO_PROGRAM_TRACK __NEAR*)pThis;
UINT16 wTrackNum = pTrack->moParam.mwTrack;
MSO_OBJECT __NEAR* pTrackList = (MSO_OBJECT __NEAR* )pThis->mpParent;
MSO_OBJECT __NEAR* pTrackVScrollList = (MSO_OBJECT __NEAR*)pTrackList->mpParent;
MSO_PROGRAM __NEAR* pProgram = (MSO_PROGRAM __NEAR*)pTrackVScrollList->mpParent;
UINT16 wItemNum = pProgram->moParam.mwProgramListItemsNum;
MSO_OBJECT __NEAR* pProgramListDisplay = (MSO_OBJECT __NEAR*)MS_FindObjectFromDescriptor((MSO_CONTAINER __NEAR*)pProgram, (MS_DESCRIPTOR*)&oProgramListDisplayDescriptor);
if (wItemNum < MAX_PROGRAM_NUM)
{
pProgram->moParam.mwProgramListItemsNum++;
pProgram->moParam.mwTrack[wItemNum] = wTrackNum;
MS_DisplayAddObject((MSO_OBJECT __NEAR*)pProgramListDisplay);
}
}
return MS_OP_NONE;
}
return MsOp;
}
/***************************************************************************************
* Function : _TitleOperation
*
* In :
*
* Out :
*
* Desc : user operation function for oProgramTitleDescriptor.
****************************************************************************************/
#pragma argsused
STATIC MS_OP _TitleOperation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{
switch(MsOp)
{
case MS_OP_FOCUS_CHANGE:
MS_DisplayAddObject(pThis);
break;
case MS_OP_ENTER:
{
MSO_PROGRAM_TRACK __NEAR* pTitle = (MSO_PROGRAM_TRACK __NEAR*)pThis;
MSO_VLIST __NEAR* pTrackList = (MSO_VLIST __NEAR* )pThis->mpParent;
MSO_OBJECT __NEAR* pTrackVScrollList = (MSO_OBJECT __NEAR*)((MSO_OBJECT __NEAR*)pTrackList)->mpParent;
UINT16 wTitleNum = pTitle->moParam.mwTrack;
MSO_OBJECT __NEAR* pObject;
// Remove all items.
MS_SendOperation((MSO_OBJECT __NEAR*)pTrackList, MS_OP_EMPTY, 0);
pTrackList->moParam.mwFirstDisplayItem = 0;
pTrackList->moParam.mdwData = wTitleNum;
pTrackList->moParam.mwTotalItems = CoreAPI_GetTotalChapterTrackNum(wTitleNum) + 1;
_AddItemsToChapterList((MSO_VLIST __NEAR*)pTrackList);
pObject = MS_GetObjectListPtr(pTrackList);
pObject = pObject->mpNext;
MS_ScreenSetFocusObject(pObject);
MS_DisplayAddObject((MSO_OBJECT __NEAR*)pTrackVScrollList);
}
return MS_OP_NONE;
}
return MsOp;
}
/***************************************************************************************
* Function : _ChapterOperation
*
* In :
*
* Out :
*
* Desc : user operation function for oProgramChapterDescriptor.
****************************************************************************************/
#pragma argsused
STATIC MS_OP _ChapterOperation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{
switch(MsOp)
{
case MS_OP_FOCUS_CHANGE:
MS_DisplayAddObject(pThis);
break;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -