📄 mode_m.c
字号:
{
if ( iItemNum >= ITEMS_PER_COLUMN )
{
// Defocus the current item
focusWidget = defocus_item(msDialog);
if ( g_disc_type == DEC_DISC_TYPE_DVD_VIDEO )
{
// This must be a title, since we checked for chapter above
// We move to the chapter item to the left
move_to_item(gmsm.mseChapterRover, iItemNum - ITEMS_PER_COLUMN);
}
else
{
// Make the roving widget represent the new item
move_to_item((MS_EDIT *)focusWidget, iItemNum - ITEMS_PER_COLUMN);
}
}
}
uop = MS_UOP_NOP;
}
return uop;
}
//
// Handle a RIGHT 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)
// chapter #iItemNum: move to title #iItemNum + ITEMS_PER_COLUMN when possible
//
MS_UOP handle_right( MS_WIDGET *mswDialog, MS_UOP uop, char param )
{
MS_DIALOG *msDialog = (MS_DIALOG *) mswDialog;
int iItemNum = gmsm.iItemNum;
MS_WIDGET *focusWidget;
focusWidget = FOCUSED_WIDGET( msDialog );
direction=RIGHT_DIRECTION;//AW0921
if ( !is_valid_entry( focusWidget ) )
{
direction=DOWN_DIRECTION;//AW0921
uop = MS_UOP_NOP;
}
else
{
if ( g_disc_type == DEC_DISC_TYPE_DVD_VIDEO )
{
if ( focusWidget == (MS_WIDGET *) gmsm.mseTitleRover )
{
// This is a title: just move over to the corresponding chapter
defocus_item(msDialog);
move_to_item( gmsm.mseChapterRover, iItemNum );
uop = MS_UOP_NOP;
} // focusWidget
else
{
// This must be the chapter rover, since we just tested for the title
#ifdef DISABLE_SMART_SELECTABLE
if ( (iItemNum < (MAX_DISPLAY_ITEMS - ITEMS_PER_COLUMN)) &&
(iItemNum < gmsm.iLastSelectableItemNum) )
#else
if ( iItemNum < (MAX_DISPLAY_ITEMS - ITEMS_PER_COLUMN) )
#endif // DISABLE
{
defocus_item(msDialog);
move_to_item( gmsm.mseTitleRover, iItemNum + ITEMS_PER_COLUMN );
uop = MS_UOP_NOP;
}
} // focusWidget
} // g_disc_type
else
{
// This is a track
#ifdef DISABLE_SMART_SELECTABLE
if ( (iItemNum < (MAX_DISPLAY_ITEMS - ITEMS_PER_COLUMN)) &&
(iItemNum <= gmsm.iLastSelectableItemNum) )
#else
if ( iItemNum < (MAX_DISPLAY_ITEMS - ITEMS_PER_COLUMN) )
#endif // DISABLE
{
defocus_item(msDialog);
move_to_item( (MS_EDIT *) focusWidget, iItemNum + ITEMS_PER_COLUMN );
uop = MS_UOP_NOP;
}
}
}
return uop;
}
void display_titles( BOOL iFocus )
{
int iItemNum;
FOR_ALL_ITEMS(iItemNum)
{
init_title_edit( gmsm.mseTitleRover, iItemNum );
if(iFocus)
((MS_WIDGET *) gmsm.mseTitleRover)->user_op( (MS_WIDGET *) gmsm.mseTitleRover, MS_UOP_DISPLAY, ((iItemNum == 0) ? 1 : 0) );
else
((MS_WIDGET *) gmsm.mseTitleRover)->user_op( (MS_WIDGET *) gmsm.mseTitleRover, MS_UOP_DISPLAY, 0 );
}
}
void display_chapters( void )
{
int iItemNum;
FOR_ALL_ITEMS(iItemNum)
{
init_chapter_edit( gmsm.mseChapterRover, iItemNum );
((MS_WIDGET *) gmsm.mseChapterRover)->user_op( (MS_WIDGET *) gmsm.mseChapterRover, MS_UOP_DISPLAY, 0 );
}
}
void display_tracks( BOOL iFocus )
{
int iItemNum;
FOR_ALL_ITEMS(iItemNum)
{
init_track_edit( gmsm.mseTrackRover, iItemNum );
if(iFocus)
((MS_WIDGET *) gmsm.mseTrackRover)->user_op( (MS_WIDGET *) gmsm.mseTrackRover, MS_UOP_DISPLAY, ((iItemNum == 0) ? 1 : 0) );
else
((MS_WIDGET *) gmsm.mseTrackRover)->user_op( (MS_WIDGET *) gmsm.mseTrackRover, MS_UOP_DISPLAY, 0 );
}
}
//
// Display the dialog and its contents
//
// This takes the list items ( mseTitle, mseChapter, mseTrack ) into account
//
MS_UOP handle_display( MS_DIALOG *msDialog, MS_UOP uop, char param )
{
MS_WIDGET *widget = (MS_WIDGET *) msDialog;
WIDGET_LIST_ITEM *curr = msDialog->pwli_widget_list;
BOOL bHandled;
// Erase the dialog when appropriate
if (!MS_HAS_NO_BACKGROUND(widget))
{
OSD_PutRect(widget->pos.x,
widget->pos.y,
widget->pos.w,
widget->pos.h,
BG_COLOR(widget->color));
}
OSD_SetOrigin(widget);
while (curr)
{
bHandled = TRUE;
if ( g_disc_type == DEC_DISC_TYPE_DVD_VIDEO )
{
if ( curr->widget == (MS_WIDGET *) gmsm.mseTitleRover )
display_titles(1);
else
if ( curr->widget == (MS_WIDGET *) gmsm.mseChapterRover )
display_chapters();
else
{
bHandled = FALSE;
}
} // DEC_DISC_TYPE_DVD_VIDEO
else
{
if ( curr->widget == (MS_WIDGET *) gmsm.mseTrackRover )
display_tracks(1);
else
{
bHandled = FALSE;
}
} // DEC_DISC_TYPE_DVD_VIDEO
if ( !bHandled )
{
curr->widget->user_op( curr->widget, MS_UOP_DISPLAY, (char)((curr == msDialog->pwli_focus)? 1 :0) );
}
// Next dialog item
curr = curr->next;
}
return MS_UOP_NOP;
}
static BOOL is_rover( MS_WIDGET *widget )
{
return ( (widget == (MS_WIDGET *) gmsm.mseTitleRover) ||
(widget == (MS_WIDGET *) gmsm.mseChapterRover) ||
(widget == (MS_WIDGET *) gmsm.mseTrackRover) );
}
static MS_UOP dialog_override_user_op( MS_WIDGET *widget, MS_UOP uop, char param )
{
MS_DIALOG *msDialog = (MS_DIALOG *) widget;
WIDGET_LIST_ITEM *focus = msDialog->pwli_focus;
MS_WIDGET *focusWidget = NULL;
int iItemNum;
switch ( uop )
{
case MS_UOP_DELETE:
return dialog_user_op( widget, uop, param );
break;
case MS_UOP_DISPLAY:
return handle_display( msDialog, uop, param );
break;
}
if ( focus == NULL )
{
#ifdef NO_C_STDLIB
rtouts("\ndialog_override_user_op: No focus!");
#endif
}
// If dialog has a focused item, pass the uop to it
if ( focus )
{
focusWidget = focus->widget;
iItemNum = -1;
if ( g_disc_type == DEC_DISC_TYPE_DVD_VIDEO )
{
if ( focusWidget == (MS_WIDGET *) gmsm.mseTitleRover )
iItemNum = title_item_number(focusWidget);
else
if ( focusWidget == (MS_WIDGET *) gmsm.mseChapterRover )
iItemNum = chapter_item_number(focusWidget);
}
else
{
if ( focusWidget == (MS_WIDGET *) gmsm.mseTrackRover )
iItemNum = track_item_number(focusWidget);
}
if ( iItemNum >= 0 )
gmsm.iItemNum = iItemNum;
uop = focusWidget->user_op(focusWidget, uop, param);
// If the uop wasn't handled by the focused item, handle it here
if ( uop != MS_UOP_NOP && is_rover( focusWidget ) )
{
switch (uop)
{
case MS_UOP_UP:
uop = handle_up(widget, uop, param);
break;
case MS_UOP_DOWN:
uop = handle_down(widget, uop, param);
break;
case MS_UOP_LEFT:
uop = handle_left(widget, uop, param);
break;
case MS_UOP_RIGHT:
uop = handle_right(widget, uop, param);
break;
#ifndef DENCA_CUSTOMER
case MS_UOP_PLAY:
handle_down(widget, uop, param);
mode_send_program();
g_ms_bMustClose = TRUE;
//AW0330:fix the bug 8 in turn 10 for VCD
if( mode_get_private_program_size())
{
// g_in_full_stop=TRUE;
uop=MS_UOP_NOP;
}
// else g_in_full_stop=FALSE;
break;
#endif
} // switch
} // uop
} // focus
if ( uop != MS_UOP_NOP )
{
dialog_user_op(widget, uop, param);
}
return uop;
}
#endif // D_ROVER
void close_program_dialog(void)
{
#ifdef D_ROVER
#else
int iItemNum;
#endif // D_ROVER
SAFELY_DELETE(dialog_box);
#ifdef D_ROVER
#else
FOR_ALL_ITEMS(iItemNum)
#endif // D_ROVER
{
if ( g_disc_type == DEC_DISC_TYPE_DVD_VIDEO )
{
#ifdef D_ROVER
SAFELY_DELETE(gmsm.mseTitleRover);
SAFELY_DELETE(gmsm.mseChapterRover);
#else
SAFELY_DELETE(gmsm.mseTitle[iItemNum])
SAFELY_DELETE(gmsm.mseChapter[iItemNum]);
#endif // D_ROVER
}
else
{
#ifdef D_ROVER
SAFELY_DELETE(gmsm.mseTrackRover);
#else
SAFELY_DELETE(gmsm.mseTrack[iItemNum]);
#endif // D_ROVER
}
}
gmsm.wState &= ~(PROGRAM_ITEMS_INITIALIZED | PROGRAM_DIALOG_OPEN);
}
void open_program_dialog(void)
{
dialog_box = MS_create_dialog((MS_POS *)&dialog_pos, dialog_color, (MS_DIALOG *)screen, close_program_dialog, MS_HOT_SPOT);
#ifdef D_ROVER
((MS_WIDGET *) dialog_box)->user_op = dialog_override_user_op;
#endif
MS_add_item((MS_DIALOG*)screen, (MS_WIDGET*)dialog_box, 1);
init_list();
gmsm.wState |= PROGRAM_ITEMS_INITIALIZED;
MS_add_item(dialog_box, (MS_WIDGET *) &msbClearAll, 0);
MS_add_item(dialog_box, (MS_WIDGET *) &msbPlayProgram, 0);
MS_dialog_display((MS_DIALOG *) dialog_box);
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
VFD_RefreshLED(0xFF); //Yuan turn off the standby led
gmsm.wState |= PROGRAM_DIALOG_OPEN;
}
void novcd_mode_static_action(int num)
{
if ( num == ITEMNUM_NOVCD_PROGRAM )
{
MS_display((MS_WIDGET *) choice1);
open_program_dialog();
}
else
{
if ( gmsm.wState & PROGRAM_DIALOG_OPEN )
{
MS_remove_item(dialog_box);
}
novcd_mode_action(num);
}
}
void vcd_mode_static_action(int num)
{
if ( num == ITEMNUM_VCD_PROGRAM )
{
MS_display((MS_WIDGET *) choice1);
open_program_dialog();
}
else
{
if ( gmsm.wState & PROGRAM_DIALOG_OPEN )
{
MS_remove_item(dialog_box);
}
vcd_mode_action(num);
}
}
void open_mode_static(void)
{
BOOL bIsProgramMode;
gmsm.wState = !MSM_INITIALIZED;
screen = MS_create_screen((MS_POS *)&screen_pos,screen_color,0,on_mode_static_close,layout);
choice1 = open_mode_choice(&mode_choice_pos, i_color, &dont_care_pos);
if ( choice1->action == novcd_mode_action )
{
choice1->action = novcd_mode_static_action;
bIsProgramMode = (choice1->current_choice == ITEMNUM_NOVCD_PROGRAM);
}
else
if ( choice1->action == vcd_mode_action )
{
choice1->action = vcd_mode_static_action;
bIsProgramMode = (choice1->current_choice == ITEMNUM_VCD_PROGRAM);
}
if ( g_disc_type == DEC_DISC_TYPE_DVD_VIDEO )
{
choice2 = MS_create_choice(&repeat_choice_pos,i_color,&repeat_list_dvd,&dont_care_pos,repeat_action,MS_HOT_SPOT);
}
else
{
choice2 = MS_create_choice(&repeat_choice_pos,i_color,&repeat_list,&dont_care_pos,repeat_action,MS_HOT_SPOT);
}
repeat_choice(choice2);
// REMINDER initialize program list
MS_add_item((MS_DIALOG*)screen,(MS_WIDGET*)choice1,1);
MS_add_item((MS_DIALOG*)screen,(MS_WIDGET*)choice2,0);
MS_add_item((MS_DIALOG*)screen,(MS_WIDGET*)&mssMenuTitle,0);
MS_add_item((MS_DIALOG*)screen,(MS_WIDGET*)&mssMode,0);
MS_add_item((MS_DIALOG*)screen,(MS_WIDGET*)&mssRepeat,0);
gmsm.wState = MSM_INITIALIZED;
MS_dialog_display((MS_DIALOG*)screen);
if ( bIsProgramMode )
open_program_dialog();
}
/***********************************************************************
** The following is open a static menu for program.
** Author:dm
************************************************************************/
#ifdef D_PROGRAM_SingleKey
//AW0117:adds title and chapter display at the program input screen to indicate which is titlte and which is chapter
const MS_STATIC mssTitleChapter = {
{
0,
ALIGN_LEFT,
I_COLOR,
{200, MS_LINE_0, 80, MS_LINE_HEIGHT},
NO_PARENT,
static_user_op,
},
(void *)S_TITLE_CHAPTER
};
void open_program_mode_static(void)
{
gmsm.wState = !MSM_INITIALIZED;
screen = MS_create_screen((MS_POS *)&screen_prg_pos,screen_color,0,on_mode_static_close,layout);
MS_add_item((MS_DIALOG*)screen,(MS_WIDGET*)&mssProgramInput,0);
if(g_disc_type==DEC_DISC_TYPE_DVD_VIDEO||g_disc_type==DEC_DISC_TYPE_DVD_AUDIO)
{
MS_add_item((MS_DIALOG*)screen,(MS_WIDGET*)&mssTitleChapter,0);
}
gmsm.wState = MSM_INITIALIZED;
MS_dialog_display((MS_DIALOG*)screen);
open_program_dialog();
}
#endif
#endif // D_MODE_STATIC_MENU
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -