Programmation GTK2 en Pascal/GtkToggleToolButton
Programmation GTK2 en Pascal |
|
Présentation
modifierLe contrôle GtkToggleToolButton permet de gérer un élément de barre d'outils de type bouton poussoir qui ne peut prendre que deux états : enfoncé ou relâché.
C'est une nouveauté de la version 2.6 de Gtk+.
Hiérarchie
modifierHiérarchie |
GObject └─GtkObject └─GtkWidget └─GtkContainer └─GtkBin └─GtkToolItem └─GtkToolButton ├─GtkMenuToolButton └─GtkToggleToolButton └─GtkRadioToolButton |
Utilisation de base
modifierCréation
modifierPour créer un bouton poussoir pour une barre d'outils, Gtk+ permet l'utilisation de deux fonctions différentes :
function gtk_toggle_tool_button_new : PGtkToolItem; function gtk_toggle_tool_button_new_from_stock(stock_id : Pgchar) : PGtkToolItem;
La première fonction permet de créer un bouton poussoir. Il sera d'apparence « blanche ». Il faut utiliser les fonctions de son ancêtre GtkToolButton
pour y ajouter un label et/ou une image.
La deuxième fonction permet également de créer un bouton poussoir en utilisant 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.
NB : Contrairement aux fonctions usuelles de Gtk+ de création de contrôles, ces fonctions ne renvoient pas un PGtkWidget
mais un PGtkToolItem
.
État du bouton
modifierIl peut être intéressant de connaître l'état du bouton pour agir en conséquence. Une fois encore, rien de plus simple on utilise la fonction :
function gtk_toggle_tool_button_get_active(button : PGtkToggleButton) : gboolean;
Cette dernière nous renvoie TRUE si le bouton est enfoncé et FALSE sinon. Afin de pouvoir utiliser le paramètre toggle_button
qui est le bouton dont on veut connaître l'état, il faut utiliser la fonction GTK_TOGGLE_BUTTON.
Pour modifier l'état du bouton, c'est aussi simple :
procedure gtk_toggle_tool_button_set_active(button : PGtkToggleButton; is_active : gboolean);
Il suffit de mettre le paramètre is_active à TRUE si l'on veut enfoncer le bouton ou à FALSE pour le relâcher.
Quand l'état du bouton change, par l'action de l'utilisateur ou du programme, un signal « toggled
» est émis.
Programme exemple
modifierNous allons créer dans une fenêtre une barre d'outils avec deux boutons poussoir, créés chacun avec les deux fonctions disponibles.
Voilà le fichier gtk045.pas
:
program gtk045; uses glib2, gtk2; procedure gtk_toolbar_insert(toolbar : PGtkToolbar; item : PGtkToolItem; pos : gint); cdecl; external gtklib name 'gtk_toolbar_insert'; var pFenetre : PGtkWidget; pVBox : PGtkWidget; pBarreOutils : PGtkWidget; pBoutonPoussoir1 : PGtkToolItem; pBoutonPoussoir2 : PGtkToolItem; pLabel : PGtkWidget; begin gtk_init(@argc, @argv); pFenetre := gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(pFenetre), GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(pFenetre), 320, 200); gtk_window_set_title(GTK_WINDOW(pFenetre), 'Gtk045 : Barre d''outils'); gtk_signal_connect(pGTKOBJECT(pFenetre), 'destroy', G_CALLBACK(@gtk_main_quit), NULL); // Création de la GtkVBox pVBox := gtk_vbox_new(FALSE, 5); gtk_container_add(GTK_CONTAINER(pFenetre), pVBox); // Création de la barre d'outils pBarreOutils := gtk_toolbar_new; gtk_box_pack_start(GTK_BOX(pVBox), pBarreOutils, FALSE, FALSE, 0); // Création des boutons poussoir pBoutonPoussoir1 := gtk_toggle_tool_button_new_from_stock(GTK_STOCK_OPEN); gtk_toolbar_insert(GTK_TOOLBAR(pBarreOutils), pBoutonPoussoir1, -1); pBoutonPoussoir2 := gtk_toggle_tool_button_new; gtk_toolbar_insert(GTK_TOOLBAR(pBarreOutils), pBoutonPoussoir2, -1); gtk_tool_button_set_label(GTK_TOOL_BUTTON(pBoutonPoussoir2), 'Btn 2'); // Création du label pLabel := gtk_label_new('Label'); gtk_box_pack_start(GTK_BOX(pVBox), pLabel, FALSE, FALSE, 0); gtk_widget_show_all(pFenetre); gtk_main; end.
Voilà ce que donne l'exécution du programme gtk045
juste après le lancement :
Puis après avoir cliqué sur les deux boutons :
Barre d'outils : GtkToolbar ~ GtkToolItem ~ GtkToolButton ~ GtkMenuToolButton ~ GtkToggleToolButton ~ GtkRadioToolButton ~ GtkSeparatorToolItem |