| Programmation GTK2 en Pascal |
|
Présentation
Le contrôle GtkFileSelection est une boîte de dialogue qui permet de demander à l'utilisateur de sélectionner un fichier particulier. Ce contrôle ne s'occupe de la récupération du nom du fichier.
Hiérarchie
| Hiérarchie |
GObject
└─GtkObject
└─GtkWidget
└─GtkContainer
└─GtkBin
└─GtkWindow
└─GtkDialog
└─GtkFileSelection |
Utilisation de base
Création
La fonction de création est simple :
function gtk_file_selection_new(title : Pgchar) : PGtkWidget;
Le paramètre title est le titre de votre boîte de dialogue : vous pouvez ainsi l'appeler suivant vos besoins « Ouvrir... », « Sélectionner un fichier...», etc.
Affichage
Puisque ce nouveau contrôle dérive directement du contrôle GtkDialog, il nous suffit d'utiliser la fonction :
function gtk_dialog_run(dialog : PGtkDialog) : gint;
La valeur de retour est importante pour savoir si l'utilisateur a sélectionné un nom de fichier ou pas.
Récupération du nom de fichier
Encore une fois, nous allons utiliser les propriétés du contrôle GtkDialog. Si la valeur de retour de gtk_dialog_run est GTK_RESPONSE_OK, alors un nom de fichier a été sélectionné, et on peut donc récupérer sa valeur avec la fonction suivante :
function gtk_file_selection_get_filename(filesel : PGtkFileSelection) : Pgchar;
Le paramètre filesel doit être utilisé avec la fonction de conversion GTK_FILE_SELECTION. Attention, la valeur de retour n'est pas modifiable.
Pour toutes les autres valeurs de retour de la fonction gtk_dialog_run, cette fonction renverra le chemin complet du répertoire affiché au moment où l'utilisateur a annulé.
Initialisation du nom de fichier
Un nom de fichier peut être donné à la boîte de dialogue avant son affichage. Cela se fait avec la fonction :
procedure gtk_file_selection_set_filename(filesel : PGtkFileSelection; filename : Pgchar);
Programme exemple
Nous allons créer une fenêtre avec un bouton nous permettant d'ouvrir une GtkFileSelection. Une fois le fichier sélectionné, nous affichons son chemin dans un label de la fenêtre.
Voici le fichier gtk048.pas :
program gtk048;
uses glib2, gtk2;
procedure gtk_toolbar_insert(toolbar : PGtkToolbar; item : PGtkToolItem; pos : gint); cdecl;
external gtklib name 'gtk_toolbar_insert';
procedure OnToggleBtn(APWidget : PGtkwidget; AData : pgpointer); cdecl;
var
pSelectionFichier : PGtkwidget;
NomFichier : PGChar;
begin
// Création de la fenêtre de sélection
pSelectionFichier := gtk_file_selection_new('Ouvrir...');
// On limite les actions à cette fenêtre
gtk_window_set_modal(GTK_WINDOW(pSelectionFichier), TRUE);
// Affichage fenêtre
case gtk_dialog_run(GTK_DIALOG(pSelectionFichier)) of
GTK_RESPONSE_OK : begin
// Récuperation du chemin
NomFichier := gtk_file_selection_get_filename(GTK_FILE_SELECTION(pSelectionFichier));
gtk_label_set_label(GTK_LABEL(AData), NomFichier);
end;
end;
gtk_widget_destroy(pSelectionFichier);
end;
var
pFenetre : PGtkWidget;
pVBox : PGtkWidget;
pBarreOutils : PGtkWidget;
pBouton : PGtkToolItem;
pLabel : PGtkWidget;
begin
gtk_init(@argc, @argv);
pFenetre := gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(pFenetre), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(pFenetre), 320, 200);
gtk_window_set_title(GTK_WINDOW(pFenetre), 'Gtk048 : Sélection de fichiers');
gtk_signal_connect(pGTKOBJECT(pFenetre), 'destroy', G_CALLBACK(@gtk_main_quit), NULL);
// Création de la GtkVBox
pVBox := gtk_vbox_new(FALSE, 5);
gtk_container_add(GTK_CONTAINER(pFenetre), pVBox);
// Création de la barre d'outils
pBarreOutils := gtk_toolbar_new;
gtk_box_pack_start(GTK_BOX(pVBox), pBarreOutils, FALSE, FALSE, 0);
// Création du bouton ouvrir
pBouton := gtk_tool_button_new_from_stock(GTK_STOCK_OPEN);
gtk_toolbar_insert(GTK_TOOLBAR(pBarreOutils), pBouton, -1);
// Création du label
pLabel := gtk_label_new('Aucun fichier sélectionné.');
gtk_box_pack_start(GTK_BOX(pVBox), pLabel, FALSE, FALSE, 0);
// Signal du bouton
gtk_signal_connect(pGTKOBJECT(pBouton), 'clicked', G_CALLBACK(@OnToggleBtn), pLabel);
gtk_widget_show_all(pFenetre);
gtk_main;
end.
Voila ce que donne l'exécution du programme gtk048 :
La fenêtre principale s'affiche et on clique sur le bouton « Ouvrir », voilà la fenêtre de dialogue qui s'ouvre :

| Sélections : GtkFileSelection ~ GtkColorSelectionDialog |