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

📄 emc_channellist.c

📁 关于嵌入式PCB板UI的程序
💻 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 + -