IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

GTK+ par l'exemple


précédentsommairesuivant

XV. Messages d'erreur

XV-A. Aperçu

Image non disponible
Cliquez pour agrandir

XV-B. Amélioration de nos fonctions d'affichage d'erreur

Jusqu'à présent les messages d'erreurs étaient affichés à l'aide de la fonction printf, mais cela oblige l'utilisateur à lancer le programme dans une console, pas très conviviale. Encore une fois GTK+ vient à notre secours en proposant une classe GtkMessageDialog qui nous permet d'afficher un message simplement, sans avoir à créer une boîte de dialogue en partant de zéro.
Voici la fonction qui nous permet de créer notre boîte de dialogue :

 
Sélectionnez
GtkWidget *gtk_message_dialog_new (GtkWindow *parent, GtkDialogFlags flags, GtkMessageType type, GtkButtonsType buttons,
                                   const gchar *message_format, ...);

Donc nous avons besoin de notre fenêtre principale, pour cela il suffit d'inclure document.h, comme l'utilisateur doit d'abord valider notre message avant de continuer à utiliser l'éditeur, nous allons la rendre modale grâce à la constante GTK_DIALOG_MODAL. Ensuite vient le type de message, cela va dépendre de la fonction appelée (GTK_MESSAGE_INFO, GTK_MESSAGE_WARNING ou GTK_MESSAGE_ERROR). Le seul bouton dont l'utilisateur a besoin est le bouton OK pour fermer la boîte de dialogue (GTK_BUTTONS_OK) et pour finir, la fonction attend le message à afficher (sous la même forme que la fonction printf).
Comme seuls le type de message et le message vont changer selon la fonction print_* appelée, une nouvelle fonction est la bienvenue :

error.c
Sélectionnez
static void print_message (GtkMessageType type, const gchar *format, va_list va)
{
  gchar *message = NULL;
  GtkWidget *p_dialog = NULL;

  message = g_strdup_vprintf (format, va);
  p_dialog = gtk_message_dialog_new (docs.p_main_window, GTK_DIALOG_MODAL, type, GTK_BUTTONS_OK, message);
  g_free (message), message = NULL;
  gtk_dialog_run (GTK_DIALOG (p_dialog));
  gtk_widget_destroy (p_dialog);
}

Les fonctions de la famille de g_strdup_printf sont extrêmement intéressantes puisqu'elles permettent de créer une nouvelle chaîne de caractères en utilisant la puissance des fonctions de la famille de printf (Voici un exemple d'implémentation de ce genre de fonction : Créer une chaîne de caractères formatée).
Il nous reste plus qu'à modifier nos trois fonctions d'affichage de message, voici l'exemple pour print_info :

error.c
Sélectionnez
void print_info (char *format, ...)
{
  va_list va;

  va_start (va, format);
  print_message (GTK_MESSAGE_INFO, format, va);
}

En C99, avec les macros à nombres variables, nous pourrions remplacer nos fonctions par des macros :

 
Sélectionnez
#define print_info(chat *format, ...) print_message (GTK_MESSAGE_INFO, (format), __VA_ARGS__)

XV-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 ni 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.