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

📄 mp3_m.c

📁 Zoran VP2K731 DVD源代码,极具参考价值!
💻 C
📖 第 1 页 / 共 2 页
字号:

  // 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 + -