📄 mode_m.c
字号:
}
BOOL is_empty_chapter( char *sz_chapter )
{
return ( strcmp(sz_chapter, "--") == 0 );
}
BOOL is_valid_title( DWORD *pdwTitle )
{
DWORD dwTitle = 0;
char *sz_title = gmsm.sz_title[gmsm.iItemNum];
char *sz_chapter = gmsm.sz_chapter[gmsm.iItemNum];
BOOL bValid = FALSE;
if ( is_empty_title(sz_title)&& is_empty_chapter(sz_chapter))
{
bValid = TRUE;
}
else if(is_empty_chapter(sz_chapter)&&(direction==UP_DIRECTION
||direction==DOWN_DIRECTION)&&title_rover&&(!is_empty_title(sz_title)))
{
bValid = FALSE;
}
else if((!is_empty_title(sz_title))&&is_empty_chapter(sz_chapter)&&chapter_rover&&direction!=LEFT_DIRECTION)
{
bValid = FALSE;
}
else
{
text_to_num( sz_title, &dwTitle );
bValid = ( (dwTitle >= 1) && (dwTitle <= SI_DVD_AVAILABLE_TITLE) );
}
if ( pdwTitle )
*pdwTitle = dwTitle;
return bValid;
}
BOOL is_valid_chapter( DWORD dwTitle, DWORD *pdwChapter )
{
DWORD dwChapter = 0;
DWORD dwMaxChapters;
char *sz_chapter = gmsm.sz_chapter[gmsm.iItemNum];
char *sz_title= gmsm.sz_title[gmsm.iItemNum];
BOOL bValid = FALSE;
if ( is_empty_chapter(sz_chapter)&&is_empty_title(sz_title) )//aw0921
{
bValid = TRUE;
}
else if(is_empty_title(sz_title)&&chapter_rover)
{
bValid = FALSE;
}
else if(is_empty_chapter(sz_chapter)&&(!is_empty_title(sz_title))&&((title_rover&&direction!=RIGHT_DIRECTION)||(chapter_rover&&direction!=LEFT_DIRECTION)))
{
bValid = FALSE;
}
else
{
if ( dwTitle < 1 )
dwTitle = 1;
text_to_num( sz_chapter, &dwChapter );
query_core( CQ_AVAILABLE_CHAPTERS, (void *)dwTitle, (void *) &dwMaxChapters );
#ifdef NO_C_STDLIB
dbouts("\nAvailable chapters ("); dboutl( dwMaxChapters ); dbouts(")");
#endif
bValid = (dwChapter <= dwMaxChapters);
}
if ( pdwChapter )
*pdwChapter = dwChapter;
return bValid;
}
static void title_action(char *s)
{
EVENT evt = 0;
long dw = 0;
WORD wTitle = 0;
#ifdef NO_C_STDLIB
dbouts("\nTitle is "); dbouts(s);
#endif
text_to_num( s, &dw );
wTitle = (WORD) dw;
text_to_num( gmsm.sz_chapter[gmsm.iItemNum], &dw);
dw = (wTitle << 8) | (BYTE) dw;
#ifdef NO_C_STDLIB
dbouts(" ProgramListEntry ("); dboutdwx(dw); dbouts(" )");
#endif
//PM_SetProgramListEntry(gmsm.iItemNum, (WORD) dw );
if ( dw )
enable_next_item();
}
static void chapter_action(char *s)
{
EVENT evt = 0;
long dw = 0;
DWORD dwTitle = 0;
DWORD dwChapter = 0;
DWORD dwMaxChapters;
#ifdef NO_C_STDLIB
dbouts("\nChapter is "); dbouts(s);
#endif
text_to_num( gmsm.sz_title[gmsm.iItemNum], &dwTitle);
query_core( CQ_AVAILABLE_CHAPTERS, (void *)dwTitle, (void *) &dwMaxChapters );
#ifdef NO_C_STDLIB
dbouts("\nAvailable chapters ("); dboutl( dwMaxChapters ); dbouts(")");
#endif
text_to_num( s, &dwChapter );
dw = ( (dwTitle & 0x00ff) << 8) | (dwChapter & 0x00ff);
#ifdef NO_C_STDLIB
dbouts("\nProgramListEntry ("); dboutdwx(dw); dbouts(" )");
#endif
//PM_SetProgramListEntry(gmsm.iItemNum, (WORD) dw );
if ( dw )
enable_next_item();
}
BOOL is_empty_track( char *sz_track )
{
return ( strcmp(sz_track, "---") == 0 );
}
BOOL is_valid_track( DWORD *pdwTrack )
{
DWORD dwTrack = 0;
DWORD dwMaxTracks;
char *sz_track = gmsm.sz_track[gmsm.iItemNum];
BOOL bValid = FALSE;
if ( is_empty_track(sz_track) )
{
bValid = TRUE;
}
else
{
DWORD dwTitle = 0;
text_to_num( sz_track, &dwTrack );
query_core( CQ_AVAILABLE_CHAPTERS, (void *)dwTitle, (void *) &dwMaxTracks );
#ifdef NO_C_STDLIB
dbouts("\nAvailable tracks ("); dboutl( dwMaxTracks ); dbouts(")");
#endif
bValid = ( dwTrack <= dwMaxTracks );
}
if ( pdwTrack )
*pdwTrack = dwTrack;
return bValid;
}
static void track_action(char *s)
{
EVENT evt = 0;
DWORD dwTrack = 0;
DWORD dwMaxTracks;
#ifdef NO_C_STDLIB
rtouts("\nTrack is "); dbouts(s);
#endif
query_core( CQ_AVAILABLE_CHAPTERS, (void *)1L, (void *) &dwMaxTracks );
#ifdef NO_C_STDLIB
rtouts("\nAvailable tracks ("); rtoutl( dwMaxTracks ); rtouts(")");
#endif
text_to_num( s, &dwTrack );
#ifdef NO_C_STDLIB
rtouts("\nProgramListEntry ("); rtoutdwx(dwTrack); rtouts(" )");
#endif
//PM_SetProgramListEntry(gmsm.iItemNum, (WORD) dwTrack );
if ( dwTrack )
enable_next_item();
}
#define ADD_MSS_ITEM_NUM(_mssItemNum_) MS_add_item(dialog_box, (MS_WIDGET *)&_mssItemNum_, 0)
static void init_list(void)
{
int iItemNum;
WORD wProgramListSize;
#ifdef D_ROVER
#else
MS_WIDGET *pWidget;
MS_POS mspos;
#endif
wProgramListSize = mode_get_private_program_size();
#if 1
ADD_MSS_ITEM_NUM(mssItemNum1);
ADD_MSS_ITEM_NUM(mssItemNum2);
ADD_MSS_ITEM_NUM(mssItemNum3);
ADD_MSS_ITEM_NUM(mssItemNum4);
ADD_MSS_ITEM_NUM(mssItemNum5);
ADD_MSS_ITEM_NUM(mssItemNum6);
ADD_MSS_ITEM_NUM(mssItemNum7);
ADD_MSS_ITEM_NUM(mssItemNum8);
ADD_MSS_ITEM_NUM(mssItemNum9);
ADD_MSS_ITEM_NUM(mssItemNum10);
ADD_MSS_ITEM_NUM(mssItemNum11);
ADD_MSS_ITEM_NUM(mssItemNum12);
ADD_MSS_ITEM_NUM(mssItemNum13);
ADD_MSS_ITEM_NUM(mssItemNum14);
ADD_MSS_ITEM_NUM(mssItemNum15);
ADD_MSS_ITEM_NUM(mssItemNum16);
#endif //
#ifdef D_ROVER
gmsm.iLastSelectableItemNum = 0;
#else
FOR_ALL_ITEMS(iItemNum)
#endif // D_ROVER
{
if ( g_disc_type == DEC_DISC_TYPE_DVD_VIDEO )
{
#ifdef D_ROVER
gmsm.mseTitleRover = MS_create_edit((MS_POS *)&dont_care_pos, i_color, NULL, title_action, MAX_TITLE_DIGITS, MS_HOT_SPOT);
init_title_edit( gmsm.mseTitleRover, 0 );
#else
// Create title/chapter edit items
mspos.x = title_pos_x( iItemNum );
mspos.y = title_pos_y( iItemNum );
mspos.w = MSM_TITLE_WIDTH;
mspos.h = MS_LINE_HEIGHT;
strcpy(gmsm.sz_title[iItemNum],"--");
gmsm.mseTitle[iItemNum] = MS_create_edit(&mspos, i_color, gmsm.sz_title[iItemNum], title_action, MAX_TITLE_DIGITS, MS_HOT_SPOT);
pWidget = (MS_WIDGET *) gmsm.mseTitle[iItemNum];
pWidget->user_op = title_override_user_op;
MS_add_item(dialog_box, pWidget, (iItemNum == 0));
if ( iItemNum > wProgramListSize )
{
SET_NONSELECTABLE((MS_STATIC *) pWidget);
}
#endif // D_ROVER
#ifdef D_ROVER
gmsm.mseChapterRover = MS_create_edit((MS_POS *)&dont_care_pos, i_color, NULL, chapter_action, MAX_CHAPTER_DIGITS, MS_HOT_SPOT);
init_chapter_edit(gmsm.mseChapterRover, 0);
#else
mspos.x = chapter_pos_x( iItemNum );
mspos.y = chapter_pos_y( iItemNum );
mspos.w = MSM_CHAPTER_WIDTH;
mspos.h = MS_LINE_HEIGHT;
gmsm.mseChapter[iItemNum] = MS_create_edit(&mspos, i_color, gmsm.sz_chapter[iItemNum], chapter_action, MAX_CHAPTER_DIGITS, MS_HOT_SPOT);
strcpy(gmsm.sz_chapter[iItemNum],"--");
pWidget = (MS_WIDGET *) gmsm.mseChapter[iItemNum];
pWidget->user_op = chapter_override_user_op;
MS_add_item(dialog_box, pWidget, 0);
if ( iItemNum > wProgramListSize )
{
SET_NONSELECTABLE((MS_STATIC *) pWidget);
}
#endif // D_ROVER
}
else
{
// Create track edit item
#ifdef D_ROVER
gmsm.mseTrackRover = MS_create_edit((MS_POS *)&dont_care_pos, i_color, NULL, track_action, MAX_TRACK_NUMBER_DIGITS, MS_HOT_SPOT);
init_track_edit(gmsm.mseTrackRover, 0);
#else
mspos.x = track_pos_x( iItemNum );
mspos.y = track_pos_y( iItemNum );
mspos.w = MSM_TRACK_NUMBER_WIDTH;
mspos.h = MS_LINE_HEIGHT;
strcpy(gmsm.sz_track[iItemNum],"---");
gmsm.mseTrack[iItemNum] = MS_create_edit(&mspos, i_color, gmsm.sz_track[iItemNum], track_action, MAX_TRACK_NUMBER_DIGITS, MS_HOT_SPOT);
pWidget = (MS_WIDGET *) gmsm.mseTrack[iItemNum];
pWidget->user_op = track_override_user_op;
MS_add_item(dialog_box, pWidget, (iItemNum == 0));//AW0111:change from 0 to 1
if ( iItemNum > wProgramListSize )
{
SET_NONSELECTABLE((MS_STATIC *) pWidget);
}
#endif // D_ROVER
} // if ( g_disc_type ... )
#ifdef D_ROVER
} //
#else
} // FOR_ALL_ITEMS
#endif // D_ROVER
} // init_list
#ifdef D_ROVER
static void mode_init_edit(MS_EDIT *msEdit, int iItemNum)
{
if ( g_disc_type == DEC_DISC_TYPE_DVD_VIDEO )
{
if ( msEdit == gmsm.mseTitleRover )
init_title_edit( msEdit, iItemNum );
if ( msEdit == gmsm.mseChapterRover )
init_chapter_edit( msEdit, iItemNum );
}
else
{
if( msEdit == gmsm.mseTrackRover )
init_track_edit( msEdit, iItemNum );
}
}
#define FOCUSED_WIDGET(_msDialog_) (_msDialog_)->pwli_focus->widget
// Defocus the current item in a dialog
MS_WIDGET *defocus_item(MS_DIALOG *msDialog)
{
MS_WIDGET *focusWidget= FOCUSED_WIDGET(msDialog);
MS_display(focusWidget);
return focusWidget;
}
void move_to_item( MS_EDIT *msEdit, int iItemNum )
{
MS_WIDGET *widget = (MS_WIDGET *) msEdit;
mode_init_edit(msEdit, iItemNum);
widget->user_op( widget, MS_UOP_DISPLAY, 1);
// We must do this because the above user_op doesn't do it for us
MS_change_focus((MS_DIALOG *) widget->parent, widget);
gmsm.iItemNum = iItemNum;
}
BOOL is_valid_entry( MS_WIDGET *msWidget )
{
DWORD dw;
BOOL bValid;
if ( msWidget == (MS_WIDGET *) gmsm.mseTitleRover )
{
title_rover=1;
bValid = is_valid_title( &dw );
}
else
if ( msWidget == (MS_WIDGET *) gmsm.mseChapterRover )
{
chapter_rover=1;
is_valid_title( &dw );
bValid = is_valid_chapter( dw, NULL );
}
else
if ( msWidget == (MS_WIDGET *) gmsm.mseTrackRover )
bValid = is_valid_track( NULL );
if ( !bValid )
msWidget->user_op( msWidget, MS_UOP_CLEAR, 1 );
if ( bValid && (msWidget == (MS_WIDGET *) gmsm.mseTitleRover) )
{
title_rover=1;
bValid = is_valid_chapter( dw, NULL );
if ( !bValid )
{
init_title_edit( gmsm.mseTitleRover, gmsm.iItemNum );
msWidget = (MS_WIDGET *) gmsm.mseTitleRover;
msWidget->user_op( msWidget, MS_UOP_CLEAR, 0 );
init_chapter_edit( gmsm.mseChapterRover, gmsm.iItemNum );
msWidget = (MS_WIDGET *) gmsm.mseChapterRover;
msWidget->user_op( msWidget, MS_UOP_CLEAR, 0 );
bValid = TRUE;
}
}
title_rover=0;
chapter_rover=0;
return bValid;
}
//
// Handle an UP key in the program dialog
//
// -- Move to the title/chapter/track on the line above, when possible
//
MS_UOP handle_up( MS_WIDGET *mswDialog, MS_UOP uop, char param )
{
int iItemNum = gmsm.iItemNum;
MS_DIALOG *msDialog = (MS_DIALOG *) mswDialog;
MS_WIDGET *focusWidget;
direction=UP_DIRECTION;//AW0921
if ( !is_valid_entry(FOCUSED_WIDGET(msDialog)) )
{
direction=DOWN_DIRECTION;//AW0921
uop = MS_UOP_NOP;
}
else
{
//AW0117:Adds bigger than 0 test to prevent to the invlid pos
if(iItemNum==0||iItemNum==4||iItemNum==8||iItemNum==12)
{
uop=MS_UOP_NOP;
return;
}
if ( (iItemNum > 0) && ( item_pos_y(iItemNum - 1) < item_pos_y(iItemNum) )&&item_pos_y(iItemNum)>0 )
{
// Defocus the current item
focusWidget = defocus_item(msDialog);
// Make the roving widget represent the new item
move_to_item((MS_EDIT *)focusWidget, iItemNum - 1);
uop = MS_UOP_NOP;
}
}
return uop;
}
//
// Handle a DOWN key in the program dialog
//
// -- Move to the title/chapter/track on the line below, when possible
//
MS_UOP handle_down( MS_WIDGET *mswDialog, MS_UOP uop, char param )
{
int iItemNum = gmsm.iItemNum;
MS_WIDGET *focusWidget;
MS_DIALOG *msDialog = (MS_DIALOG *) mswDialog;
if ( !is_valid_entry(FOCUSED_WIDGET(msDialog)) )
uop = MS_UOP_NOP;
else
{
if ( (iItemNum < (MAX_DISPLAY_ITEMS - 1)) &&
#ifdef DISABLE_SMART_SELECTABLE
((iItemNum + 1) <= gmsm.iLastSelectableItemNum) &&
#endif // DISABLE_SMART_SELECTABLE
(item_pos_y(iItemNum + 1) > item_pos_y(iItemNum)) &&item_pos_y(iItemNum)<MS_LINE_3)
{
// Defocus the current item
focusWidget = defocus_item(msDialog);
// Make the roving widget represent the new item
move_to_item( (MS_EDIT *)focusWidget, iItemNum + 1);
uop = MS_UOP_NOP;
}
}
return uop;
}
//
// Handle a LEFT key in the program dialog
//
// If focus is:
//
// track #iItemNum: move to track #(iItemNum - ITEMS_PER_COLUMN) when possible
//
// title #iItemNum: move to chapter #(iItemNum - ITEMS_PER_COLUMN) when possible
// chapter #iItemNum: move to title #iItemNum
//
MS_UOP handle_left( MS_WIDGET *mswDialog, MS_UOP uop, char param )
{
MS_DIALOG *msDialog = (MS_DIALOG *) mswDialog;
int iItemNum = gmsm.iItemNum;
MS_WIDGET *focusWidget;
direction=LEFT_DIRECTION;//AW0921
focusWidget = FOCUSED_WIDGET( msDialog );
if ( !is_valid_entry(focusWidget) )
{
direction=DOWN_DIRECTION;//AW0921
uop = MS_UOP_NOP;
}
else
{
if ( focusWidget == (MS_WIDGET *) gmsm.mseChapterRover )
{
defocus_item(msDialog);
move_to_item(gmsm.mseTitleRover, iItemNum);
}
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -