2 * This file is a part of hildon
4 * Copyright (C) 2008 Nokia Corporation, all rights reserved.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser Public License as published by
8 * the Free Software Foundation; version 2 of the license.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Lesser Public License for more details.
18 * SECTION:hildon-edit-toolbar
19 * @short_description: Widget representing a toolbar for editing.
21 * The #HildonEditToolbar is a toolbar which contains a label and two
22 * buttons, one of them being an arrow pointing backwards.
24 * The label is a description of the action that the user is supposed
25 * to do. The button is to be pressed when the user completes the
26 * action. The arrow is used to go back to the previous view
27 * discarding any changes.
29 * Note that those widgets don't do anything themselves by default. To
30 * actually peform actions the developer must provide callbacks for
34 #include "hildon-edit-toolbar.h"
35 #include "hildon-gtk.h"
37 G_DEFINE_TYPE (HildonEditToolbar, hildon_edit_toolbar, GTK_TYPE_HBOX);
39 #define HILDON_EDIT_TOOLBAR_GET_PRIVATE(obj) \
40 (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
41 HILDON_TYPE_EDIT_TOOLBAR, HildonEditToolbarPrivate));
43 typedef struct _HildonEditToolbarPrivate HildonEditToolbarPrivate;
45 struct _HildonEditToolbarPrivate
58 static guint toolbar_signals [N_SIGNALS] = { 0 };
62 hildon_edit_toolbar_class_init (HildonEditToolbarClass *klass)
64 GObjectClass *gobject_class = (GObjectClass *) klass;
66 g_type_class_add_private (klass, sizeof (HildonEditToolbarPrivate));
69 * HildonEditToolbar::button-clicked:
70 * @widget: the object which received the signal.
72 * Emitted when the toolbar button has been activated (pressed and released).
75 toolbar_signals[BUTTON_CLICKED] =
76 g_signal_new ("button_clicked",
77 G_OBJECT_CLASS_TYPE (gobject_class),
80 g_cclosure_marshal_VOID__VOID,
84 * HildonEditToolbar::arrow-clicked:
85 * @widget: the object which received the signal.
87 * Emitted when the toolbar back button (arrow) has been activated
88 * (pressed and released).
91 toolbar_signals[ARROW_CLICKED] =
92 g_signal_new ("arrow_clicked",
93 G_OBJECT_CLASS_TYPE (gobject_class),
96 g_cclosure_marshal_VOID__VOID,
101 button_clicked_cb (GtkButton *self,
102 HildonEditToolbar *toolbar)
104 g_signal_emit (toolbar, toolbar_signals[BUTTON_CLICKED], 0);
108 arrow_clicked_cb (GtkButton *self,
109 HildonEditToolbar *toolbar)
111 g_signal_emit (toolbar, toolbar_signals[ARROW_CLICKED], 0);
115 hildon_edit_toolbar_init (HildonEditToolbar *self)
117 HildonEditToolbarPrivate *priv = HILDON_EDIT_TOOLBAR_GET_PRIVATE (self);
118 GtkBox *hbox = GTK_BOX (self);
120 priv->label = GTK_LABEL (gtk_label_new (NULL));
121 priv->button = GTK_BUTTON (hildon_gtk_button_new (HILDON_SIZE_AUTO_WIDTH | HILDON_SIZE_FINGER_HEIGHT));
122 priv->arrow = GTK_BUTTON (gtk_button_new ());
124 gtk_button_set_image (priv->arrow, gtk_image_new_from_stock (GTK_STOCK_GO_BACK, GTK_ICON_SIZE_LARGE_TOOLBAR));
125 gtk_button_set_relief (priv->arrow, GTK_RELIEF_NONE);
126 gtk_button_set_focus_on_click (priv->arrow, FALSE);
128 g_signal_connect (priv->button, "clicked", G_CALLBACK (button_clicked_cb), self);
129 g_signal_connect (priv->arrow, "clicked", G_CALLBACK (arrow_clicked_cb), self);
131 /* Temporary values, should be replaced by properties or fixed values from the specs */
132 gtk_box_set_spacing (hbox, 10);
133 gtk_widget_set_size_request (GTK_WIDGET (priv->arrow), 50, -1);
135 gtk_box_pack_start (hbox, GTK_WIDGET (priv->label), TRUE, TRUE, 0);
136 gtk_box_pack_start (hbox, GTK_WIDGET (priv->button), FALSE, FALSE, 0);
137 gtk_box_pack_start (hbox, GTK_WIDGET (priv->arrow), FALSE, FALSE, 0);
139 gtk_misc_set_alignment (GTK_MISC (priv->label), 0, 0.5);
141 gtk_widget_show (GTK_WIDGET (priv->label));
142 gtk_widget_show (GTK_WIDGET (priv->button));
143 gtk_widget_show (GTK_WIDGET (priv->arrow));
147 * hildon_edit_toolbar_set_label:
148 * @toolbar: a #HildonEditToolbar
149 * @label: a new text for the toolbar label
151 * Sets the label of @toolbar to @label. This will clear any
152 * previously set value.
155 hildon_edit_toolbar_set_label (HildonEditToolbar *toolbar,
158 HildonEditToolbarPrivate *priv;
159 g_return_if_fail (HILDON_IS_EDIT_TOOLBAR (toolbar));
160 priv = HILDON_EDIT_TOOLBAR_GET_PRIVATE (toolbar);
161 gtk_label_set_text (priv->label, label);
165 * hildon_edit_toolbar_set_button_label:
166 * @toolbar: a #HildonEditToolbar
167 * @label: a new text for the label of the toolbar button
169 * Sets the label of the toolbar button to @label. This will clear any
170 * previously set value.
173 hildon_edit_toolbar_set_button_label (HildonEditToolbar *toolbar,
176 HildonEditToolbarPrivate *priv;
177 g_return_if_fail (HILDON_IS_EDIT_TOOLBAR (toolbar));
178 priv = HILDON_EDIT_TOOLBAR_GET_PRIVATE (toolbar);
179 gtk_button_set_label (priv->button, label);
183 * hildon_edit_toolbar_new:
185 * Creates a new #HildonEditToolbar.
187 * Returns: a new #HildonEditToolbar
190 hildon_edit_toolbar_new (void)
192 return g_object_new (HILDON_TYPE_EDIT_TOOLBAR, NULL);
196 * hildon_edit_toolbar_new_with_text:
198 * Creates a new #HildonEditToolbar, with the toolbar label set to
199 * @label and the button label set to @button.
201 * Returns: a new #HildonEditToolbar
204 hildon_edit_toolbar_new_with_text (const gchar *label,
207 GtkWidget *toolbar = g_object_new (HILDON_TYPE_EDIT_TOOLBAR, NULL);
209 hildon_edit_toolbar_set_label (HILDON_EDIT_TOOLBAR (toolbar), label);
210 hildon_edit_toolbar_set_button_label (HILDON_EDIT_TOOLBAR (toolbar), button);