XIII. Les barres d'outils▲
XIII-A. Aperçu▲
XIII-B. Création d'une barre d'outils▲
La création d'une barre d'outils ressemble fort à celle d'un menu, en plus simple puisqu'il n'y a pas de sous-menu : on crée notre barre d'outils (gtk_toolbar_new) puis les éléments de la barre, pour cela on utilise des boutons (gtk_tool_button_new_from_stock), que l'on insère dans la barre (gtk_toolbar_insert). Pas conséquent notre fichier barreoutils.c ressemble à menu.c :
#include <gtk/gtk.h>
#include "callback.h"
#include "barreoutils.h"
static void toolbar_item_new (GtkToolbar *, const gchar *, GCallback, gpointer);
GtkToolbar *toolbar_new (gpointer user_data)
{
GtkWidget *p_toolbar = NULL;
p_toolbar = gtk_toolbar_new ();
/* ... */
toolbar_item_new (GTK_TOOLBAR (p_toolbar), GTK_STOCK_NEW, G_CALLBACK (cb_new), user_data);
toolbar_item_new (GTK_TOOLBAR (p_toolbar), GTK_STOCK_OPEN, G_CALLBACK (cb_open), user_data);
toolbar_item_new (GTK_TOOLBAR (p_toolbar), GTK_STOCK_SAVE, G_CALLBACK (cb_save), user_data);
toolbar_item_new (GTK_TOOLBAR (p_toolbar), GTK_STOCK_SAVE_AS, G_CALLBACK (cb_saveas), user_data);
toolbar_item_new (GTK_TOOLBAR (p_toolbar), GTK_STOCK_CLOSE, G_CALLBACK (cb_close), user_data);
toolbar_item_new (GTK_TOOLBAR (p_toolbar), GTK_STOCK_QUIT, G_CALLBACK (cb_quit), user_data);
return GTK_TOOLBAR (p_toolbar);
}
static void toolbar_item_new (GtkToolbar *p_toolbar, const gchar *stock_id, GCallback callback, gpointer user_data)
{
GtkToolItem *p_tool_item = NULL;
p_tool_item = gtk_tool_button_new_from_stock (stock_id);
g_signal_connect (G_OBJECT (p_tool_item), "clicked", callback, user_data);
gtk_toolbar_insert (p_toolbar, p_tool_item, -1);
}Le code n'est pas complet, car lorsque j'exécute le programme, GTK+ affiche, en plus des icônes, le texte sous les boutons. Pour modifier cela, il suffit d'ajouter une ligne de code :
gtk_toolbar_set_style (GTK_TOOLBAR (p_toolbar), GTK_TOOLBAR_ICONS);Pourquoi gtk_tool_button_new_from_stock retourne un GtkToolItem et non un GtkWidget comme nous avons été habitués jusqu'à présent. Il s'agit d'une bizarrerie de GTK+ dont je ne connais pas la raison.
Pour anticiper un changement d'interface (dans GTK+ 3.0 peut être ?), nous aurions pu écrire :
Gtkwidget *p_tool_item = NULL;
p_tool_item = GTK_WIDGET (gtk_tool_button_new_from_stock (stock_id));
g_signal_connect (G_OBJECT (p_tool_item), "clicked", callback, user_data);
gtk_toolbar_insert (p_toolbar, GTK_TOOL_ITEM (p_tool_item), -1);


