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

📄 tidtv_usermenuapi.c

📁 ti的数字电视芯片 tvp9000的源码
💻 C
📖 第 1 页 / 共 4 页
字号:
	}
	else
	{
		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_SEL_FRONTCOLOR, SUB_MENU_CHARACTER_LIGHTGRAY, SUB_MENU_CHARACTER_SEL_FRONTCOLOR);
	}
}	



/*******************************************************************************
*	@RoutineName:: TiDTV_RestoreCheckBoxNode
*
*	@Description:: display root node ralated info
*
*	@Input		:: TI_DTV_MENU_NODE * pMenuNode
*					
*	@Output		:: none
*
*	@Return	int	:: none
*******************************************************************************/


void TiDTV_RestoreMenuCheckBoxItemType(USHORT SelectedFlag, USHORT SelCursorIndex, USHORT UnSelCursorIndex, short *  UserPreferOffset, USHORT * LeafArray )
{
	TiDTV_DisplayMenuCheckBoxItemType(SelectedFlag, SelCursorIndex, UnSelCursorIndex, UserPreferOffset, LeafArray );
}
/*******************************************************************************
*	@RoutineName:: TiDTV_DisplayCheckBoxNode
*
*	@Description:: display root node ralated info
*
*	@Input		:: TI_DTV_MENU_NODE * pMenuNode
*					
*	@Output		:: none
*
*	@Return	int	:: none
*******************************************************************************/


void TiDTV_DisplayMenuCheckBoxItemType(USHORT SelectedFlag, USHORT SelCursorIndex, USHORT UnSelCursorIndex, short *  UserPreferOffset, USHORT * LeafArray )
{
	USHORT  xPos_CheckBox, yPos_CheckBox, xPos, yPos,Height_Checkbox;
	USHORT	CheckBoxItemTotalNumber;
	short 	CurrentStringLength;
//	UCHAR	CharacterFrontColor, CharacterBackColor;
		// total mask is 12
	USHORT	mask[12] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80, 0x100, 0x200, 0x400, 0x800};


	CheckBoxItemTotalNumber = 0;
	while(LeafArray[CheckBoxItemTotalNumber] != NULL)
	{
		CheckBoxItemTotalNumber++;
	} 

	
	Height_Checkbox = CheckBoxItemTotalNumber * SUB_MENU_CHECKBOXITEM_HEIGHT + 2 * SUB_MENU_CHECKBOX_YMARGIN;
	xPos_CheckBox = SUB_MENU_CHECKBOX_XPOSITION;
	yPos_CheckBox = SUB_MENU_CENTER_YPOSITION - Height_Checkbox/2 - 32;

	xPos = xPos_CheckBox + SUB_MENU_CHECKBOX_XMARGIN;
	yPos = yPos_CheckBox + SUB_MENU_CHECKBOX_YMARGIN + CurrentCheckBoxItem * SUB_MENU_CHECKBOXITEM_HEIGHT;
	TiDTV_DrawMenuCheckBoxItem(xPos, yPos, SelectedFlag);

	TiDTV_OsdSetCharColor(&TiDTV_OsdScreenMain, SUB_MENU_CHARACTER_UNSEL_FRONTCOLOR, 0);
	CurrentStringLength = (short)TiDTV_OsdGetStringLength(&TiDTV_OsdScreenMain,pCurDtvMsgBase[LeafArray[CurrentCheckBoxItem]]);
	xPos =  xPos + (SUB_MENU_CHECKBOX_TITLEAREAHSTEP * SUB_MENU_CHECKBOX_STEP_LENGTH)/2 - CurrentStringLength/2;
	TiDTV_OsdMove(&TiDTV_OsdScreenMain, xPos, yPos + 8);
	TiDTV_OsdDrawString(&TiDTV_OsdScreenMain, pCurDtvMsgBase[LeafArray[CurrentCheckBoxItem]]);

	xPos =  xPos_CheckBox + SUB_MENU_CHECKBOX_XMARGIN 
			+ (SUB_MENU_CHECKBOX_TITLEAREAHSTEP - 1) * SUB_MENU_CHECKBOX_STEP_LENGTH
			+ SUB_MENU_CHECKBOX_MIDDLEMARGIN;
	if(((*UserPreferOffset)& (USHORT)mask[CurrentCheckBoxItem]) == (USHORT)mask[CurrentCheckBoxItem])
	{
		TiDTV_OsdMove(&TiDTV_OsdScreenMain, xPos + 4, yPos + 2);
		if(SelectedFlag == 1)
			TiDTV_OsdDrawBitMap(&TiDTV_OsdScreenMain, SelCursorIndex);
		else
			TiDTV_OsdDrawBitMap(&TiDTV_OsdScreenMain, UnSelCursorIndex);
			
	}
}



/*******************************************************************************
*	@RoutineName:: TiDTV_DisplayCheckBoxNode
*
*	@Description:: display root node ralated info
*
*	@Input		:: TI_DTV_MENU_NODE * pMenuNode
*					
*	@Output		:: none
*
*	@Return	int	:: none
*******************************************************************************/


void TiDTV_DisplayMenuCheckBoxType(USHORT SelCursorIndex, USHORT UnSelCursorIndex, short *  UserPreferOffset, USHORT * LeafArray )
{
	USHORT  xPos_CheckBox, yPos_CheckBox, xPos, yPos, Width_CheckBox, Height_Checkbox;
	USHORT	i, undefine, CheckBoxItemTotalNumber,SelectedFlag;
	short 	CurrentStringLength;
//	UCHAR	CharacterFrontColor;
		// total mask is 12
	USHORT	mask[12] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80, 0x100, 0x200, 0x400, 0x800};


	
///////////////////////////////////////////////////////////////////		
// high light itself first
///////////////////////////////////////////////////////////////////
	undefine = 0;
	SelectedFlag = 0;
	TiDTV_UpdateSubFrameMiddleBlock(undefine,undefine,undefine,undefine);	

	CheckBoxItemTotalNumber = 0;
	while(LeafArray[CheckBoxItemTotalNumber] != NULL)
	{
		CheckBoxItemTotalNumber++;
	} 
//	CheckBoxItemTotalNumber--;


	Height_Checkbox = CheckBoxItemTotalNumber * SUB_MENU_CHECKBOXITEM_HEIGHT + 2 * SUB_MENU_CHECKBOX_YMARGIN;
	Width_CheckBox = SUB_MENU_CHECKBOX_LENGTH;
	xPos_CheckBox = SUB_MENU_CHECKBOX_XPOSITION;
	yPos_CheckBox = SUB_MENU_CENTER_YPOSITION - Height_Checkbox/2 - 32;

	TiDTV_OsdRect(&TiDTV_OsdScreenMain, xPos_CheckBox, yPos_CheckBox, Width_CheckBox, Height_Checkbox,
			 TI_DTV_G_BORDER | TI_DTV_G_OPAQUE, SUB_MENU_CHARACTER_HIGHTLIGHTCOLOR, SUB_MENU_CHARACTER_DARKGRAY, SUB_MENU_CHARACTER_HIGHTLIGHTCOLOR);

	for(i = 0; i< CheckBoxItemTotalNumber; i++)
	{
		xPos = xPos_CheckBox + SUB_MENU_CHECKBOX_XMARGIN;
		yPos = yPos_CheckBox + SUB_MENU_CHECKBOX_YMARGIN + i * SUB_MENU_CHECKBOXITEM_HEIGHT;
		TiDTV_DrawMenuCheckBoxItem(xPos, yPos, SelectedFlag);
			
		// should set char's style by attribute
		// draw title
		TiDTV_OsdSetCharColor(&TiDTV_OsdScreenMain, SUB_MENU_CHARACTER_UNSEL_FRONTCOLOR, 0);
		CurrentStringLength = (short)TiDTV_OsdGetStringLength(&TiDTV_OsdScreenMain, pCurDtvMsgBase[LeafArray[i]]);
		xPos =  xPos + (SUB_MENU_CHECKBOX_TITLEAREAHSTEP * SUB_MENU_CHECKBOX_STEP_LENGTH)/2 - CurrentStringLength/2;
		TiDTV_OsdMove(&TiDTV_OsdScreenMain, xPos, yPos + 8);
		TiDTV_OsdDrawString(&TiDTV_OsdScreenMain, pCurDtvMsgBase[LeafArray[i]]);

		xPos =  xPos_CheckBox + SUB_MENU_CHECKBOX_XMARGIN 
				+ (SUB_MENU_CHECKBOX_TITLEAREAHSTEP - 1) * SUB_MENU_CHECKBOX_STEP_LENGTH
				+ SUB_MENU_CHECKBOX_MIDDLEMARGIN;

		if(((*UserPreferOffset)& (USHORT)mask[i]) == (USHORT)mask[i])
		{
			TiDTV_OsdMove(&TiDTV_OsdScreenMain, xPos + 4, yPos + 2);
			TiDTV_OsdDrawBitMap(&TiDTV_OsdScreenMain, UnSelCursorIndex);
		}
	}	
}



int TiDTV_MenuCheckBoxActFuct(TI_DTV_MENU * PreviousMenu, USHORT SelCursorIndex, USHORT UnSelCursorIndex, short *  UserPreferOffset, USHORT * LeafArray )
{
	TI_DTV_MENU_ITEM 	*pNextItem;
	short CheckBoxItemTotalNumber;
	int ConfirmData = 0;	
	USHORT	mask[12] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80, 0x100, 0x200, 0x400, 0x800};

	
	if(InCheckBox == 0)
	{
		CurrentCheckBoxItem = 0;
	}
	
	switch (TiDTV_KeyBuf.CurKeyCodeMenu) {
		case TI_DTV_IR_KEY_UP:
			if(InCheckBox == 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);
			}
			else
			{
				TiDTV_RestoreMenuCheckBoxItemType(0, SelCursorIndex, UnSelCursorIndex, UserPreferOffset, LeafArray );
				CheckBoxItemTotalNumber = 0;
				while(LeafArray[CheckBoxItemTotalNumber] != NULL)
				{
					CheckBoxItemTotalNumber++;
				} 
				
				CheckBoxItemTotalNumber--;
				if(CurrentCheckBoxItem == 0)
				{
					CurrentCheckBoxItem = CheckBoxItemTotalNumber;
				} 
				else
				{
					CurrentCheckBoxItem --;
				}
				TiDTV_DisplayMenuCheckBoxItemType(1, SelCursorIndex, UnSelCursorIndex, UserPreferOffset, LeafArray );
			}
			break;
			
		case TI_DTV_IR_KEY_DOWN:
			if(InCheckBox == 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);
			}
			else
			{
				TiDTV_RestoreMenuCheckBoxItemType(0, SelCursorIndex, UnSelCursorIndex, UserPreferOffset, LeafArray );
				CheckBoxItemTotalNumber = 0;
				while(LeafArray[CheckBoxItemTotalNumber] != NULL)
				{
					CheckBoxItemTotalNumber++;
				} 
				CheckBoxItemTotalNumber--;
				if(CurrentCheckBoxItem == CheckBoxItemTotalNumber)
				{
					CurrentCheckBoxItem = 0;
				} 
				else
				{
					CurrentCheckBoxItem ++;
				}
				TiDTV_DisplayMenuCheckBoxItemType(1, SelCursorIndex, UnSelCursorIndex, UserPreferOffset, LeafArray );
			}
			break;
			
		case TI_DTV_IR_KEY_LEFT:
		case TI_DTV_IR_KEY_EXIT:
			if(InCheckBox != 0)
			{
				InCheckBox = 0;
				pCurDtvMenu->pNextMenu = pCurDtvMenu;
				DtvDispSubMenu();
				DtvDispSubMenuItem(pCurDtvMenu->pCurItem, SUB_MENU_CHARACTER_SEL_FRONTCOLOR, SUB_MENU_CHARACTER_SEL_FRONTCOLOR);
				
			}
			else
			{
				InCheckBox = 0;
				pCurDtvMenu->pNextMenu = (TI_DTV_MENU *) PreviousMenu;
				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(InCheckBox == 0)
			{
				InCheckBox = 1;
				TiDTV_DisplayMenuCheckBoxType(SelCursorIndex, UnSelCursorIndex, UserPreferOffset, LeafArray);
				TiDTV_DisplayMenuCheckBoxItemType(1, SelCursorIndex, UnSelCursorIndex, UserPreferOffset, LeafArray );
			}
			else
			{
				ConfirmData = 1;
//				InCheckBox = 0;
				(*UserPreferOffset) = (*UserPreferOffset) ^ mask[CurrentCheckBoxItem];
				TiDTV_DisplayMenuCheckBoxItemType(1, SelCursorIndex, UnSelCursorIndex, UserPreferOffset, LeafArray );
			}	
			break;
			
		default:
			break;
	}
	return ConfirmData;
	
}





void TiDTV_MenuPageEndInitFuct(TI_DTV_MENU_ITEM *pMenuItem)
{
	short  xPos, yPos;
		// draw Page icon
	xPos = SUB_MENU_PAGE_ICON_XPOSITION;
	yPos = pMenuItem->MsgY;
	TiDTV_OsdMove(&TiDTV_OsdScreenMain, xPos, yPos);
	TiDTV_OsdDrawBitMap(&TiDTV_OsdScreenMain, BMP_NEXTPAGE);

}

void TiDTV_MenuPageActFuct(TI_DTV_MENU * PreviousMenu, TI_DTV_MENU * BackMenu)
{
	TI_DTV_MENU_ITEM *pNextItem;
	
	switch (TiDTV_KeyBuf.CurKeyCodeMenu) {
		case TI_DTV_IR_KEY_UP:
			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);
			break;
			
		case TI_DTV_IR_KEY_DOWN:
			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);
			break;
			
		case TI_DTV_IR_KEY_LEFT:
			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:
			pCurDtvMenu->pNextMenu = (TI_DTV_MENU *) BackMenu;
			DtvDispSubMenu();	// Display the Sub Menu as Notes
			pCurDtvMenu = pCurDtvMenu->pNextMenu;
			pCurDtvMenu->pCurItem = &pCurDtvMenu->pItemList[0];
			DtvDispSubMenuItem(pCurDtvMenu->pCurItem, SUB_MENU_CHARACTER_SEL_FRONTCOLOR, SUB_MENU_CHARACTER_SEL_FRONTCOLOR);
			break;
			
		default:
			break;
	}

}

void TiDTV_MenuPageEndActFuct(TI_DTV_MENU * PreviousMenu, void (*FuncPtr)(void))
{
	TI_DTV_MENU_ITEM *pNextItem;
	
	switch (TiDTV_KeyBuf.CurKeyCodeMenu) {
		case TI_DTV_IR_KEY_UP:
			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);
			break;
			
		case TI_DTV_IR_KEY_DOWN:
			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);
			break;
			
		case TI_DTV_IR_KEY_LEFT:
			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(FuncPtr != NULL)
			{
				FuncPtr();
			}
			else
			{
				// launch ...
			}
			break;
			
		default:
			break;
	}

}

⌨️ 快捷键说明

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