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

📄 bmark_m.c

📁 Zoran VP2K731 DVD源代码,极具参考价值!
💻 C
字号:
/***********************************************************************/
/* File:															   */
/*	  Copyright (c) 2000 ZORAN Corporation, All Rights Reserved		   */
/*	  THIS IS PROPRIETARY SOURCE CODE OF ZORAN CORPORATION             */
/*																	   */
/* ===========                                                         */
/* Descripton:                                                         */
/* ===========                                                         */
/*                                                                     */
/* Log:                                                                */
/* ===                                                                 */
/* $Name: V_1_16 V_1_15 V_1_14 V_1_13 V_1_12 NV_1_00 V_1_11 $                                                            
/* $Header: v:/dsg/rcs/dsg/vp2k/Customer/menu/zoran/bmark_m.c 1.17 2001/06/06 06:14:40 dingming Exp $                                                          
/* $Log: bmark_m.c $										                       
/* Revision 1.17  2001/06/06 06:14:40  dingming										                       
/* Revision 1.16  2001/01/08 19:28:13  charlie										                       
/* Added special empty format compiler option										                       
/* Revision 1.15  2000/12/28 00:18:45  charlie										                       
/* Removed preprocessor dependency on preventing										                       
/* SET_BOOKMARK when stopped, and use of EMPTY_TIME										                       
/* instead of literal.										                       
/* Revision 1.14  2000/12/19 00:40:00  charlie										                       
/* Don't set bookmark when stopped										                       
/* Revision 1.13  2000/12/18 19:11:53  charlie										                       
/* Don't set bookmark in STOP state.										                       
/* Revision 1.12  2000/12/06 05:33:45  charlie										                       
/* Finished bookmark implementation										                       
/* Revision 1.11  2000/12/06 03:07:50  charlie										                       
/* bookmark menu changes										                       
/* Revision 1.10  2000/11/17 18:54:10  charlie										                       
/* Use C_FOCUSED										                       
/* Revision 1.9  2000/11/17 17:58:25  charlie										                       
/* Use C_FOCUSED										                       
/* Revision 1.8  2000/11/09 04:07:30  cliff										                       
/***********************************************************************/
#include <stdio.h>
#include <string.h>
#include <sysdefs.h>
#include "..\..\..\ui\menu_sys\ms_wdgt.h"
#include "..\..\..\ui\menu_sys\ms_lib.h"
#include "..\..\..\ui\menu_sys\osd_drv.h"
#include "..\..\..\decoder\osdrendr.h"
#include "..\..\..\decoder\osdlayou.h"
#ifdef FONT32X24   //DM0605
#include "..\..\..\customer\dragon\strings\strings.h"
#else
#include "..\..\..\ui\strings\strings.h"
#endif
#include "menu_var.h"
#include "..\..\..\playcore\ps\ps.h"
#ifdef D_NO_KARAOKE_DEFAULT
#else
#include "..\..\playcore\coremain\coregdef.h"
#endif // D_NO_KARAOKE_DEFAULT
#include "..\..\playcore\coremain\coremain.h"
#include "..\..\..\kernel\eventdef.h"
#include "..\..\..\Decoder\decoder.h"

unsigned char g_ui_ucBookmarkPending = 0;

// Screen and item positions
static const MS_POS	screen_pos = {104, MS_LINE_2, 504, MS_MAX_LINES_SMALLMM};

#define FIRST_BOOKMARK_LINE	  MS_LINE_1

#define BOOKMARK_1_POS	{240, MS_LINE_1, 128, MS_LINE_HEIGHT}
//static const MS_POS bookmark_1_pos = BOOKMARK_1_POS;

#define BOOKMARK_2_POS	{240, MS_LINE_2, 128, MS_LINE_HEIGHT}
//static const MS_POS bookmark_2_pos = BOOKMARK_2_POS;

#define BOOKMARK_3_POS	{240, MS_LINE_3, 128, MS_LINE_HEIGHT}
//static const MS_POS bookmark_3_pos = BOOKMARK_3_POS;

#ifdef D_BMARKM_SPECIAL_EMPTY_FORMAT
#define EMPTY_SZ_BOOKMARK	  "**:**:**"
#else
#define EMPTY_SZ_BOOKMARK	  EMPTY_TIME
#endif // D_BMARKM_SPECIAL_EMPTY_FORMAT

#define USE_UNION
#ifdef USE_UNION
#define MEMBER(_member_)	gu_ms.m_bmark._member_
#else
typedef char SZ_BOOKMARK[9];

SZ_BOOKMARK sz_bookmark[4] =
{
  EMPTY_SZ_BOOKMARK,
  EMPTY_SZ_BOOKMARK,
  EMPTY_SZ_BOOKMARK,
  EMPTY_SZ_BOOKMARK,
};
#endif

#define BOOKMARK_NUMBER( _pWidget_ )	( ((_pWidget_)->pos.y - FIRST_BOOKMARK_LINE) / MS_LINE_HEIGHT + 1 )

MS_UOP bookmark_user_op(MS_WIDGET *widget,MS_UOP uop, char param);

MS_UOP bookmark_user_op(MS_WIDGET *widget,MS_UOP uop, char param)
{
	unsigned char ucBookmark = BOOKMARK_NUMBER(widget);
	
	if ( uop == MS_UOP_CLEAR )
	{
	  strcpy( MEMBER(sz_bookmark[ucBookmark]), MEMBER(sz_bookmark[0]) );
	  uop = MS_UOP_DISPLAY;

	  // explicitly clear the bookmark instead of sending a core event
	  // We won't need to set g_ui_ucBookmarkPending
	  core_clear_bookmark_info((int) ucBookmark);
	  param = 1;
	}
	return button_user_op(widget, uop, param);
}

const MS_STATIC mssBookmark1 = {
	{
	0,
	ALIGN_LEFT,
	I_COLOR,
	{16, MS_LINE_1, 200, MS_LINE_HEIGHT},
	NO_PARENT,
	static_user_op,
	},
	(void *)S_BOOKMARK
};

const MS_STATIC mssBookmark2 = {
	{
	0,
	ALIGN_LEFT,
	I_COLOR,
	{16, MS_LINE_2, 200, MS_LINE_HEIGHT},
	NO_PARENT,
	static_user_op,
	},
	(void *)S_BOOKMARK
};
const MS_STATIC mssBookmark3 = {
	{
	0,
	ALIGN_LEFT,
	I_COLOR,
	{16, MS_LINE_3, 200, MS_LINE_HEIGHT},
	NO_PARENT,
	static_user_op,
	},
	(void *)S_BOOKMARK
};

const MS_STATIC mssNum1 = {
	{
	0,
	ALIGN_LEFT,
	I_COLOR,
	{216, MS_LINE_1, 24, MS_LINE_HEIGHT},
	NO_PARENT,
	static_user_op,
	},
	(void *)S_1
};

const MS_STATIC mssNum2 = {
	{
	0,
	ALIGN_LEFT,
	I_COLOR,
	{216, MS_LINE_2, 24, MS_LINE_HEIGHT},
	NO_PARENT,
	static_user_op,
	},
	(void *)S_2
};

const MS_STATIC mssNum3 = {
	{
	0,
	ALIGN_LEFT,
	I_COLOR,
	{216, MS_LINE_3, 24, MS_LINE_HEIGHT},
	NO_PARENT,
	static_user_op,
	},
	(void *)S_3
};

void bookmark_1_action(void);
void bookmark_2_action(void);
void bookmark_3_action(void);

static MS_BUTTON msbBookmark1 =
{
	{
	  {
		MS_ASCII | MS_HOT_SPOT,
		ALIGN_CENTER,
		I_COLOR,
		BOOKMARK_1_POS,
		NO_PARENT,
		bookmark_user_op
	  },
	  (void *)MEMBER(sz_bookmark[1])
	},
	bookmark_1_action
};

static MS_BUTTON msbBookmark2 =
{
	{
	  {
		MS_ASCII | MS_HOT_SPOT,
		ALIGN_CENTER,
		I_COLOR,
		BOOKMARK_2_POS,
		NO_PARENT,
		bookmark_user_op
	  },
	  (void *)MEMBER(sz_bookmark[2])
	},
	bookmark_2_action
};

static MS_BUTTON msbBookmark3 =
{
	{
	  {
		MS_ASCII | MS_HOT_SPOT,
		ALIGN_CENTER,
		I_COLOR,
		BOOKMARK_3_POS,
		NO_PARENT,
		bookmark_user_op
	  },
	  (void *)MEMBER(sz_bookmark[3])
	},
	bookmark_3_action
};

static const MS_STATIC mssMenuTitle = {
	{
	0,
	ALIGN_LEFT,
	I_COLOR,
	{16, MS_LINE_0, 200, MS_LINE_HEIGHT},
	NO_PARENT,
	static_user_op,
	},
	(void *)S_BOOKMARK
};

static void layout (void)
{

	go_CurrentLayout.m_bBigMemMap = USE_BIGMEMMAP_WHEN_REQUIRED;
	go_CurrentLayout.m_cPixRes = 0;
	go_CurrentLayout.m_wOriginX = 0;
	go_CurrentLayout.m_wOriginY = 60;
	go_CurrentLayout.m_wWidth = 720;
	go_CurrentLayout.m_wHeight = 120;
	go_CurrentLayout.m_cNbrHole = 0;
	go_CurrentLayout.m_cInitColor = 0;
	go_CurrentLayout.m_cNbrColor = 16;
	go_CurrentLayout.m_pColorPalette = (OSD_Palette *)MenuBitmapColor;

	OSDSetLayout();
	OSDSetFont(0);

#ifdef NO_C_STDLIB
	dbouts("\nBOOKMARK MENU LAYOUT");
#endif
}

// Handle SELECT in a bookmark button
//
//	goto bookmark if not empty
//
//	set bookmark if empty
//
static void bookmark_action(unsigned char ucBookmark)
{
	EVENT evt = 0;
	
	dbouts("\nTime is "); dbouts(MEMBER(sz_bookmark[ucBookmark]));

	  if ( strcmp( MEMBER(sz_bookmark[ucBookmark]), MEMBER(sz_bookmark[0])) == 0 )
	  {
		if (gcs.pstate != PST_STOP )
		{
		  evt = IE_CORE_SET_BOOKMARK;

		  g_ui_ucBookmarkPending = ucBookmark;
		}
	  }
	  else
	  {
		evt = IE_CORE_GOTO_BOOKMARK;
	  }
	  
	  if ( evt )
		ie_send_ex(evt, (void *) ucBookmark);
}

void bookmark_1_action(void)
{
#ifdef NO_C_STDLIB
	dbouts("\nBookmark 1:");
#endif
	bookmark_action(1);
}

void bookmark_2_action(void)
{
#ifdef NO_C_STDLIB
	dbouts("\nBookmark 2:");
#endif
	bookmark_action(2);
}

void bookmark_3_action(void)
{
#ifdef NO_C_STDLIB
	dbouts("\nBookmark 3:");
#endif
	bookmark_action(3);
}

#define B_BOOKMARK_IS_VALID		TRUE

#define SECONDS_PER_MINUTE	  (60)
#define SECONDS_PER_HOUR	  (60 * SECONDS_PER_MINUTE)

void set_sz_bookmark( unsigned char ucBookmark, BOOL bIsBookmarkValid )
{
  char szTime[9];

  // Get either bookmark time or invalid string into szTime
  if ( bIsBookmarkValid == B_BOOKMARK_IS_VALID )
  {
	DWORD dwHh;
	DWORD dwMm;
	DWORD dwSs = BOOKMARK_TIME(ucBookmark);
	DWORD dwTime;

	dwHh = dwSs / SECONDS_PER_HOUR;
	dwSs = dwSs - dwHh * SECONDS_PER_HOUR;

	dwMm = dwSs / SECONDS_PER_MINUTE;
	dwSs = dwSs - dwMm * SECONDS_PER_MINUTE;

	dwTime = dwHh * 10000 + dwMm * 100 + dwSs;

	num_to_str(1000000 + dwTime, szTime, 6);

	szTime[7] = szTime[5];
	szTime[6] = szTime[4];
	szTime[5] = ':';
	szTime[4] = szTime[3];
	szTime[3] = szTime[2];
	szTime[2] = ':';
	szTime[8] = '\0';
  }
  else
  {
	strcpy( szTime, MEMBER(sz_bookmark[0]));
  }

  // Update the bookmark string
  //MS_ascii_2_str(szTime, sz_bookmark[g_ui_ucBookmarkPending]);
  strcpy( MEMBER(sz_bookmark[ucBookmark]), szTime );
}

void update_bookmark(BOOL bIsBookmarkValid)
{

  MS_WIDGET *pmsw = NULL;

  set_sz_bookmark( g_ui_ucBookmarkPending, bIsBookmarkValid );
  
  switch ( g_ui_ucBookmarkPending )
  {
	case 1:
	  pmsw = (MS_WIDGET *) &msbBookmark1;
	  break;

	case 2:
	  pmsw = (MS_WIDGET *) &msbBookmark2;
	  break;

	case 3:
	  pmsw = (MS_WIDGET *) &msbBookmark3;
	  break;

  }
  if ( pmsw != NULL )
  {
	pmsw->user_op( pmsw, MS_UOP_DISPLAY, ((((MS_DIALOG *) screen)->pwli_focus->widget == pmsw) ? C_FOCUSED : !C_FOCUSED) );
  }
}

unsigned char bm_check_bookmark_time(void)
{
  
  // If bookmark is invalid, it was set, so display the new value
  if (strcmp(MEMBER(sz_bookmark[g_ui_ucBookmarkPending]), MEMBER(sz_bookmark[0])) == 0 )
  {
	if ( IS_BOOKMARK_VALID(g_ui_ucBookmarkPending) )
	{
	  update_bookmark(B_BOOKMARK_IS_VALID );
	  return 0;
	}
  }
  else
  {
	if ( !IS_BOOKMARK_VALID(g_ui_ucBookmarkPending) )
	{
	  update_bookmark(!B_BOOKMARK_IS_VALID);
	  return 0;
	}
  }

  return g_ui_ucBookmarkPending;
}

static void on_bookmark_close(void)
{
#ifdef NO_C_STDLIB
  dbouts("\nBookmark menu closed");
#endif
}

void open_bookmark(void)
{
	int i;

	for(i=0; i<4; i++)
		strcpy(MEMBER(sz_bookmark[i]),EMPTY_SZ_BOOKMARK);

	set_sz_bookmark( 1, IS_BOOKMARK_VALID(1) );
	set_sz_bookmark( 2, IS_BOOKMARK_VALID(2) );
	set_sz_bookmark( 3, IS_BOOKMARK_VALID(3) );
	
	screen = MS_create_screen((MS_POS *)&screen_pos, screen_color, 0, on_bookmark_close, layout);

	MS_add_item((MS_DIALOG*)screen,(MS_WIDGET*)&msbBookmark1, C_FOCUSED);
	MS_add_item((MS_DIALOG*)screen,(MS_WIDGET*)&msbBookmark2, !C_FOCUSED);
	MS_add_item((MS_DIALOG*)screen,(MS_WIDGET*)&msbBookmark3, !C_FOCUSED);

	MS_add_item((MS_DIALOG*)screen,(MS_WIDGET*)&mssBookmark1, !C_FOCUSED);
	MS_add_item((MS_DIALOG*)screen,(MS_WIDGET*)&mssBookmark2, !C_FOCUSED);
	MS_add_item((MS_DIALOG*)screen,(MS_WIDGET*)&mssBookmark3, !C_FOCUSED);

	MS_add_item((MS_DIALOG*)screen,(MS_WIDGET*)&mssNum1, !C_FOCUSED);
	MS_add_item((MS_DIALOG*)screen,(MS_WIDGET*)&mssNum2, !C_FOCUSED);
	MS_add_item((MS_DIALOG*)screen,(MS_WIDGET*)&mssNum3, !C_FOCUSED);

	MS_dialog_display((MS_DIALOG*)screen);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -