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

📄 console.c

📁 M3355的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/*****************************************************************************
*
*  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 + -