📄 pcd_m.c
字号:
/***********************************************************************/
/* File: */
/* Copyright (c) 2000 ZORAN Corporation, All Rights Reserved */
/* THIS IS PROPRIETARY SOURCE CODE OF ZORAN CORPORATION */
/* */
/* =========== */
/* Descripton: */
/* =========== */
/* */
/* Log: */
/* === */
/* $Name: $
/* $Header: v:/dsg/rcs/dsg/vp2k/Customer/menu/zoran/mp3_m.c 1.35 2001/10/15 03:05:05Z dingming Exp $
/* $Log: mp3_m.c $
/* Revision 1.35 2001/10/15 03:05:05Z dingming
/* Make Zoom and Pan-Scan working for Jpeg view.
/* Revision 1.34 2001/10/12 07:41:55Z dingming
/* Fix the problem which sometimes the logo can not been displayed from
/* JPEG to stop-menu
/* Revision 1.33 2001/10/10 23:15:14Z charlie
/* Clear all state bits on entry; Restart slideshow correctly
/* Revision 1.32 2001/10/10 17:28:58Z charlie
/* Added restore_background before redisplaying menu; Check for
/* MP3M_STATE_IMAGE_OPEN before calling open_image in
/* open_slideshow, track_action
/* Revision 1.31 2001/10/09 21:39:19Z charlie
/* Added test for IS_STATE(MP3M_STATE_IMAGE_OPEN) for MS_UOP_STATUS
/* Revision 1.30 2001/10/08 22:19:32Z charlie
/* Use ALIGN_LEFT_PAD for status; Return to menu after slideshow
/* Revision 1.29 2001/10/08 18:41:34Z charlie
/* Added mp3m_can_zoom for D_PICTURE_CD_ENABLED
/* Revision 1.28 2001/10/08 17:27:48Z charlie
/* Slideshow fixes; Don't display logo on RETURN
/* Revision 1.27 2001/10/05 18:22:56Z charlie
/* FIxes for PictureCD for D_PICTURE_CD_ENABLED
/* Revision 1.26 2001/10/04 18:26:02Z charlie
/* PictureCD menu changes
/* Revision 1.25 2001/10/03 17:14:40Z charlie
/* Added test for MP3M_STATE_LIST_INITIALIZED to
/* mp3_refresh_track and mp3_refresh_time
/* Revision 1.24 2001/10/02 02:16:47Z charlie
/* corrected comments
/* Revision 1.23 2001/09/28 17:05:05Z charlie
/* Fixed width of MP3_MENU_ID title
/* Revision 1.22 2001/09/27 20:52:02Z charlie
/* Implement PictureCD menu for D_PICTURE_CD_ENABLED
/* Revision 1.21 2001/09/26 00:30:43Z charlie
/* Added status display, STATE macros
/* Revision 1.20 2001/09/25 19:36:54Z charlie
/* Added slideshow timer
/* Revision 1.19 2001/09/25 17:54:58Z charlie
/* Added slideshow timer
/* Revision 1.18 2001/09/25 00:46:00Z charlie
/* Added PictureCD logic for D_PICTURE_CD_ENABLED
/* Revision 1.17 2001/09/13 01:43:48Z stephaneh
/* Fixed MP3 OSD problem
/* Revision 1.16 2001/06/04 18:23:14Z victorwu
/* Changed MAX_TRACK_NUMBER_DIGITS to MAX_TRACK_DIGITS
/* Revision 1.15 2001/02/08 00:32:05 tia
/* Fix scratch pad overwrite bug.
/* Revision 1.14 2000/11/17 18:54:16 charlie
/* Use C_FOCUSED
/* Revision 1.13 2000/11/13 23:33:22 charlie
/* Added status display/numeric selection/time display, button colors;
/* Revision 1.12 2000/11/12 02:00:11 charlie
/* Restored title and dirname positions to upper left; Prevented status
/* message from overwriting them; Improved track and time display
/* format.
/* Revision 1.11 2000/11/11 01:05:11 charlie
/* Added tmp_string, time display; enabled numeric selection
/* Revision 1.10 2000/11/09 04:07:33 cliff
/***********************************************************************/
#define RELEASE_TRACE_MODULE // Release trace only in Release Version
#ifdef RELEASE_TRACE_MODULE
#define _DEBUG
#endif
#ifdef _DEBUG
#ifdef RELEASE_TRACE_MODULE
#define IFTRACE if (trace_flags.ui) // TC0513
//#define IFTRACE if (1) // GL0611
#else
#define IFTRACE if (gTraceUI)
extern int gTraceUI;
#endif
#endif
#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"
#include "..\..\playcore\fileSys\filesrch.h"
#include "..\..\playcore\ScPad\scmgr.h"
#include "..\..\playcore\playmode\playmode.h"
// <<< ZORAN CDE0924 : Implement PictureCD Browser
#include "zmenu.h"
#include "..\..\..\Playcore\FileSys\i9660lib.h"
// ZORAN CDE0924 >>>
#include "uicc_def.h"
#ifdef D_PICTURE_CD_ENABLED //DM1105
extern BOOL b_enable_auto_slideshow;
#endif
extern void ui_start_menu( int menu_id ); // Declare later on this file
#ifdef D_PICTURE_CD_ENABLED
void Menu_update_buttonnumber(WORD CurrentFilenumber);
#endif
// <<< ZORAN CDE0924 : Implement PictureCD Browser
#define SET_STATE(_bits_) gmp3m.wState |= (_bits_)
#define CLEAR_STATE(_bits_) gmp3m.wState &= ~(_bits_)
#define IS_STATE(_bits_) (gmp3m.wState & (_bits_))
// Bit values for MP3M.wState
// ZORAN CDE0925 : Changed from MP3M_... to MP3M_STATE_...
#define MP3M_STATE_LIST_INITIALIZED 0x0001
// <<< ZORAN CDE0924 : Implement PictureCD Browser
#ifdef D_PICTURE_CD_ENABLED
#define MP3M_STATE_IMAGE_OPEN 0x0002
#define MP3M_STATE_SLIDESHOW_ACTIVE 0x0004
#define MP3M_STATE_SLIDESHOW_PAUSED 0x0008
#define MP3M_STATE_STATUS_ACTIVE 0x0010
#define MP3M_STATE_FIRST_TIME_SLIDESHOW 0x0020
#define MP3M_STATE_PREPARE_R1DATE 0x0040 //DM1130 if the bit been set means we need prepare the data to R1
static BOOL jpgmenu_notdisp_item = FALSE;
#endif // D_PICTURE_CD_ENABLED
#ifdef JPG_DIGEST_ENABLED //DM1019
extern int DigestNotify;
#endif
#define FOCUSED_WIDGET(_pmsScreen_) ((MS_DIALOG *) _pmsScreen_)->pwli_focus->widget
#ifdef D_NO_MP3M
typedef struct _dirBounds
{
int iFirstFileIndex;
int iLastFileIndex;
int iLastItemNum;
} DIR_BOUNDS;
typedef struct _itemInfo
{
int iItemNum;
int iFileIndex;
} ITEM_INFO;
#define MAX_DISPLAY_TRACKS 14
#define MAX_TRACK_DIGITS 3
typedef char SZ_BUTTON_NUMBER[MAX_TRACK_DIGITS + 1];
typedef struct _mp3m
{
int iDirNum;
int iButtonNumber;
DIR_BOUNDS dirBounds;
ITEM_INFO firstDisplayed;
ITEM_INFO lastDisplayed;
WORD wState;
// ZORAN CDE0924 : Implement PictureCD Browser
#ifdef D_PICTURE_CD_ENABLED
MS_STATIC *pmssMenuTitle;
MS_STATIC *pmssDirName;
MS_STATIC *pmssTmpMsg;
MS_STATIC *pmssTmpString;
PO_TIMER pSlideshowTimer;
#endif // D_PICTURE_CD_ENABLED
// Track button strings
SZ_BUTTON_NUMBER szButtonNumber[MAX_DISPLAY_TRACKS];
// Track buttons
MS_BUTTON msbTrack[MAX_DISPLAY_TRACKS];
// Track filename items
MS_STATIC mssTrack[MAX_DISPLAY_TRACKS];
} MP3M;
#endif // D_NO_MP3M
#if D_LOCAL_GMP3M
MP3M gmp3m =
{
0, // iDirNum;
0, // iButtonNumber
{-1, -1, -1}, // dirBounds
{-1, -1}, // firstDisplayed
{-1, -1}, // lastDisplayed
0, // wState
NULL, // pmssMenuTitle
NULL, // pmssDirName
NULL, // pmssTmpMsg
NULL, // pmssTmpString
NULL, // pSlideshowTimer
{0}, // szButtonNumber
{0}, // msbTrack
{0}, // mssTrack
};
#else
#define gmp3m gns.cdda.mp3m
#endif // D_NO_MP3M
// Screen and item positions
static const MS_POS screen_pos = {60, 60, 600+60, MS_MAX_LINES_BIGMM};
static MS_UOP override_button_user_op(MS_WIDGET *widget,MS_UOP uop,char param);
static MS_UOP dirName_user_op(MS_WIDGET *widget,MS_UOP uop,char param);
static void track_any_action(void);
static void track_action(int cur);
#define MP3M_BUTTON_WIDTH 40
#define MP3M_NAME_WIDTH 232
static const MS_STATIC mssProto =
{
{
MS_ASCII | MS_STRING_ON_SC,
ALIGN_LEFT_PAD,
I_COLOR,
{0, 0, MP3M_NAME_WIDTH, MS_LINE_HEIGHT},
NO_PARENT,
static_user_op,
},
NULL
};
#define MP3M_SPACING 8
#define MP3M_BUTTON_COLUMN_1 MP3M_SPACING
#define MP3M_BUTTON_COLUMN_2 (MP3M_BUTTON_COLUMN_1 + MP3M_BUTTON_WIDTH + MP3M_SPACING + MP3M_NAME_WIDTH + MP3M_SPACING)
#define MP3M_NAME_COLUMN_1 (MP3M_BUTTON_COLUMN_1 + MP3M_BUTTON_WIDTH + MP3M_SPACING)
#define MP3M_NAME_COLUMN_2 (MP3M_BUTTON_COLUMN_2 + MP3M_BUTTON_WIDTH + MP3M_SPACING)
#define ITEMNUM_COLUMN2 (MAX_DISPLAY_TRACKS / 2)
#define BUTTON_POS_X(_iItemNum_) (unsigned short) ( (_iItemNum_) < ITEMNUM_COLUMN2 ? MP3M_BUTTON_COLUMN_1 : MP3M_BUTTON_COLUMN_2 )
static unsigned short button_pos_x( int iItemNum )
{
#ifdef DISABLE
return (unsigned short) ( iItemNum < ( MAX_DISPLAY_TRACKS / 2 ) ? MP3M_BUTTON_COLUMN_1 : MP3M_BUTTON_COLUMN_2 );
#else
return BUTTON_POS_X(iItemNum);
#endif
}
#define BUTTON_POS_Y(_iItemNum_) (unsigned short) ( ( (_iItemNum_) < ITEMNUM_COLUMN2 ? MS_LINE_HEIGHT * (_iItemNum_) : MS_LINE_HEIGHT * ((_iItemNum_) - ITEMNUM_COLUMN2) ) + MS_LINE_HEIGHT )
static unsigned short button_pos_y( int iItemNum )
{
#ifdef DISABLE
int iPos;
iPos = ( iItemNum < ITEMNUM_COLUMN2 ? MS_LINE_HEIGHT * iItemNum : MS_LINE_HEIGHT * (iItemNum - ITEMNUM_COLUMN2) );
return (unsigned short) ( iPos + MS_LINE_HEIGHT );
#else
return BUTTON_POS_Y(iItemNum);
#endif // DISABLE
}
static unsigned short name_pos_x( int iItemNum )
{
return (unsigned short) ( iItemNum < ITEMNUM_COLUMN2 ? MP3M_NAME_COLUMN_1 : MP3M_NAME_COLUMN_2 );
}
#define name_pos_y button_pos_y
// return the button number associated with a widget
static int button_number( MS_WIDGET *widget )
{
int iButtonNumber = widget->pos.y / MS_LINE_HEIGHT - 1;
if ( widget->pos.x == MP3M_BUTTON_COLUMN_2 )
iButtonNumber += ITEMNUM_COLUMN2;
return iButtonNumber;
}
#define B_SCROLL_FORWARD TRUE
#ifdef DISABLE
#define SCROLL_BACK_BUTTON_POS {328, MS_LINE_0, 16, MS_LINE_HEIGHT}
const MS_STATIC mssScrollBack =
{
{ // MS_WIDGET
0,
ALIGN_CENTER,
I_COLOR,
SCROLL_BACK_BUTTON_POS,
NO_PARENT,
static_user_op
},
(void *)S_LEFT_ARROW
};
#define SCROLL_FORWARD_BUTTON_POS {344, MS_LINE_0, 16, MS_LINE_HEIGHT}
const MS_STATIC mssScrollForward =
{
{ // MS_WIDGET
0,
ALIGN_CENTER,
I_COLOR,
SCROLL_FORWARD_BUTTON_POS,
NO_PARENT,
static_user_op
},
(void *)S_RIGHT_ARROW
};
#endif // DISABLE
static BOOL can_scroll( BOOL backOrForward )
{
if ( backOrForward == B_SCROLL_FORWARD )
{
return ( gmp3m.lastDisplayed.iFileIndex < gmp3m.dirBounds.iLastFileIndex );
}
else
{
return ( gmp3m.firstDisplayed.iFileIndex > gmp3m.dirBounds.iFirstFileIndex );
}
}
// <<< ZORAN CDE0926 : Renamed widget to pmsw, Added D_PICTURE_ENABLED logic
#ifdef D_PICTURE_CD_ENABLED
#ifdef D_MS_EXTENSIONS
#define COLOR_INDEX_TRANSPARENT 0x0
#define COLOR_INDEX_WHITE 0x2
#else
#define COLOR_INDEX_TRANSPARENT 0x0
#define COLOR_INDEX_WHITE 0x2
#endif // D_MS_EXTENSIONS
static void mp3m_erase_menu(void)
{
MS_WIDGET *pmsw = (MS_WIDGET *) screen;
unsigned char ucColor;
unsigned short usY;
unsigned short usHeight;
if ( IS_STATE(MP3M_STATE_IMAGE_OPEN) )
{
// Erasing the entire screen
ucColor = COLOR_INDEX_TRANSPARENT;
usY = 0;
usHeight = pmsw->pos.h;
}
else
{
ucColor = BG_COLOR(pmsw->color);
usY = MS_LINE_HEIGHT;
usHeight = pmsw->pos.h - MS_LINE_HEIGHT;
}
OSD_SetOrigin(pmsw);
OSD_PutRect(0, usY, pmsw->pos.w, usHeight, ucColor);
}
#else // D_PICTURE_CD_ENABLED
static void mp3m_erase_menu(void)
{
MS_WIDGET *pmsw = (MS_WIDGET *) screen;
OSD_SetOrigin(pmsw);
OSD_PutRect(0, MS_LINE_HEIGHT, pmsw->pos.w, pmsw->pos.h - MS_LINE_HEIGHT, BG_COLOR(pmsw->color));
}
#endif // D_PICTURE_CD_ENABLED
static void SetButton( int iItemNum, int iFileIndex )
{
MS_WIDGET *msw = (MS_WIDGET *) &gmp3m.msbTrack[iItemNum];
if ( iFileIndex < 0 )
{
strcpy( gmp3m.szButtonNumber[iItemNum], "" );
}
else
{
num_to_str(iFileIndex + 1, gmp3m.szButtonNumber[iItemNum], MAX_TRACK_DIGITS);
}
}
#define NAME_OFFSET ((long) go_TmpFileRec.Name - (long) &go_TmpFileRec )
static void *file_name_address( int iFileIndex )
{
void *pv;
pv = (void *) (WORD) (gi_FirstRecLoc + (iFileIndex * FILEREC_DWSIZE) + NAME_OFFSET / 4);
return pv;
}
static void SetFilename( int iItemNum, int iFileIndex )
{
MS_WIDGET *msw = (MS_WIDGET *) &gmp3m.mssTrack[iItemNum];
if ( iFileIndex < 0 )
((MS_STATIC *) msw)->text = 0;
else
((MS_STATIC *) msw)->text = file_name_address(iFileIndex);
}
static void setListItem( int iItemNum, int iFileIndex )
{
SetButton(iItemNum, iFileIndex);
SetFilename(iItemNum, iFileIndex);
}
static const MS_BUTTON msbProto =
{
{ // MS_STATIC
{ // MS_WIDGET
MS_ASCII | MS_HOT_SPOT,
ALIGN_CENTER,
BUTTON_COLOR,
{0, 0, MP3M_BUTTON_WIDTH, MS_LINE_HEIGHT},
NO_PARENT,
override_button_user_op
},
(void *)S_NULL
},
track_any_action
};
#ifdef DISABLE
static const MS_CORE_WIDGET mscw =
{
(void *) &msbProto,
MS_HOT_SPOT,
ALIGN_CENTER,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -