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
* <title>HildonEditToolbar example</title>
39
* // Declare more widgets here ...
41
* window = hildon_stackable_window_new ();
42
* vbox = gtk_vbox_new (FALSE, 10);
43
* toolbar = hildon_edit_toolbar_new_with_text ("Choose items to delete", "Delete");
44
* // Create more widgets here ...
46
* gtk_container_add (GTK_CONTAINER (window), vbox);
47
* gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0);
48
* // Pack more widgets here ...
50
* g_signal_connect (toolbar, "button-clicked", G_CALLBACK (delete_button_clicked), someparameter);
51
* g_signal_connect_swapped (toolbar, "arrow-clicked", G_CALLBACK (gtk_widget_destroy), window);
53
* gtk_widget_show_all (window);
54
* gtk_window_fullscreen (GTK_WINDOW (window));
59
#include "hildon-edit-toolbar.h"
60
#include "hildon-gtk.h"
62
G_DEFINE_TYPE (HildonEditToolbar, hildon_edit_toolbar, GTK_TYPE_HBOX);
64
#define HILDON_EDIT_TOOLBAR_GET_PRIVATE(obj) \
65
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
66
HILDON_TYPE_EDIT_TOOLBAR, HildonEditToolbarPrivate));
68
typedef struct _HildonEditToolbarPrivate HildonEditToolbarPrivate;
70
struct _HildonEditToolbarPrivate
83
static guint toolbar_signals [N_SIGNALS] = { 0 };
87
hildon_edit_toolbar_class_init (HildonEditToolbarClass *klass)
89
GObjectClass *gobject_class = (GObjectClass *) klass;
91
g_type_class_add_private (klass, sizeof (HildonEditToolbarPrivate));
94
* HildonEditToolbar::button-clicked:
95
* @widget: the object which received the signal.
97
* Emitted when the toolbar button has been activated (pressed and released).
100
toolbar_signals[BUTTON_CLICKED] =
101
g_signal_new ("button_clicked",
102
G_OBJECT_CLASS_TYPE (gobject_class),
105
g_cclosure_marshal_VOID__VOID,
109
* HildonEditToolbar::arrow-clicked:
110
* @widget: the object which received the signal.
112
* Emitted when the toolbar back button (arrow) has been activated
113
* (pressed and released).
116
toolbar_signals[ARROW_CLICKED] =
117
g_signal_new ("arrow_clicked",
118
G_OBJECT_CLASS_TYPE (gobject_class),
121
g_cclosure_marshal_VOID__VOID,
126
button_clicked_cb (GtkButton *self,
127
HildonEditToolbar *toolbar)
129
g_signal_emit (toolbar, toolbar_signals[BUTTON_CLICKED], 0);
133
arrow_clicked_cb (GtkButton *self,
134
HildonEditToolbar *toolbar)
136
g_signal_emit (toolbar, toolbar_signals[ARROW_CLICKED], 0);
140
hildon_edit_toolbar_init (HildonEditToolbar *self)
142
HildonEditToolbarPrivate *priv = HILDON_EDIT_TOOLBAR_GET_PRIVATE (self);
143
GtkBox *hbox = GTK_BOX (self);
145
priv->label = GTK_LABEL (gtk_label_new (NULL));
146
priv->button = GTK_BUTTON (hildon_gtk_button_new (HILDON_SIZE_AUTO_WIDTH | HILDON_SIZE_FINGER_HEIGHT));
147
priv->arrow = GTK_BUTTON (gtk_button_new ());
149
gtk_button_set_image (priv->arrow, gtk_image_new_from_stock (GTK_STOCK_GO_BACK, GTK_ICON_SIZE_LARGE_TOOLBAR));
150
gtk_button_set_relief (priv->arrow, GTK_RELIEF_NONE);
151
gtk_button_set_focus_on_click (priv->arrow, FALSE);
153
g_signal_connect (priv->button, "clicked", G_CALLBACK (button_clicked_cb), self);
154
g_signal_connect (priv->arrow, "clicked", G_CALLBACK (arrow_clicked_cb), self);
156
/* Temporary values, should be replaced by properties or fixed values from the specs */
157
gtk_box_set_spacing (hbox, 10);
158
gtk_widget_set_size_request (GTK_WIDGET (priv->arrow), 50, -1);
160
gtk_box_pack_start (hbox, GTK_WIDGET (priv->label), TRUE, TRUE, 0);
161
gtk_box_pack_start (hbox, GTK_WIDGET (priv->button), FALSE, FALSE, 0);
162
gtk_box_pack_start (hbox, GTK_WIDGET (priv->arrow), FALSE, FALSE, 0);
164
gtk_misc_set_alignment (GTK_MISC (priv->label), 0, 0.5);
166
gtk_widget_show (GTK_WIDGET (priv->label));
167
gtk_widget_show (GTK_WIDGET (priv->button));
168
gtk_widget_show (GTK_WIDGET (priv->arrow));
172
* hildon_edit_toolbar_set_label:
173
* @toolbar: a #HildonEditToolbar
174
* @label: a new text for the toolbar label
176
* Sets the label of @toolbar to @label. This will clear any
177
* previously set value.
180
hildon_edit_toolbar_set_label (HildonEditToolbar *toolbar,
183
HildonEditToolbarPrivate *priv;
184
g_return_if_fail (HILDON_IS_EDIT_TOOLBAR (toolbar));
185
priv = HILDON_EDIT_TOOLBAR_GET_PRIVATE (toolbar);
186
gtk_label_set_text (priv->label, label);
190
* hildon_edit_toolbar_set_button_label:
191
* @toolbar: a #HildonEditToolbar
192
* @label: a new text for the label of the toolbar button
194
* Sets the label of the toolbar button to @label. This will clear any
195
* previously set value.
198
hildon_edit_toolbar_set_button_label (HildonEditToolbar *toolbar,
201
HildonEditToolbarPrivate *priv;
202
g_return_if_fail (HILDON_IS_EDIT_TOOLBAR (toolbar));
203
priv = HILDON_EDIT_TOOLBAR_GET_PRIVATE (toolbar);
204
gtk_button_set_label (priv->button, label);
208
* hildon_edit_toolbar_new:
210
* Creates a new #HildonEditToolbar.
212
* Returns: a new #HildonEditToolbar
215
hildon_edit_toolbar_new (void)
217
return g_object_new (HILDON_TYPE_EDIT_TOOLBAR, NULL);
221
* hildon_edit_toolbar_new_with_text:
223
* Creates a new #HildonEditToolbar, with the toolbar label set to
224
* @label and the button label set to @button.
226
* Returns: a new #HildonEditToolbar
229
hildon_edit_toolbar_new_with_text (const gchar *label,
232
GtkWidget *toolbar = g_object_new (HILDON_TYPE_EDIT_TOOLBAR, NULL);
234
hildon_edit_toolbar_set_label (HILDON_EDIT_TOOLBAR (toolbar), label);
235
hildon_edit_toolbar_set_button_label (HILDON_EDIT_TOOLBAR (toolbar), button);