📄 emc_infopanel.c
字号:
/*******************************************************************************
File name : emc_infopanel.c
Description : include info_panel,program_num_panel
Revision : 1.0
COPYRIGHT (C) EMC-HUST-JRC 2005.
Date Label Auther Comment
---- ---- ------ ---------------------
01-03-2006 Allen Wu Created
*********************************************************************************/
/* Includes --------------------------------------------------------------------- */
#include "usif.h"
#include "string.h"
#include "sr_dbase.h"
//#include "hl_stosd.h"
#include "UIPositionDef.h"
//#include "OsdRegionInit.h"
#include "gui.h"
#include "osdwrap.h"
#include "emc_font.h"
#include "emc_menustate.h"
#include "emc_channeldisplay.h"
#include "emc_infopanel.h"
clock_t infoStartTime;
extern short int sProgIndex2bRetrieved;
extern int iProgNumberBeingRetrieved;
extern U32 currentUTCtime;
extern PROGRAM_LIST *ProgramList;
extern EPG_PF_INFO_STRUCT PFEvtInfoDataBlock [] [2];
extern PROG_INFO_STRUCT *SRDBE_CurProgInfo(int *piProgramNo);
extern int ConvertTimeStampToTimeString(U32 timeStamp, char* out);
extern int ConvertTimeStampToDateString(U32 timeStamp, char* out);
extern int ConvertUTCDateToWeek(unsigned int utcDate);
extern int ConvertUTCDate(unsigned int utcDate);
extern U32 ST_GetClocksPerSecondLow( void );
extern void sttbx_Print(const char *const Format_p, ...);
void msm_UpdateInfoPanelTime(void)
{
char currTime[10];
ConvertTimeStampToTimeString(currentUTCtime/*+timeDateUserOffset*3600*/, currTime);
EMC_DrawTextRectangle(Handle_ProviewWindow,
INFO_PANEL_X+255, INFO_PANEL_Y+2, 66, 24,
currTime, JLEFT,FONT_MYFONT,FALSE,
whitecolor, darkyellow, darkyellow);
}
static BOOL drawInfoPanel(BOOL Update)
{
int currProgDuration,currDuration,currProgTimePassed;
int pos_x,pos_y,width,height;
int iProgNo;
//char progNum[4];
char str[256];
char str1[100];
char startTime[10],endTime[10];
int sProgIndex = 0;
PROG_INFO_STRUCT *pstProgInfoTemp;
if ( ( pstProgInfoTemp = SRDBE_CurProgInfo ( &iProgNo ) ) == NULL )
{
sttbx_Print("cannot get current program!!!\n");
return FALSE;
}
sProgIndex = sProgIndex2bRetrieved;
if(Update == FALSE) /*redraw the total info panel*/
{
/*clear the screen*/
STOSD_FillRectangle(Handle_ProviewWindow,0,0,ProviewWindowParams.Width,ProviewWindowParams.Height,backgroundColor);
/*draw flat panel*/
STOSD_FillRectangle(Handle_ProviewWindow,INFO_PANEL_X,INFO_PANEL_Y,INFO_PANEL_WIDTH,INFO_PANEL_HEIGHT,lightbluecolor);
STOSD_FillRectangle(Handle_ProviewWindow,INFO_PANEL_X+2,INFO_PANEL_Y+2,INFO_PANEL_WIDTH-4,INFO_PANEL_HEIGHT-4,dialogcolor);
/*draw shadow*/
STOSD_DrawLine(Handle_ProviewWindow,INFO_PANEL_X,INFO_PANEL_Y+INFO_PANEL_HEIGHT,INFO_PANEL_X+INFO_PANEL_WIDTH,INFO_PANEL_Y+INFO_PANEL_HEIGHT, epgheadcolor);
STOSD_DrawLine(Handle_ProviewWindow,INFO_PANEL_X+1,INFO_PANEL_Y+INFO_PANEL_HEIGHT-1,INFO_PANEL_X+INFO_PANEL_WIDTH-1,INFO_PANEL_Y+INFO_PANEL_HEIGHT-1, epgheadcolor);
STOSD_DrawLine(Handle_ProviewWindow,INFO_PANEL_X+INFO_PANEL_WIDTH,INFO_PANEL_Y,INFO_PANEL_X+INFO_PANEL_WIDTH,INFO_PANEL_Y+INFO_PANEL_HEIGHT, epgheadcolor);
STOSD_DrawLine(Handle_ProviewWindow,INFO_PANEL_X+INFO_PANEL_WIDTH-1,INFO_PANEL_Y+1,INFO_PANEL_X+INFO_PANEL_WIDTH-1,INFO_PANEL_Y+INFO_PANEL_HEIGHT-1, epgheadcolor);
/*draw title*/
STOSD_FillRectangle(Handle_ProviewWindow,INFO_PANEL_X+2,INFO_PANEL_Y+2,INFO_PANEL_WIDTH-4,24,darkyellow);
}
else
STOSD_FillRectangle(Handle_ProviewWindow, INFO_PANEL_X+5,INFO_PANEL_Y+30, INFO_PANEL_WIDTH-10, INFO_PANEL_HEIGHT-35, dialogcolor);
sttbx_Print("\ncurrentUTCtime = %d\n",currentUTCtime);
/*get current date*/
ConvertTimeStampToDateString(currentUTCtime/*+timeDateUserOffset*3600*/, str1);
/*get current time*/
currDuration = ConvertTimeStampToTimeString(currentUTCtime/*+timeDateUserOffset*3600*/, str);
sttbx_Print("\ncurrDuration = %d\n",currDuration);
/*draw the date&time string*/
msm_UpdateInfoPanelTime();
/*draw progNum & progName*/
sprintf(str,"%03d %s",iProgNumberBeingRetrieved,pstProgInfoTemp->cServiceName);
EMC_DrawTSTextRectangle(Handle_ProviewWindow,
INFO_PANEL_X+5, INFO_PANEL_Y+2, 250, 24,
str, JLEFT,FALSE,
whitecolor, darkyellow, darkyellow);
if((pstProgInfoTemp->bLockedStatus) /*&& (parentalLockEnabled == TRUE)*/)
{
switch((pstBoxInfo->iUILanguage))
{ case 0: strcpy(str,"Program be locked!!");
break;
/*
case 1: strcpy(str,"该节目已被锁定!!");
break;
case 2: break;
*/
}
EMC_DrawTextRectangle(Handle_ProviewWindow,
INFO_PANEL_X+10+60,INFO_PANEL_Y+30+18,150,18,
str,JLEFT,FONT_MYFONT,FALSE,
whitecolor,dialogcolor,dialogcolor);
}
else
{
if(PFEvtInfoDataBlock[sProgIndex][0].status == ELEMENT_OCCUPIED)
{
/*draw current program infomation*/
pos_x = INFO_PANEL_X+10;
pos_y = INFO_PANEL_Y+35;
width = 300;
height = 24;
EMC_DrawTSTextRectangle(Handle_ProviewWindow,
pos_x,pos_y,width,height,
PFEvtInfoDataBlock[sProgIndex][0].eventName,JLEFT,FALSE,
whitecolor,dialogcolor,dialogcolor);
pos_y += 25;
width = 100;
EMC_DrawTextRectangle(Handle_ProviewWindow,
pos_x,pos_y,width,height,
"INFO Details",JLEFT,FONT_MYFONT,FALSE,
lightbluecolor,dialogcolor,dialogcolor);
pos_x = pos_x+width;
ConvertTimeStampToTimeString(PFEvtInfoDataBlock[sProgIndex][0].startTime,startTime);
ConvertTimeStampToTimeString(PFEvtInfoDataBlock[sProgIndex][0].startTime+PFEvtInfoDataBlock[sProgIndex][0].duration,endTime);
startTime[5]=endTime[5]='\0';
sprintf(str, "%s-%s", startTime,endTime);
EMC_DrawTextRectangle(Handle_ProviewWindow,
pos_x,pos_y,width,height,
str,JLEFT,FONT_MYFONT,FALSE,
whitecolor,dialogcolor,dialogcolor);
/*draw current program progress bar,by Allen,09-28-2005*/
currProgTimePassed = currentUTCtime-PFEvtInfoDataBlock[sProgIndex][0].startTime;
currProgDuration = PFEvtInfoDataBlock[sProgIndex][0].duration;
if(currProgTimePassed>0 && currProgDuration>0)
{
pos_x = pos_x+width+2;
width = 110;
STOSD_FillRectangle(Handle_ProviewWindow,pos_x,pos_y+3,width,18,whitecolor);
if(currProgTimePassed<currProgDuration)
width = 110*currProgTimePassed/currProgDuration;
STOSD_FillRectangle(Handle_ProviewWindow,pos_x,pos_y+3,width,18,darkyellow);
}
}
else
{
EMC_DrawTextRectangle(Handle_ProviewWindow,
INFO_PANEL_X+10+100,INFO_PANEL_Y+30+18,100,18,
"waiting...",JLEFT,FONT_MYFONT,FALSE,
whitecolor,dialogcolor,dialogcolor);
}
if(PFEvtInfoDataBlock[sProgIndex][1].status == ELEMENT_OCCUPIED)
{
ConvertTimeStampToTimeString(PFEvtInfoDataBlock[sProgIndex][1].startTime,startTime);
ConvertTimeStampToTimeString(PFEvtInfoDataBlock[sProgIndex][1].startTime+PFEvtInfoDataBlock[sProgIndex][0].duration,endTime);
startTime[5]=endTime[5]='\0';
sprintf(str, "%s-%s %s", startTime,endTime, PFEvtInfoDataBlock[sProgIndex][1].eventName);
EMC_DrawTSTextRectangle(Handle_ProviewWindow,
INFO_PANEL_X+10,INFO_PANEL_Y+50+34,318,24,
str,JLEFT,FALSE,
whitecolor,dialogcolor,dialogcolor);
}
}
infoStartTime = time_now();
#if 0
STOSD_HideRegion(Handle_ProviewWindow); /* FF03 add*/
STOSD_ShowRegion(Handle_ProviewWindow);
#else
EMC_ShowRegion();
#endif
return TRUE;
}
void InfoPanelTimeoutPerform(void)
{
clock_t curTime = time_now();
char str[10];
if(time_minus(curTime , infoStartTime) >= WAIT_FOR_1_SEC * 5)
{
msm_FeedbackMsg(cmd_Exit);
}
}
void msm_ShowChannelInfoPanel(BOOL bUpdateInfoPanel)
{
drawInfoPanel(bUpdateInfoPanel);
}
void msm_HideChannelInfoPanel(void)
{
//STOSD_FillRectangle(Handle_ProviewWindow,0,0,ProviewWindowParams.Width,ProviewWindowParams.Height,backgroundColor);
//STOSD_HideRegion(Handle_ProviewWindow);
EMC_HideAllRegions();
}
/*AL02 Start*/
/*--------Begin of Press RCKeyboard to Show Program ,by Allen Wu,10-21-2005--------*/
clock_t pogNumInputStartTime;
static int progArrayIndex = -1;
static char progArray[4] = {' ',' ',' ','\0'};
static int progNumTemp = -1;
static void prepareProgNumInput(void)
{
int i;
progArrayIndex = -1;
for(i = 0;i<3;i++)
progArray[i] = '_';
progArray[3] = '\0';
progNumTemp = 0;
}
static void drawProgNumInputPanel(int progArrayIndex,char progNum)
{
/*restart the timing*/
pogNumInputStartTime = time_now();
switch(progArrayIndex)
{
case 0:
/*In this condition,we should draw the total ProgPanel and with the first prognum*/
/*And the total program number must more than 10*/
EMC_HideAllRegions();
STOSD_FillRectangle(Handle_ProviewWindow, PROG_PANEL_X, PROG_PANEL_Y,PROG_PANEL_WIDTH, PROG_PANEL_HEIGHT, dialogcolor);
EMC_DrawTextRectangle(Handle_ProviewWindow,
PROG_PANEL_X+20, PROG_PANEL_Y+10, 60, 32,
progArray, JLEFT, FONT_MYENGFONT,FALSE,
whitecolor, dialogcolor,dialogcolor);
EMC_ShowRegion();
break;
case 1:
/*just update the second number*/
EMC_DrawTextRectangle(Handle_ProviewWindow,
PROG_PANEL_X+20, PROG_PANEL_Y+10, 60, 32,
progArray, JLEFT, FONT_MYENGFONT,FALSE,
whitecolor, dialogcolor,dialogcolor);
/*if total program number less than 100,then show the program directly*/
if(ProgramList->NoOfValidPgms<100)
{ /*without waiting for 3 secs,show the program directly*/
msm_FeedbackMsg(cmd_Select);
}
break;
case 2:
/*just update the third number*/
EMC_DrawTextRectangle(Handle_ProviewWindow,
PROG_PANEL_X+20, PROG_PANEL_Y+10, 60, 32,
progArray, JLEFT, FONT_MYENGFONT,FALSE,
whitecolor, dialogcolor,dialogcolor);
/*without waiting for 3 secs,show the program directly*/
msm_FeedbackMsg(cmd_Select);
break;
}
}
void ProNumPanelTimeoutPerform(void)
{
clock_t currTime = time_now();
if(time_minus(currTime , pogNumInputStartTime) >= WAIT_FOR_1_SEC * 5)
{
msm_FeedbackMsg(cmd_Select);
}
}
void msm_ShowProNumPanel(int num)
{
if(ProgramList->NoOfValidPgms == 0)
{
pogNumInputStartTime = time_now();/*Added by Allen,02-16-2006*/
msm_FeedbackMsg(cmd_Exit);
return;
}
#if 0
else if(ProgramList->NoOfValidPgms<10)
{ /*jump to the program directly without showing the input panel*/
progNumTemp = num;
msm_FeedbackMsg(cmd_Select);
}
else
{ /*show the InputPanel waiting for the next input*/
prepareProgNumInput();
progNumTemp = num;
progArrayIndex=0;
progArray[progArrayIndex] = progNumTemp+'0';
/*draw ProgNumInputPanel with the first number*/
drawProgNumInputPanel(progArrayIndex,progArray[progArrayIndex]);
}
#endif
prepareProgNumInput();
progNumTemp = num;
progArrayIndex=0;
progArray[progArrayIndex] = progNumTemp+'0';
/*draw ProgNumInputPanel with the first number*/
drawProgNumInputPanel(progArrayIndex,progArray[progArrayIndex]);
if(ProgramList->NoOfValidPgms<10)
msm_FeedbackMsg(cmd_Select);
}
void msm_EditProNumPanel(int num)
{
progArrayIndex++;
progNumTemp = progNumTemp*10 + num;
progArray[progArrayIndex] = num+'0';
drawProgNumInputPanel(progArrayIndex,progArray[progArrayIndex]);
}
void msm_ConfirmProNumPanel(void)
{
/*without waiting for 3 secs,show the program directly*/
iCurrentProgramNo = progNumTemp;
/*roll back*/
prepareProgNumInput();
/*clear the screen*/
//STOSD_FillRectangle(Handle_ProviewWindow,0,0,ProviewWindowParams.Width,ProviewWindowParams.Height,backgroundColor);
EMC_HideAllRegions();
msm_NewChannelDisplay(cmd_DirChNum);
}
void msm_ExitProNumPanel(void)
{
/*roll back*/
prepareProgNumInput();
/*change state to SYSTEM_DVB_DISPLAY*/
//STOSD_FillRectangle(Handle_ProviewWindow,0,0,ProviewWindowParams.Width,ProviewWindowParams.Height,backgroundColor);
EMC_HideAllRegions();
}
/*------------End of Press RCKeyboard to Show Program ,by Allen Wu,10-21-2005-------------*/
/*------------------------------------EOF---------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -