63
68
G_OBJECT_CLASS (gd_main_toolbar_parent_class)->dispose (obj);
67
get_icon_margin (void)
69
gint toolbar_size, menu_size;
71
gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &menu_size, NULL);
72
gtk_icon_size_lookup (GTK_ICON_SIZE_LARGE_TOOLBAR, &toolbar_size, NULL);
73
return (gint) floor ((toolbar_size - menu_size) / 2.0);
76
71
static GtkSizeGroup *
77
get_vertical_size_group (void)
72
get_vertical_size_group (GdMainToolbar *self)
79
74
GtkSizeGroup *retval;
83
icon_margin = get_icon_margin ();
85
dummy = gtk_toggle_button_new ();
86
w = gtk_image_new_from_stock (GTK_STOCK_OPEN, GTK_ICON_SIZE_MENU);
87
g_object_set (w, "margin", icon_margin, NULL);
88
gtk_container_add (GTK_CONTAINER (dummy), w);
89
gtk_widget_show_all (dummy);
76
GtkToolItem *container;
78
dummy = gd_header_simple_button_new ();
79
gd_header_button_set_label (GD_HEADER_BUTTON (dummy), "Dummy");
80
container = gtk_tool_item_new ();
81
gtk_widget_set_no_show_all (GTK_WIDGET (container), TRUE);
82
gtk_container_add (GTK_CONTAINER (container), dummy);
83
gtk_toolbar_insert (GTK_TOOLBAR (self), container, -1);
91
85
retval = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL);
92
86
gtk_size_group_add_widget (retval, dummy);
98
get_empty_button (ChildType type)
105
button = gtk_menu_button_new ();
108
button = gtk_toggle_button_new ();
112
button = gtk_button_new ();
120
get_symbolic_button (const gchar *icon_name,
123
GtkWidget *button, *w;
128
button = gtk_menu_button_new ();
129
gtk_widget_destroy (gtk_bin_get_child (GTK_BIN (button)));
132
button = gtk_toggle_button_new ();
136
button = gtk_button_new ();
140
gtk_style_context_add_class (gtk_widget_get_style_context (button), "raised");
142
w = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_MENU);
143
g_object_set (w, "margin", get_icon_margin (), NULL);
145
gtk_container_add (GTK_CONTAINER (button), w);
151
get_text_button (const gchar *label,
154
GtkWidget *button, *w;
159
button = gtk_menu_button_new ();
160
gtk_widget_destroy (gtk_bin_get_child (GTK_BIN (button)));
162
w = gtk_label_new (label);
164
gtk_container_add (GTK_CONTAINER (button), w);
167
button = gtk_toggle_button_new_with_label (label);
171
button = gtk_button_new_with_label (label);
175
gtk_widget_set_vexpand (button, TRUE);
176
gtk_style_context_add_class (gtk_widget_get_style_context (button), "raised");
92
gd_main_toolbar_get_show_modes (GdMainToolbar *self)
94
return self->priv->show_modes;
98
gd_main_toolbar_set_show_modes (GdMainToolbar *self,
101
if (self->priv->show_modes == show_modes)
104
self->priv->show_modes = show_modes;
105
if (self->priv->show_modes)
107
gtk_widget_set_no_show_all (self->priv->labels_grid, TRUE);
108
gtk_widget_hide (self->priv->labels_grid);
110
gtk_widget_set_valign (self->priv->center_grid, GTK_ALIGN_FILL);
111
gtk_widget_set_no_show_all (self->priv->modes_box, FALSE);
112
gtk_widget_show_all (self->priv->modes_box);
116
gtk_widget_set_no_show_all (self->priv->modes_box, TRUE);
117
gtk_widget_hide (self->priv->modes_box);
119
gtk_widget_set_valign (self->priv->center_grid, GTK_ALIGN_CENTER);
120
gtk_widget_set_no_show_all (self->priv->labels_grid, FALSE);
121
gtk_widget_show_all (self->priv->labels_grid);
124
g_object_notify (G_OBJECT (self), "show-modes");
128
gd_main_toolbar_set_property (GObject *object,
134
GdMainToolbar *self = GD_MAIN_TOOLBAR (object);
138
case PROP_SHOW_MODES:
139
gd_main_toolbar_set_show_modes (GD_MAIN_TOOLBAR (self), g_value_get_boolean (value));
142
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
148
gd_main_toolbar_get_property (GObject *object,
153
GdMainToolbar *self = GD_MAIN_TOOLBAR (object);
157
case PROP_SHOW_MODES:
158
g_value_set_boolean (value, self->priv->show_modes);
161
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
206
191
self->priv->center_group = gtk_tool_item_new ();
207
192
gtk_tool_item_set_expand (self->priv->center_group, TRUE);
208
193
gtk_toolbar_insert (tb, self->priv->center_group, -1);
194
self->priv->center_grid = gtk_grid_new ();
195
gtk_widget_set_halign (self->priv->center_grid, GTK_ALIGN_CENTER);
196
gtk_widget_set_valign (self->priv->center_grid, GTK_ALIGN_CENTER);
197
gtk_container_add (GTK_CONTAINER (self->priv->center_group), self->priv->center_grid);
209
198
gtk_size_group_add_widget (self->priv->vertical_size_group,
210
199
GTK_WIDGET (self->priv->center_group));
212
201
/* centered label group */
213
202
self->priv->labels_grid = grid = gtk_grid_new ();
214
gtk_widget_set_halign (grid, GTK_ALIGN_CENTER);
215
gtk_widget_set_valign (grid, GTK_ALIGN_CENTER);
216
203
gtk_grid_set_column_spacing (GTK_GRID (grid), 12);
217
gtk_container_add (GTK_CONTAINER (self->priv->center_group), grid);
204
gtk_container_add (GTK_CONTAINER (self->priv->center_grid), grid);
219
206
self->priv->title_label = gtk_label_new (NULL);
220
207
gtk_label_set_ellipsize (GTK_LABEL (self->priv->title_label), PANGO_ELLIPSIZE_END);
226
213
gtk_style_context_add_class (gtk_widget_get_style_context (self->priv->detail_label), "dim-label");
227
214
gtk_container_add (GTK_CONTAINER (grid), self->priv->detail_label);
216
/* centered mode group */
217
self->priv->modes_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
218
gtk_box_set_homogeneous (GTK_BOX (self->priv->modes_box), TRUE);
219
gtk_widget_set_no_show_all (self->priv->modes_box, TRUE);
220
gtk_style_context_add_class (gtk_widget_get_style_context (self->priv->modes_box), "linked");
221
gtk_container_add (GTK_CONTAINER (self->priv->center_grid), self->priv->modes_box);
229
223
/* right section */
230
224
self->priv->right_group = gtk_tool_item_new ();
231
225
gtk_widget_set_margin_left (GTK_WIDGET (self->priv->right_group), 12);
257
251
oclass = G_OBJECT_CLASS (klass);
258
252
oclass->constructed = gd_main_toolbar_constructed;
253
oclass->set_property = gd_main_toolbar_set_property;
254
oclass->get_property = gd_main_toolbar_get_property;
259
255
oclass->dispose = gd_main_toolbar_dispose;
257
g_object_class_install_property (oclass,
259
g_param_spec_boolean ("show-modes",
261
265
g_type_class_add_private (klass, sizeof (GdMainToolbarPrivate));
271
275
/* clear all added buttons */
272
276
gtk_container_foreach (GTK_CONTAINER (self->priv->left_grid),
273
277
(GtkCallback) gtk_widget_destroy, self);
278
gtk_container_foreach (GTK_CONTAINER (self->priv->modes_box),
279
(GtkCallback) gtk_widget_destroy, self);
274
280
gtk_container_foreach (GTK_CONTAINER (self->priv->right_grid),
275
281
(GtkCallback) gtk_widget_destroy, self);
323
329
return g_object_new (GD_TYPE_MAIN_TOOLBAR, NULL);
327
add_button_internal (GdMainToolbar *self,
328
const gchar *icon_name,
335
if (icon_name != NULL)
337
button = get_symbolic_button (icon_name, type);
339
gtk_widget_set_tooltip_text (button, label);
341
else if (label != NULL)
343
button = get_text_button (label, type);
347
button = get_empty_button (type);
350
gd_main_toolbar_add_widget (self, button, pack_start);
352
gtk_widget_show_all (button);
358
333
* gd_main_toolbar_set_labels_menu:
367
342
GtkWidget *button, *grid, *w;
369
344
if (menu == NULL &&
370
((gtk_widget_get_parent (self->priv->labels_grid) == GTK_WIDGET (self->priv->center_group)) ||
345
((gtk_widget_get_parent (self->priv->labels_grid) == self->priv->center_grid) ||
371
346
self->priv->center_menu_child == NULL))
374
349
if (menu != NULL)
376
351
g_object_ref (self->priv->labels_grid);
377
gtk_container_remove (GTK_CONTAINER (self->priv->center_group),
352
gtk_container_remove (GTK_CONTAINER (self->priv->center_grid),
378
353
self->priv->labels_grid);
380
355
self->priv->center_menu_child = grid = gtk_grid_new ();
405
380
self->priv->center_menu = NULL;
406
381
self->priv->center_menu_child = NULL;
408
gtk_container_add (GTK_CONTAINER (self->priv->center_group),
383
gtk_container_add (GTK_CONTAINER (self->priv->center_grid),
409
384
self->priv->labels_grid);
410
385
g_object_unref (self->priv->labels_grid);
413
gtk_widget_show_all (GTK_WIDGET (self->priv->center_group));
388
gtk_widget_show_all (self->priv->center_grid);
392
* gd_main_toolbar_add_mode:
396
* Returns: (transfer none):
399
gd_main_toolbar_add_mode (GdMainToolbar *self,
405
button = gtk_radio_button_new_with_label (NULL, label);
406
gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button), FALSE);
407
gtk_widget_set_size_request (button, 100, -1);
408
gtk_style_context_add_class (gtk_widget_get_style_context (button), "raised");
409
gtk_style_context_add_class (gtk_widget_get_style_context (button), "text-button");
411
group = gtk_container_get_children (GTK_CONTAINER (self->priv->modes_box));
414
gtk_radio_button_join_group (GTK_RADIO_BUTTON (button), GTK_RADIO_BUTTON (group->data));
418
gtk_container_add (GTK_CONTAINER (self->priv->modes_box), button);
419
gtk_widget_show (button);
428
436
const gchar *label,
429
437
gboolean pack_start)
431
return add_button_internal (self, icon_name, label, pack_start, CHILD_NORMAL);
439
GtkWidget *button = gd_header_simple_button_new ();
441
gd_header_button_set_symbolic_icon_name (GD_HEADER_BUTTON (button), icon_name);
442
gd_header_button_set_label (GD_HEADER_BUTTON (button), label);
444
gd_main_toolbar_add_widget (self, button, pack_start);
446
461
const gchar *label,
447
462
gboolean pack_start)
449
return add_button_internal (self, icon_name, label, pack_start, CHILD_MENU);
464
GtkWidget *button = gd_header_menu_button_new ();
466
gd_header_button_set_symbolic_icon_name (GD_HEADER_BUTTON (button), icon_name);
467
gd_header_button_set_label (GD_HEADER_BUTTON (button), label);
469
gd_main_toolbar_add_widget (self, button, pack_start);
464
486
const gchar *label,
465
487
gboolean pack_start)
467
return add_button_internal (self, icon_name, label, pack_start, CHILD_TOGGLE);
489
GtkWidget *button = gd_header_toggle_button_new ();
491
gd_header_button_set_symbolic_icon_name (GD_HEADER_BUTTON (button), icon_name);
492
gd_header_button_set_label (GD_HEADER_BUTTON (button), label);
494
gd_main_toolbar_add_widget (self, button, pack_start);