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

📄 tidtv_usermenuapi.c

📁 ti的数字电视芯片 tvp9000的源码
💻 C
📖 第 1 页 / 共 4 页
字号:
	xPos_RadioBox = SUB_MENU_RADIOBOX_XPOSITION;

	yPos_RadioBox = yPos_RadioBox + SUB_MENU_RADIOBOXITEM_HEIGHT * Position; 

	xPos_RadioBox = SUB_MENU_RADIOBOX_XPOSITION;

	for(j = 0; j < SUB_MENU_RADIOBOX_HSTEP; j++)
	{
		if(j != 0)
		{
			xPos_RadioBox = xPos_RadioBox + SUB_MENU_RADIOBOX_STEP_LENGTH;
		}
		if(j == 0)
		{
			Bmp_Index = BMP_UNSELPOPUPLEFT;
		}
		else if(j == SUB_MENU_RADIOBOX_HSTEP - 1)
		{
			Bmp_Index = BMP_UNSELPOPUPRIGHT;
		}
		else
		{
			Bmp_Index = BMP_UNSELPOPUPCENTER;
		}		
		TiDTV_OsdMove(&TiDTV_OsdScreenMain, xPos_RadioBox, yPos_RadioBox);
		TiDTV_OsdDrawBitMap(&TiDTV_OsdScreenMain, Bmp_Index);
	}
			// should set char's style by attribute
	TiDTV_OsdSetCharColor(&TiDTV_OsdScreenMain, SUB_MENU_CHARACTER_UNSEL_FRONTCOLOR, 0);
			// draw title
	CurrentStringLength = (short)TiDTV_OsdGetStringLength(&TiDTV_OsdScreenMain, pCurDtvMsgBase[LeafArray[Position]]);
	xPos =  SUB_MENU_RADIOBOX_XPOSITION + SUB_MENU_RADIOBOX_LENGTH/2 - CurrentStringLength/2;
	TiDTV_OsdMove(&TiDTV_OsdScreenMain, xPos, yPos_RadioBox + 8);
	TiDTV_OsdDrawString(&TiDTV_OsdScreenMain, pCurDtvMsgBase[LeafArray[Position]]);
}


/*******************************************************************************
*	@RoutineName:: TiDTV_RetoreMenuRadioBoxType
*
*	@Description:: display radio box node ralated info
*
*	@Input		:: TI_DTV_MENU_NODE * pMenuNode
*					
*	@Output		:: none
*
*	@Return	int	:: none
*******************************************************************************/


void TiDTV_RetoreMenuRadioBoxType(TI_DTV_MENU_ITEM *pMenuItem, USHORT * LeafArray, USHORT HightLightPosition)
{

	USHORT  i, yPos;
	USHORT	RadioBoxGroupTotalNumber, RadioBoxGroupHeight, xPos_RadioBox, yPos_RadioBox ;




///////////////////////////////////////////////////////////////////		
// high light itself first
///////////////////////////////////////////////////////////////////
	
	// get leaf node numbers
	i = 0;
	
	while(LeafArray[i] != NULL)
	{
		i++;
	}

		// i means the total number of father's brothers
	RadioBoxGroupTotalNumber = i;
		// i means the total number of father's brothers
	RadioBoxGroupHeight = SUB_MENU_RADIOBOXITEM_HEIGHT * RadioBoxGroupTotalNumber;
		// current Y position 
	yPos =  pMenuItem->MsgY;
			
		// caculate first box item position
		// if father's Y position is at top half
	if((yPos + RadioBoxGroupHeight) < SUB_MENU_BOTTOMWITHOUTEDGE_YPOSITION)
	{
		yPos_RadioBox = yPos;
	}	
	else if((yPos - RadioBoxGroupHeight) > SUB_MENU_WITHOUTEDGE_YPOSITION) 
	{
		yPos_RadioBox = yPos - RadioBoxGroupHeight + SUB_MENU_RADIOBOXITEM_HEIGHT;
	}	
	else
	{
		yPos_RadioBox = SUB_MENU_CENTER_YPOSITION - RadioBoxGroupHeight/2;			
	}
	xPos_RadioBox = SUB_MENU_RADIOBOX_XPOSITION;

	TiDTV_RestoreImage(&TiDTV_OsdScreenMain, (short)(xPos_RadioBox), (short)(yPos_RadioBox), (short)(SUB_MENU_RADIOBOX_LENGTH), (short)(RadioBoxGroupHeight), (UCHAR*)(&TiDTV_OsdBitmapBufMain[1][0]));
	
}


/*******************************************************************************
*	@RoutineName:: TiDTV_DisplayMenuRadioBoxType
*
*	@Description:: display radio box node ralated info
*
*	@Input		:: TI_DTV_MENU_NODE * pMenuNode
*					
*	@Output		:: none
*
*	@Return	int	:: none
*******************************************************************************/


void TiDTV_DisplayMenuRadioBoxType(TI_DTV_MENU_ITEM *pMenuItem, USHORT * LeafArray, USHORT HightLightPosition)
{
	USHORT  i, j, xPos, yPos;
	USHORT	RadioBoxGroupTotalNumber, RadioBoxGroupHeight, xPos_RadioBox, yPos_RadioBox ;
	USHORT  Bmp_Index;
	short	CurrentStringLength;
//	UCHAR	CharacterFrontColor, CharacterBackColor;




///////////////////////////////////////////////////////////////////		
// high light itself first
///////////////////////////////////////////////////////////////////
	
	// get leaf node numbers
	i = 0;
	
	while(LeafArray[i] != NULL)
	{
		i++;
	}

		// i means the total number of father's brothers
	RadioBoxGroupTotalNumber = i;
		// i means the total number of father's brothers
	RadioBoxGroupHeight = SUB_MENU_RADIOBOXITEM_HEIGHT * i;
		// current Y position 
	yPos =  pMenuItem->MsgY;
			
		// caculate first box item position
		// if father's Y position is at top half
	if((yPos + RadioBoxGroupHeight) < SUB_MENU_BOTTOMWITHOUTEDGE_YPOSITION)
	{
		yPos_RadioBox = yPos;
	}	
	else if((yPos - RadioBoxGroupHeight) > SUB_MENU_WITHOUTEDGE_YPOSITION) 
	{
		yPos_RadioBox = yPos - RadioBoxGroupHeight + SUB_MENU_RADIOBOXITEM_HEIGHT;
	}	
	else
	{
		yPos_RadioBox = SUB_MENU_CENTER_YPOSITION - RadioBoxGroupHeight/2;			
	}
	xPos_RadioBox = SUB_MENU_RADIOBOX_XPOSITION;
		// backup image
	TiDTV_BackupImage(&TiDTV_OsdScreenMain, (short)(xPos_RadioBox), (short)(yPos_RadioBox), (short)(SUB_MENU_RADIOBOX_LENGTH), (short)(RadioBoxGroupHeight),(UCHAR*)(&TiDTV_OsdBitmapBufMain[1][0]));
		// backup end
	for(i = 0; i < RadioBoxGroupTotalNumber; i++)
	{
		
		xPos_RadioBox = SUB_MENU_RADIOBOX_XPOSITION;
		if(i != 0)
		{
			yPos_RadioBox = yPos_RadioBox + SUB_MENU_RADIOBOXITEM_HEIGHT; 
		}
		for(j = 0; j < SUB_MENU_RADIOBOX_HSTEP; j++)
		{
			if(j != 0)
			{
				xPos_RadioBox = xPos_RadioBox + SUB_MENU_RADIOBOX_STEP_LENGTH;
			}
			if(j == 0)
			{
				Bmp_Index = BMP_UNSELPOPUPLEFT;
			}
			else if(j == SUB_MENU_RADIOBOX_HSTEP - 1)
			{
				Bmp_Index = BMP_UNSELPOPUPRIGHT;
			}
			else
			{
				Bmp_Index = BMP_UNSELPOPUPCENTER;
			}		
			TiDTV_OsdMove(&TiDTV_OsdScreenMain, xPos_RadioBox, yPos_RadioBox);
			TiDTV_OsdDrawBitMap(&TiDTV_OsdScreenMain, Bmp_Index);
		}
			// should set char's style by attribute
		TiDTV_OsdSetCharColor(&TiDTV_OsdScreenMain, SUB_MENU_CHARACTER_UNSEL_FRONTCOLOR, 0);
			// draw title
 		CurrentStringLength = (short)TiDTV_OsdGetStringLength(&TiDTV_OsdScreenMain, pCurDtvMsgBase[LeafArray[i]]);
		xPos =  SUB_MENU_RADIOBOX_XPOSITION + SUB_MENU_RADIOBOX_LENGTH/2 - CurrentStringLength/2;
		TiDTV_OsdMove(&TiDTV_OsdScreenMain, xPos, yPos_RadioBox + 8);
		TiDTV_OsdDrawString(&TiDTV_OsdScreenMain, pCurDtvMsgBase[LeafArray[i]]);
	}
	TiDTV_DisplayMenuRadioBoxItemType(pMenuItem, LeafArray, HightLightPosition);
	
}




int TiDTV_MenuRadioBoxActFuct(TI_DTV_MENU * PreviousMenu, TI_DTV_MENU_ITEM *pNextItem, short *  UserPreferOffset, USHORT * LeafArray )
{

	short RadioBoxItemTotalNumber;
	int ConfirmData = 0;	

	
	if(InRadioBox == 0)
	{
		CurrentRadioBoxItem = *UserPreferOffset;
	}
	
	switch (TiDTV_KeyBuf.CurKeyCodeMenu) {
		case TI_DTV_IR_KEY_UP:
			if(InRadioBox == 0)
			{
				pNextItem = pCurDtvMenu->pCurItem->pUpItem;
				DtvDispSubMenuItem(pCurDtvMenu->pCurItem, SUB_MENU_CHARACTER_BACKCOLOR, SUB_MENU_CHARACTER_BACKCOLOR);
				// Display the Cursor (current position)
				pCurDtvMenu->pCurItem = pNextItem;
				DtvDispSubMenuItem(pCurDtvMenu->pCurItem, SUB_MENU_CHARACTER_SEL_FRONTCOLOR, SUB_MENU_CHARACTER_SEL_FRONTCOLOR);
				if(pCurDtvMenu->pCurItem->pWorkData != NULL) 
					TiDTV_UpdateNavigationBar((TI_DTV_MENU_NODE_NAVIGATION *)pCurDtvMenu->pCurItem->pWorkData, 0);
			}
			else
			{
				TiDTV_RestoreMenuRadioBoxItemType(pCurDtvMenu->pCurItem, (USHORT*)LeafArray, CurrentRadioBoxItem);
				RadioBoxItemTotalNumber = 0;
				while(LeafArray[RadioBoxItemTotalNumber] != NULL)
				{
					RadioBoxItemTotalNumber++;
				} 
				
				RadioBoxItemTotalNumber--;
				if(CurrentRadioBoxItem == 0)
				{
					CurrentRadioBoxItem = RadioBoxItemTotalNumber;
				} 
				else
				{
					CurrentRadioBoxItem --;
				}
				TiDTV_DisplayMenuRadioBoxItemType(pCurDtvMenu->pCurItem, (USHORT*)LeafArray, CurrentRadioBoxItem);
			}
			break;
			
		case TI_DTV_IR_KEY_DOWN:
			if(InRadioBox == 0)
			{
				pNextItem = pCurDtvMenu->pCurItem->pDownItem;
				DtvDispSubMenuItem(pCurDtvMenu->pCurItem, SUB_MENU_CHARACTER_BACKCOLOR, SUB_MENU_CHARACTER_BACKCOLOR);
				// Display the Cursor (current position)
				pCurDtvMenu->pCurItem = pNextItem;
				DtvDispSubMenuItem(pCurDtvMenu->pCurItem, SUB_MENU_CHARACTER_SEL_FRONTCOLOR, SUB_MENU_CHARACTER_SEL_FRONTCOLOR);
				if(pCurDtvMenu->pCurItem->pWorkData != NULL) 
					TiDTV_UpdateNavigationBar((TI_DTV_MENU_NODE_NAVIGATION *)pCurDtvMenu->pCurItem->pWorkData, 0);
			}
			else
			{
				TiDTV_RestoreMenuRadioBoxItemType(pCurDtvMenu->pCurItem, (USHORT*)LeafArray, CurrentRadioBoxItem);
				RadioBoxItemTotalNumber = 0;
				while(LeafArray[RadioBoxItemTotalNumber] != NULL)
				{
					RadioBoxItemTotalNumber++;
				} 
				RadioBoxItemTotalNumber--;
				if(CurrentRadioBoxItem == RadioBoxItemTotalNumber)
				{
					CurrentRadioBoxItem = 0;
				} 
				else
				{
					CurrentRadioBoxItem ++;
				}
				TiDTV_DisplayMenuRadioBoxItemType(pCurDtvMenu->pCurItem, (USHORT*)LeafArray, CurrentRadioBoxItem);
			}
			break;
			
		case TI_DTV_IR_KEY_LEFT:
			if(InRadioBox != 0)
			{
				InRadioBox = 0;
				TiDTV_RetoreMenuRadioBoxType(pCurDtvMenu->pCurItem, (USHORT*)LeafArray, CurrentRadioBoxItem);
				(pCurDtvMenu->pCurItem->InitFunc)(pCurDtvMenu->pCurItem);
				DtvDispSubMenuItem(pCurDtvMenu->pCurItem, SUB_MENU_CHARACTER_SEL_FRONTCOLOR, SUB_MENU_CHARACTER_SEL_FRONTCOLOR);
				
			}
			else
			{
				DtvDispSubMenuItem(pCurDtvMenu->pCurItem, SUB_MENU_CHARACTER_BACKCOLOR, SUB_MENU_CHARACTER_BACKCOLOR);
				pCurDtvMenu->pNextMenu = (TI_DTV_MENU *) PreviousMenu;
				if((TI_DTV_MENU *)PreviousMenu == (TI_DTV_MENU *)&DtvMainMenu &&
				   pCurDtvMenu->pNextMenu == (TI_DTV_MENU *)&DtvMainMenu)
				{
					pCurDtvMenu->pCurItem = &pCurDtvMenu->pItemList[0];
					pCurDtvMenu = pCurDtvMenu->pNextMenu;
				}
				else
				{
					DtvDispSubMenu();
					pCurDtvMenu = pCurDtvMenu->pNextMenu;
					DtvDispSubMenuItem(pCurDtvMenu->pCurItem, SUB_MENU_CHARACTER_SEL_FRONTCOLOR, SUB_MENU_CHARACTER_SEL_FRONTCOLOR);
				}
			}
			
			break;
			
		case TI_DTV_IR_KEY_RIGHT:
		case TI_DTV_IR_KEY_SELECT:
			if(InRadioBox == 0)
			{
				InRadioBox = 1;
				TiDTV_DisplayMenuRadioBoxType(pCurDtvMenu->pCurItem, (USHORT*)LeafArray, CurrentRadioBoxItem);
			}
			else
			{
				ConfirmData = 1;
				InRadioBox = 0;
				*UserPreferOffset = CurrentRadioBoxItem;
				TiDTV_RetoreMenuRadioBoxType(pCurDtvMenu->pCurItem, (USHORT*)LeafArray, CurrentRadioBoxItem);
				(pCurDtvMenu->pCurItem->InitFunc)(pCurDtvMenu->pCurItem);
				DtvDispSubMenuItem(pCurDtvMenu->pCurItem, SUB_MENU_CHARACTER_SEL_FRONTCOLOR, SUB_MENU_CHARACTER_SEL_FRONTCOLOR);
			}	
			break;
			
		default:
			break;
	}
	return ConfirmData;
	
}



void TiDTV_MenuRadioBoxInitFuct(TI_DTV_MENU_ITEM *pMenuItem, short *  UserPreferOffset, USHORT * LeafArray )
{

	short	CurrentStringLength;
	USHORT	RadioBoxSymbol[] ={':', 0};




	TiDTV_OsdRect(&TiDTV_OsdScreenMain, SUB_MENU_RADIOBOX_XPOSITION, pMenuItem->MsgY, SUB_MENU_RADIOBOX_LENGTH, SUB_MENU_RADIOBOXITEM_HEIGHT,
			 TI_DTV_G_BORDER | TI_DTV_G_OPAQUE, SUB_MENU_CHARACTER_BACKCOLOR, SUB_MENU_CHARACTER_BACKCOLOR, SUB_MENU_CHARACTER_BACKCOLOR);

	TiDTV_OsdSetCharColor(&TiDTV_OsdScreenMain, SUB_MENU_CHARACTER_UNSEL_FRONTCOLOR, 0);
	TiDTV_OsdMove(&TiDTV_OsdScreenMain, SUB_MENU_RADIOBOX_XPOSITION, pMenuItem->MsgY);
	TiDTV_OsdDrawString(&TiDTV_OsdScreenMain, RadioBoxSymbol);


	CurrentStringLength = (short)TiDTV_OsdGetStringLength(&TiDTV_OsdScreenMain, pCurDtvMsgBase[LeafArray[*UserPreferOffset]]);
	TiDTV_OsdMove(&TiDTV_OsdScreenMain, (SUB_MENU_RADIOBOX_XPOSITION + SUB_MENU_RADIOBOX_LENGTH/2 - CurrentStringLength/2), pMenuItem->MsgY);
	// set root character attribute 
	// draw root TitleIndex
	TiDTV_OsdDrawString(&TiDTV_OsdScreenMain, pCurDtvMsgBase[LeafArray[*UserPreferOffset]]);

}


void TiDTV_DrawMenuCheckBoxItem(USHORT xPosition, USHORT yPosition, USHORT SelectedFlag )
{	
	USHORT j,Bmp_Index; 
	USHORT  xPos, yPos;
	
	
	xPos = xPosition;
	yPos= yPosition;
	for(j = 0; j < SUB_MENU_CHECKBOX_TITLEAREAHSTEP; j++)
	{
		if(j != 0)
		{
			xPos = xPos + SUB_MENU_CHECKBOX_STEP_LENGTH;
		}
		if(j == 0)
		{
			if(SelectedFlag == 0)
				Bmp_Index = BMP_UNSELPOPUPLEFT;
			else
				Bmp_Index = BMP_SELPOPUPLEFT;
				
		}
		else if(j == SUB_MENU_CHECKBOX_TITLEAREAHSTEP - 1)
		{
			if(SelectedFlag == 0)
				Bmp_Index = BMP_UNSELPOPUPRIGHT;
			else
				Bmp_Index = BMP_SELPOPUPRIGHT;
				
		}
		else
		{
			if(SelectedFlag == 0)
				Bmp_Index = BMP_UNSELPOPUPCENTER;
			else
				Bmp_Index = BMP_SELPOPUPCENTER;
			
		}		
		TiDTV_OsdMove(&TiDTV_OsdScreenMain, xPos, yPos);
		TiDTV_OsdDrawBitMap(&TiDTV_OsdScreenMain, Bmp_Index);
	}
	xPos = xPos + SUB_MENU_CHECKBOX_MIDDLEMARGIN;

	if(SelectedFlag == 0)
	{
		TiDTV_OsdRect(&TiDTV_OsdScreenMain, xPos, yPos, SUB_MENU_CHECKBOX_CONTROLAREAHSTEP * SUB_MENU_CHECKBOX_STEP_LENGTH, SUB_MENU_CHECKBOXITEM_HEIGHT,
	 	TI_DTV_G_BORDER | TI_DTV_G_OPAQUE, SUB_MENU_CHARACTER_UNSEL_FRONTCOLOR, SUB_MENU_CHARACTER_LIGHTGRAY, SUB_MENU_CHARACTER_UNSEL_FRONTCOLOR);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -