📄 bmark_m.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 + -