📄 mode_m.c
字号:
}
}
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_PLAY_MODE
};
//dm
#ifdef D_PROGRAM_SingleKey
//AW0115:according to nintaus cahng to program input
static const MS_STATIC mssProgramInput = {
{
0,
ALIGN_LEFT,
I_COLOR,
{16, MS_LINE_0, 200, MS_LINE_HEIGHT},
NO_PARENT,
static_user_op,
},
(void *) S_PROGRAM
};
#endif //dm
static const MS_STATIC mssMode = {
{
0,
ALIGN_LEFT,
I_COLOR,
{16, MS_LINE_1, 200, MS_LINE_HEIGHT},
NO_PARENT,
static_user_op,
},
(void *)S_MODE
};
static const MS_STATIC mssRepeat = {
{
0,
ALIGN_LEFT,
I_COLOR,
{16, MS_LINE_2, 200, MS_LINE_HEIGHT},
NO_PARENT,
static_user_op,
},
(void *)S_REPEAT
};
static const MS_BUTTON msbClearAll =
{
// MS_STATIC
{
// MS_WIDGET
{
MS_HOT_SPOT,
ALIGN_LEFT,
BUTTON_COLOR,
{200, MS_LINE_3+MS_LINE_1, 128, MS_LINE_HEIGHT},
NO_PARENT,
button_user_op
},
(void *) S_CLEAR_ALL
},
clear_all_action
};
//AW0227:add this public function to clear the program play mode
void clear_program(void)
{
clear_all_action();
}
static void clear_all_action(void)
{
int iItemNum;
//AW0515<<<<:delete this line
#if 0
// if( mode_get_private_program_size())
// PM_InitializeProgramList();
#endif
FOR_ALL_ITEMS(iItemNum)
{
if ( g_disc_type == DEC_DISC_TYPE_DVD_VIDEO )
{
ClearTitleItem(iItemNum);
ClearChapterItem(iItemNum);
}
else
{
ClearTrackItem(iItemNum);
}
}
#ifdef D_ROVER
if ( g_disc_type == DEC_DISC_TYPE_DVD_VIDEO )
{
gmsm.iItemNum = 0;
init_title_edit(gmsm.mseTitleRover, gmsm.iItemNum);
//AW0117:do not change focus pos
init_chapter_edit(gmsm.mseChapterRover, gmsm.iItemNum);
// MS_change_focus((MS_DIALOG *) ((MS_WIDGET *) gmsm.mseTitleRover)->parent, (MS_WIDGET *) gmsm.mseTitleRover);
}
else
{
init_track_edit(gmsm.mseTrackRover, gmsm.iItemNum);
//AW0117:do not change foucus pos
// MS_change_focus((MS_DIALOG *) ((MS_WIDGET *) gmsm.mseTrackRover)->parent, (MS_WIDGET *) gmsm.mseTrackRover);
}
#endif // D_ROVER
//AW0117:when all the item been cleared just redisplay them and set the iItenNum to 0
if(g_disc_type==DEC_DISC_TYPE_DVD_VIDEO||g_disc_type==DEC_DISC_TYPE_DVD_AUDIO)
{
display_titles(0);
display_chapters();
}
else
{
display_tracks(0);
}
gmsm.iItemNum = 0;
#ifdef D_ROVER
if ( g_disc_type == DEC_DISC_TYPE_DVD_VIDEO )
{
init_title_edit(gmsm.mseTitleRover, gmsm.iItemNum);
init_chapter_edit(gmsm.mseChapterRover, gmsm.iItemNum);
}
else
{
init_track_edit(gmsm.mseTrackRover, gmsm.iItemNum);
}
#endif // D_ROVER
//AW0122:inform the core that the mode already changed here
mode_set_private_program_size(0);
//AW0122:add this line to change the mode to normal
//AW0313:if there is no program item just skip it
PM_SetPlaybackMode((BYTE) PM_PLAYBACK_NORMAL);
ie_send(IE_CORE_SEAMLESS_MODE_CHANGE);
}
DWORD calc_title_chapter_entry( iItemNum )
{
char *sz;
DWORD dw;
WORD wTitle;
sz = gmsm.sz_title[iItemNum];
#ifdef NO_C_STDLIB
dbouts("\nTitle is "); dbouts(sz);
#endif
text_to_num( sz, &dw );
wTitle = (WORD) dw;
sz = gmsm.sz_chapter[iItemNum];
text_to_num( sz, &dw);
dw = (wTitle << 8) | (BYTE) dw;
#ifdef NO_C_STDLIB
dbouts(" ProgramListEntry ("); dboutdwx(dw); dbouts(" )");
#endif
// if ( dw == 0 )
if ( wTitle == 0 )
dw = (DWORD) W_INVALID_PROGRAMLISTENTRY;
return dw;
}
DWORD calc_track_entry( iItemNum )
{
char *sz;
DWORD dwTrack;
sz = gmsm.sz_track[iItemNum];
#ifdef NO_C_STDLIB
dbouts("\nTrack is "); dbouts(sz);
#endif
text_to_num( sz, &dwTrack );
if (( g_disc_type != DEC_DISC_TYPE_CDDA ) && dwTrack) //dm
dwTrack++; //dm
#ifdef NO_C_STDLIB
dbouts(" ProgramListEntry ("); dboutdwx(dwTrack); dbouts(" )");
#endif
if ( dwTrack == 0 )
dwTrack = (DWORD) W_INVALID_PROGRAMLISTENTRY;
return dwTrack;
}
void mode_send_program(void)
{
int iItemNum;
DWORD dw = 0;
unsigned char list_init=0;
mode_set_private_program_size(0);
if(g_disc_type==DEC_DISC_TYPE_DVD_VIDEO) //Note, It is not correct.
PM_InitializeProgramList();
FOR_ALL_ITEMS(iItemNum)
{
if ( g_disc_type == DEC_DISC_TYPE_DVD_VIDEO )
dw = calc_title_chapter_entry(iItemNum);
else
dw = calc_track_entry(iItemNum);
if ( ((DWORD) dw) != W_INVALID_PROGRAMLISTENTRY )
{
//AW0313:if the discc is not dvd video disc then only when the item is no null we will initialize the
//Porgram list otherwise we jsut skip it
if(g_disc_type!=DEC_DISC_TYPE_DVD_VIDEO&&(list_init==0))
{
list_init=1;
PM_InitializeProgramList();
}
mode_increment_private_program_size();
#ifdef NO_C_STDLIB
dbouts("Itemnum :"); dbouti(iItemNum); dbouts(" EntryNumber:"); dboutdwx(dw);
#endif
PM_SetProgramListEntry( mode_get_private_program_size(), (WORD) dw );
}
else
{
if ( g_disc_type == DEC_DISC_TYPE_DVD_VIDEO )
{
ClearTitleItem(iItemNum);
ClearChapterItem(iItemNum);
}
else
{
ClearTrackItem(iItemNum);
}
}
}
if(g_disc_type==DEC_DISC_TYPE_DVD_VIDEO||g_disc_type==DEC_DISC_TYPE_DVD_AUDIO)
{
if(mode_get_private_program_size())
{
PM_SetPlaybackMode((BYTE)PM_PLAYBACK_PROGRAM);
ie_send(IE_CORE_SEAMLESS_MODE_CHANGE);
g_ui_bModePending = PM_PLAYBACK_PROGRAM;
}
//AW0515:when the proglist is 0 the switch to normal playback mode
else
{
PM_SetPlaybackMode((BYTE)PM_PLAYBACK_NORMAL);
ie_send(IE_CORE_SEAMLESS_MODE_CHANGE);
}
//AW0515>>>>>>
}
else if ( mode_get_private_program_size() )
{
if ( (g_disc_type == DEC_DISC_TYPE_VCD) || (g_disc_type == DEC_DISC_TYPE_SVCD)||(g_disc_type==DEC_DISC_TYPE_CDDA) )
{
PM_SetPBC(FALSE);
gns.svcd.m_bIsUsingPSD= FALSE;
}
PM_SetPlaybackMode((BYTE)PM_PLAYBACK_PROGRAM);
ie_send(IE_CORE_SEAMLESS_MODE_CHANGE);
g_ui_bModePending = PM_PLAYBACK_PROGRAM;
}
//AW0515:when the proglist is 0 the switch to normal playback mode
else
{
PM_SetPlaybackMode((BYTE)PM_PLAYBACK_NORMAL);
ie_send(IE_CORE_SEAMLESS_MODE_CHANGE);
}
//AW0515>>>>>>
/* else
{
if ( (g_disc_type == DEC_DISC_TYPE_VCD) || (g_disc_type == DEC_DISC_TYPE_SVCD)||(g_disc_type==DEC_DISC_TYPE_CDDA) )
{
PM_SetPBC(FALSE);
gns.svcd.m_bIsUsingPSD= FALSE;
}
PM_SetPlaybackMode((BYTE)PM_PLAYBACK_NORMAL);
g_b_mode_pending = PM_PLAYBACK_NORMAL;
}*/
//AW0130:move out let it inform the core to change the play mode
}
static void play_program_action(void)
{
#ifdef D_PICTURE_CD_ENABLED
if (g_disc_type == DEC_DISC_TYPE_JPG) //DM1026
b_enable_auto_slideshow = TRUE; //Get into slide show mode
#endif
g_ms_bMustClose = TRUE;
mode_send_program();
// if( mode_get_private_program_size())
// {
// g_in_full_stop=TRUE;
// }
// else g_in_full_stop=FALSE;
}
static const MS_BUTTON msbPlayProgram =
{
// MS_STATIC
{
// MS_WIDGET
{
MS_HOT_SPOT,
ALIGN_LEFT,
BUTTON_COLOR,
//Aw0116:add one more line here
{16, MS_LINE_3+MS_LINE_1, 168, MS_LINE_HEIGHT},
NO_PARENT,
button_user_op,
},
(void *) S_PLAY_PROGRAM
},
play_program_action
};
static void layout (void)
{
go_CurrentLayout.m_bBigMemMap = TRUE;
go_CurrentLayout.m_cPixRes = 0;
go_CurrentLayout.m_wOriginX = 0;
#ifdef FONT32X24 //DM0605
go_CurrentLayout.m_wOriginY = MS_LINE_2;
#else
go_CurrentLayout.m_wOriginY = 60;
#endif
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);
rtouts("\nMODE STATIC MENU LAYOUT");
}
static void on_mode_static_close(void)
{
int iItemNum;
#ifdef NO_C_STDLIB
rtouts("\nMode static menu screen closed");
#endif
SAFELY_DELETE(choice1)
SAFELY_DELETE(choice2)
gmsm.wState = !MSM_INITIALIZED;
}
static void enable_next_item(void)
{
if ( gmsm.iItemNum < MAX_DISPLAY_ITEMS - 1 )
#ifdef D_ROVER
gmsm.iLastSelectableItemNum = gmsm.iItemNum + 1;
#else
{
SET_SELECTABLE((MS_STATIC *) gmsm.mseTitle[gmsm.iItemNum + 1]);
SET_SELECTABLE((MS_STATIC *) gmsm.mseChapter[gmsm.iItemNum + 1]);
}
#endif // D_ROVER
}
#ifdef D_ROVER
#define enable_next_track enable_next_item
#else
static void enable_next_track(void)
{
if ( gmsm.iItemNum < MAX_DISPLAY_ITEMS - 1 )
{
SET_SELECTABLE((MS_STATIC *) gmsm.mseTrack[gmsm.iItemNum + 1]);
}
}
#endif // D_ROVER
#define VALID_ITEM ( (strcmp( (char *) gmsm.sz_title[gmsm.iItemNum], "--" ) != 0) && \
(strcmp( (char *) gmsm.sz_chapter[gmsm.iItemNum], "--" ) != 0) )
static MS_UOP title_override_user_op(MS_WIDGET *widget,MS_UOP uop,char param)
{
MS_EDIT *ms_edit = (MS_EDIT *) widget;
if ( (uop == MS_UOP_ENTER) || (uop == MS_UOP_CLEAR) || (uop == MS_UOP_RIGHT) || (uop == MS_UOP_DOWN) )
{
gmsm.iItemNum = title_item_number(widget);
}
//AW0117:add iItemNum test when move up
if((gmsm.iItemNum==0||gmsm.iItemNum==4||gmsm.iItemNum==8||gmsm.iItemNum==12)&&uop==MS_UOP_UP)
{
uop=MS_UOP_NOP;
return;
}
//AW0117:end
// Allow access to next item when leaving a valid one
if ( uop == MS_UOP_DOWN )
{
if VALID_ITEM
{
enable_next_item();
}
}
uop = edit_user_op(widget, uop, param);
return uop;
}
static MS_UOP chapter_override_user_op(MS_WIDGET *widget,MS_UOP uop,char param)
{
MS_EDIT *ms_edit = (MS_EDIT *) widget;
if ( (uop == MS_UOP_ENTER) || (uop == MS_UOP_CLEAR) || (uop == MS_UOP_RIGHT) || (uop == MS_UOP_DOWN) )
{
gmsm.iItemNum = chapter_item_number(widget);
}
//AW0117:add iItemNum test when move up
if((gmsm.iItemNum==0||gmsm.iItemNum==4||gmsm.iItemNum==8||gmsm.iItemNum==12)&&uop==MS_UOP_UP)
{
uop=MS_UOP_NOP;
return;
}
//AW0117:end
// Allow access to next item when leaving a valid one
if ( (uop == MS_UOP_RIGHT) || (uop == MS_UOP_DOWN) )
{
if VALID_ITEM
{
enable_next_item();
}
}
uop = edit_user_op(widget, uop, param);
return uop;
}
static MS_UOP track_override_user_op(MS_WIDGET *widget,MS_UOP uop,char param)
{
MS_EDIT *ms_edit = (MS_EDIT *) widget;
if ( (uop == MS_UOP_ENTER) || (uop == MS_UOP_CLEAR) || (uop == MS_UOP_RIGHT) || (uop == MS_UOP_DOWN) )
{
gmsm.iItemNum = track_item_number(widget);
}
//AW0117:add test to prevent from move to inlvaid pos
if((gmsm.iItemNum==0||gmsm.iItemNum==4||gmsm.iItemNum==8||gmsm.iItemNum==12)&&uop==MS_UOP_UP)
{
uop=MS_UOP_NOP;
return;
}
//AW0117:end
// Allow access to next item when leaving a valid one
if ( (uop == MS_UOP_RIGHT) || (uop == MS_UOP_DOWN) )
{
if ( strcmp( (char *) gmsm.sz_track[gmsm.iItemNum], "---" ) != 0 )
{
enable_next_track();
}
}
uop = edit_user_op(widget, uop, param);
return uop;
}
BOOL is_empty_title( char *sz_title )
{
return ( strcmp(sz_title, "--") == 0 );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -