Programmation GTK2 en Pascal/GtkToggleToolButton
| Programmation GTK2 en Pascal |
|
Présentation
[modifier | modifier le wikicode]Le 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
[modifier | modifier le wikicode]| Hiérarchie |
GObject └─GtkObject └─GtkWidget └─GtkContainer └─GtkBin └─GtkToolItem └─GtkToolButton ├─GtkMenuToolButton └─GtkToggleToolButton └─GtkRadioToolButton |
Utilisation de base
[modifier | modifier le wikicode]Création
[modifier | modifier le wikicode]Pour 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
[modifier | modifier le wikicode]Il 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
[modifier | modifier le wikicode]Nous 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 |

