Aller au contenu

Programmation GTK2 en Pascal/GtkToggleToolButton

Un livre de Wikilivres.
Programmation GTK2 en Pascal

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
GObject
  └─GtkObject
      └─GtkWidget
          └─GtkContainer
              └─GtkBin
                  └─GtkToolItem
                      └─GtkToolButton
                          ├─GtkMenuToolButton
                          └─GtkToggleToolButton
                              └─GtkRadioToolButton

Utilisation de base

[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