GTK+ par l'exemple


précédentsommairesuivant

VI. Choisir un fichier

VI-A. Aperçu

Image non disponible
Cliquez pour agrandir

VI-B. Utilisation d'un GtkFileChooserFile

Jusqu'à présent l'utilisateur n'avait pas le choix quant au fichier à ouvrir, heureusement GTK+ vient à notre aide grâce au widget GtkFileChooserFile qui est tout simplement une boîte de dialogue qui propose à l'utilisateur de sélectionner un fichier dans son arborescence disque.
Commençons par créer notre boîte de dialogue dans la fonction cb_open :

callback.c
Sélectionnez
void cb_open (GtkWidget *p_widget, gpointer user_data)
{
  GtkWidget *p_dialog = NULL;

  p_dialog = gtk_file_chooser_dialog_new ("Ouvrir un fichier", NULL,
                                          GTK_FILE_CHOOSER_ACTION_OPEN,
                                          GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
                                          GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
                                          NULL);
  /* ... */
}

Cette fonction nécessite le titre de la boîte de dialogue, une fenêtre parente, le type d'action (ici, on souhaite ouvrir un fichier, GTK+ autorisera l'utilisateur à sélectionner uniquement les fichiers existants). Pour finir, il s'agit d'un couple de valeurs GTK_STOCK_ITEM/GTK_STOCK_RESPONSE qui permet de créer un bouton utilisant le stock ID spécifié et, lorsque celui-ci est cliqué, la fonction servant à lancer la boîte de dialogue retournera le réponse ID correspondant. Il existe une série de valeurs définies par GTK+, qu'il est conseillé d'utiliser :

 
Sélectionnez
typedef enum
{
  /* GTK returns this if a response widget has no response_id,
   * or if the dialog gets programmatically hidden or destroyed.
   */
  GTK_RESPONSE_NONE = -1,

  /* GTK won't return these unless you pass them in
   * as the response for an action widget. They are
   * for your convenience.
   */
  GTK_RESPONSE_REJECT = -2,
  GTK_RESPONSE_ACCEPT = -3,

  /* If the dialog is deleted. */
  GTK_RESPONSE_DELETE_EVENT = -4,

  /* These are returned from GTK dialogs, and you can also use them
   * yourself if you like.
   */
  GTK_RESPONSE_OK     = -5,
  GTK_RESPONSE_CANCEL = -6,
  GTK_RESPONSE_CLOSE  = -7,
  GTK_RESPONSE_YES    = -8,
  GTK_RESPONSE_NO     = -9,
  GTK_RESPONSE_APPLY  = -10,
  GTK_RESPONSE_HELP   = -11
} GtkResponseType;

Nous indiquons la fin des couples stock id/réponse id avec la valeur NULL.
Une fois la boîte de dialogue créee, on demande à GTK+ de l'afficher grâce à la fonction gtk_dialog_run, puis on récupère sa valeur de retour, qui correspond au bouton cliqué par l'utilisateur :

callback.c
Sélectionnez
  if (gtk_dialog_run (GTK_DIALOG (p_dialog)) == GTK_RESPONSE_ACCEPT)
  {
    /* ... */
  }

Ici ce qui nous intéresse, c'est lorsque que l'utilisateur clique sur le bouton ouvrir (donc gtk_dialog_run renvoie GTK_RESPONSE_ACCEPT), dans ce cas, il nous suffit de récupérer le nom du fichier sélectionné puis de l'ouvrir :

callback.c
Sélectionnez
    gchar *file_name = NULL;

    file_name = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (p_dialog));
    open_file (file_name, GTK_TEXT_VIEW (user_data));
    g_free (file_name), file_name = NULL;

Pour finir, dans tous les cas, on n'oublie pas de détruire la boîte de dialogue :

callback.c
Sélectionnez
  gtk_widget_destroy (p_dialog);

Et voilà le travail : l'utilisateur peut ouvrir le fichier qu'il souhaite.

VI-C. Code source


précédentsommairesuivant

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2006-2008 Nicolas Joseph. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.