📄 emc_epg.c
字号:
/*******************************************************************************
File name : emc_epg.c
Description : EPG
Revision : 1.0
COPYRIGHT (C) EMC-HUST-JRC 2006.
Date Label Auther Comment
---- ---- ------ ---------------------
03-09-2006 Allen Wu Created
*********************************************************************************/
/* Includes --------------------------------------------------------------------- */
#include "stddefs.h" /* standard definitions*/
#include <stdio.h>
#include <string.h>
#include "sttbx.h"
#include "stsys.h"
#include "vid.h"
#include "gui.h"
#include "osdwrap.h"
#include "loadchannels.h"
#include "UIPositionDef.h"
#include "emc_menustate.h"
#include "emc_font.h"
#include "emc_epg.h"
#include "./pics/data_bitmap_epg.h"
#include "./pics/data_struct_epg.h"
/* Private Typedef ----------------------------------------------------------------*/
#define MAX_PROG_ITEMS_IN_EPG 5
#define MAX_EVENT_ITEMS_IN_EPG 5
/* Static variables & structures------------------------------------------------------ */
static int iEventItemOff = 0; /*The Index of event item current selected in the WHOLE event list*/
static int iTopEventItem = 0; /*The TOP Index of event item in the current event list PAGE*/
static int iSelectedDay = 0;/*1:Monday, 2:Tuesday, ..., 7:Sunday*/
static U32 uCurrentDateForShow;
static int iCurrentTimePeriod = -1;
static BOOL bNeedUpdateSkedInfo = FALSE;
static int positon_epg_progressbar = 0;/*this is used for rolling the progressbtn*/
static int iChannelItemOff = 0;
static char* TimePeriod[8] =
{
"00:00-03:00","03:00-06:00","06:00-09:00","09:00-12:00",
"12:00-15:00","15:00-18:00","18:00-21:00","21:00-24:00",
};
static char * WeekDay[7] = {"Mon","Tue","Wed","Thur","Fri","Sat","Sun"};
/* Global variables & structures----------------------------------------------------- */
extern U32 currentUTCtime;
extern short int sProgIndex;
extern int iProgNumber;
extern short int sProgIndex2bRetrieved;
extern int iProgNumberBeingRetrieved;
extern SLOT_ID old_EIT_slot;
extern SERVICE_EPG_INFO SkedEvtInfoDataBlock[];
extern EPG_PF_INFO_STRUCT PFEvtInfoDataBlock[] [2];
/* Functions--------------------------------------------------------------------- */
extern ST_ErrorCode_t SRAVC_PositionVideoWindow(int decode_channel, BOOL fullscreen, S32 offsetX, S32 offsetY, U32 width, U32 height);
extern void SRDBE_GetCurEventInfo(void);
static void drawEPGHeader(void)
{
HL_STOSD_DrawBMP(Handle_ProviewWindow, EPG_HEADER1_X,EPG_HEADER1_Y,Bitmap_Struct_EPG_Header1);
HL_STOSD_DrawBMP(Handle_ProviewWindow, EPG_HEADER2_X,EPG_HEADER2_Y,Bitmap_Struct_EPG_Header2);
STOSD_FillRectangle(Handle_ProviewWindow,EPG_TIMEBOX_X,EPG_TIMEBOX_Y,EPG_TIMEBOX_W,EPG_TIMEBOX_H,skybluecolor);
STOSD_FillRectangle(Handle_ProviewWindow,EPG_TIMEBOX_X+2,EPG_TIMEBOX_Y+2,EPG_TIMEBOX_W-4,EPG_TIMEBOX_H-4,darkbluecolor);
}
static void drawEPGProgramPointer(int index,BOOL bHighlight)
{
STOSD_Color_t color;
if(bHighlight)
color = greencolor;
else
color = skybluecolor;
STOSD_FillRectangle(Handle_ProviewWindow,EPG_LEFTPANEL_X+9,EPG_LEFTPANEL_Y+7+index*35,6,15,color);
EMC_DrawTriangle(TRIANGLE_RIGHT,EPG_LEFTPANEL_X+15,EPG_LEFTPANEL_Y+1+index*35,27,color);
}
static void drawEPGLeftsidePanel(void)
{
int i;
STOSD_FillRectangle(Handle_ProviewWindow,EPG_LEFTPANEL_X,EPG_LEFTPANEL_Y,EPG_LEFTPANEL_W,EPG_LEFTPANEL_H,orangecolor);
HL_STOSD_DrawBMP(Handle_ProviewWindow, EPG_LEFTPANEL_X, EPG_LEFTPANEL_Y+EPG_LEFTPANEL_H-8, Bitmap_Struct_EPG_LeftBottom);
for(i=0;i<MAX_PROG_ITEMS_IN_EPG;i++)
{
drawEPGProgramPointer(i,0);
}
}
static void drawEPGSmallScreenHeader(void)
{
HL_STOSD_DrawBMP(Handle_ProviewWindow,EPG_SMALL_SCREEN_FRAME_X,EPG_SMALL_SCREEN_FRAME_Y,Bitmap_Struct_EPG_SmallScreen_Header);
}
void drawEPGSmallScreenBottom(void)
{
STOSD_FillRectangle(Handle_ProviewWindow,EPG_SMALL_SCREEN_FRAME_X,EPG_SMALL_SCREEN_BOTTOM_Y,EPG_SMALL_SCREEN_FRAME_W,EPG_SMALL_SCREEN_BOTTOM_H,orangecolor);
HL_STOSD_DrawBMP(Handle_ProviewWindow,EPG_SMALL_SCREEN_FRAME_X,EPG_SMALL_SCREEN_BOTTOM_Y+EPG_SMALL_SCREEN_BOTTOM_H-8,Bitmap_Struct_EPG_LeftBottom);
HL_STOSD_DrawBMP(Handle_ProviewWindow,EPG_SMALL_SCREEN_FRAME_X+EPG_SMALL_SCREEN_FRAME_W-9,EPG_SMALL_SCREEN_BOTTOM_Y+EPG_SMALL_SCREEN_BOTTOM_H-9,Bitmap_Struct_EPG_RightBottom);
HL_STOSD_DrawBMP(Handle_ProviewWindow,EPG_SMALL_SCREEN_FRAME_X+7,EPG_SMALL_SCREEN_BOTTOM_Y+3,Bitmap_Struct_EPG_Volume);
}
static void drawEPGSmallScreen(void)
{
drawEPGSmallScreenHeader();
STOSD_FillRectangle(Handle_ProviewWindow,EPG_SMALL_SCREEN_X-4,EPG_SMALL_SCREEN_Y-4,EPG_SMALL_SCREEN_FRAME_W,EPG_SMALL_SCREEN_H+8,orangecolor);
STOSD_FillRectangle(Handle_ProviewWindow,EPG_SMALL_SCREEN_X,EPG_SMALL_SCREEN_Y,EPG_SMALL_SCREEN_W,EPG_SMALL_SCREEN_H,backgroundColor);
drawEPGSmallScreenBottom();
}
static void drawEPGProgressBar(void)
{
STOSD_FillRectangle(Handle_ProviewWindow, EPG_PROGRESSBAR_X,EPG_PROGRESSBAR_Y, EPG_PROGRESSBAR_W,EPG_PROGRESSBAR_H, whitecolor);
STOSD_FillRectangle(Handle_ProviewWindow, EPG_PROGRESSBAR_X+3,EPG_PROGRESSBAR_Y+3, EPG_PROGRESSBAR_W-6,EPG_PROGRESSBAR_H-6, dialogcolor);
HL_STOSD_DrawBMP(Handle_ProviewWindow, EPG_PROGRESSBAR_X+4,EPG_PROGRESSBAR_Y+4, Bitmap_Struct_EPG_Arrow_Up);
HL_STOSD_DrawBMP(Handle_ProviewWindow, EPG_PROGRESSBAR_X+4,EPG_PROGRESSBAR_Y+EPG_PROGRESSBAR_H-4-Bitmap_Struct_EPG_Arrow_Down.Height, Bitmap_Struct_EPG_Arrow_Down);
}
static void drawEPGProgressBtn(void)
{
HL_STOSD_DrawBMP(Handle_ProviewWindow, EPG_PROGRESSBAR_X+4,EPG_PROGRESSBAR_Y+3+Bitmap_Struct_EPG_Arrow_Up.Height+positon_epg_progressbar, Bitmap_Struct_EPG_ProgressBar);
}
static void drawEPGMenuDateBtnUnSelected(int i)
{
int left_margin = 0;
int btn_width = 0;
HL_STOSD_DrawBMP(Handle_ProviewWindow, POS_EPG_DATE_BTN_X+i*58,POS_EPG_DATE_BTN_Y, Bitmap_Struct_EPG_UpBtn);
switch(i)
{
case 0:
left_margin = 8;
btn_width = 35;
break;
case 1:
left_margin = 10;
btn_width = 33;
break;
case 2:
left_margin = 8;
btn_width = 35;
break;
case 3:
left_margin = 7;
btn_width = 38;
break;
case 4:
left_margin = 15;
btn_width = 28;
break;
case 5:
left_margin = 10;
btn_width = 30;
break;
case 6:
left_margin = 10;
btn_width = 30;
break;
}
EMC_DrawTextRectangle(Handle_ProviewWindow,
POS_EPG_DATE_BTN_X+i*58+left_margin-1,POS_EPG_DATE_BTN_Y+5,btn_width+1,17,
WeekDay[i],JLEFT,FONT_MYFONT,FALSE,
whitecolor,dialogcolor,dialogcolor);
}
static void drawEPGMenuDateBtnSelected(int i)
{
int left_margin = 0;
int btn_width = 0;
HL_STOSD_DrawBMP(Handle_ProviewWindow, POS_EPG_DATE_BTN_X+i*58,POS_EPG_DATE_BTN_Y, Bitmap_Struct_EPG_DownBtn);
switch(i)
{
case 0:
left_margin = 8-2;
btn_width = 35;
break;
case 1:
left_margin = 10-2;
btn_width = 33;
break;
case 2:
left_margin = 8-2;
btn_width = 35;
break;
case 3:
left_margin = 7-2;
btn_width = 38;
break;
case 4:
left_margin = 15-2;
btn_width = 28;
break;
case 5:
left_margin = 10-2;
btn_width = 30;
break;
case 6:
left_margin = 10-2;
btn_width = 30;
break;
}
EMC_DrawTextRectangle(Handle_ProviewWindow,
POS_EPG_DATE_BTN_X+i*58+left_margin-1,POS_EPG_DATE_BTN_Y+6,btn_width+1,17,
WeekDay[i],JLEFT,FONT_MYFONT,FALSE,
whitecolor,dialogcolor,dialogcolor);
}
/*modified by Allen,09-24-2005,fitting the new UI*/
/*NOTICE!!*/
/*uCurrentDateForShow : 1:Monday, 2:Tuesday, ...,0:Sunday*/
/* 7:Sunday*/
/*iSelectedDay : 1:Monday, 2:Tuesday, ..., 7:Sunday*/
static void drawEPGEventListBox(void)
{
int i;
STOSD_Color_t backcolor;
backcolor.Type = STOSD_COLOR_TYPE_PALETTE;
backcolor.Value.PaletteEntry = 84;
STOSD_FillRectangle(Handle_ProviewWindow,EPG_HEADER1_X+227,EPG_HEADER1_Y+41,397, 272+4, orangecolor);
STOSD_FillRectangle(Handle_ProviewWindow,EPG_HEADER1_X+231,EPG_HEADER1_Y+63,389, 247+4, dialogcolor);
EMC_DrawTextRectangle(Handle_ProviewWindow,
EPG_HEADER1_X+229,EPG_HEADER1_Y+41, 120, 22,
"Program Guide", JLEFT,FONT_MYFONT,FALSE,
darkbluecolor,orangecolor, orangecolor);
for(i=0;i<MAX_EVENT_ITEMS_IN_EPG;i++)
{
STOSD_FillRectangle(Handle_ProviewWindow,EPG_EVENT_ITEM_X,EPG_EVENT_ITEM_Y+i*(EPG_EVENT_ITEM_H+6),EPG_EVENT_ITEM_W,EPG_EVENT_ITEM_H,yellowcolor);
}
/*time period box*/
STOSD_FillRectangle(Handle_ProviewWindow, EPG_EVENT_ITEM_X, EPG_EVENT_ITEM_Y+MAX_EVENT_ITEMS_IN_EPG*(EPG_EVENT_ITEM_H+6), 170, 32, blackcolor);
EMC_DrawTriangle(TRIANGLE_UP, EPG_EVENT_ITEM_X+Bitmap_Struct_EPG_TimeBtn.Width+5,EPG_EVENT_ITEM_Y+MAX_EVENT_ITEMS_IN_EPG*(EPG_EVENT_ITEM_H+6)+20,20, whitecolor);
EMC_DrawTriangle(TRIANGLE_DOWN, EPG_EVENT_ITEM_X+Bitmap_Struct_EPG_TimeBtn.Width+5+20,EPG_EVENT_ITEM_Y+MAX_EVENT_ITEMS_IN_EPG*(EPG_EVENT_ITEM_H+6)+10,20, whitecolor);
HL_STOSD_DrawBMP(Handle_ProviewWindow, EPG_EVENT_ITEM_X+1,EPG_EVENT_ITEM_Y+MAX_EVENT_ITEMS_IN_EPG*(EPG_EVENT_ITEM_H+6)+1, Bitmap_Struct_EPG_TimeBtn);
HL_STOSD_DrawBMP(Handle_ProviewWindow, EPG_EVENT_ITEM_X+380-Bitmap_Struct_EPG_PageBtn.Width*2-10,EPG_EVENT_ITEM_Y+MAX_EVENT_ITEMS_IN_EPG*(EPG_EVENT_ITEM_H+6)+1, Bitmap_Struct_EPG_PageBtn);
EMC_DrawTextRectangle(Handle_ProviewWindow,
EPG_EVENT_ITEM_X+380-Bitmap_Struct_EPG_PageBtn.Width*2-10+8,EPG_EVENT_ITEM_Y+MAX_EVENT_ITEMS_IN_EPG*(EPG_EVENT_ITEM_H+6)+5,75,15,
"prev page",JLEFT,FONT_MYFONT,FALSE,
whitecolor,backcolor,backcolor);
HL_STOSD_DrawBMP(Handle_ProviewWindow, EPG_EVENT_ITEM_X+380-Bitmap_Struct_EPG_PageBtn.Width,EPG_EVENT_ITEM_Y+MAX_EVENT_ITEMS_IN_EPG*(EPG_EVENT_ITEM_H+6)+1, Bitmap_Struct_EPG_PageBtn);
EMC_DrawTextRectangle(Handle_ProviewWindow,
EPG_EVENT_ITEM_X+380-Bitmap_Struct_EPG_PageBtn.Width+9,EPG_EVENT_ITEM_Y+MAX_EVENT_ITEMS_IN_EPG*(EPG_EVENT_ITEM_H+6)+5,75,15,
"next page",JLEFT,FONT_MYFONT,FALSE,
whitecolor,backcolor,backcolor);
/*progressbar*/
drawEPGProgressBar();
drawEPGProgressBtn();
}
static void drawEPGEventDescBox(void)
{
STOSD_FillRectangle(Handle_ProviewWindow,EPG_HEADER1_X+227,EPG_HEADER1_Y+318+7,397,130,orangecolor);
STOSD_FillRectangle(Handle_ProviewWindow,EPG_HEADER1_X+227+4,EPG_HEADER1_Y+318+4+7,397-8,107,yellowcolor);
HL_STOSD_DrawBMP(Handle_ProviewWindow,EPG_HEADER1_X+227,EPG_HEADER1_Y+318+7, Bitmap_Struct_EPG_LeftTop);
HL_STOSD_DrawBMP(Handle_ProviewWindow,EPG_HEADER1_X+227+397-14,EPG_HEADER1_Y+318+7, Bitmap_Struct_EPG_RightTop);
HL_STOSD_DrawBMP(Handle_ProviewWindow,EPG_HEADER1_X+227,EPG_HEADER1_Y+318+130-8+7, Bitmap_Struct_EPG_LeftBottom);
HL_STOSD_DrawBMP(Handle_ProviewWindow,EPG_HEADER1_X+227+397-9,EPG_HEADER1_Y+318+130-9+7, Bitmap_Struct_EPG_RightBottom);
EMC_DrawTriangle(TRIANGLE_UP,EPG_HEADER1_X+582, EPG_HEADER1_Y+435+8+7,17,lightbluecolor);
EMC_DrawTriangle(TRIANGLE_DOWN,EPG_HEADER1_X+598, EPG_HEADER1_Y+435+7,17,lightbluecolor);
}
static void drawEPGItem(U8 offset,const ST_String_t item,BOOL bHighlight)
{
int i;
char epg_item[MAX_SERVICE_NAME_LENGTH+10];
U16 DrawPositionX,DrawPositionY;
STOSD_Color_t textcolor;
if(bHighlight)
{
textcolor = backgroundColor;
}
else
{
textcolor = whitecolor;
}
DrawPositionX=EPG_PROGITEM_X;
DrawPositionY=EPG_PROGITEM_Y+offset*(32+3);
HL_STOSD_DrawBMP(Handle_ProviewWindow, DrawPositionX,DrawPositionY, Bitmap_Struct_EPG_ProgItem);
for(i=0;i<3;i++)
{
epg_item[i] = item[i];
}
epg_item[3] = ' ';
/*epg_item[4] = ' ';*/
for(i=0;i<MAX_SERVICE_NAME_LENGTH;i++)
{
if(item[i+17]!='\0' || item[i+17]!=' ')
epg_item[i+4] = item[i+17];
else
{
epg_item[i+4] = '\0';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -