Date de publication : 20 Février 2007
Nous allons cette fois nous intéresser à un élément essentiel d'une interface graphique : le bouton. En effet celui-ci permet à l'utilisateur d'effectuer une action grâce à un simple click de souris. GTK+ nous permet de les utiliser grâce au widget GtkButton :
Dans ce chapitre, notre objectif sera de créer une application contenant un bouton qui permettra de quitter l'application.
Dans un premier temps, nous allons déclarer un pointeur vers une structure GtkWidget afin de pouvoir ensuite créer le bouton.
GtkWidget *pQuitBtn;
Ensuite, il faut initialiser le bouton. Pour cela, GTK+ permet l'utilisation de quatre fonctions différentes :
GtkWidget* gtk_button_new(void);
GtkWidget* gtk_button_new_with_label(const gchar *label);
GtkWidget* gtk_button_new_with_mnemonic(const gchar *label);
GtkWidget* gtk_button_new_from_stock(const gchar *stock_id);
La première fonction permet de créer un bouton vide. Cela permet de personnaliser complètement le bouton car GtkButton dérive de GtkContainer. On peut donc inclure n'importe quel type de widget dans le bouton (label, image, ...).
La deuxième fonction s'occupe en plus d'insérer un label à
l'intérieur du bouton. Le paramètre label
correspond
au texte à afficher. Comme pour le widget GtkLabel, si un caractère
accentué est utilisé, il faudra appeler la fonction g_locale_to_utf8
pour avoir un affichage correct du texte (voir IV. Les labels pour plus
de précision).
La troisième fonction ajoute à cela une nouvelle fonctionnalité.
Elle permet, en plus d'afficher un label, de faire réagir le bouton à
l'aide d'un raccourci clavier. La touche servant de raccourci est spécifiée
dans le paramètre label. Il suffit de mettre "_"
devant la lettre souhaitée pour que la combinaison Atl+Touche active
le bouton. Par exemple pour l'application de ce chapitre, le texte à
afficher sera "Quitter"
et si nous voulons que la combinaison
de touches Atl+Q permette de quitter l'application, le paramètre label
devra être "_Quitter"
.
La quatrième fonction permet de créer un bouton avec un label,
un raccourci clavier et une image. Cependant, pour faire cela, GTK+ utilise
les GtkStockItem qui est une structure contenant les informations sur le label
et l'image à afficher. GTK+ comporte déjà beaucoup de GtkStockItem
prédéfinis (en tout cas les plus courant). Le paramètre
stock_id
est donc l'identifiant du GtkStockItem à utiliser.
Pour notre exemple, l'identifiant est GTK_STOCK_QUIT.
Pour cela, nous allons surveiller le signal "clicked" qui est émis lorsque l'utilisateur clique sur le bouton. Lorsque ce signal est reçu nous allons appeler gtk_main_quit pour fermer l'application et détruire tous les widgets. La ligne de code est donc :
g_signal_connect(G_OBJECT(pQuitBtn), "clicked", G_CALLBACK(gtk_main_quit), NULL);
Comme pour le chapitre précédent, on utilise la fonction gtk_container_add pour insérer le bouton dans la fenêtre et gtk_widget_show_all pour afficher le tout.
#include <stdlib.h> #include <gtk/gtk.h> #define
EXEMPLE_1 0 void AddBtn(GtkWidget *pWindow, gint iExemple); int main(int
argc, char **argv) gtk_init(&argc, &argv); /* Creation de la fenetre
*/ /* Insertion du bouton
*/ /* Affichage de la fenetre
*/ /* Demarrage de la boucle
evenementielle */ return EXIT_SUCCESS;
/* void AddBtn(GtkWidget *pWindow, gint iExemple) switch(iExemple) /* Connexion du signal
"clicked" du bouton */ /* Insertion du bouton
dans la fenetre */ |
Résultat :
|
activate |
Prototype fonction callback : void user_function
(GtkButton *button, gpointer user_data); Ce signal est émis lorsque le bouton a le focus est que l'on
appuie sur la touche "Enter". |
enter |
Prototype fonction callback : void user_function
(GtkButton *button, gpointer user_data); Ce signal est émis lorsque le pointeur de la souris entre
dans la zone du bouton. |
leave |
Prototype fonction callback : void user_function
(GtkButton *button, gpointer user_data); Ce signal est émis lorsque le pointeur de la souris quitte
la zone du bouton. |
pressed |
Prototype fonction callback : void user_function
(GtkButton *button, gpointer user_data); Ce signal est émis au moment où l'on appuie sur le
bouton. |
released |
Prototype fonction callback : void user_function
(GtkButton *button, gpointer user_data); Ce signal est émis au moment où l'on relâche
le bouton. |
void gtk_button_pressed (GtkButton *button); |
Emet le signal "pressed" pour le GtkButton concerné. Entrée(s) : button : le bouton. Sortie : rien. |
void gtk_button_released (GtkButton *button); |
Emet le signal "released" pour le GtkButton
concerné. Entrée(s) : button : le bouton. Sortie : rien. |
void gtk_button_clicked (GtkButton *button); |
Emet le signal "clicked" pour le GtkButton concerné. Entrée(s) : button : le bouton. Sortie : rien. |
void gtk_button_enter (GtkButton *button); |
Emet le signal "enter" pour le GtkButton concerné. Entrée(s) : button : le bouton. Sortie : rien. |
void gtk_button_leave (GtkButton *button); |
Emet le signal "leave" pour le GtkButton concerné. Entrée(s) : button : le bouton. Sortie : rien. |
void gtk_button_set_relief (GtkButton *button, GtkReliefStyle newstyle); |
Définit le style du bouton. Entrée(s) : button : le bouton. newstyle : style du bouton. Les différent styles sont : *GTK_RELIEF_NORMAL (par
défaut).*GTK_RELIEF_HALF. Sortie : rien. |
GtkReliefStyle gtk_button_get_relief (GtkButton *button); |
Récupère le style du bouton. Entrée(s) : button : le bouton. Sortie : GtkReliefStyle. |
void gtk_button_set_label (GtkButton *button, const gchar *label); |
Modifie le texte d'un bouton. Entrée(s) : button : le bouton. label : le texte à afficher. Sortie : rien. |
G_CONST_RETURN gchar* gtk_button_get_label (GtkButton *button); |
Récupère le texte d'un bouton. Entrée(s) : button : le bouton. Sortie : const gchar*. |
gboolean gtk_button_get_use_stock (GtkButton *button); |
Pour savoir si un bouton utilise les GtkStockItem. Entrée(s) : button : le bouton. Sortie : gboolean, TRUE si le bouton utilise un GtkStockItem, FALSE sinon. |
void gtk_button_set_use_stock (GtkButton *button, gboolean use_stock); |
Définit si le bouton utilise un objet GtkStockItem. Entrée(s) : button : le bouton. use_stock : TRUE pour utiliser GtkStockItem, FALSE sinon. Sortie : rien. |
gboolean gtk_button_get_use_underline (GtkButton *button); |
Pour savoir si un bouton utilise un raccourci clavier. Entrée(s) : button : le bouton. Sortie : gboolean, TRUE si le bouton utilise un raccourci, FALSE sinon. |
void gtk_button_set_use_underline (GtkButton *button, gboolean use_underline); |
Définit le bouton utilise un raccourci clavier. Entrée(s) : button : le bouton. use_underline : TRUE pour utiliser le raccourci, FALSE sinon. Sortie : rien. |