Le widget sélection de fichier est un moyen simple et rapide pour
afficher un fichier dans une boîte de dialogue. Il est complet, avec
des boutons Ok, Annuler et Aide. C'est un bon moyen de raccourcir les
temps de programmation.
Pour créer une boîte de sélection de fichier, on utilise :
GtkWidget* gtk_file_selection_new (gchar *title);
Pour configurer le nom de fichier, par exemple pour aller dans un
répertoire précis ou donner un nom de fichier par défaut, on utilise
la fonction :
Des pointeurs permettent d'accéder aux widgets contenus dans la widget
de sélection de fichiers. Ce sont :
dir_list
file_list
selection_entry
selection_text
main_vbox
ok_button
cancel_button
help_button
Le plus souvent, on utilise les pointeurs ok_button, cancel_button, et
help_button pour préciser leurs utilisations.
Voici un exemple emprunté à testgtk.c et modifié pour fonctionner
tout seul. Comme vous le verrez, il n'y a pas grand chose à faire pour
créer un wigdget de sélection de fichier. Cependant, dans cet exemple,
si le bouton Aide apparaît à l'écran, il ne fait rien car aucun signal
ne lui est attaché.
#include <gtk/gtk.h>
/* Récupère le nom de fichier sélectionné et l'affiche sur la console. */
void file_ok_sel (GtkWidget *w, GtkFileSelection *fs)
{
g_print ("%s\n", gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)));
}
void destroy (GtkWidget *widget, gpointer *data)
{
gtk_main_quit ();
}
int main (int argc, char *argv[])
{
GtkWidget *filew;
gtk_init (&argc, &argv);
/* Création d'un widget de sélection de fichier. */
filew = gtk_file_selection_new ("File selection");
gtk_signal_connect (GTK_OBJECT (filew), "destroy",
(GtkSignalFunc) destroy, &filew);
/* Connexion de ok_button à la fonction file_ok_sel() */
gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filew)->ok_button),
"clicked", (GtkSignalFunc) file_ok_sel, filew );
/* Connexion de cancel_button pour détruire le widget */
gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (filew)->cancel_button),
"clicked", (GtkSignalFunc) gtk_widget_destroy,
GTK_OBJECT (filew));
/* Configuration du nom de fichier, comme s'il s'agissait d'un dialogue de
* sauvegarde et que nous donnions un nom de fichier par défaut. */
gtk_file_selection_set_filename (GTK_FILE_SELECTION(filew),
"penguin.png");
gtk_widget_show(filew);
gtk_main ();
return 0;
}