Accueil
Accueil Le Club Delphi Kylix C C++ Java J2EE DotNET & C# Visual Basic Access Pascal Dev Web PHP ASP XML UML SQLSGBD Windows Linux Autres

GTK+ par l'exemple

Date de publication : 28 juin 2006




XV. Messages d'erreur
XV-A. Aperçu
XV-B. Amélioration de nos fonctions d'affichage d'erreur
XV-C. Code source


XV. Messages d'erreur


XV-A. Aperçu

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 :
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 seul le type de message et le message va changer selon la fonction print_* appelée, une nouvelle fonction est la bienvenue :
error.c
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
void print_info (char *format, ...)
{
  va_list va;

  va_start (va, format);
  print_message (GTK_MESSAGE_INFO, format, va);
}
idea En C99, avec les macro à nombres variables, nous pourrions remplacer nos fonctions par des macro :
#define print_info(chat *format, ...) print_message (GTK_MESSAGE_INFO, (format), __VA_ARGS__)

XV-C. Code source




 

Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©2006 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'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com