Programmation GTK2 en Pascal/GtkFileSelection
Programmation GTK2 en Pascal |
|
Présentation
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]Hiérarchie |
GObject └─GtkObject └─GtkWidget └─GtkContainer └─GtkBin └─GtkWindow └─GtkDialog └─GtkFileSelection |
Utilisation de base
[modifier | modifier le wikicode]Création
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]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 |