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é 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
);