3
* The GtkUIManager object allows the easy creation of menus
4
* from an array of actions and a description of the menu hierarchy.
10
activate_action (GtkAction *action)
12
g_message ("Action \"%s\" activated", gtk_action_get_name (action));
16
activate_radio_action (GtkAction *action, GtkRadioAction *current)
18
g_message ("Radio action \"%s\" selected",
19
gtk_action_get_name (GTK_ACTION (current)));
22
static GtkActionEntry entries[] = {
23
{ "FileMenu", NULL, "_File" }, /* name, stock id, label */
24
{ "PreferencesMenu", NULL, "_Preferences" }, /* name, stock id, label */
25
{ "ColorMenu", NULL, "_Color" }, /* name, stock id, label */
26
{ "ShapeMenu", NULL, "_Shape" }, /* name, stock id, label */
27
{ "HelpMenu", NULL, "_Help" }, /* name, stock id, label */
28
{ "New", GTK_STOCK_NEW, /* name, stock id */
29
"_New", "<control>N", /* label, accelerator */
30
"Create a new file", /* tooltip */
31
G_CALLBACK (activate_action) },
32
{ "Open", GTK_STOCK_OPEN, /* name, stock id */
33
"_Open","<control>O", /* label, accelerator */
34
"Open a file", /* tooltip */
35
G_CALLBACK (activate_action) },
36
{ "Save", GTK_STOCK_SAVE, /* name, stock id */
37
"_Save","<control>S", /* label, accelerator */
38
"Save current file", /* tooltip */
39
G_CALLBACK (activate_action) },
40
{ "SaveAs", GTK_STOCK_SAVE, /* name, stock id */
41
"Save _As...", NULL, /* label, accelerator */
42
"Save to a file", /* tooltip */
43
G_CALLBACK (activate_action) },
44
{ "Quit", GTK_STOCK_QUIT, /* name, stock id */
45
"_Quit", "<control>Q", /* label, accelerator */
47
G_CALLBACK (activate_action) },
48
{ "About", NULL, /* name, stock id */
49
"_About", "<control>A", /* label, accelerator */
50
"About", /* tooltip */
51
G_CALLBACK (activate_action) },
52
{ "Logo", "demo-gtk-logo", /* name, stock id */
53
NULL, NULL, /* label, accelerator */
55
G_CALLBACK (activate_action) },
57
static guint n_entries = G_N_ELEMENTS (entries);
60
static GtkToggleActionEntry toggle_entries[] = {
61
{ "Bold", GTK_STOCK_BOLD, /* name, stock id */
62
"_Bold", "<control>B", /* label, accelerator */
64
G_CALLBACK (activate_action),
65
TRUE }, /* is_active */
67
static guint n_toggle_entries = G_N_ELEMENTS (toggle_entries);
75
static GtkRadioActionEntry color_entries[] = {
76
{ "Red", NULL, /* name, stock id */
77
"_Red", "<control>R", /* label, accelerator */
78
"Blood", COLOR_RED }, /* tooltip, value */
79
{ "Green", NULL, /* name, stock id */
80
"_Green", "<control>G", /* label, accelerator */
81
"Grass", COLOR_GREEN }, /* tooltip, value */
82
{ "Blue", NULL, /* name, stock id */
83
"_Blue", "<control>B", /* label, accelerator */
84
"Sky", COLOR_BLUE }, /* tooltip, value */
86
static guint n_color_entries = G_N_ELEMENTS (color_entries);
94
static GtkRadioActionEntry shape_entries[] = {
95
{ "Square", NULL, /* name, stock id */
96
"_Square", "<control>S", /* label, accelerator */
97
"Square", SHAPE_SQUARE }, /* tooltip, value */
98
{ "Rectangle", NULL, /* name, stock id */
99
"_Rectangle", "<control>R", /* label, accelerator */
100
"Rectangle", SHAPE_RECTANGLE }, /* tooltip, value */
101
{ "Oval", NULL, /* name, stock id */
102
"_Oval", "<control>O", /* label, accelerator */
103
"Egg", SHAPE_OVAL }, /* tooltip, value */
105
static guint n_shape_entries = G_N_ELEMENTS (shape_entries);
107
static const gchar *ui_info =
109
" <menubar name='MenuBar'>"
110
" <menu action='FileMenu'>"
111
" <menuitem action='New'/>"
112
" <menuitem action='Open'/>"
113
" <menuitem action='Save'/>"
114
" <menuitem action='SaveAs'/>"
116
" <menuitem action='Quit'/>"
118
" <menu action='PreferencesMenu'>"
119
" <menu action='ColorMenu'>"
120
" <menuitem action='Red'/>"
121
" <menuitem action='Green'/>"
122
" <menuitem action='Blue'/>"
124
" <menu action='ShapeMenu'>"
125
" <menuitem action='Square'/>"
126
" <menuitem action='Rectangle'/>"
127
" <menuitem action='Oval'/>"
129
" <menuitem action='Bold'/>"
131
" <menu action='HelpMenu'>"
132
" <menuitem action='About'/>"
135
" <toolbar name='ToolBar'>"
136
" <toolitem action='Open'/>"
137
" <toolitem action='Quit'/>"
138
" <separator action='Sep1'/>"
139
" <toolitem action='Logo'/>"
144
do_ui_manager (GtkWidget *do_widget)
146
static GtkWidget *window = NULL;
152
GtkWidget *separator;
156
GtkActionGroup *actions;
157
GError *error = NULL;
159
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
160
gtk_window_set_screen (GTK_WINDOW (window),
161
gtk_widget_get_screen (do_widget));
163
g_signal_connect (window, "destroy",
164
G_CALLBACK (gtk_widget_destroyed), &window);
165
g_signal_connect (window, "delete-event",
166
G_CALLBACK (gtk_true), NULL);
168
actions = gtk_action_group_new ("Actions");
169
gtk_action_group_add_actions (actions, entries, n_entries, NULL);
170
gtk_action_group_add_toggle_actions (actions,
171
toggle_entries, n_toggle_entries,
173
gtk_action_group_add_radio_actions (actions,
174
color_entries, n_color_entries,
176
G_CALLBACK (activate_radio_action),
178
gtk_action_group_add_radio_actions (actions,
179
shape_entries, n_shape_entries,
181
G_CALLBACK (activate_radio_action),
184
ui = gtk_ui_manager_new ();
185
gtk_ui_manager_insert_action_group (ui, actions, 0);
186
g_object_unref (actions);
187
gtk_window_add_accel_group (GTK_WINDOW (window),
188
gtk_ui_manager_get_accel_group (ui));
189
gtk_window_set_title (GTK_WINDOW (window), "UI Manager");
190
gtk_container_set_border_width (GTK_CONTAINER (window), 0);
193
if (!gtk_ui_manager_add_ui_from_string (ui, ui_info, -1, &error))
195
g_message ("building menus failed: %s", error->message);
196
g_error_free (error);
199
box1 = gtk_vbox_new (FALSE, 0);
200
gtk_container_add (GTK_CONTAINER (window), box1);
202
gtk_box_pack_start (GTK_BOX (box1),
203
gtk_ui_manager_get_widget (ui, "/MenuBar"),
206
label = gtk_label_new ("Type\n<alt>\nto start");
207
gtk_widget_set_size_request (label, 200, 200);
208
gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
209
gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
212
separator = gtk_hseparator_new ();
213
gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
216
box2 = gtk_vbox_new (FALSE, 10);
217
gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
218
gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
220
button = gtk_button_new_with_label ("close");
221
g_signal_connect_swapped (button, "clicked",
222
G_CALLBACK (gtk_widget_destroy), window);
223
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
224
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
225
gtk_widget_grab_default (button);
227
gtk_widget_show_all (window);
232
gtk_widget_destroy (window);