⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mode_m.c

📁 Zoran VP2K731 DVD源代码,极具参考价值!
💻 C
📖 第 1 页 / 共 4 页
字号:
	{
	  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 + -