Tiré de GTK+ Reference Manual               

acryline 2007 Boosteur de petits projets

GtkDialog

GtkDialog — Créer une fenêtre popup

Synopsis




#include <gtk/gtk.h>
GtkDialog;
enum GtkDialogFlags;
enum GtkResponseType;
GtkWidget* gtk_dialog_new (void);
GtkWidget* gtk_dialog_new_with_buttons (const gchar *title,
GtkWindow *parent,
GtkDialogFlags flags,
const gchar *first_button_text,
...);
gint gtk_dialog_run (GtkDialog *dialog);
void gtk_dialog_response (GtkDialog *dialog,
gint response_id);
GtkWidget* gtk_dialog_add_button (GtkDialog *dialog,
const gchar *button_text,
gint response_id);
void gtk_dialog_add_buttons (GtkDialog *dialog,
const gchar *first_button_text,
...);
void gtk_dialog_add_action_widget (GtkDialog *dialog,
GtkWidget *child,
gint response_id);
gboolean gtk_dialog_get_has_separator (GtkDialog *dialog);
void gtk_dialog_set_default_response (GtkDialog *dialog,
gint response_id);
void gtk_dialog_set_has_separator (GtkDialog *dialog,
gboolean setting);
void gtk_dialog_set_response_sensitive (GtkDialog *dialog,
gint response_id,
gboolean setting);
gint gtk_dialog_get_response_for_widget (GtkDialog *dialog,
GtkWidget *widget);
gboolean gtk_alternative_dialog_button_order (GdkScreen *screen);
void gtk_dialog_set_alternative_button_order
(GtkDialog *dialog,
gint first_response_id,
...);
void gtk_dialog_set_alternative_button_order_from_array
(GtkDialog *dialog,
gint n_params,
gint *new_order);

Hiérarchie des objets

GObject
+----GInitiallyUnowned
+----GtkObject
+----GtkWidget
+----GtkContainer
+----GtkBin
+----GtkWindow
+----GtkDialog
+----GtkAboutDialog
+----GtkColorSelectionDialog
+----GtkFileChooserDialog
+----GtkFileSelection
+----GtkFontSelectionDialog
+----GtkInputDialog
+----GtkMessageDialog
+----GtkPageSetupUnixDialog
+----GtkPrintUnixDialog
+----GtkRecentChooserDialog

Interfaces utilés

GtkDialog implémente AtkImplementorIface.

Propriétés

"has-separator"			 gboolean :			 Lire / Ecrire

Propriétés du style

"action-area-border"		 gint :				Lire
"button-spacing" gint : Lire
"content-area-border" gint : Lire

Signaux

"close" :                                                                                                    Marche Fin/ Action
"response" :                                                     Marche Fin

Description

Les boîtes de dialogue sont une façon pratique  d'inciter l'utilisateur à entrer une petite information, d'afficher un message, de poser une question, tout ce qui ne requière pas d'importants efforts de la part de l'utilisateur.

GTK+ traîte la boîte de dialogue comme une fenêtre divisée en deux parties verticalement. La section supérieure est une GtkVBox, et c'est là que des widgets comme un GtkLabel ou un GtkEntry peuvent être placés. La partie inférieure est connu comme état l'air d'action action_area. Elle est  généralement  utilisée pour placer les boutons dans la boîte de dialogue pour permettre les fonctions telles que annuler, ok, ou appliquer. Les deux aires sont séparées pas un  GtkHSeparator.

Les boîtes   GtkDialog sont créées avec un appel de gtk_dialog_new() ou gtk_dialog_new_with_buttons(). gtk_dialog_new_with_buttons() est recommandé; elle vous  permet de définir le titre de la boîte de dialogue, quelques flags importants, et ajoute de simples boutons.

Si 'dialog" est un dialogue nouvellement créé, les deux aires de la fenêtre peuvent être consultées avec GTK_DIALOG(dialog)->vbox et GTK_DIALOG(dialog)->action_area, comme on peut l'observer dans l'exemple donné plus bas.

Un dialogue 'modal' (c'est un dialogue qui bloque le reste de l'application pendant la saisie par l'utilisateur), peut être créé en appelant gtk_window_set_modal() dans le dialogue. Utilisez la macro GTK_WINDOW() pour caster le widget retourné par  gtk_dialog_new() dans un GtkWindow. Quand vous utilisez  gtk_dialog_new_with_buttons() vous pouvez aussi passer le flag  GTK_DIALOG_MODAL pour créer un dialogue modal.

Si vous ajoutez des boutons à GtkDialog en utilisant  gtk_dialog_new_with_buttons(), gtk_dialog_add_button(), gtk_dialog_add_buttons(), ou gtk_dialog_add_action_widget(), clique sur le bouton émettra un signal appelé "réponse" avec un ID réponse que vous alez déterminer. GTK+ n'assignera jamais de signification à un ID réponse positif; cela est définit entièrement par l'utilisateur. Mais par commodité, vous pouvez employer les identifications de réponse dans l'énumération  GtkResponseType  (elles ont toutes des valeurs inférieures à zéro). Si un dialogue reçoit un événement de suppréssion, le sigal "réponse" sera émis par un identifiant de réponse de GTK_RESPONSE_DELETE_EVENT.

Si vous voulez bloquer l'attente pour qu'un dialogue retourne avant returning control flow to your code, vous pouvez appeler gtk_dialog_run(). Cette fonction entre une boucle  principale récursive  et attends que l'utilisateur réponde au dialogue, puis elle retourne l'indentifiant de réponse correspondant  au bouton sur lequel l'utilisateur a cliqué.

Pour le dialogue simple de l'exemple qui suit, dans la réalité vous utiliseriez probablement GtkMessageDialog pour économiser quelques efforts. Mais vous devez créer le contenu du dialogue manuellement si vous voulez afficher plus qu'un simple message dans votre boîte de dialogue.

Exemple 1. Utilisation d'un simple GtkDialog.




/*Fonction pour ouvrir une boîte de dialogue qui affiche un message  */

void quick_message (gchar *message) {
GtkWidget *dialog, *label;

/* Créer les widgets */
dialog = gtk_dialog_new_with_buttons ("Message",
main_application_window,
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_OK,
GTK_RESPONSE_NONE,
NULL);
label = gtk_label_new (message);

/* S'assurer que la boîte de dialogue est détruite quand l'utilisateur a répondu. */
g_signal_connect_swapped (dialog,
"response", G_CALLBACK (gtk_widget_destroy),
dialog);

/*Ajouter le label, et afficher tout ce qui a été ajouté à la boîte de dialogue. */
gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox),
label);
gtk_widget_show_all (dialog);
}

Details

GtkDialog


typedef struct 
{
GtkWidget *vbox;
GtkWidget *action_area;
} GtkDialog;

vbox est un GtkVBox - la partie principale de la boîte de dialogue.

action_area est un GtkHButtonBox placé après le séparateur  GtkHSeparator dans ledialogue. Il est traité exactement pareil que n'importe quel GtkHButtonBox.


enum GtkDialogFlags


typedef enum
{
GTK_DIALOG_MODAL = 1 << 0, /* appelle gtk_window_set_modal (win, TRUE) */
GTK_DIALOG_DESTROY_WITH_PARENT = 1 << 1, /* appelle gtk_window_set_destroy_with_parent () */
GTK_DIALOG_NO_SEPARATOR = 1 << 2 /* pas de séparateur au dessus des boutons */
} GtkDialogFlags;
Les Flags utilisés pour configurer la boîte de dialogue sont :
GTK_DIALOG_MODAL Créer un dialogue modal, voir gtk_widget_set_modal().
GTK_DIALOG_DESTROY_WITH_PARENT Détruit la boite de dialogue que son parent est détruit, voir gtk_window_set_destroy_with_parent().
GTK_DIALOG_NO_SEPARATOR Ne mets pas de séparateur entre la zone d'action et le contenu de la boîte de dialogue.

enum GtkResponseType


typedef enum
{
/* GTK retourne ceci si GTK renvoie ceci si un widget de réponse n'a aucun identifiant de response,
* ou si le dialogue est caché ou détruit par le programme.
*/
GTK_RESPONSE_NONE = -1,

/* GTK ne renverra pas ceci à moins que vous les passiez vous-même
* comme réponse à une action sur un widget. Il y a
* pour votre usage :*/
GTK_RESPONSE_REJECT = -2,
GTK_RESPONSE_ACCEPT = -3,

/* Si le dialogue est détruit. */
GTK_RESPONSE_DELETE_EVENT = -4,
/* Ceux-ci sont retournés par les dialogue GTK, et vous pouvez aussi les utiliser
* vous-même si vous préférez.*/

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;
Valeurs prédéfinies pour l'usage des identifiant de réponse dans gtk_dialog_add_button(). Toutes les valeurs prédéfinies sont négatives, GTK + laisse les valeurs positives pour  les identifiants de réponse des définition d'application.
GTK_RESPONSE_NONE Est retourné si une action d'un widget n'a pas d'identifiant de réponse, ou si le dialogue est caché ou détruit par l'application.
GTK_RESPONSE_REJECT Identifiant de réponse Générique, non utilisé par les dialogues de GTK+.
GTK_RESPONSE_ACCEPT Identifiant de réponse Générique, non utilisé par les dialogues de GTK+.
GTK_RESPONSE_DELETE_EVENT Est retourné si le dialogue est supprimé.
GTK_RESPONSE_OK Retourné par un bouton Ok dans les dialogues GTK+.
GTK_RESPONSE_CANCEL Retourné par un bouton Cancel dans les dialogues GTK+.
GTK_RESPONSE_CLOSE Retourné par un bouton Close dans les dialogues GTK+.
GTK_RESPONSE_YES Retourné par un bouton Yes dans les dialogues GTK+.
GTK_RESPONSE_NO Retourné par un bouton No dans les dialogues GTK+.
GTK_RESPONSE_APPLY Retourné par un bouton Apply dans les dialogues GTK+.
GTK_RESPONSE_HELP Retourné par un bouton Help dans les dialogues GTK+.

gtk_dialog_new ()


GtkWidget* gtk_dialog_new (void);
Crée une nouvelle boîte de dialogue; Les widgets ne doivent pas être placés directement dans  GtkWindow , mais dans  vbox et action_area, comme cela est décrit plus haut.
Retourne :  un nouveau GtkDialog.

gtk_dialog_new_with_buttons ()


GtkWidget* gtk_dialog_new_with_buttons (const gchar *title,
GtkWindow *parent,
GtkDialogFlags flags,
const gchar *first_button_text,
...);

Créer un nouveau GtkDialog  avec un titre  title (ou NULL  pour le titre par défaut; voir gtk_window_set_title()) et  définit le  parent parent (ou NULL s'il n'y en a pas; voir gtk_window_set_transient_for()). Les flags peuvent être utilisés pour créer un dialogue modal (GTK_DIALOG_MODAL) et/ou pour faire en sort qu'il soit détruit en même temps que son parent (GTK_DIALOG_DESTROY_WITH_PARENT). Après les flags, les paires bouton texte/ identifiant de réponse doivent être listés, un pointeur NULL doit être placé à la fin de la liste. Le bouton texte peut être soit un bouton stocké comme  GTK_STOCK_OK, ou un texte arbitraire. L'identifiant de réponse peut prendre n'importe quel nombre positif, ou une des valeurs de l'énumérateur GtkResponseType . Si l'utilisateur clique sur l'un des boutons du dialogue,  GtkDialog émettra le signal de "réponse" avec l'identifiant de réponse correspondant. Si un GtkDialog reçoit le signa "delete_event" (événement supprimer) , il émettra une "réponse" avec un identifiant de réponse de GTK_RESPONSE_DELETE_EVENT. Cependant, détruire un dialogue n'émet pas le signal de « réponse » ; soyez prudent si vous compter sur cette "réponse" quand vous utilisez le flag GTK_DIALOG_DESTROY_WITH_PARENT . Les boutons sont placés de gauche à droite, ainsi le premier bouton dans la liste sera le bouton tout à fait à gauche dans le dialogue.

Voici un exemple simple :
GtkWidget *dialog = gtk_dialog_new_with_buttons ("Ma boîte de dialogue",
main_app_window,
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_OK,
GTK_RESPONSE_ACCEPT,
GTK_STOCK_CANCEL,
GTK_RESPONSE_REJECT,
NULL);
title : Titre de la boîte de dialogue, ou NULL
parent : Parent de la boîte de dialogue, ou NULL
flags : de  GtkDialogFlags
first_button_text : stock ID ou texte qui sera placé dans le premier bouton, ou  NULL
... :  ID réponse pour le premier bouton, suivi par les autres boutons et leur ID réponse, finir par NULL
Returne : un nouveau  GtkDialog

gtk_dialog_run ()


gint gtk_dialog_run (GtkDialog *dialog);
Les blocs  une boucle principale récursive jusqu'au dialogue émette le signal de réponse, ou soit détruit. Si le dialogue est détruit pendant l'appel de gtk_dialog_run(), gtk_dialog_run returns GTK_RESPONSE_NONE. Sinon, elle retourne l'ID de réponse au  signal "réponse" émis. Avant d'entrer dans la boucle récursive principale gtk_dialog_run()  appelle gtk_widget_show()  pour le dialogue à votre place. Notez que vous devrez afficher tous les enfants du dialogue vous-même.

Pendant gtk_dialog_run(), le comportement par défaut de "delete_event" est la désactivation; si le dialogue reçoit  "delete_event", il ne sera pas détruit comme une fenêtre normale, et gtk_dialog_run()  retournera  GTK_RESPONSE_DELETE_EVENT. Aussi, prendant gtk_dialog_run() le dialogue sera modal. Vous pouvez forcer gtk_dialog_run()  à retourner n'importe quand en appelant  gtk_dialog_response()  pour émettre un signal de "réponse". La destruction du dialogue pendant gtk_dialog_run()  est une très mauvaise idée, en effet le code qui sera appelé après ne saura pas si la boîte de dialogue a été détruite ou non.

Après que  gtk_dialog_run() ait retourné, vous pourrez cacher ou détruire le dialogue si vous le souhaitez.

L'untilisation typique de cette fonction doit être :


gint result = gtk_dialog_run (GTK_DIALOG (dialog));
switch (result)
{
case GTK_RESPONSE_ACCEPT:
faire_quelque_chose_specifique_pour_application ();
break;
default:
ne_rien_faire_tant_que_le_dialogue_est_inactif ();
break;
}
gtk_widget_destroy (dialog);


Notez que même si la boucle principale récursive agit comme à la suite d'un dialogue modal (il empêche l'utilisateur d'interagir avec d'autres fenêtres dans le même groupe de fenêtres pendant que le dialogue est ouvert), des fonctions de rappel tel que  timeouts, IO channel watches, DND drops, etc, seront déclenchés pendant un appel de gtk_dialog_run().
dialog : un GtkDialog
Returne : response ID

gtk_dialog_response ()


void gtk_dialog_response (GtkDialog *dialog,
gint response_id);

Emet un signal "réponse" avec un identifiant de réponse donné. Est utilisé pour indiquer que l'utilisateur a répondu au dialogue d'une certaine façon; ensuite soit vous soit   gtk_dialog_run()  gérera le signal de réponse  et prendra les mesures appropriées.

dialog : un  GtkDialog
response_id : response ID

gtk_dialog_add_button ()


GtkWidget* gtk_dialog_add_button (GtkDialog *dialog,
const gchar *button_text,
gint response_id);

Ajoute un bouton avec un texte donné (ou un Bouton StockItem, si button_text est un stock ID) et définit le signal de "réponse" avec response_id qui sera emis quand l'utilisateur cliquera sur le bouton. Le bouton est ajouté à la fin de l'aire d'action de la bîte de dialogue . Le widget bouton est retourné, mais normalemet vous n'en aurez pas besoin.
dialog : un  GtkDialog
button_text : Texte du bouton , ou stock ID
response_id : Identifiant de réponse pour le bouton.
Returne : Le widget bouton qui a été ajouté.

gtk_dialog_add_buttons ()

void gtk_dialog_add_buttons (GtkDialog *dialog,
const gchar *first_button_text,
...);

Ajoute plus de boutons, cette fonction a le même effet que plusieurs appels de gtk_dialog_add_button(). La liste variable d'arguments doit être terminée par  NULL comme pour  gtk_dialog_new_with_buttons(). Chaque bouton doit avoir un texte et un ID de réponse.

dialog : un  GtkDialog
first_button_text : Texte du bouton ou stock ID
... : ID réponse pour le premier bouton, puis d'autres textes de boutons et ID réponses, termier par NULL

gtk_dialog_add_action_widget ()


void gtk_dialog_add_action_widget (GtkDialog *dialog,
GtkWidget *child,
gint response_id);

Ajoute un widget activable à la zone d'action de GtkDialog. Cette fonction connecte au traitement de signal qui émettra un signal de "réponse" dans le dialogue quand le  widget sera activé.  Le widget est ajouté à la fin de la zone d'action du dialogue. Si vous voulez un widget non-activable; placez le simplement dans le champs de action_area de  GtkDialog.

dialog : un GtkDialog
child : un widget activalbe
response_id : réponse ID pour child

gtk_dialog_get_has_separator ()


gboolean gtk_dialog_get_has_separator (GtkDialog *dialog);

Détermine si la boîte de dialogue a un séparateur ou non.
dialog : un  GtkDialog
Returns : TRUE si le dialogue a un séparateur.

gtk_dialog_set_default_response ()


void gtk_dialog_set_default_response (GtkDialog *dialog,
gint response_id);

Définit le dernier widget de la zone d'action du dialogue avec le response_id comme widget par défaut pour le dialogue. Presser sur "Entrée" active normalement le widget par défaut.
dialog : un  GtkDialog
response_id : une  réponse ID

gtk_dialog_set_has_separator ()

void gtk_dialog_set_has_separator (GtkDialog *dialog,
gboolean setting);

Définit si le dialogue a un séparteur au dessus des boutons. TRUE est la valeur par défaut.

dialog : un GtkDialog
setting : TRUE pour avoir un séparateur

gtk_dialog_set_response_sensitive ()


void gtk_dialog_set_response_sensitive (GtkDialog *dialog,
gint response_id,
gboolean setting);

Appelle gtk_widget_set_sensitive (widget, settingpour chaque widget de la zone d'action du dialogue avec response_id. Une méthode commode pour sensibiliser/désensibiliser les boutons du dialogue.
dialog : un  GtkDialog
response_id : une réponse ID
setting : TRUE pour sensibilisé

gtk_dialog_get_response_for_widget ()


gint gtk_dialog_get_response_for_widget (GtkDialog *dialog,
GtkWidget *widget);

Récupère l'identifiant de réponse  d'un widget de la zone d'action d'un dialogue.

dialog : un GtkDialog
widget : widget dans la zone d'action de dialog
Returns :  réponse id de widget, ou GTK_RESPONSE_NONE si widget n'a pas de réponse ID définit.

Depuis 2.8


gtk_alternative_dialog_button_order ()


gboolean gtk_alternative_dialog_button_order (GdkScreen *screen);

Retourne TRUE si les dialogues sont capables d'utiliser un ordre alternatif de boutons dans l'écran screen. Voir gtk_dialog_set_alternative_button_order() pour avoir plus d'information sur l'ordre alternatif de boutons.

Si vous avez besoin d'utiliser cette fonction, vous devrez probablement connecter au sigal  ::notify:gtk-alternative-button-order dans l'objet  GtkSettings associé à screen, pour définir si l'ordre de configuration de bouton a changé.
screen : un  GdkScreen, ou NULL  pour utiliser un screen par défaut
Returne :
Si l'ordre alternatif de bouton est employé

Depuis 2.6


gtk_dialog_set_alternative_button_order ()

void gtk_dialog_set_alternative_button_order
(GtkDialog *dialog,
gint first_response_id,
...);

Définit un ordre alternatif de bouton. Si la définition de gtk-alternative-button-order est mis à TRUE,  les boutons de la boîte de dialogue sont reprogrammés selon l'ordre des identificateurs de réponse passé à cette fonction.

Par défaut, les dialogues GTK+ utilisent l'ordre des boutons préconisé par le Human Interface Guidelines  de Gnome avec le bouton affirmatif placé le plus à droite, et le bouton annuler à la gauche de celui-ci. Mais les dialogues et le GtkMessageDialogs du builtin GTK+ fournissent un ordre alternatif de bouton, qui est plus approprié à quelques plateformes, par exemple Windows.

Utilisez cette fonction après avoir ajouté tous les boutons à votre dialogue, comme dans l'exemple qui suit:

cancel_button = gtk_dialog_add_button (GTK_DIALOG (dialog),
GTK_STOCK_CANCEL,
GTK_RESPONSE_CANCEL);
ok_button = gtk_dialog_add_button (GTK_DIALOG (dialog),
GTK_STOCK_OK,
GTK_RESPONSE_OK);

gtk_widget_grab_default (ok_button);

help_button = gtk_dialog_add_button (GTK_DIALOG (dialog),
GTK_STOCK_HELP,
GTK_RESPONSE_HELP);

gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
GTK_RESPONSE_OK,
GTK_RESPONSE_CANCEL,
GTK_RESPONSE_HELP,
-1);

dialog : un GtkDialog
first_response_id : un ID de réponse utilisé par un bouton des  dialog
... : une liste de plusieurs ID réponse de boutons de dialog, terminer par -1

Depuis 2.6


gtk_dialog_set_alternative_button_order_from_array ()


void gtk_dialog_set_alternative_button_order_from_array
(GtkDialog *dialog,
gint n_params,
gint *new_order);

Définit un ordre alternatif de boutons. Si la configuration de gtk-alternative-button-order  est mise à TRUE, Les boutons de la boîte de dialogue sont reprogrammé en s'accorant à l'ordre des ID de réponses dans new_order.

Voir gtk_dialog_set_alternative_button_order() pour plus d'informations;

This function is for use by language bindings.

dialog : un GtkDialog
n_params : Nombre d'ID de réponse dans new_order
new_order : Tableau des ID de réponse des boutons de dialog

Depuis 2.6

Détails de Propriété 

Proprité de "has-separator


 "has-separator"		 gboolean :		 Lire / Ecrire

La boîte de dialogue a une barre de séparation au dessus des boutons.

Valeur par défaut: TRUE

Détails de propriété de Style 

Propriété de style de "action-area-border


 "action-area-border" 		gint :		Lire

Largeur du bord autour de l'aire des boutons en bas de la boîte de dialogue.

Valeurs allouées: >= 0

Valeur par défaut : 5


Propriété de style de "button-spacing


 "button-spacing"		 gint :		Lire

Espacement entre les boutons.

Valeurs allouées : >= 0

Valeur par défaut : 6


Propriété de style de"content-area-border


 "content-area-border" 		gint : 		Lire

Largeur du bord autour de l'aire principale de la boîte de dialogue.

Valeurs allouées : >= 0

Valeur par défaut : 2

 Details de Signal

Signa "close" 


void user_function (GtkDialog *dialog,
gpointer user_data) : Run Last / Action
dialog : objet qui reçoit le signal
user_data : Données utilisateur définies quand le handle du signal a été connecté.


Signal"response" 


void user_function (GtkDialog *dialog,
gint arg1,
gpointer user_data) : Run Last

Emis quand un widget actif est cliqué, le dialogue reçoit un "delete event", ou le programmeur de l'application appelle gtk_dialog_response().  A la suite d'un "delete event", l'ID de réponse est  GTK_RESPONSE_NONE. Sinon, il dépend de l'action du widget qui a été cliqué.
dialog : L'objet qui a reçu le signal
arg1 : ID de réponse
user_data : Données utilisateur définies quand le handle du signal a été connecté.

Voir aussi

GtkVBox

Place les widgets verticalement.

GtkWindow

Modifie les propriétés de la boîte de dialogue.

GtkButton

Les ajouter à la zone action_area  pour obtenir une réponse venant de l'utilisateur