📄 emc_channellist.c
字号:
/*******************************************************************************
File name : emc_channellist.c
Description : channel list
Revision : 1.0
COPYRIGHT (C) EMC-HUST-JRC 2005.
Date Label Auther Comment
---- ---- ------ ---------------------
12-28-2005 Allen Wu Created
*********************************************************************************/
/* Includes --------------------------------------------------------------- */
#include "usif.h"
#include "loadchannels.h"
#include "UIPositionDef.h"
//#include "OsdRegionInit.h"
//#include "HL_Stosd.h"
#include "gui.h"
#include "osdwrap.h"
#include "cmdcontrol.h"
#include "emc_font.h"
#include "emc_channeldisplay.h"
#include "emc_channellist.h"
#include "./pics/data_bitmap_channellist.h"
#include "./pics/data_struct_channellist.h"
#define ALL_CHANNELS 0
#define FAVORITE_CHANNELS 1
#define MAX_ITEMS_IN_CHANNEL_LIST 8
static int iChannelItemOff = 0;
static int iFavChannelItemOff = 0;
static int iChannelListState = ALL_CHANNELS;
extern int iPAL_Mode;
extern int LangSelect;
extern EMCFont_Type EMCFontTypeArray[];
extern short int sProgIndex2bRetrieved;
extern int iProgNumberBeingRetrieved;
extern void sttbx_Print(const char *const Format_p, ...);
//extern void msm_ChannelDisplay(MenuAct_LinkId_t eNumber);
static void drawChannelListItem(int iOffset,char *str,BOOL bHighlight)
{
char progNum[4];
char progName[MAX_SERVICE_NAME_LENGTH+1];
//EMCFont_Type fontType = EMCFontTypeArray[LangSelect+4];/*test*/
int i;
for(i = 0;i<3;i++)
progNum[i] = str[i];
progNum[i] = '\0';
for(i = 0;i<MAX_SERVICE_NAME_LENGTH;i++)
progName[i] = str[17+i];
progName[i] = '\0';
if(bHighlight)
{
EMC_DrawTSTextRectangle(Handle_ProviewWindow,
CH_NUM_LEFT,CH_TOP_MARGIN+iOffset*(CH_HEIGHT+9),CH_NUM_WIDTH,CH_HEIGHT,
progNum,JLEFT,FALSE,
dialogcolor,whitecolor,whitecolor);
EMC_DrawTSTextRectangle(Handle_ProviewWindow,
CH_NAME_LEFT,CH_TOP_MARGIN + iOffset*(CH_HEIGHT+9),CH_NAME_WIDTH,CH_HEIGHT,
progName,JLEFT,FALSE,
blackcolor,darkyellow,darkyellow);
}
else
{
EMC_DrawTSTextRectangle(Handle_ProviewWindow,
CH_NUM_LEFT,CH_TOP_MARGIN+iOffset*(CH_HEIGHT+9),CH_NUM_WIDTH,CH_HEIGHT,
progNum,JLEFT,FALSE,
whitecolor,dialogcolor,dialogcolor);
EMC_DrawTSTextRectangle(Handle_ProviewWindow,
CH_NAME_LEFT,CH_TOP_MARGIN + iOffset*(CH_HEIGHT+9),CH_NAME_WIDTH,CH_HEIGHT,
progName,JLEFT,FALSE,
whitecolor,dialogcolor,dialogcolor);
}
}
void msm_ShowChannelList(int iMode)
{
int i, iNoOfMenuElements;
MENU_DATA_STRUCT *p = NULL;
EMC_HideAllRegions();
HL_STOSD_DrawBMP(Handle_ProviewWindow,POS_CHANNELLIST_X,POS_CHANNELLIST_Y(iPAL_Mode),Bitmap_Struct_Channellist_Panel);
if(iMode == ALL_CHANNELS || iMode == FAVORITE_CHANNELS)
iChannelListState = iMode;
if(iChannelListState == ALL_CHANNELS)
{
EMC_DrawTextRectangle(Handle_ProviewWindow,
POS_CHANNELLIST_X+16, POS_CHANNELLIST_Y(iPAL_Mode)+15, 124, 18,
"All PROGRAMS", JLEFT, FONT_MYFONT, TRUE,
darkyellow, dialogcolor, dialogcolor);
if((iChannelItemOff = getChannels(MAX_ITEMS_IN_CHANNEL_LIST)) == INVALID_LINK)
{
sttbx_Print("The Database is empty!!!\n");
goto SHOW_REGION;
}
p=pstAvailableMenuDataHead;
iNoOfMenuElements = iNoOfAvailableMenuElements;
}
else
{
EMC_DrawTextRectangle(Handle_ProviewWindow,
POS_CHANNELLIST_X+16, POS_CHANNELLIST_Y(iPAL_Mode)+15, 124, 18,
"Fav PROGRAMS", JLEFT, FONT_MYFONT, TRUE,
darkyellow, dialogcolor, dialogcolor);
if((iFavChannelItemOff = getFavoriteChannels(MAX_ITEMS_IN_CHANNEL_LIST)) == INVALID_LINK)
{
sttbx_Print("The Database is empty!!!\n");
goto SHOW_REGION;
}
p=pstFavoriteMenuDataHead;
iNoOfMenuElements = iNoOfFavoriteMenuElements;
}
if(iNoOfMenuElements == 0)
goto SHOW_REGION;
for(i=0;i<iNoOfMenuElements;i++)
{
if(p==NULL)
break;
drawChannelListItem(i,(char *)p->aucData,FALSE);
p =p->Next;
}
/*highlighted the current item*/
if(iChannelListState == ALL_CHANNELS)
drawChannelListItem(iChannelItemOff,(char *)pstCurAvailableChannel->aucData,TRUE);
else
drawChannelListItem(iFavChannelItemOff,(char *)pstCurFavoriteChannel->aucData,TRUE);
SHOW_REGION:
EMC_ShowRegion();
//STOSD_ShowRegion(Handle_ProviewWindow);
}
void msm_ChannelItemUp(void)
{
MENU_DATA_STRUCT *pstCurMenuData;
BOOL HIGHLIGHT;
if(iChannelListState == 0)
pstCurMenuData = pstCurAvailableChannel;
else
pstCurMenuData = pstCurFavoriteChannel;
if(pstCurMenuData == NULL)
return;
if ( pstCurMenuData ->Prev != ( MENU_DATA_STRUCT * ) NULL )
{
HIGHLIGHT = 0;
if(iChannelListState == 0)
{
drawChannelListItem(iChannelItemOff,(char *)pstCurMenuData ->aucData,HIGHLIGHT);
--(iChannelItemOff);
pstCurAvailableChannel = pstCurAvailableChannel->Prev;
HIGHLIGHT = 1;
drawChannelListItem(iChannelItemOff,(char *)pstCurAvailableChannel ->aucData,HIGHLIGHT);
}
else
{
drawChannelListItem(iFavChannelItemOff,(char *)pstCurMenuData ->aucData,HIGHLIGHT);
--(iFavChannelItemOff);
pstCurFavoriteChannel = pstCurFavoriteChannel->Prev;
HIGHLIGHT = 1;
drawChannelListItem(iFavChannelItemOff,(char *)pstCurFavoriteChannel ->aucData,HIGHLIGHT);
}
}
else
{
int iItemOffTemp;
if(iChannelListState == 0)
{
if((channelPrevKeyFunc(iNoOfAvailableMenuElements,MAX_ITEMS_IN_CHANNEL_LIST)) == INVALID_LINK)
return;
pstCurMenuData = pstAvailableMenuDataHead;
pstCurAvailableChannel = pstAvailableMenuDataHead;
}
else
{
if((favoriteChannelPrevKeyFunc(iNoOfFavoriteMenuElements,MAX_ITEMS_IN_CHANNEL_LIST)) == INVALID_LINK)
return;
pstCurMenuData = pstFavoriteMenuDataHead;
pstCurFavoriteChannel = pstFavoriteMenuDataHead;
}
/* calculate and print all the items available in the menu data list*/
iItemOffTemp = 0;
while(pstCurMenuData != NULL)
{
//drawFavoriteAvailableChannelItems (iItemOffTemp,(char *)pstCurMenuData ->aucData,(iItemOffTemp==0)?1:0);
drawChannelListItem(iItemOffTemp,(char *)pstCurMenuData ->aucData,(iItemOffTemp==0)?1:0);
pstCurMenuData = pstCurMenuData->Next;
iItemOffTemp++;
}
}
}
void msm_ChannelItemDown(void)
{
MENU_DATA_STRUCT *pstCurMenuData;
BOOL HIGHLIGHT;
if(iChannelListState == 0)
pstCurMenuData = pstCurAvailableChannel;
else
pstCurMenuData = pstCurFavoriteChannel;
if(pstCurMenuData == NULL)
return;
if ( pstCurMenuData ->Next!= ( MENU_DATA_STRUCT * ) NULL )
{
HIGHLIGHT = 0;
if(iChannelListState == 0)
{
drawChannelListItem(iChannelItemOff,(char *)pstCurMenuData ->aucData,HIGHLIGHT);
++(iChannelItemOff);
pstCurAvailableChannel = pstCurAvailableChannel->Next;
HIGHLIGHT = 1;
drawChannelListItem(iChannelItemOff,(char *)pstCurAvailableChannel ->aucData,HIGHLIGHT);
}
else
{
drawChannelListItem(iFavChannelItemOff,(char *)pstCurMenuData ->aucData,HIGHLIGHT);
++(iFavChannelItemOff);
pstCurFavoriteChannel = pstCurFavoriteChannel->Next;
HIGHLIGHT = 1;
drawChannelListItem(iFavChannelItemOff,(char *)pstCurFavoriteChannel ->aucData,HIGHLIGHT);
}
}
else
{
int iItemOffTemp;
if(iChannelListState == 0)
{
if(channelNextKeyFunc(iNoOfAvailableMenuElements) == INVALID_LINK)
return ;
pstCurMenuData = pstAvailableMenuDataHead;
pstCurAvailableChannel = pstAvailableMenuDataTail;
}
else
{
if(favoriteChannelNextKeyFunc(iNoOfFavoriteMenuElements) == INVALID_LINK)
return ;
pstCurMenuData = pstFavoriteMenuDataHead;
pstCurFavoriteChannel = pstFavoriteMenuDataTail;
}
/*calculate and print all the items available in the menu data list*/
iItemOffTemp = 0;
while(pstCurMenuData != NULL)
{
if(pstCurMenuData ->Next == NULL)
{
//drawFavoriteAvailableChannelItems (iItemOffTemp,(char *)pstCurMenuData ->aucData,1);
drawChannelListItem(iItemOffTemp,(char *)pstCurMenuData ->aucData,1);
break;
}
//drawFavoriteAvailableChannelItems (iItemOffTemp,(char *)pstCurMenuData ->aucData,0);
drawChannelListItem(iItemOffTemp,(char *)pstCurMenuData ->aucData,0);
pstCurMenuData = pstCurMenuData->Next;
iItemOffTemp++;
}
}
}
void msm_ChannelListModeExchange(void)
{
if(iChannelListState == 0)
iChannelListState = 1;
else
iChannelListState = 0;
msm_ShowChannelList(iChannelListState);
}
void msm_ChannelItemSelect(void)
{
if(iChannelListState == 0)
{
channelSelectKeyFunc(iChannelItemOff,iNoOfAvailableMenuElements);
/*AL05 Start*/
sProgIndex2bRetrieved = sProgIndex;
iProgNumberBeingRetrieved = iProgNumber;
iCurrentProgramNo = iProgNumber;
/*AL05 End*/
}
else
{
favoriteChannelSelectKeyFunc(iFavChannelItemOff,iNoOfFavoriteMenuElements);
sProgIndex2bRetrieved = sFavProgIndex;
iProgNumberBeingRetrieved = iFavProgNumber;
iCurrentProgramNo = iFavProgNumber;
}
//STOSD_HideRegion(Handle_ProviewWindow);
EMC_HideAllRegions();
//msm_ChannelDisplay(act_DirChNum);
msm_NewChannelDisplay(cmd_DirChNum);
}
void msm_ChannelListExit(void)
{
//STOSD_HideRegion(Handle_ProviewWindow);
EMC_HideAllRegions();
}
/*--------------------------------------EOF---------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -