📄 tidtv_usermenuapi.c
字号:
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 + -