2 * This file is a part of hildon examples
4 * Copyright (C) 2008 Nokia Corporation, all rights reserved.
6 * Author: Karl Lattimer <karl.lattimer@nokia.com>
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public License
10 * as published by the Free Software Foundation; version 2.1 of
11 * the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
26 #include <hildon-button.h>
27 #include <hildon-stackable-window.h>
29 static GtkWidget *horizontal_layout;
30 static GtkWidget *images;
33 button_clicked_cb (HildonButton *button,
36 g_debug ("Pressed button: %s", hildon_button_get_title (button));
43 return gtk_image_new_from_stock (GTK_STOCK_INFO, GTK_ICON_SIZE_BUTTON);
47 vertical_buttons_window (GtkButton *b,
57 HildonButtonArrangement arrangement;
61 win = hildon_stackable_window_new ();
62 gtk_container_set_border_width (GTK_CONTAINER (win), 20);
64 arrangement = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (horizontal_layout)) ?
65 HILDON_BUTTON_ARRANGEMENT_HORIZONTAL :
66 HILDON_BUTTON_ARRANGEMENT_VERTICAL;
68 use_images = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (images));
70 /* Create and pack boxes */
71 hbox = GTK_BOX (gtk_hbox_new (FALSE, 10));
72 vbox1 = GTK_BOX (gtk_vbox_new (FALSE, 10));
73 vbox2 = GTK_BOX (gtk_vbox_new (FALSE, 10));
74 vbox3 = GTK_BOX (gtk_vbox_new (FALSE, 10));
76 gtk_box_pack_start (hbox, GTK_WIDGET (vbox1), TRUE, TRUE, 0);
77 gtk_box_pack_start (hbox, GTK_WIDGET (vbox2), TRUE, TRUE, 0);
78 gtk_box_pack_start (hbox, GTK_WIDGET (vbox3), TRUE, TRUE, 0);
81 gtk_box_pack_start (vbox1, gtk_label_new ("Finger height"), FALSE, FALSE, 0);
82 for (i = 0; i < 4; i++) {
83 gchar *title = g_strdup_printf ("Title %d", i);
84 button = hildon_button_new_with_text (HILDON_SIZE_FINGER_HEIGHT |
85 HILDON_SIZE_AUTO_WIDTH, arrangement, title,
86 i % 2 ? "Value" : NULL);
87 g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
88 gtk_box_pack_start (vbox1, button, FALSE, FALSE, 0);
91 hildon_button_set_image (HILDON_BUTTON (button), create_image ());
93 hildon_button_set_image_position (HILDON_BUTTON (button), GTK_POS_RIGHT);
97 gtk_box_pack_start (vbox2, gtk_label_new ("Thumb height"), FALSE, FALSE, 0);
98 for (i = 0; i < 3; i++) {
99 gchar *title = g_strdup_printf ("Title %d", i);
100 button = hildon_button_new_with_text (HILDON_SIZE_THUMB_HEIGHT |
101 HILDON_SIZE_AUTO_WIDTH, arrangement, title,
102 i % 2 ? "Value" : NULL);
103 g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
104 gtk_box_pack_start (vbox2, button, FALSE, FALSE, 0);
107 hildon_button_set_image (HILDON_BUTTON (button), create_image ());
109 hildon_button_set_image_position (HILDON_BUTTON (button), GTK_POS_RIGHT);
113 gtk_box_pack_start (vbox3, gtk_label_new ("Auto height"), FALSE, FALSE, 0);
114 for (i = 0; i < 6; i++) {
115 gchar *title = g_strdup_printf ("Title %d", i);
116 button = hildon_button_new_with_text (HILDON_SIZE_AUTO, arrangement, title,
117 i % 2 ? "Value" : NULL);
118 g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
119 gtk_box_pack_start (vbox3, button, FALSE, FALSE, 0);
122 hildon_button_set_image (HILDON_BUTTON (button), create_image ());
124 hildon_button_set_image_position (HILDON_BUTTON (button), GTK_POS_RIGHT);
127 gtk_container_add (GTK_CONTAINER (win), GTK_WIDGET (hbox));
129 g_signal_connect (win, "delete_event", G_CALLBACK (gtk_widget_destroy), NULL);
131 gtk_widget_show_all (win);
135 horizontal_buttons_window (GtkButton *b,
145 HildonButtonArrangement arrangement;
149 win = hildon_stackable_window_new ();
150 gtk_container_set_border_width (GTK_CONTAINER (win), 20);
152 arrangement = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (horizontal_layout)) ?
153 HILDON_BUTTON_ARRANGEMENT_HORIZONTAL :
154 HILDON_BUTTON_ARRANGEMENT_VERTICAL;
156 use_images = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (images));
158 /* Create and pack boxes */
159 vbox = GTK_BOX (gtk_vbox_new (FALSE, 10));
160 hbox1 = GTK_BOX (gtk_hbox_new (FALSE, 10));
161 hbox2 = GTK_BOX (gtk_hbox_new (FALSE, 10));
162 hbox3 = GTK_BOX (gtk_hbox_new (FALSE, 10));
163 hbox4 = GTK_BOX (gtk_hbox_new (FALSE, 10));
165 gtk_box_pack_start (vbox, gtk_label_new ("(all buttons have finger height)"), FALSE, FALSE, 0);
166 gtk_box_pack_start (vbox, GTK_WIDGET (hbox1), FALSE, FALSE, 0);
167 gtk_box_pack_start (vbox, GTK_WIDGET (hbox2), FALSE, FALSE, 0);
168 gtk_box_pack_start (vbox, GTK_WIDGET (hbox3), FALSE, FALSE, 0);
169 gtk_box_pack_start (vbox, GTK_WIDGET (hbox4), FALSE, FALSE, 0);
171 /* Full screen width button */
172 button = hildon_button_new_with_text (HILDON_SIZE_FULLSCREEN_WIDTH |
173 HILDON_SIZE_FINGER_HEIGHT, arrangement, "Full width", "Value");
174 gtk_box_pack_start (hbox1, button, TRUE, TRUE, 0);
175 g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
177 hildon_button_set_image (HILDON_BUTTON (button), create_image ());
179 /* Half screen width buttons */
180 button = hildon_button_new_with_text (HILDON_SIZE_HALFSCREEN_WIDTH |
181 HILDON_SIZE_FINGER_HEIGHT, arrangement, "Half width 1", "Value");
182 gtk_box_pack_start (hbox2, button, TRUE, TRUE, 0);
183 g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
185 hildon_button_set_image (HILDON_BUTTON (button), create_image ());
187 button = hildon_button_new_with_text (HILDON_SIZE_HALFSCREEN_WIDTH |
188 HILDON_SIZE_FINGER_HEIGHT, arrangement,
189 "Half width 2 with long title",
191 gtk_box_pack_start (hbox2, button, TRUE, TRUE, 0);
192 g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
194 hildon_button_set_image (HILDON_BUTTON (button), create_image ());
195 hildon_button_set_image_position (HILDON_BUTTON (button), GTK_POS_RIGHT);
197 /* Half screen width buttons */
198 button = hildon_button_new_with_text (HILDON_SIZE_HALFSCREEN_WIDTH |
199 HILDON_SIZE_FINGER_HEIGHT, arrangement, "Half width 3", NULL);
200 gtk_box_pack_start (hbox3, button, TRUE, TRUE, 0);
201 g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
203 hildon_button_set_image (HILDON_BUTTON (button), create_image ());
204 hildon_button_set_image_position (HILDON_BUTTON (button), GTK_POS_RIGHT);
206 button = hildon_button_new_with_text (HILDON_SIZE_HALFSCREEN_WIDTH |
207 HILDON_SIZE_FINGER_HEIGHT, arrangement,
208 "Half width 4 with very long title (REALLY long)",
209 "Value (title is truncated)");
210 gtk_box_pack_start (hbox3, button, TRUE, TRUE, 0);
211 g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
213 hildon_button_set_image (HILDON_BUTTON (button), create_image ());
215 /* Auto width button */
216 button = hildon_button_new_with_text (HILDON_SIZE_AUTO_WIDTH |
217 HILDON_SIZE_FINGER_HEIGHT, arrangement,
218 "Auto width 1", "Value");
219 gtk_box_pack_start (hbox4, button, TRUE, TRUE, 0);
220 g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
222 hildon_button_set_image (HILDON_BUTTON (button), create_image ());
224 button = hildon_button_new_with_text (HILDON_SIZE_AUTO_WIDTH |
225 HILDON_SIZE_FINGER_HEIGHT, arrangement,
226 "Auto width 2 with longer text", NULL);
227 gtk_box_pack_start (hbox4, button, TRUE, TRUE, 0);
228 g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
230 hildon_button_set_image (HILDON_BUTTON (button), create_image ());
231 hildon_button_set_image_position (HILDON_BUTTON (button), GTK_POS_RIGHT);
233 gtk_container_add (GTK_CONTAINER (win), GTK_WIDGET (vbox));
235 g_signal_connect (win, "delete_event", G_CALLBACK (gtk_widget_destroy), NULL);
237 gtk_widget_show_all (win);
252 gtk_init (&argc, &argv);
254 vbox = GTK_BOX (gtk_vbox_new (FALSE, 10));
255 hbox = GTK_BOX (gtk_hbox_new (TRUE, 10));
257 win = hildon_stackable_window_new ();
259 label = gtk_label_new ("HildonButton example");
260 but1 = gtk_button_new_with_label ("Buttons with different heights");
261 but2 = gtk_button_new_with_label ("Buttons with different widths");
263 horizontal_layout = gtk_check_button_new_with_label ("Use horizontal layout");
264 images = gtk_check_button_new_with_label ("Use images");
265 gtk_box_pack_start (hbox, horizontal_layout, TRUE, TRUE, 0);
266 gtk_box_pack_start (hbox, images, TRUE, TRUE, 0);
267 align = gtk_alignment_new (0.5, 0.5, 0, 0);
268 gtk_container_add (GTK_CONTAINER (align), GTK_WIDGET (hbox));
270 gtk_box_pack_start (vbox, label, TRUE, TRUE, 0);
271 gtk_box_pack_start (vbox, but1, TRUE, TRUE, 0);
272 gtk_box_pack_start (vbox, but2, TRUE, TRUE, 0);
273 gtk_box_pack_start (vbox, align, FALSE, FALSE, 0);
275 gtk_container_set_border_width (GTK_CONTAINER (win), 20);
276 gtk_container_add (GTK_CONTAINER (win), GTK_WIDGET (vbox));
278 g_signal_connect (but1, "clicked", G_CALLBACK (vertical_buttons_window), NULL);
279 g_signal_connect (but2, "clicked", G_CALLBACK (horizontal_buttons_window), NULL);
280 g_signal_connect (win, "delete_event", G_CALLBACK (gtk_main_quit), NULL);
282 gtk_widget_show_all (win);