comparison Gui/mplayer/gtk/fs.c @ 2901:f77f8379f28f

rewrite ...
author pontscho
date Wed, 14 Nov 2001 16:04:25 +0000
parents
children b7c361557a61
comparison
equal deleted inserted replaced
2900:7345a10e6012 2901:f77f8379f28f
1
2 #include <stdlib.h>
3 #include <stdio.h>
4 #include <string.h>
5 #include <sys/stat.h>
6 #include <glob.h>
7 #include <unistd.h>
8
9 #include "./mplayer.h"
10 #include "psignal.h"
11 #include "../error.h"
12
13 #include "pixmaps/up.xpm"
14 #include "pixmaps/dir.xpm"
15 #include "pixmaps/file.xpm"
16
17 #include "../../events.h"
18 #include "../../../config.h"
19 #include "../../../help_mp.h"
20
21 #include "../widgets.h"
22 #include "fs.h"
23
24 #ifndef __linux__
25 #define get_current_dir_name() getcwd(NULL, PATH_MAX)
26 #endif
27
28 #ifndef get_current_dir_name
29 extern char * get_current_dir_name( void );
30 #endif
31
32 gchar * fsSelectedFile = NULL;
33 gchar * fsSelectedDirectory = NULL;
34 unsigned char * fsThatDir = ".";
35 gchar * fsFilter = NULL;
36
37 int fsPressed = 0;
38 int fsLastFilterNames = 2;
39 unsigned char * fsFilterNames[3][2] = { { "MPEG files( *.mpg )", "*.mpg" },
40 { "AVI files( *.avi )", "*.avi" },
41 { "All files( *)", "*" } };
42
43 GtkWidget * fsFileNamesList;
44 GtkWidget * fsFNameList;
45 GtkWidget * fsFileSelect;
46 GdkColormap * fsColorMap;
47 GtkWidget * fsOk;
48 GtkWidget * fsUp;
49 GtkWidget * fsCancel;
50 GtkWidget * fsCombo4;
51 GtkWidget * fsComboEntry2;
52 GList * fsList_items = NULL;
53 GList * fsTopList_items = NULL;
54
55 void CheckDir( GtkWidget * list,unsigned char * directory )
56 {
57 struct stat fs;
58 int i,c=2;
59 gchar * str[1][2];
60 GdkPixmap * dpixmap,*fpixmap,*pixmap;
61 GdkBitmap * dmask,*fmask,*mask;
62 GtkStyle * style;
63 glob_t gg;
64
65 gtk_widget_hide( list );
66 str[0][0]=NULL;
67 style=gtk_widget_get_style( fsFileSelect );
68 dpixmap=gdk_pixmap_colormap_create_from_xpm_d( fsFileSelect->window,fsColorMap,&dmask,&style->bg[GTK_STATE_NORMAL],(gchar **)dir_xpm );
69 fpixmap=gdk_pixmap_colormap_create_from_xpm_d( fsFileSelect->window,fsColorMap,&fmask,&style->bg[GTK_STATE_NORMAL],(gchar **)file_xpm );
70 pixmap=dpixmap; mask=dmask;
71 str[0][0]=NULL; str[0][1]=(gchar *)malloc( 3 );
72 strcpy( str[0][1],"." );
73 gtk_clist_append( GTK_CLIST( list ),str[0] ); gtk_clist_set_pixmap( GTK_CLIST( list ),0,0,pixmap,mask );
74 strcpy( str[0][1],".." );
75 gtk_clist_append( GTK_CLIST( list ),str[0] ); gtk_clist_set_pixmap( GTK_CLIST( list ),1,0,pixmap,mask );
76 free( str[0][0] );
77
78 glob( "*",GLOB_NOSORT,NULL,&gg );
79 // glob( ".*",GLOB_NOSORT | GLOB_APPEND,NULL,&gg );
80 for( i=0;i<gg.gl_pathc;i++ )
81 {
82 if( !strcmp( gg.gl_pathv[i],"." ) || !strcmp( gg.gl_pathv[i],".." ) ) continue;
83 stat( gg.gl_pathv[i],&fs );
84 if( S_ISDIR( fs.st_mode ) )
85 {
86 str[0][1]=(gchar *)malloc( strlen( gg.gl_pathv[i] ) + 2 );
87 strcpy( str[0][1],"" );
88 strcat( str[0][1],gg.gl_pathv[i] );
89 pixmap=dpixmap; mask=dmask;
90 gtk_clist_append( GTK_CLIST( list ),str[0] );
91 gtk_clist_set_pixmap( GTK_CLIST( list ),c,0,pixmap,mask );
92 free( str[0][1] );
93 c++;
94 }
95 }
96 globfree( &gg );
97 glob( fsFilter,GLOB_NOSORT,NULL,&gg );
98 // glob( ".*",GLOB_NOSORT | GLOB_APPEND,NULL,&gg );
99 pixmap=fpixmap; mask=fmask;
100 for( i=0;i<gg.gl_pathc;i++ )
101 {
102 if( !strcmp( gg.gl_pathv[i],"." ) || !strcmp( gg.gl_pathv[i],".." ) ) continue;
103 stat( gg.gl_pathv[i],&fs );
104 if( S_ISDIR( fs.st_mode ) ) continue;
105 str[0][1]=(gchar *)malloc( strlen( gg.gl_pathv[i] ) + 2 );
106 strcpy( str[0][1],"" ); strcat( str[0][1],gg.gl_pathv[i] );
107 gtk_clist_append( GTK_CLIST( list ),str[0] );
108 gtk_clist_set_pixmap( GTK_CLIST( list ),c,0,pixmap,mask );
109 free( str[0][1] );
110 c++;
111 }
112 globfree( &gg );
113
114 gtk_clist_set_sort_type( GTK_CLIST( list ),GTK_SORT_ASCENDING );
115 gtk_clist_set_compare_func( GTK_CLIST( list ),NULL );
116 gtk_clist_set_sort_column( GTK_CLIST( list ),1 );
117 gtk_clist_sort( GTK_CLIST( list ) );
118 gtk_clist_set_column_width( GTK_CLIST( list ),0,17 );
119 gtk_clist_select_row( GTK_CLIST( list ),0,1 );
120 gtk_widget_show( list );
121 }
122
123 void HideFileSelect( void )
124 {
125 gtk_widget_hide( fsFileSelect );
126 gtkVisibleFileSelect=0;
127 gtkShMem->vs.window=evLoad;
128 gtkSendMessage( evHideWindow );
129 }
130
131 void fs_fsFileSelect_destroy( GtkObject * object,gpointer user_data )
132 { HideFileSelect(); }
133
134 void fs_combo_entry1_activate( GtkEditable * editable,gpointer user_data )
135 {
136 unsigned char * str;
137
138 str=gtk_entry_get_text( GTK_ENTRY(user_data ) );
139 gtk_clist_clear( GTK_CLIST( fsFNameList ) );
140 if( fsFilter ) free( fsFilter );
141 if( ( fsFilter=(unsigned char *)malloc( strlen( str ) + 1 ) ) == NULL )
142 {
143 dbprintf( 0,"[gtk] not enough memory.\n" );
144 exit( 0 );
145 }
146 strcpy( fsFilter,str );
147 CheckDir( fsFNameList,(unsigned char *)get_current_dir_name() );
148 }
149
150 void fs_combo_entry1_changed( GtkEditable * editable,gpointer user_data )
151 {
152 unsigned char * str;
153 int i;
154
155 str=gtk_entry_get_text( GTK_ENTRY(user_data ) );
156
157 for( i=0;i<fsLastFilterNames+1;i++ )
158 {
159 if( !strcmp( str,fsFilterNames[i][0] ) )
160 {
161 if( fsFilter ) free( fsFilter );
162 if( ( fsFilter=(unsigned char *)malloc( 6 ) ) == NULL )
163 {
164 dbprintf( 0,"[gtk] not enough memory.\n" );
165 exit( 0 );
166 }
167 strcpy( fsFilter,fsFilterNames[i][1] );
168 }
169 }
170 gtk_clist_clear( GTK_CLIST( fsFNameList ) );
171 CheckDir( fsFNameList,(unsigned char *)get_current_dir_name() );
172 }
173
174 void fs_fsComboEntry2_activate( GtkEditable * editable,gpointer user_data )
175 {
176 unsigned char * str;
177
178 str=gtk_entry_get_text( GTK_ENTRY( user_data ) );
179 if ( chdir( str ) != -1 )
180 {
181 gtk_clist_clear( GTK_CLIST( fsFNameList ) );
182 CheckDir( fsFNameList,(unsigned char *)get_current_dir_name() );
183 }
184 }
185
186 void fs_fsComboEntry2_changed( GtkEditable * editable,gpointer user_data )
187 {
188 unsigned char * str;
189
190 str=gtk_entry_get_text( GTK_ENTRY( user_data ) );
191 fsPressed=2;
192 // if (
193 // tmp=(unsigned char *)malloc( strlen( fsSelectedDirectory ) + 5 );
194 // strcpy( tmp,fsSelectedDirectory ); strcat( tmp,"/*" );
195 // fprintf( stderr,"str: %s\n",tmp );
196 // free( tmp );
197 if ( chdir( str ) != -1 )
198 {
199 gtk_clist_clear( GTK_CLIST( fsFNameList ) );
200 CheckDir( fsFNameList,(unsigned char *)get_current_dir_name() );
201 }
202 }
203
204 void fs_Up_released( GtkButton * button,gpointer user_data )
205 {
206 chdir( ".." );
207 fsSelectedFile=fsThatDir;
208 gtk_clist_clear( GTK_CLIST( user_data ) );
209 CheckDir( fsFNameList,(unsigned char *)get_current_dir_name() );
210 gtk_entry_set_text( GTK_ENTRY( fsComboEntry2 ),(unsigned char *)get_current_dir_name() );
211 return;
212 }
213
214 int fsFileExist( unsigned char * fname )
215 {
216 FILE * f = fopen( fname,"r" );
217 if ( f == NULL ) return 0;
218 fclose( f );
219 return 1;
220 }
221
222 void fs_Ok_released( GtkButton * button,gpointer user_data )
223 {
224 unsigned char * str;
225 GList * item;
226 int size,j,i = 1;
227 struct stat fs;
228
229 stat( fsSelectedFile,&fs );
230 if( S_ISDIR(fs.st_mode ) )
231 {
232 chdir( fsSelectedFile );
233 fsSelectedFile=fsThatDir;
234 if( fsFNameList != NULL ) gtk_clist_clear( GTK_CLIST( fsFNameList ) );
235 CheckDir( fsFNameList,(unsigned char *)get_current_dir_name() );
236 gtk_entry_set_text( GTK_ENTRY( fsComboEntry2 ),(unsigned char *)get_current_dir_name() );
237 return;
238 }
239
240 HideFileSelect();
241
242 switch( fsPressed )
243 {
244 case 1:
245 fsSelectedDirectory=(unsigned char *)get_current_dir_name();
246 printf("[gtk-fs] 1-fsSelectedFile: %s\n",fsSelectedFile);
247 #ifdef DEBUG
248 dbprintf( 1,"[gtk-fs] fsSelectedFile: %s\n",fsSelectedFile );
249 #endif
250 break;
251 case 2:
252 str=gtk_entry_get_text( GTK_ENTRY( fsComboEntry2 ) );
253 fsSelectedFile=str;
254 printf("[gtk-fs] 2-fsSelectedFile: '%s' \n",fsSelectedFile);
255 #ifdef DEBUG
256 dbprintf( 1,"[gtk-fs] fsSelectedFile: %s\n",fsSelectedFile );
257 #endif
258 if ( !fsFileExist( fsSelectedFile ) ) return;
259 fsSelectedDirectory=fsSelectedFile;
260 size=strlen( fsSelectedDirectory );
261 for ( j=0;j<size;j++ )
262 {
263 if ( fsSelectedDirectory[ size - j ] == '/' )
264 {
265 fsSelectedFile+=size - j + 1;
266 fsSelectedDirectory[ size - j ]=0;
267 break;
268 }
269 }
270 printf("[gtk-fs-xxx] fsSelectedFile: '%s' \n",fsSelectedFile);
271 printf("[gtk-fs-xxx] fsSelectedDirectory: '%s' \n",fsSelectedDirectory);
272 break;
273 }
274 strcpy( gtkShMem->fs.dir,fsSelectedDirectory );
275 strcpy( gtkShMem->fs.filename,fsSelectedFile );
276 printf( "----gtk---> directory: %s\n",fsSelectedDirectory );
277 printf( "----gtk---> filename: %s\n",fsSelectedFile );
278 printf( "----gtksm-> directory: %s\n",gtkShMem->fs.dir );
279 printf( "----gtksm-> filename: %s\n",gtkShMem->fs.filename );
280 item=fsTopList_items;
281 while( item )
282 {
283 if ( !strcmp( item->data,fsSelectedDirectory ) ) i=0;
284 item=item->next;
285 }
286 if ( i )
287 {
288 fsTopList_items=g_list_prepend( fsTopList_items,(gchar *)get_current_dir_name() );
289 gtk_combo_set_popdown_strings( GTK_COMBO( user_data ),fsTopList_items );
290 }
291 gtkSendMessage( evFileLoaded );
292 }
293
294 void fs_Cancel_released( GtkButton * button,gpointer user_data )
295 { HideFileSelect(); }
296
297 void fs_fsFNameList_select_row( GtkWidget * widget,gint row,gint column,GdkEventButton *bevent,gpointer user_data )
298 {
299 gtk_clist_get_text( GTK_CLIST(widget ),row,1,&fsSelectedFile ); fsSelectedFile++;
300 fsPressed=1;
301 if( !bevent ) return;
302 if( bevent->type == GDK_2BUTTON_PRESS ) gtk_button_released( GTK_BUTTON( fsOk ) );
303 }
304
305 gboolean on_FileSelect_key_release_event( GtkWidget * widget,GdkEventKey * event,gpointer user_data )
306 {
307 switch ( event->keyval )
308 {
309 case GDK_Escape:
310 gtk_button_released( GTK_BUTTON( fsCancel ) );
311 break;
312 case GDK_Return:
313 gtk_button_released( GTK_BUTTON( fsOk ) );
314 break;
315 case GDK_BackSpace:
316 gtk_button_released( GTK_BUTTON( fsUp ) );
317 break;
318 }
319 return FALSE;
320 }
321
322 GtkWidget * create_FileSelect( void )
323 {
324 GtkWidget * FSFrame;
325 GtkWidget * frame2;
326 GtkWidget * frame3;
327 GtkWidget * frame4;
328 GtkWidget * vbox4;
329 GtkWidget * hbox4;
330 GtkWidget * vseparator1;
331 GtkWidget * hseparator1;
332 GtkWidget * hbox6;
333 GtkWidget * fsFNameListWindow;
334 GtkWidget * label1;
335 GtkWidget * hseparator2;
336 GtkWidget * List;
337 GtkWidget * combo_entry1;
338 GtkWidget * hseparator3;
339 GtkWidget * hbuttonbox3;
340 int i;
341
342 // GtkWidget * okpixmapwid,*uppixmapwid,*cancelpixmapwid;
343 // GdkPixmap * okpixmap,*uppixmap,*cancelpixmap;
344 // GdkBitmap * okmask,*upmask,*cancelmask;
345 // GtkStyle * okstyle,*upstyle,*cancelstyle;
346
347 GtkWidget * uppixmapwid;
348 GdkPixmap * uppixmap;
349 GdkBitmap * upmask;
350 GtkStyle * upstyle;
351
352 if( ( fsFilter=(unsigned char *)malloc( 3 ) ) == NULL )
353 {
354 dbprintf( 0,"[gtk] not enough memory.\n" );
355 exit( 0 );
356 }
357 strcpy( fsFilter,"*" );
358
359 fsFileSelect=gtk_window_new( GTK_WINDOW_DIALOG );
360 gtk_widget_set_name( fsFileSelect,"fsFileSelect" );
361 gtk_object_set_data( GTK_OBJECT( fsFileSelect ),"fsFileSelect",fsFileSelect );
362 gtk_widget_set_usize( fsFileSelect,416,256 );
363 GTK_WIDGET_SET_FLAGS( fsFileSelect,GTK_CAN_DEFAULT );
364 gtk_widget_set_events( fsFileSelect,GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_FOCUS_CHANGE_MASK | GDK_STRUCTURE_MASK | GDK_PROPERTY_CHANGE_MASK | GDK_VISIBILITY_NOTIFY_MASK );
365 gtk_window_set_title( GTK_WINDOW( fsFileSelect ),MSGTR_FileSelect );
366 gtk_window_set_position( GTK_WINDOW( fsFileSelect ),GTK_WIN_POS_CENTER );
367 gtk_window_set_policy( GTK_WINDOW( fsFileSelect ),FALSE,FALSE,TRUE );
368 fsColorMap=gdk_colormap_get_system();
369
370 FSFrame=gtk_frame_new( NULL );
371 gtk_widget_set_name( FSFrame,"FSFrame" );
372 gtk_widget_ref( FSFrame );
373 gtk_object_set_data_full( GTK_OBJECT( fsFileSelect ),"FSFrame",FSFrame,
374 ( GtkDestroyNotify ) gtk_widget_unref );
375 gtk_widget_show( FSFrame );
376 gtk_container_add( GTK_CONTAINER( fsFileSelect ),FSFrame );
377 gtk_container_set_border_width( GTK_CONTAINER( FSFrame ),1 );
378 gtk_frame_set_shadow_type( GTK_FRAME( FSFrame ),GTK_SHADOW_IN );
379
380 frame2=gtk_frame_new( NULL );
381 gtk_widget_set_name( frame2,"frame2" );
382 gtk_widget_ref( frame2 );
383 gtk_object_set_data_full( GTK_OBJECT( fsFileSelect ),"frame2",frame2,
384 ( GtkDestroyNotify ) gtk_widget_unref );
385 gtk_widget_show( frame2 );
386 gtk_container_add( GTK_CONTAINER( FSFrame ),frame2 );
387 gtk_frame_set_shadow_type( GTK_FRAME( frame2 ),GTK_SHADOW_NONE );
388
389 frame3=gtk_frame_new( NULL );
390 gtk_widget_set_name( frame3,"frame3" );
391 gtk_widget_ref( frame3 );
392 gtk_object_set_data_full( GTK_OBJECT( fsFileSelect ),"frame3",frame3,
393 ( GtkDestroyNotify ) gtk_widget_unref );
394 gtk_widget_show( frame3 );
395 gtk_container_add( GTK_CONTAINER( frame2 ),frame3 );
396 gtk_frame_set_shadow_type( GTK_FRAME( frame3 ),GTK_SHADOW_ETCHED_OUT );
397
398 frame4=gtk_frame_new( NULL );
399 gtk_widget_set_name( frame4,"frame4" );
400 gtk_widget_ref( frame4 );
401 gtk_object_set_data_full( GTK_OBJECT( fsFileSelect ),"frame4",frame4,
402 ( GtkDestroyNotify ) gtk_widget_unref );
403 gtk_widget_show( frame4 );
404 gtk_container_add( GTK_CONTAINER( frame3 ),frame4 );
405 gtk_container_set_border_width( GTK_CONTAINER( frame4 ),1 );
406 gtk_frame_set_shadow_type( GTK_FRAME( frame4 ),GTK_SHADOW_NONE );
407
408 vbox4=gtk_vbox_new( FALSE,0 );
409 gtk_widget_set_name( vbox4,"vbox4" );
410 gtk_widget_ref( vbox4 );
411 gtk_object_set_data_full( GTK_OBJECT( fsFileSelect ),"vbox4",vbox4,
412 ( GtkDestroyNotify ) gtk_widget_unref );
413 gtk_widget_show( vbox4 );
414 gtk_container_add( GTK_CONTAINER( frame4 ),vbox4 );
415
416 hbox4=gtk_hbox_new( FALSE,0 );
417 gtk_widget_set_name( hbox4,"hbox4" );
418 gtk_widget_ref( hbox4 );
419 gtk_object_set_data_full( GTK_OBJECT( fsFileSelect ),"hbox4",hbox4,
420 ( GtkDestroyNotify ) gtk_widget_unref );
421 gtk_widget_show( hbox4 );
422 gtk_box_pack_start( GTK_BOX( vbox4 ),hbox4,TRUE,TRUE,0 );
423
424 fsCombo4=gtk_combo_new();
425 gtk_widget_set_name( fsCombo4,"fsCombo4" );
426 gtk_widget_ref( fsCombo4 );
427 gtk_object_set_data_full( GTK_OBJECT( fsFileSelect ),"fsCombo4",fsCombo4,
428 ( GtkDestroyNotify ) gtk_widget_unref );
429 gtk_widget_show( fsCombo4 );
430 gtk_box_pack_start( GTK_BOX( hbox4 ),fsCombo4,TRUE,TRUE,0 );
431 gtk_widget_set_usize( fsCombo4,-2,20 );
432
433 fsTopList_items=g_list_append( fsTopList_items,(gchar *)get_current_dir_name() );
434 if ( getenv( "HOME" ) ) fsTopList_items=g_list_append( fsTopList_items,getenv( "HOME" ) );
435 fsTopList_items=g_list_append( fsTopList_items,"/home" );
436 fsTopList_items=g_list_append( fsTopList_items,"/mnt" );
437 fsTopList_items=g_list_append( fsTopList_items,"/" );
438 gtk_combo_set_popdown_strings( GTK_COMBO( fsCombo4 ),fsTopList_items );
439
440 fsComboEntry2=GTK_COMBO( fsCombo4 )->entry;
441 gtk_widget_set_name( fsComboEntry2,"fsComboEntry2" );
442 gtk_widget_ref( fsComboEntry2 );
443 gtk_object_set_data_full( GTK_OBJECT( fsFileSelect ),"fsComboEntry2",fsComboEntry2,( GtkDestroyNotify ) gtk_widget_unref );
444 gtk_widget_show( fsComboEntry2 );
445 gtk_widget_set_usize( fsComboEntry2,-2,20 );
446
447 vseparator1=gtk_vseparator_new();
448 gtk_widget_set_name( vseparator1,"vseparator1" );
449 gtk_widget_ref( vseparator1 );
450 gtk_object_set_data_full( GTK_OBJECT( fsFileSelect ),"vseparator1",vseparator1,
451 ( GtkDestroyNotify ) gtk_widget_unref );
452 gtk_widget_show( vseparator1 );
453 gtk_box_pack_start( GTK_BOX( hbox4 ),vseparator1,FALSE,TRUE,0 );
454 gtk_widget_set_usize( vseparator1,7,20 );
455
456 upstyle=gtk_widget_get_style( fsFileSelect );
457 uppixmap=gdk_pixmap_colormap_create_from_xpm_d( fsFileSelect->window,fsColorMap,&upmask,&upstyle->bg[GTK_STATE_NORMAL],(gchar **)up_xpm );
458 uppixmapwid=gtk_pixmap_new( uppixmap,upmask );
459 gtk_widget_show( uppixmapwid );
460
461 fsUp=gtk_button_new();
462 gtk_container_add( GTK_CONTAINER(fsUp ),uppixmapwid );
463 gtk_widget_show( fsUp );
464 gtk_box_pack_start( GTK_BOX( hbox4 ),fsUp,FALSE,FALSE,0 );
465 gtk_widget_set_usize( fsUp,65,15 );
466
467 hseparator1=gtk_hseparator_new();
468 gtk_widget_set_name( hseparator1,"hseparator1" );
469 gtk_widget_ref( hseparator1 );
470 gtk_object_set_data_full( GTK_OBJECT( fsFileSelect ),"hseparator1",hseparator1,
471 ( GtkDestroyNotify ) gtk_widget_unref );
472 gtk_widget_show( hseparator1 );
473 gtk_box_pack_start( GTK_BOX( vbox4 ),hseparator1,FALSE,TRUE,0 );
474 gtk_widget_set_usize( hseparator1,-2,8 );
475
476 hbox6=gtk_hbox_new( FALSE,0 );
477 gtk_widget_set_name( hbox6,"hbox6" );
478 gtk_widget_ref( hbox6 );
479 gtk_object_set_data_full( GTK_OBJECT( fsFileSelect ),"hbox6",hbox6,
480 ( GtkDestroyNotify ) gtk_widget_unref );
481 gtk_widget_show( hbox6 );
482 gtk_box_pack_start( GTK_BOX( vbox4 ),hbox6,TRUE,TRUE,0 );
483
484 fsFNameListWindow=gtk_scrolled_window_new( NULL,NULL );
485 gtk_widget_set_name( fsFNameListWindow,"fsFNameListWindow" );
486 gtk_widget_ref( fsFNameListWindow );
487 gtk_object_set_data_full( GTK_OBJECT( fsFileSelect ),"fsFNameListWindow",fsFNameListWindow,
488 ( GtkDestroyNotify ) gtk_widget_unref );
489 gtk_widget_show( fsFNameListWindow );
490 gtk_box_pack_start( GTK_BOX( hbox6 ),fsFNameListWindow,TRUE,TRUE,0 );
491 gtk_widget_set_usize( fsFNameListWindow,-2,145 );
492 gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( fsFNameListWindow ),GTK_POLICY_NEVER,GTK_POLICY_AUTOMATIC );
493
494 fsFNameList=gtk_clist_new( 2 );
495 gtk_widget_set_name( fsFNameList,"fsFNameList" );
496 gtk_widget_ref( fsFNameList );
497 gtk_object_set_data_full( GTK_OBJECT( fsFileSelect ),"fsFNameList",fsFNameList,
498 ( GtkDestroyNotify ) gtk_widget_unref );
499 gtk_container_add( GTK_CONTAINER( fsFNameListWindow ),fsFNameList );
500 gtk_clist_set_column_width( GTK_CLIST( fsFNameList ),0,80 );
501 gtk_clist_set_selection_mode( GTK_CLIST( fsFNameList ),GTK_SELECTION_BROWSE );
502 gtk_clist_column_titles_hide( GTK_CLIST( fsFNameList ) );
503 gtk_clist_set_shadow_type( GTK_CLIST( fsFNameList ),GTK_SHADOW_ETCHED_OUT );
504 CheckDir( fsFNameList,(unsigned char *)get_current_dir_name() );
505
506 label1=gtk_label_new( "label1" );
507 gtk_widget_set_name( label1,"label1" );
508 gtk_widget_ref( label1 );
509 gtk_object_set_data_full( GTK_OBJECT( fsFileSelect ),"label1",label1,
510 ( GtkDestroyNotify ) gtk_widget_unref );
511 gtk_widget_show( label1 );
512 gtk_clist_set_column_widget( GTK_CLIST( fsFNameList ),0,label1 );
513
514 hseparator2=gtk_hseparator_new();
515 gtk_widget_set_name( hseparator2,"hseparator2" );
516 gtk_widget_ref( hseparator2 );
517 gtk_object_set_data_full( GTK_OBJECT( fsFileSelect ),"hseparator2",hseparator2,
518 ( GtkDestroyNotify ) gtk_widget_unref );
519 gtk_widget_show( hseparator2 );
520 gtk_box_pack_start( GTK_BOX( vbox4 ),hseparator2,FALSE,TRUE,0 );
521 gtk_widget_set_usize( hseparator2,-2,9 );
522
523 List=gtk_combo_new();
524 gtk_widget_set_name( List,"List" );
525 gtk_widget_ref( List );
526 gtk_object_set_data_full( GTK_OBJECT( fsFileSelect ),"List",List,
527 ( GtkDestroyNotify ) gtk_widget_unref );
528 gtk_widget_show( List );
529 gtk_box_pack_start( GTK_BOX( vbox4 ),List,FALSE,FALSE,0 );
530 gtk_widget_set_usize( List,-2,20 );
531 fsList_items=NULL;
532 for( i=0;i<fsLastFilterNames + 1;i++ )
533 fsList_items=g_list_append( fsList_items,fsFilterNames[i][0] );
534 gtk_combo_set_popdown_strings( GTK_COMBO( List ),fsList_items );
535 g_list_free( fsList_items );
536
537 combo_entry1=GTK_COMBO( List )->entry;
538 gtk_widget_set_name( combo_entry1,"combo_entry1" );
539 gtk_widget_ref( combo_entry1 );
540 gtk_object_set_data_full( GTK_OBJECT( fsFileSelect ),"combo_entry1",combo_entry1,
541 ( GtkDestroyNotify ) gtk_widget_unref );
542 gtk_widget_show( combo_entry1 );
543 gtk_entry_set_text( GTK_ENTRY( combo_entry1 ),fsFilterNames[fsLastFilterNames][0] );
544
545 hseparator3=gtk_hseparator_new();
546 gtk_widget_set_name( hseparator3,"hseparator3" );
547 gtk_widget_ref( hseparator3 );
548 gtk_object_set_data_full( GTK_OBJECT( fsFileSelect ),"hseparator3",hseparator3,
549 ( GtkDestroyNotify ) gtk_widget_unref );
550 gtk_widget_show( hseparator3 );
551 gtk_box_pack_start( GTK_BOX( vbox4 ),hseparator3,FALSE,TRUE,0 );
552 gtk_widget_set_usize( hseparator3,-2,7 );
553
554 hbuttonbox3=gtk_hbutton_box_new();
555 gtk_widget_set_name( hbuttonbox3,"hbuttonbox3" );
556 gtk_widget_ref( hbuttonbox3 );
557 gtk_object_set_data_full( GTK_OBJECT( fsFileSelect ),"hbuttonbox3",hbuttonbox3,
558 ( GtkDestroyNotify ) gtk_widget_unref );
559 gtk_widget_show( hbuttonbox3 );
560 gtk_box_pack_start( GTK_BOX( vbox4 ),hbuttonbox3,FALSE,TRUE,0 );
561 gtk_button_box_set_layout( GTK_BUTTON_BOX( hbuttonbox3 ),GTK_BUTTONBOX_END );
562 gtk_button_box_set_spacing( GTK_BUTTON_BOX( hbuttonbox3 ),10 );
563 gtk_button_box_set_child_size( GTK_BUTTON_BOX( hbuttonbox3 ),85,20 );
564 gtk_button_box_set_child_ipadding( GTK_BUTTON_BOX( hbuttonbox3 ),0,0 );
565
566 // okstyle=gtk_widget_get_style( fsFileSelect );
567 // okpixmap=gdk_pixmap_colormap_create_from_xpm_d( fsFileSelect->window,fsColorMap,&okmask,&okstyle->bg[GTK_STATE_NORMAL],(gchar **)ok_xpm );
568 // okpixmapwid=gtk_pixmap_new( okpixmap,okmask );
569 // gtk_widget_show( okpixmapwid );
570 // fsOk=gtk_button_new();
571 // gtk_container_add( GTK_CONTAINER(fsOk ),okpixmapwid );
572 // gtk_container_add( GTK_CONTAINER( hbuttonbox3 ),fsOk );
573 // gtk_widget_show( fsOk );
574
575 fsOk=gtk_button_new_with_label( MSGTR_Ok );
576 gtk_widget_set_name( fsOk,MSGTR_Ok );
577 gtk_widget_ref( fsOk );
578 gtk_object_set_data_full( GTK_OBJECT( fsFileSelect ),MSGTR_Ok,fsOk,( GtkDestroyNotify )gtk_widget_unref );
579 gtk_container_add( GTK_CONTAINER( hbuttonbox3 ),fsOk );
580 gtk_widget_show( fsOk );
581
582 // cancelstyle=gtk_widget_get_style( fsFileSelect );
583 // cancelpixmap=gdk_pixmap_colormap_create_from_xpm_d( fsFileSelect->window,fsColorMap,&cancelmask,&cancelstyle->bg[GTK_STATE_NORMAL],(gchar **)cancel_xpm );
584 // cancelpixmapwid=gtk_pixmap_new( cancelpixmap,cancelmask );
585 // gtk_widget_show( cancelpixmapwid );
586 // fsCancel=gtk_button_new();
587 // gtk_widget_show( fsCancel );
588 // gtk_container_add( GTK_CONTAINER( fsCancel ),cancelpixmapwid );
589 // gtk_container_add( GTK_CONTAINER( hbuttonbox3 ),fsCancel );
590 // gtk_widget_show( fsCancel );
591
592 fsCancel=gtk_button_new_with_label( MSGTR_Cancel );
593 gtk_widget_set_name( fsCancel,MSGTR_Cancel );
594 gtk_widget_ref( fsCancel );
595 gtk_object_set_data_full( GTK_OBJECT( fsFileSelect ),MSGTR_Cancel,fsCancel,( GtkDestroyNotify )gtk_widget_unref );
596 gtk_container_add( GTK_CONTAINER( hbuttonbox3 ),fsCancel );
597 gtk_widget_show( fsCancel );
598
599 gtk_signal_connect( GTK_OBJECT( fsFileSelect ),"destroy",
600 GTK_SIGNAL_FUNC( fs_fsFileSelect_destroy ),
601 NULL );
602 gtk_signal_connect( GTK_OBJECT( fsFileSelect ),"key_release_event",
603 GTK_SIGNAL_FUNC( on_FileSelect_key_release_event ),
604 NULL );
605 gtk_signal_connect( GTK_OBJECT( combo_entry1 ),"changed",
606 GTK_SIGNAL_FUNC( fs_combo_entry1_changed ),
607 combo_entry1 );
608 gtk_signal_connect( GTK_OBJECT( combo_entry1 ),"activate",
609 GTK_SIGNAL_FUNC( fs_combo_entry1_activate ),
610 combo_entry1 );
611 gtk_signal_connect( GTK_OBJECT( fsComboEntry2 ),"changed",
612 GTK_SIGNAL_FUNC( fs_fsComboEntry2_changed ),
613 fsComboEntry2 );
614 gtk_signal_connect( GTK_OBJECT( fsComboEntry2 ),"activate",
615 GTK_SIGNAL_FUNC( fs_fsComboEntry2_activate ),
616 fsComboEntry2 );
617 gtk_signal_connect( GTK_OBJECT( fsUp ),"released",
618 GTK_SIGNAL_FUNC( fs_Up_released ),
619 fsFNameList );
620 gtk_signal_connect( GTK_OBJECT( fsOk ),"released",
621 GTK_SIGNAL_FUNC( fs_Ok_released ),
622 fsCombo4 );
623 gtk_signal_connect( GTK_OBJECT( fsCancel ),"released",
624 GTK_SIGNAL_FUNC( fs_Cancel_released ),
625 NULL );
626
627 gtk_signal_connect( GTK_OBJECT( fsFNameList ),"select_row",
628 ( GtkSignalFunc ) fs_fsFNameList_select_row,
629 NULL );
630
631 gtk_widget_grab_focus( fsFNameList );
632
633 return fsFileSelect;
634 }
635