⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 o_search_display.c

📁 Zoran V966 DVD 解码 Soc芯片的源程序
💻 C
📖 第 1 页 / 共 4 页
字号:
	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 + -