📄 mp3_m.c
字号:
// gmp3.dirBounds.iFirstFileIndex, gmp3_dirBounds.iLastFileIndex should still be valid
list_files( gmp3m.firstDisplayed.iFileIndex + ITEMNUM_COLUMN2 );
// REMINDE We need to disable the erase in MS_display for use here
MS_refresh((MS_DIALOG *) screen);
update_scroll_statics();
}
void scroll_backward( void )
{
mp3m_erase_menu();
// gmp3.dirBounds.iFirstFileIndex, gmp3_dirBounds.iLastFileIndex should still be valid
list_files( gmp3m.firstDisplayed.iFileIndex - ITEMNUM_COLUMN2 );
MS_refresh((MS_DIALOG *) screen);
update_scroll_statics();
}
MS_UOP override_button_user_op(MS_WIDGET *widget,MS_UOP uop,char param)
{
MS_BUTTON *button = (MS_BUTTON *)widget;
if ( uop == MS_UOP_ENTER )
{
gmp3m.iButtonNumber = button_number(widget);
}
uop = button_user_op(widget, uop, param);
if ( uop != MS_UOP_NOP )
{
switch (uop)
{
case MS_UOP_LEFT:
#ifdef NO_C_STDLIB
rtouts("\noverride_button_user_op: left key");
if ( widget->pos.x == MP3M_BUTTON_COLUMN_1 )
{
if ( can_scroll(!B_SCROLL_FORWARD) )
{
rtouts("\nCan scroll backward");
scroll_backward();
uop = 0;
}
else
{
rtouts("\nCan't scroll backward");
}
}
#endif
break;
case MS_UOP_RIGHT:
#ifdef NO_C_STDLIB
rtouts("\noverride_button_user_op: right key");
if ( widget->pos.x == MP3M_BUTTON_COLUMN_2 )
{
if ( can_scroll(B_SCROLL_FORWARD) )
{
rtouts("\nCan scroll forward");
scroll_forward();
uop = 0;
}
else
{
rtouts("\nCan't scroll forward");
}
}
#endif
break;
case MS_UOP_UP:
#ifdef NO_C_STDLIB
rtouts("\noverride_button_user_op: up key");
if(widget->pos.y==BUTTON_POS_Y(0)&&widget->pos.x==MP3M_BUTTON_COLUMN_2)
{
button_user_op((MS_WIDGET*)&gmp3m.msbTrack[7],MS_UOP_DISPLAY,0);
MS_change_focus((MS_DIALOG *)screen, (MS_WIDGET *) &gmp3m.msbTrack[6]);
button_user_op((MS_WIDGET*)&gmp3m.msbTrack[6],MS_UOP_DISPLAY,1);
uop=0;
}
#endif
break;
case MS_UOP_DOWN:
#ifdef NO_C_STDLIB
rtouts("\noverride_button_user_op: down key");
if(widget->pos.y==BUTTON_POS_Y(6)&&widget->pos.x==MP3M_BUTTON_COLUMN_1)
{
button_user_op((MS_WIDGET*)&gmp3m.msbTrack[6],MS_UOP_DISPLAY,0);
MS_change_focus((MS_DIALOG *)screen, (MS_WIDGET *) &gmp3m.msbTrack[7]);
button_user_op((MS_WIDGET*)&gmp3m.msbTrack[7],MS_UOP_DISPLAY,1);
uop=0;
}
#endif
break;
}
}
return uop;
}
static const MS_STATIC mssMenuTitle = {
{
0,
ALIGN_LEFT,
I_COLOR,
{0, MS_LINE_0, 48, MS_LINE_HEIGHT},
NO_PARENT,
static_user_op,
},
(void *)S_MP3
};
#define MSS_DIRNAME_X 56
#define MSS_DIRNAME_WIDTH (DIRNAME_SZ * 18 )
static MS_STATIC mssDirName =
{
{
MS_HOT_SPOT | MS_ASCII | MS_STRING_ON_SC,
//Aw0117:I think no need to use ALIGN_LEFT_PAG ,just use ALIGN_LEFT
// ALIGN_LEFT_PAD,
ALIGN_LEFT,
//AW0117:end
BUTTON_COLOR,
//AW0124:decrease the width
{MSS_DIRNAME_X, MS_LINE_0, MSS_DIRNAME_WIDTH, MS_LINE_HEIGHT},
NO_PARENT,
dirName_user_op,
},
(void *)NULL
};
#define TMP_X (MSS_DIRNAME_X + MSS_DIRNAME_WIDTH+4)
static const MS_STATIC mp3m_tmp_msg = {
{
MS_STRING_ON_SC,
ALIGN_LEFT_PAD,
I_COLOR,
{TMP_X, MS_LINE_0, 100, MS_LINE_HEIGHT},
NO_PARENT,
static_user_op,
},
(void *)SC_TMP_MSG_ADDR
};
static const MS_STATIC mp3m_permanent_msg = {
{
MS_STRING_ON_SC,
ALIGN_LEFT_PAD,
I_COLOR,
{TMP_X, MS_LINE_0, 100, MS_LINE_HEIGHT},
NO_PARENT,
static_user_op,
},
(void *)SC_PERMANENT_MSG_ADDR
};
static const MS_STATIC tmp_string = {
{
MS_ASCII | MS_STRING_ON_SC,
ALIGN_LEFT_PAD,
I_COLOR,
{TMP_X, MS_LINE_0, 100, MS_LINE_HEIGHT},
NO_PARENT,
static_user_op,
},
(void *)SC_TMP_STR_ADDR
};
void mp3m_tmp_string_display(char *str)
{
MS_hide((MS_WIDGET*)&tmp_string,(MS_DIALOG *)screen);
sc_SetBytes(SC_TMP_STR_ADDR, 0, strlen(str)+1, (BYTE*)str );
static_user_op((MS_WIDGET*)&tmp_string,MS_UOP_DISPLAY,0);
}
void mp3m_permanent_msg_display(OSD_MESSAGES msg)
{
MS_hide((MS_WIDGET*)&mp3m_permanent_msg,(MS_DIALOG *)screen);
sc_Write(SC_PERMANENT_MSG_ADDR,1,(Sc_cont *)&msg);
static_user_op((MS_WIDGET*)&mp3m_permanent_msg,MS_UOP_DISPLAY,0);
}
void mp3m_tmp_msg_display(OSD_MESSAGES msg)
{
//AW0129: just do not precess it.in mp3 menu does not exist the different lenght osd display
if(msg!=S_LAST)
{
MS_hide((MS_WIDGET*)&mp3m_tmp_msg,(MS_DIALOG *)screen);
sc_Write(SC_TMP_MSG_ADDR,1,(Sc_cont *)&msg);
static_user_op((MS_WIDGET*)&mp3m_tmp_msg,MS_UOP_DISPLAY,0);
}
}
void *dir_name_address( int iDirIndex )
{
void *pv;
pv = (void *) (WORD) (gi_FirstDirLoc + (iDirIndex * (DIRNAME_SZ / 4)));
return pv;
}
void reset_directory_vars(void)
{
gmp3m.dirBounds.iFirstFileIndex = -1;
gmp3m.dirBounds.iLastFileIndex = -1;
gmp3m.dirBounds.iLastItemNum = -1;
}
static MS_UOP change_directory(void)
{
int iDirNum = gmp3m.iDirNum;
int iFirstFileIndex;
if ( g_dir_list_count > 1 )
{
iDirNum++;
if ( iDirNum >= g_dir_list_count )
iDirNum = 0;
MS_hide((MS_WIDGET *) &mssDirName,(MS_DIALOG *)screen);
mssDirName.text = dir_name_address(iDirNum);
//AW0124:need to display it here in refresh function it will be refreshed
// static_user_op((MS_WIDGET *) &mssDirName, MS_UOP_DISPLAY, 1);
// Start from the beginning and relist files
if ( iDirNum > gmp3m.iDirNum )
{
iFirstFileIndex = gmp3m.dirBounds.iLastFileIndex + 1;
}
else
{
iFirstFileIndex = 0;
}
reset_directory_vars();
gmp3m.iDirNum = iDirNum;
mp3m_erase_menu();
list_files(iFirstFileIndex);
MS_refresh((MS_DIALOG *) screen);
update_scroll_statics();
}
return 0;
}
MS_UOP dirName_user_op(MS_WIDGET *widget,MS_UOP uop,char param)
{
MS_STATIC *mss = (MS_STATIC *)widget;
if ( uop == MS_UOP_ENTER )
{
//AW0322:hide the DirName first
uop = change_directory();
return uop;
}
if ( uop == MS_UOP_DISPLAY )
{
#ifdef NO_C_STDLIB
rtouts("\ndirname_user_op: DISPLAY");
#endif
//AW0124:always display as focus
MS_hide(widget,(MS_DIALOG *)screen);
static_user_op(widget, uop, param);
return MS_UOP_NOP;
}
static_user_op(widget, uop, param);
if ( uop != 0 )
{
switch (uop)
{
case MS_UOP_LEFT:
#ifdef NO_C_STDLIB
rtouts("\ndirname_user_op: left key");
#endif
break;
case MS_UOP_RIGHT:
#ifdef NO_C_STDLIB
rtouts("\ndirname_user_op: right key");
#endif
break;
case MS_UOP_UP:
#ifdef NO_C_STDLIB
rtouts("\ndirname_user_op: up key");
#endif
break;
case MS_UOP_DOWN:
#ifdef NO_C_STDLIB
rtouts("\ndirname_user_op: down key");
#endif
break;
}
}
return uop;
}
static void layout (void)
{
go_CurrentLayout.m_bBigMemMap = TRUE;//USE_BIGMEMMAP_WHEN_REQUIRED;
go_CurrentLayout.m_cPixRes = 0;
// OSD can't start displaying at an arbitrary x-position, so we use 0 instead of X_OFFSET
go_CurrentLayout.m_wOriginX = 0;
// This can be set arbitrarily, as long as the m_wOriginY + m_wHeight <= video standard's height
go_CurrentLayout.m_wOriginY = 60;
go_CurrentLayout.m_wWidth = 720;
go_CurrentLayout.m_wHeight = MS_MAX_LINES_BIGMM;
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
rtouts("\nMP3 LAYOUT");
rtouts("\nSizeof(gmp3m) = "); rtouti(sizeof(gmp3m));
#endif
}
static void track_action(int cur)
{
EVENT evt = 0;
long track = (long) cur;
#ifdef NO_C_STDLIB
dbouts("\nTrack number is "); dboutl(track);
#endif
evt = IE_CORE_GOTO_ENTRY;
ie_send_ex(evt, (void *) track);
}
static void track_1_action(void)
{
track_action(1);
}
static void track_2_action(void)
{
track_action(2);
}
static void track_3_action(void)
{
track_action(3);
}
static void track_any_action(void)
{
track_action(gmp3m.firstDisplayed.iFileIndex + gmp3m.iButtonNumber + 1);
}
static void on_mp3_close(void)
{
int iItemNum;
#ifdef NO_C_STDLIB
rtouts("\nMP3 menu closed");
#endif
gmp3m.wState &= ~MP3M_LIST_INITIALIZED;
}
static void init_list(void)
{
int iItemNum;
for ( iItemNum = 0; iItemNum < MAX_DISPLAY_TRACKS; iItemNum++ )
{
initListItem(iItemNum);
}
gmp3m.wState |= MP3M_LIST_INITIALIZED;
list_files(0);
}
static void init_directory( int iIndex )
{
MS_WIDGET *msw = (MS_WIDGET *) &mssDirName;
reset_directory_vars();
gmp3m.iDirNum = iIndex;
((MS_STATIC *) msw)->text = dir_name_address(iIndex);
MS_add_item((MS_DIALOG *) screen, msw, 0);
}
void open_mp3(void)
{
gmp3m.iDirNum = 0;
gmp3m.iButtonNumber = 0;
gmp3m.dirBounds.iFirstFileIndex = -1;
gmp3m.dirBounds.iLastFileIndex = -1;
gmp3m.dirBounds.iLastItemNum = -1;
gmp3m.firstDisplayed.iFileIndex = -1;
gmp3m.firstDisplayed.iItemNum = -1;
gmp3m.lastDisplayed = gmp3m.firstDisplayed;
gmp3m.wState &= ~MP3M_LIST_INITIALIZED;
screen = MS_create_screen((MS_POS *)&screen_pos, screen_color, 0, on_mp3_close, layout);
MS_add_item((MS_DIALOG*)screen,(MS_WIDGET*)&mssMenuTitle, 0);
init_directory(0);
init_list();
MS_dialog_display((MS_DIALOG*)screen);
update_scroll_statics();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -