📄 console.c
字号:
/*****************************************************************************
*
* Copyright (C) 2001 Acer Labs, Inc. All Rights Reserved. *
* File: console.c
*
* Contents: console window
*
* History:
* Date By Reason Ver.
* ============ ======== ============= ======
* 2001.7.23 Carl Guan Create it 0.1
* 2001.12.21 David Cui Modify
* 2003.4.8 Benjamin Add Dview
* 2003.4.10 Cliff Wang Modify
* 2003.5.8 bond modify
*****************************************************************************/
#include <comsub.h>
#include <ui.h>
#include <ui_sub.h>
#include <osd.h>
#include <resource.h>//added by mikehan
#include <rscstruc.h>//added by mikehan
#include <panel.h>
#include "../cstm/fend/frntp.h" //added by gamble
#include <nv.h>
#include <audio.h>
#include <stdlib.h>
#include <string.h>
#include "console.h"
#include <platform.h>
#include <fileopen.h>
#include "uiosd.h"
#include "nmosd.h"
//#define _SVCD_AudioIDC_Enable 1
// Start for LG#1286
extern DWORD NVGetVCDTotalTimePBCON(void);
// End for LG#1286
static BYTE ItemState; /* 1: Normal state, 0: Edit state */
static int bitcount=0;
static int curpgnum=1;
//030809-01lily:for console item multi time next/pre
static int totalpg;
static int tmpcurtt;
static int temppttn;
BYTE CNSL_ENTER_COUNTER; //CHC2 Ares for multi time mode
BOOL cursound=0;
extern BYTE HLValidKeyProcessing;//30929-01MI
typedef BYTE t_Domain;
extern t_Domain CurrentDomain;
BOOL tmpFlagForDA=TRUE;
BYTE ConsoleTimeMode;
extern BYTE CDG_Decode_Flag;
BYTE cnsl_cur_item=0;
#define cnsl_cur_item_id (menus[cnsl_cur_item].ID)
#define cnsl_item_id(i) (menus[i].ID)
//BYTE vcdcnsl_cur_item=0;
//BYTE dvdaudio_cnsl_cur_item=0;
//BYTE movie_cnsl_cur_item=0;
T_WORD_FUNC_PTR Cnsl_DVDItemProc[]=
{
CnslItemTitle,
CnslItemChapter,
CnslItemTime,
CnslItemAudio,
CnslItemSubtitle,
CnslItemAngle
#ifdef SOUND_SUPPORT
,
CnslItemSound
#endif
};
T_WORD_FUNC_PTR Cnsl_VCDItemProc[]=
{
CnslItemTitle,
CnslItemTime,
CnslItemAudio
#ifdef SOUND_SUPPORT
,
CnslItemSound
#endif
};
#if 0
extern BaseRect brc[];
extern BaseBmp bmpbox[];
extern BaseRect vcdbrc[];
extern BaseBmp vcdbmpbox[];
#endif
extern const UINT GUI_LANGUAGEID[7];
extern BYTE timestr[];
extern MLineConsItem consoleAudioItem;
//system not support dynamic memory alloc and free, so have to use array
MENUITEM menus[CNSL_BOX_NUMS_DVD];//space big enough
BYTE menu_count;//count of menus
const BYTE dvd_menu_item_ids[] = {CNSL_BOX_TITLE_DVD,
CNSL_BOX_CHAPTER_DVD,
CNSL_BOX_TIME_DVD,
CNSL_BOX_AUDIO_DVD,
CNSL_BOX_SUBTITLE_DVD,
CNSL_BOX_ANGLE_DVD,
CNSL_BOX_SOUND_DVD};
const WORD dvd_menu_item_bmps[] = {IM_GUI_TITLE,
IM_GUI_CHAPTER,
IM_GUI_TIME,
IM_GUI_AUDIO,
IM_GUI_SUBTITLE,
IM_GUI_ANGLE,
IM_GUI_SOUND};
const BYTE vcd_menu_item_ids[] = {CNSL_BOX_TITLE_VCD,
CNSL_BOX_TIME_VCD,
CNSL_BOX_AUDIO_VCD,
CNSL_BOX_SOUND_VCD};
const WORD vcd_menu_item_bmps[] = {IM_GUI_TITLE,
IM_GUI_TIME,
IM_GUI_AUDIO,
IM_GUI_SOUND};
void SetMenuStatus()
{
BYTE i;
for(i=0;i<menu_count;i++){
menus[i].status = MENU_NORMAL;
}
if(DiscType == C_DVD || DiscType == C_DVD_VR){
if(DiscType == C_DVD_VR)
menus[5].status = MENU_DISABLE;
//30929-01mi
if ( ((NVIsUOPPermit(UOP0)!=TRUE) || (NVIsUOPPermit(UOP5)!=TRUE) )) //modified by jane (NVIsUOPPermit(UOP5)!=TRUE)
menus[2].status = MENU_DISABLE;
//--------------
//30929-01mi
if ((NVChkIsMultiPGC())) //modified by jane ( NVIsUOPPermit(UOP1)!=TRUE) || (NVIsUOPPermit(UOP5)!=TRUE) ||
menus[1].status = MENU_DISABLE;
}
else{
if(OSD_Setup_Parameter.bPBC==C_ON){
if(DiscType != C_VCD10){
menus[0].status = MENU_DISABLE;
}
if(DiscType == C_SVCD){
menus[1].status = MENU_DISABLE;
}
}
}
}
BOOL load_menus()
{
BYTE item_count;
BYTE i,j;
BYTE bmp_yoffset;
WORD ystart;
if(DiscType == C_DVD || DiscType == C_DVD_VR){
item_count = CNSL_BOX_NUMS_DVD;
}
else{
item_count = CNSL_BOX_NUMS_VCD;
}
if(g_UiCoreState==UI_CORE_STOP){
item_count = 1;
}
// menus = (MENUITEM*)malloc(sizeof(MENUITEM) * item_count);
// if(menus == 0) return FALSE;
menu_count = item_count;
//box base rect data
//VCD MENU FIRST BOX'S POSITION
ystart = CNSL_BOX_UPPERTOP;
for(i=0;i<item_count;i++){
menus[i].baseRect.rect.left = CNSL_BOX_UPPERLEFT;
menus[i].baseRect.rect.top = ystart;
menus[i].baseRect.rect.right = CNSL_BOX_UPPERLEFT+CNSL_BOX_WIDTH;
if(i == 3 && (DiscType == C_DVD || DiscType == C_DVD_VR)){//this item is heigher than other items
ystart += CNSL_BOX_AUDIO_HIGH;
}
else{
ystart += CNSL_BOX_HIGH;
}
menus[i].baseRect.rect.bottom = ystart;
menus[i].baseRect.bkColor=CNSL_BOX_BACKCOLOR_NORMAL;
menus[i].baseRect.strColor=CNSL_BOX_STRCOLOR_NORMAL;
bmp_yoffset=((menus[i].baseRect.rect.bottom-menus[i].baseRect.rect.top)-CNSL_BOX_BMP_HEIGHT)/2;// centering the bmp.
menus[i].baseBmp.height=CNSL_BOX_BMP_HEIGHT;
menus[i].baseBmp.width=CNSL_BOX_BMP_WIDTH;
menus[i].baseBmp.upperleftx=CNSL_BOX_UPPERLEFT/*menus[i].baseRect.rect.left*/+CNSL_BOX_BMP_XOFFSET; //absolute position. not good
menus[i].baseBmp.upperlefty=menus[i].baseRect.rect.top+bmp_yoffset;
// menus[i].baseBmp.lpBitmapName=GET_IMNAME(CnslMapGuiId(j));
if(DiscType == C_DVD || DiscType == C_DVD_VR){
menus[i].ID = dvd_menu_item_ids[i];
menus[i].baseBmp.lpBitmapName = GET_IMNAME(dvd_menu_item_bmps[i]);
}
else{
menus[i].ID = vcd_menu_item_ids[i];
menus[i].baseBmp.lpBitmapName = GET_IMNAME(vcd_menu_item_bmps[i]);
}
/* printf("menus[%d].baseRect(%d,%d,%d,%d),bmpRect(%d,%d,%d,%d)\r\n",
i,
menus[i].baseRect.rect.left,
menus[i].baseRect.rect.top,
menus[i].baseRect.rect.right,
menus[i].baseRect.rect.bottom,
menus[i].baseBmp.upperleftx,
menus[i].baseBmp.upperlefty,
menus[i].baseBmp.width,
menus[i].baseBmp.height
);
*/
ystart += (3);
}
SetMenuStatus();
}
/*
void unload_menus()
{
free(menus);
menus = 0;
}
*/
void UiSubFuncConsoleInit(BYTE CurSelItem)
{
// printf("UiSubFuncConsoleInit-->\r\n");
//JANE ADDED
if (g_UiCrntSubFunc == UI_SUBFUNC_ZOOM)
gZoomFuncPlus = TRUE;
ClearRectArea(gui_hdc,GUITYPE_MODEGUI);
SetTimer(OSD6_TM_ID,ModeOSDOff,INFINITETIME);
NextPrevStatus=0;
SetOSDLanguage(&OSD_Setup_Parameter.bOSDLang);
ItemState=DISPLAY_STATE;
bitcount = 0;
curpgnum=1;
ConsoleTimeMode=C_TT_TM;
g_UiCrntSubFunc = UI_SUBFUNC_CONSOLE;
NVGetCurInfo(&OSD_Console_Parameter.PlayPoint);
if(OSD_Console_Parameter.PlayPoint.wTTN==0)
tmpcurtt=1;
else
tmpcurtt=OSD_Console_Parameter.PlayPoint.wTTN;
if (DiscType == C_DVD)
temppttn=OSD_Console_Parameter.PlayPoint.wPTTN;
if(g_UiCoreState!=UI_CORE_FAST&&g_UiCoreState!=UI_CORE_REVERSE
&&g_UiCoreState!=UI_CORE_SLOW&&g_UiCoreState!=UI_CORE_REVSLOW
&&g_UiCoreState!=UI_CORE_STEP&&g_UiCoreState!=UI_CORE_REVSTEP
&&g_UiCoreState!=UI_CORE_PAUSE)
ClearRectArea(gui_hdc, GUITYPE_PLAYMODEGUI);
load_menus();//load menus according disc type
if(CurSelItem < menu_count)
cnsl_cur_item = CurSelItem;
else
cnsl_cur_item = 0;
// printf("cnsl_cur_item1 = %d\r\n", cnsl_cur_item);
if(menus[cnsl_cur_item].status == MENU_DISABLE){//find next enabled item
char iNext;
for(iNext = cnsl_cur_item+1; iNext%=menu_count , iNext != cnsl_cur_item; iNext++){
if(menus[iNext].status == MENU_NORMAL)//find it!
break;
}
cnsl_cur_item = iNext;
}
// printf("cnsl_cur_item2 = %d\r\n", cnsl_cur_item);
DrawConsleMenu(gui_hdc, cnsl_cur_item);
SendVFDPart2Show(C_SENDTIMEOK);
#if 0
if(g_UiCoreState!=UI_CORE_STOP)
{
if(DiscType==C_VCD20||DiscType==C_SVCD)
{
if(OSD_Setup_Parameter.bPBC==C_ON&&vcdcnsl_cur_item==0)
{
vcdcnsl_cur_item=2;
CurSelItem=2;
}
}
DrawConsleMenu(gui_hdc,CurSelItem);
SendVFDPart2Show(C_SENDTIMEOK);
}
else
{
//030807-02lily:for stop show just one item
ClearRectArea(gui_hdc, GUITYPE_MODEGUI);
SetCnslFirstBoxRect();
ShowConsleItem(gui_hdc,0);
//end 030807-02lily:for stop show just one item
}
#endif
#if (_CONSOLE_AUTO_CLOSE_TIME >= 1)
SetConsoleTimer(_CONSOLE_AUTO_CLOSE_TIME*1000);
#endif
// printf("UiSubFuncConsoleInit<-------\r\n");
}
WORD UiSubFuncConsoleProc(WORD MsgType, DWORD MsgInput)
{
#if 0
return UI_NOUSE_FUNC_MSG;
#else
switch(MsgType)
{
case C_FP_KEY:
return ConsoleRespondFPKey(MsgInput);
case C_FP_PLAYTIME:
ConsoleModifyTimeSRC();
return UI_NOUSE_FUNC_MSG;
case C_NV_NOTICE:
return ConsoleRespondNVNotice(MsgInput);
case C_PLAYBACK_MANAGE: //030430-01lily: lily ma:added for playback manage module
return ConsoleRespondPlaybackManage(MsgInput);
case C_UI_NOTICE:
return ConsoleRespondUINotice(MsgInput);
case C_TIMER_ACTIVE:
return ConsoleRespondTimer(MsgInput);
case C_NV_CHGPRNT:
CloseConsole();
return UI_NOUSE_FUNC_MSG;
case C_HAL_NOTICE:
return ConsoleRespondHALNotice(MsgInput);
#ifdef _KARAOKE_ENABLE_
case C_FP_MIC_DETECT:
ConsoleRespondMic(MsgInput);
return UI_NOUSE_FUNC_MSG;
#endif
default:
return UI_NOUSE_FUNC_MSG;
}
// return UI_IS_FUNC_MSG;
#endif
}
WORD ConsoleRespondFPKey(DWORD key)
{
WORD wret;
BYTE preitem;
switch(key)
{
case V_KEY_UP:
bitcount=0;
if(g_UiCoreState==UI_CORE_STOP)
return UI_IS_FUNC_MSG;
ItemState=DISPLAY_STATE;
#if 1
if(
(
(DiscType==C_DVD||DiscType==C_DVD_VR)&&
(cnsl_cur_item_id==CNSL_BOX_TITLE_DVD || cnsl_cur_item_id== CNSL_BOX_CHAPTER_DVD)
)
||
(
(DiscType==C_VCD10||
(
(DiscType==C_VCD20||DiscType==C_SVCD)&&
(OSD_Setup_Parameter.bPBC==C_OFF)
)
)&&
cnsl_cur_item_id==CNSL_BOX_TITLE_VCD
)
)
{
NVGetCurInfo(&OSD_Console_Parameter.PlayPoint);
if(cnsl_cur_item_id==CNSL_BOX_CHAPTER_DVD)
temppttn=OSD_Console_Parameter.PlayPoint.wPTTN;
else
tmpcurtt=OSD_Console_Parameter.PlayPoint.wTTN;
// else
// tmpcurtt=OSD_Console_Parameter.PlayPoint.wPTTN;
SetConsolePTTTimer(INFINITETIME);
}
#else
//added by jane
if ((((DiscType==C_DVD)||(DiscType==C_DVD_VR))&&(cnsl_cur_item==CNSL_BOX_TITLE_DVD))
||(((DiscType==C_VCD10)||(((DiscType==C_VCD20)||(DiscType==C_SVCD))&&(OSD_Setup_Parameter.bPBC==C_OFF)))&&(cnsl_cur_item==CNSL_BOX_TITLE_VCD))
)
{
NVGetCurInfo(&OSD_Console_Parameter.PlayPoint);
tmpcurtt=OSD_Console_Parameter.PlayPoint.wTTN;
SetConsolePTTTimer(INFINITETIME);
}
if ((((DiscType == C_DVD)|| (DiscType == C_DVD_VR)) && (cnsl_cur_item == CNSL_BOX_CHAPTER_DVD)))
{
NVGetCurInfo(&OSD_Console_Parameter.PlayPoint);
temppttn=OSD_Console_Parameter.PlayPoint.wPTTN;
SetConsolePTTTimer(INFINITETIME);
}
#endif
#if 1
preitem = cnsl_cur_item;//store preitem. NOTE: maybe a wrong number!!!
if(cnsl_cur_item >= menu_count)
cnsl_cur_item = 0;
// printf("up1: preitem=%d, cnsl_cur_item=%d,menu_count=%d\r\n",preitem, cnsl_cur_item, menu_count);
{
int i;
for(i=cnsl_cur_item-1;;i--){
if(i<0) i+=menu_count;
if(i == cnsl_cur_item) break;
//W if(i<0) i+=menu_count; //round back
if(menus[i].status != MENU_DISABLE)//found a item
break;
}
cnsl_cur_item = i;//cnsl_cur_item is a valid number
}
// printf("up2: preitem=%d, cnsl_cur_item=%d\r\n", preitem, cnsl_cur_item);
if(preitem != cnsl_cur_item){
CONSOLEHighLightItem(gui_hdc, preitem,FALSE);
CONSOLEHighLightItem(gui_hdc, cnsl_cur_item,TRUE);
ShowHintBox(gui_hdc, cnsl_cur_item_id);//for downsize, but badly coded
}
#else
//--------------
if((DiscType==C_DVD)||(DiscType==C_DVD_VR))
{
preitem=cnsl_cur_item;//save cnsl_cur_item
if(cnsl_cur_item==0)
cnsl_cur_item=6;//goto the last item
else
cnsl_cur_item-=1;//goto the up item
if(DiscType == C_DVD_VR)
{
if(cnsl_cur_item == 5)
cnsl_cur_item = 4;
}
//30929-01mi
if ((cnsl_cur_item_id== CNSL_BOX_TIME_DVD) && ((NVIsUOPPermit(UOP0)!=TRUE) || (NVIsUOPPermit(UOP5)!=TRUE) )) //modified by jane (NVIsUOPPermit(UOP5)!=TRUE)
cnsl_cur_item = 1;
//--------------
//30929-01mi
if ((cnsl_cur_item == 1) && (NVChkIsMultiPGC())) //modified by jane ( NVIsUOPPermit(UOP1)!=TRUE) || (NVIsUOPPermit(UOP5)!=TRUE) ||
cnsl_cur_item = 0;
//-------------------
CONSOLEHighLightItem(gui_hdc, preitem,FALSE);
CONSOLEHighLightItem(gui_hdc, cnsl_cur_item,TRUE);
ShowHintBox(gui_hdc,cnsl_cur_item);
}
else
{
preitem=cnsl_cur_item;
if(cnsl_cur_item==0)
cnsl_cur_item=3;
else
{
cnsl_cur_item-=1;//
/* if(vcdcnsl_cur_item==C_CONSOLE_VCDTIMESRC && DiscType == C_SVCD)
vcdcnsl_cur_item-=1;*///SVCDTIMESC
if(cnsl_cur_item_id==CNSL_BOX_TIME_VCD){
if(OSD_Setup_Parameter.bPBC==C_ON){
if(DiscType!=C_VCD10){//vcd2.0 or svcd, must skip time and pbc
cnsl_cur_item = 3;//skip
}
else
cnsl_cur_item = 2;
}
}
if(cnsl_cur_item_id==CNSL_BOX_TITLE_VCD){
if(OSD_Setup_Parameter.bPBC==C_ON){
if(DiscType!=C_VCD10){//vcd2.0 or svcd, must skip time and pbc
cnsl_cur_item = 3;//skip
}
}
}
}
CONSOLEHighLightItem(gui_hdc, preitem,FALSE);
CONSOLEHighLightItem(gui_hdc, cnsl_cur_item,TRUE);
// ShowHintBox(gui_hdc,VcdGetHintIndex(vcdcnsl_cur_item));
ShowHintBox(gui_hdc, cnsl_cur_item_id);//for downsize, but badly coded
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -