Programmation GTK2 en Pascal/GtkFileSelection

Un livre de Wikilivres.
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