1
/*------------------------------------------------------------------------
3
* Copyright (C) 2001 Enpc/Jean-Philippe Chancelier
5
--------------------------------------------------------------------------*/
16
#include "men_scilab.h"
18
extern void C2F(cvstr)();
20
/*--------------------------------------------------------------
21
* Gtk version for scilab file selection
23
*--------------------------------------------------------------*/
25
typedef enum { OK, CANCEL , DESTROY, RESET } state;
27
static void file_selection_ok (GtkWidget *w, state *rep)
33
static void file_selection_destroy (GtkWidget *w, state *rep)
39
static void file_selection_cancel (GtkWidget *w, state *rep)
45
/* XXXX reste a rajouter un bouton home et un bouton SCI
46
* Il faut aussi expanser les dirname ? SCI HOME etc....
49
int GetFileWindow(char *filemask,char **file,char *dirname,
50
int flag,int *ierr,char *title)
52
return sci_get_file_window(filemask,file,dirname,flag,0,ierr,title);
56
int sci_get_file_window(char *filemask,char **file,char *dirname,
57
int flag,int action,int *ierr,char *title)
59
static int last_choice = 0;
60
GList *cbitems = NULL;
62
static int n_actions = 4 ;
63
static char *actions[]={ "getf","exec","load","chdir",NULL };
69
start_sci_gtk(); /* in case gtk was not initialized */
71
window = gtk_file_selection_new (title);
73
if ( strcmp(dirname,".") == 0)
74
gtk_file_selection_set_filename (GTK_FILE_SELECTION (window),"./");
76
gtk_file_selection_set_filename (GTK_FILE_SELECTION (window),dirname);
77
gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
82
for (j = 0; j < n_actions ; ++j)
83
cbitems = g_list_append(cbitems, actions[j]);
84
combo = gtk_combo_new ();
85
gtk_combo_set_popdown_strings (GTK_COMBO (combo), cbitems);
86
gtk_entry_set_text (GTK_ENTRY (GTK_COMBO(combo)->entry),
87
actions[last_choice]);
88
gtk_entry_set_editable(GTK_ENTRY (GTK_COMBO(combo)->entry),FALSE);
90
gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
91
combo, FALSE, FALSE, 0);
92
gtk_widget_show (combo);
95
signals[0]=gtk_signal_connect (GTK_OBJECT (window), "destroy",
96
GTK_SIGNAL_FUNC(file_selection_destroy),
99
signals[1]=gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (window)->ok_button),
100
"clicked", GTK_SIGNAL_FUNC(file_selection_ok),
103
signals[2]=gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (window)->cancel_button),
104
"clicked", GTK_SIGNAL_FUNC(file_selection_cancel),
106
gtk_widget_show (window);
110
/* want to quit the gtk_main only when this getfile is achieved
112
if ( rep != RESET ) break;
117
char *loc = gtk_file_selection_get_filename(GTK_FILE_SELECTION(window));
122
entry_text = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(combo)->entry));
123
for (j = 0; j < n_actions ; ++j)
125
if ( strcmp(entry_text, actions[j]) == 0)
128
action_length = strlen(actions[j])+3;
133
/* Attention la taille doit correspondre � "%s('%s');" */
134
if (( *file = (char *) MALLOC((strlen(loc)+6+action_length)*sizeof(char))) == NULL)
136
Scistring("Malloc : running out of memory");
142
sprintf(*file,"%s('%s');",actions[last_choice],loc);
149
/* since here we are no more in a gtk_main we must disconnect signals
150
* before destroying widget window
152
if ( rep != DESTROY )
154
gtk_signal_disconnect(GTK_OBJECT(window),signals[0]);
155
gtk_signal_disconnect(GTK_OBJECT (GTK_FILE_SELECTION (window)->ok_button),signals[1]);
156
gtk_signal_disconnect(GTK_OBJECT (GTK_FILE_SELECTION (window)->cancel_button),signals[2]);
157
gtk_widget_destroy(window);
159
return (rep == OK) ? TRUE : FALSE ;