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

📄 fs.c

📁 Mplayer源码
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <stdlib.h>#include <stdio.h>#include <string.h>#include <sys/stat.h>#include <glob.h>#include <unistd.h>#include "../mplayer.h"#include "mplayer/pixmaps/up.xpm"#include "mplayer/pixmaps/dir.xpm"#include "mplayer/pixmaps/file.xpm"#include "../app.h"#include "../interface.h"#include "../../config.h"#include "../../help_mp.h"#include "../../stream/stream.h"#include "../widgets.h"#include "fs.h"#include "opts.h"#include "common.h"#ifndef __linux__#define get_current_dir_name()  getcwd(NULL, PATH_MAX)#endif#ifndef get_current_dir_name extern char * get_current_dir_name( void );#endifgchar         * fsSelectedFile = NULL;gchar         * fsSelectedDirectory = NULL;unsigned char * fsThatDir = ".";gchar         * fsFilter = "*";int             fsPressed = 0;int             fsType    = 0;char * fsVideoFilterNames[][2] =         { { "MPEG files (*.mpg,*.mpeg,*.m1v)",                         "*.mpg,*.mpeg,*.m1v" },	   { "VCD/SVCD Images (*.bin)",					"*.bin" },           { "VOB files (*.vob)",  				  	"*.vob" },           { "AVI files (*.avi)",  				  	"*.avi" },	   { "DiVX files (*.divx)",					"*.divx" },           { "QuickTime files (*.mov,*.qt)",			  	"*.mov,*.qt" },           { "ASF files (*.asf)",  				  	"*.asf" },           { "VIVO files (*.viv)", 				  	"*.viv" },	   { "RealVideo files (*.rm)",					"*.rm"  },	   { "Windows Media Video (*.wmv)",			  	"*.wmv" },	   { "OGG Media files (*.ogm)",			  		"*.ogm" },	   { "Matroska Media files (*.mkv)",			  	"*.mkv" },	   { "Autodesk animations (*.fli,*.flc)",			"*.fli,*.flc" },	   { "NuppelVideo files (*.nuv)",				"*.nuv" },	   { "MP3 files (*.mp3,*.mp2)",					"*.mp3,*.mp2" },	   { "Wave files (*.wav)",					"*.wav" },	   { "WMA files (*.wma)",					"*.wma" },	   { "Matroska Audio files (*.mka)",			  	"*.mka" },	   { "Audio files",						"*.wav,*.ogg,*.mp2,*.mp3,*.wma,*.mka" },	   { "Video files", 						"*.asf,*.avi,*.divx,*.fli,*.flc,*.ogm,*.mpg,*.mpeg,*.m1v,*.mov,*.nuv,*.qt,*.rm,*.vob,*.viv,*.wmv,*.mkv,*.bin" },           { "All files",	      					"*" },	   { NULL,NULL }	 };int fsLastVideoFilterSelected = -1;char * fsSubtitleFilterNames[][2] =         { { "UTF (*.utf)",  						   "*.utf" },           { "SUB (*.sub)",   						   "*.sub" },           { "SRT (*.srt)",   						   "*.str" },           { "SMI (*.smi)",   						   "*.smi" },           { "RT  (*.rt) ",   						   "*.rt"  },           { "TXT (*.txt)",   						   "*.txt" },           { "ASS (*.ass)",   						   "*.ass" },           { "SSA (*.ssa)",   						   "*.ssa" },           { "AQT (*.aqt)",   						   "*.aqt" },	   { "Subtitles",						   "*.utf,*.sub,*.srt,*.smi,*.rt,*.txt,*.ass,*.ssa,*.aqt" },           { "All files",	 					   "*" },	   { NULL,NULL }	 };int fsLastSubtitleFilterSelected = -1;char * fsOtherFilterNames[][2] =         { 	   { "All files", "*"     },	   { NULL,NULL }	 };	 char * fsAudioFileNames[][2] =	 { 	   { "WAV files (*.wav)",					   "*.wav" },	   { "MP3 files (*.mp2, *.mp3)",				   "*.mp2,*.mp3" },	   { "OGG Vorbis files (*.ogg)",				   "*.ogg" },	   { "WMA files (*.wma)",				 	   "*.wma" },	   { "Matroska Audio files (*.mka)",			  	   "*.mka" },	   { "Audio files",						   "*.ogg,*.mp2,*.mp3,*.wav,*.wma,*.mka" },	   { "All files",						   "*" },	   { NULL, NULL }	 };int fsLastAudioFilterSelected = -1;char * fsFontFileNames[][2] =         {#ifdef HAVE_FREETYPE	   { "True Type fonts (*.ttf)",					   "*.ttf" },	   { "Type1 fonts (*.pfb)",					   "*.pfb" },	   { "All fonts",						   "*.ttf,*.pfb" },#else	   { "font files (*.desc)",					   "*.desc" },#endif	   { "All files",						   "*" },	   { NULL,NULL }	 };int fsLastFontFilterSelected = -1;GtkWidget   * fsFileNamesList;GtkWidget   * fsFNameList;GtkWidget   * fsFileSelect = NULL;GdkColormap * fsColorMap;GtkWidget   * fsOk;GtkWidget   * fsUp;GtkWidget   * fsCancel;GtkWidget   * fsCombo4;GtkWidget   * fsPathCombo;GList       * fsList_items = NULL;GList       * fsTopList_items = NULL;GtkWidget   * List;GtkWidget   * fsFilterCombo;GtkStyle    * style;GdkPixmap   * dpixmap;GdkPixmap   * fpixmap;GdkBitmap   * dmask;GdkBitmap   * fmask;static char * Filter( char * name ){ static char tmp[32]; int  i,c; for ( i=0,c=0;i < strlen( name );i++ )  {   if ( ( name[i] >='a' )&&( name[i] <= 'z' ) ) { tmp[c++]='['; tmp[c++]=name[i]; tmp[c++]=name[i] - 32; tmp[c++]=']'; }    else tmp[c++]=name[i];  } tmp[c]=0; return tmp;}void CheckDir( GtkWidget * list,char * directory ){ struct stat     fs; int             i,c=2; gchar         * str[1][2]; GdkPixmap     * pixmap; GdkBitmap     * mask; glob_t          gg; if ( !fsFilter[0] ) return; gtk_widget_hide( list ); gtk_clist_clear( GTK_CLIST( list ) ); str[0][0]=NULL; pixmap=dpixmap; mask=dmask; str[0][0]=NULL; str[0][1]=".";  gtk_clist_append( GTK_CLIST( list ),str[0] ); gtk_clist_set_pixmap( GTK_CLIST( list ),0,0,pixmap,mask ); str[0][1]=".."; gtk_clist_append( GTK_CLIST( list ),str[0] ); gtk_clist_set_pixmap( GTK_CLIST( list ),1,0,pixmap,mask ); glob( "*",0,NULL,&gg );// glob( ".*",GLOB_NOSORT | GLOB_APPEND,NULL,&gg ); for(  i=0;(unsigned)i<gg.gl_pathc;i++ )  {   stat( gg.gl_pathv[i],&fs );   if( !S_ISDIR( fs.st_mode ) ) continue;   str[0][1]=gg.gl_pathv[i];   pixmap=dpixmap; mask=dmask;   gtk_clist_append( GTK_CLIST( list ),str[0] );   gtk_clist_set_pixmap( GTK_CLIST( list ),c++,0,pixmap,mask );  } globfree( &gg ); if ( strchr( fsFilter,',' ) )  {   char tmp[8];   int  i,c,glob_param = 0;//printf( "sub item detected.\n" );      for ( i=0,c=0;i<(int)strlen( fsFilter ) + 1;i++,c++ )    {     tmp[c]=fsFilter[i];     if ( ( tmp[c] == ',' )||( tmp[c] == '\0' ) )      {       tmp[c]=0; c=-1;//       printf( "substr: %s\n",tmp );       glob( Filter( tmp ),glob_param,NULL,&gg );        glob_param=GLOB_APPEND;      }    }  } else glob( Filter( fsFilter ),0,NULL,&gg );#if 0 if ( !strcmp( fsFilter,"*" ) ) {  char * f = strdup( fsFilter );  int    i;  for( i=0;i<strlen( f );i++ )   if ( ( f[i] >= 'A' )&&( f[i] <= 'Z' ) ) f[i]+=32;  glob( f,GLOB_APPEND,NULL,&gg );  for( i=0;i<strlen( f );i++ )   if ( ( f[i] >= 'a' )&&( f[i] <= 'z' ) ) f[i]-=32;  glob( f,GLOB_APPEND,NULL,&gg );  free( f ); }#endif// glob( ".*",GLOB_NOSORT | GLOB_APPEND,NULL,&gg ); pixmap=fpixmap; mask=fmask; for(  i=0;(unsigned)i<gg.gl_pathc;i++ )  {   stat( gg.gl_pathv[i],&fs );   if(  S_ISDIR( fs.st_mode ) ) continue;   str[0][1]=gg.gl_pathv[i];   gtk_clist_append( GTK_CLIST( list ),str[0] );   gtk_clist_set_pixmap( GTK_CLIST( list ),c++,0,pixmap,mask );  } globfree( &gg ); gtk_clist_set_column_width( GTK_CLIST( list ),0,17 ); gtk_clist_select_row( GTK_CLIST( list ),0,1 ); gtk_widget_show( list );}void fs_PersistantHistory( char *subject ); /* forward declaration */void ShowFileSelect( int type,int modal ){ int i, k; char * tmp = NULL; if ( fsFileSelect ) gtkActive( fsFileSelect );  else fsFileSelect=create_FileSelect();  fsType=type; switch ( type )  {   case fsVideoSelector:        gtk_window_set_title( GTK_WINDOW( fsFileSelect ),MSGTR_FileSelect );        fsList_items=NULL;        for( i=0;fsVideoFilterNames[i][0];i++ )          fsList_items=g_list_append( fsList_items,fsVideoFilterNames[i][0] );	k = fsLastVideoFilterSelected;        gtk_combo_set_popdown_strings( GTK_COMBO( List ),fsList_items );        g_list_free( fsList_items );        gtk_entry_set_text( GTK_ENTRY( fsFilterCombo ),fsVideoFilterNames[k >= 0 ? k : i-2][0] );	tmp=guiIntfStruct.Filename;        break;   case fsSubtitleSelector:        gtk_window_set_title( GTK_WINDOW( fsFileSelect ),MSGTR_SubtitleSelect );        fsList_items=NULL;        for( i=0;fsSubtitleFilterNames[i][0];i++ )          fsList_items=g_list_append( fsList_items,fsSubtitleFilterNames[i][0] );	k = fsLastSubtitleFilterSelected;        gtk_combo_set_popdown_strings( GTK_COMBO( List ),fsList_items );        g_list_free( fsList_items );        gtk_entry_set_text( GTK_ENTRY( fsFilterCombo ),fsSubtitleFilterNames[k >= 0 ? k : i-2][0] );	tmp=guiIntfStruct.Subtitlename;        break;   case fsOtherSelector:        gtk_window_set_title( GTK_WINDOW( fsFileSelect ),MSGTR_OtherSelect );        fsList_items=NULL;        for( i=0;fsOtherFilterNames[i][0];i++ )          fsList_items=g_list_append( fsList_items,fsOtherFilterNames[i][0] );        gtk_combo_set_popdown_strings( GTK_COMBO( List ),fsList_items );        g_list_free( fsList_items );        gtk_entry_set_text( GTK_ENTRY( fsFilterCombo ),fsOtherFilterNames[0][0] );	tmp=guiIntfStruct.Othername;        break;   case fsAudioSelector:	gtk_window_set_title( GTK_WINDOW( fsFileSelect ),MSGTR_AudioFileSelect );	fsList_items=NULL;	for( i=0;fsAudioFileNames[i][0];i++ )	  fsList_items=g_list_append( fsList_items,fsAudioFileNames[i][0] );	k = fsLastAudioFilterSelected;	gtk_combo_set_popdown_strings( GTK_COMBO( List ),fsList_items );	g_list_free( fsList_items );	gtk_entry_set_text( GTK_ENTRY( fsFilterCombo ),fsAudioFileNames[k >= 0 ? k : i-2][0] );	tmp=guiIntfStruct.AudioFile;	break;   case fsFontSelector:        gtk_window_set_title( GTK_WINDOW( fsFileSelect ),MSGTR_FontSelect );	fsList_items=NULL;	for( i=0;fsFontFileNames[i][0];i++ )	  fsList_items=g_list_append( fsList_items,fsFontFileNames[i][0] );	k = fsLastFontFilterSelected;	gtk_combo_set_popdown_strings( GTK_COMBO( List ),fsList_items );	g_list_free( fsList_items );	gtk_entry_set_text( GTK_ENTRY( fsFilterCombo ),fsFontFileNames[k >= 0 ? k : i-2][0] );	tmp=font_name;	break;  } if ( tmp && tmp[0] )  {   struct stat f;   char * dir = strdup( tmp );   do     {     char * c = strrchr( dir,'/' );     stat( dir,&f );     if ( S_ISDIR( f.st_mode ) ) break;     if ( c ) *c=0;    } while ( strrchr( dir,'/' ) );   if ( dir[0] ) chdir( dir );      free( dir );  }  if ( fsTopList_items ) g_list_free( fsTopList_items ); fsTopList_items=NULL; {  int  i, c = 1;    if ( fsType == fsVideoSelector )   {    for ( i=0;i < fsPersistant_MaxPos;i++ )     if ( fsHistory[i] ) { fsTopList_items=g_list_append( fsTopList_items,fsHistory[i] ); c=0; }   }  if ( c ) fsTopList_items=g_list_append( fsTopList_items,(gchar *)get_current_dir_name() ); } if ( getenv( "HOME" ) ) fsTopList_items=g_list_append( fsTopList_items,getenv( "HOME" ) ); fsTopList_items=g_list_append( fsTopList_items,"/home" ); fsTopList_items=g_list_append( fsTopList_items,"/mnt" ); fsTopList_items=g_list_append( fsTopList_items,"/" ); gtk_combo_set_popdown_strings( GTK_COMBO( fsCombo4 ),fsTopList_items );   gtk_window_set_modal( GTK_WINDOW( fsFileSelect ),modal ); gtk_widget_show( fsFileSelect );}void HideFileSelect( void )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -