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
peuvent être placés. La partie inférieure est connu comme état l'air d'action
.
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
.
.
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
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
dans le dialogue. Utilisez la macro
.
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
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 ()
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.
gtk_dialog_new_with_buttons ()
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 :
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 ()
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()
.
gtk_dialog_response ()
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 ()
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 ()
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 ()
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 ()
Définit si le dialogue a un séparteur au dessus des boutons.
TRUE
est la valeur par défaut.
gtk_dialog_set_response_sensitive ()
Appelle
gtk_widget_set_sensitive (widget, setting
)
pour 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 ()
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 ()
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:
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