Programmation GTK2 en Pascal/GtkToolButton

Un livre de Wikilivres.
Programmation GTK2 en Pascal

Présentation[modifier | modifier le wikicode]

Le contrôle GtkToolButton permet de gérer un élément de barre d'outils de type bouton.

Hiérarchie[modifier | modifier le wikicode]

Hiérarchie
GObject
  └─GtkObject
      └─GtkWidget
          └─GtkContainer
              └─GtkBin
                  └─GtkToolItem
                      └─GtkToolButton
                          ├─GtkMenuToolButton
                          └─GtkToggleToolButton

Utilisation de base[modifier | modifier le wikicode]

Création[modifier | modifier le wikicode]

Pour créer un bouton, Gtk+ permet l'utilisation de deux fonctions différentes :

function gtk_tool_button_new(icon_widget : PGtkWidget; szLabel : Pgchar) : PGtkToolItem;
function gtk_tool_button_new_from_stock(stock_id : Pgchar) : PGtkToolItem;

La première fonction permet de créer un bouton avec une image et un label, il faudra pour cela lui fournir l'image dans le paramètre icon_widget et le label dans szLabel.

La deuxième fonction permet également de créer un bouton avec un label, un raccourci clavier et une image, 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.

Programme exemple[modifier | modifier le wikicode]

Nous allons créer dans une fenêtre une barre d'outils avec deux boutons créés selon les deux méthodes disponibles.

Voilà le fichier gtk043.pas :

program gtk043;

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;
  pBouton1     : PGtkToolItem;
  pImage       : PGtkWidget;
  pBouton2     : 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), 'Gtk043 : Barre d''outils avec boutons');
  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 du premier bouton
  pImage := gtk_image_new_from_stock(GTK_STOCK_OPEN, GTK_ICON_SIZE_LARGE_TOOLBAR);
  pBouton1 := gtk_tool_button_new(pImage, 'Ouvrir...');
  gtk_toolbar_insert(GTK_TOOLBAR(pBarreOutils), pBouton1, -1);

  // Création du deuxième bouton
  pBouton2 := gtk_tool_button_new_from_stock(GTK_STOCK_QUIT);
  gtk_toolbar_insert(GTK_TOOLBAR(pBarreOutils), pBouton2, -1);
  g_signal_connect(pGTKOBJECT(pBouton2), 'clicked', G_CALLBACK(@gtk_main_quit), NULL);

  // 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 gtk043 :


Barre d'outils : GtkToolbar ~ GtkToolItem ~ GtkToolButton ~ GtkMenuToolButton ~ GtkToggleToolButton ~ GtkRadioToolButton ~ GtkSeparatorToolItem