Make sure that all timeouts in HildonBanner are removed
[hildon] / examples / hildon-button-example.c
1 /*
2  * This file is a part of hildon examples
3  *
4  * Copyright (C) 2008 Nokia Corporation, all rights reserved.
5  *
6  * Author: Karl Lattimer <karl.lattimer@nokia.com>
7  *
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.
12  *
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.
17  *
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
21  * 02110-1301 USA
22  *
23  */
24
25 #include                                        <gtk/gtk.h>
26 #include                                        <hildon/hildon.h>
27
28 static GtkWidget *horizontal_layout;
29 static GtkWidget *images;
30
31 static void
32 button_clicked_cb                               (HildonButton *button,
33                                                  gpointer      data)
34 {
35     g_debug ("Pressed button: %s", hildon_button_get_title (button));
36 }
37
38
39 static GtkWidget *
40 create_image                                    (void)
41 {
42     return gtk_image_new_from_stock (GTK_STOCK_INFO, GTK_ICON_SIZE_BUTTON);
43 }
44
45 static void
46 vertical_buttons_window                         (GtkButton *b,
47                                                  gpointer   data)
48 {
49     GtkWidget *win;
50     GtkWidget *button;
51     GtkBox *hbox;
52     GtkBox *vbox1;
53     GtkBox *vbox2;
54     GtkBox *vbox3;
55     int i;
56     HildonButtonArrangement arrangement;
57     gboolean use_images;
58
59     /* Create window */
60     win = hildon_stackable_window_new ();
61     gtk_container_set_border_width (GTK_CONTAINER (win), 20);
62
63     arrangement = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (horizontal_layout)) ?
64             HILDON_BUTTON_ARRANGEMENT_HORIZONTAL :
65             HILDON_BUTTON_ARRANGEMENT_VERTICAL;
66
67     use_images = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (images));
68
69     /* Create and pack boxes */
70     hbox = GTK_BOX (gtk_hbox_new (FALSE, 10));
71     vbox1 = GTK_BOX (gtk_vbox_new (FALSE, 10));
72     vbox2 = GTK_BOX (gtk_vbox_new (FALSE, 10));
73     vbox3 = GTK_BOX (gtk_vbox_new (FALSE, 10));
74
75     gtk_box_pack_start (hbox, GTK_WIDGET (vbox1), TRUE, TRUE, 0);
76     gtk_box_pack_start (hbox, GTK_WIDGET (vbox2), TRUE, TRUE, 0);
77     gtk_box_pack_start (hbox, GTK_WIDGET (vbox3), TRUE, TRUE, 0);
78
79     /* Finger buttons */
80     gtk_box_pack_start (vbox1, gtk_label_new ("Finger height"), FALSE, FALSE, 0);
81     for (i = 0; i < 4; i++) {
82         gchar *title = g_strdup_printf ("Title %d", i);
83         button = hildon_button_new_with_text (HILDON_SIZE_FINGER_HEIGHT |
84                                               HILDON_SIZE_AUTO_WIDTH, arrangement, title,
85                                               i % 2 ? "Value" : NULL);
86         g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
87         gtk_box_pack_start (vbox1, button, FALSE, FALSE, 0);
88         g_free (title);
89         if (use_images)
90             hildon_button_set_image (HILDON_BUTTON (button), create_image ());
91         if (i % 2 == 0)
92             hildon_button_set_image_position (HILDON_BUTTON (button), GTK_POS_RIGHT);
93     }
94
95     /* Thumb buttons */
96     gtk_box_pack_start (vbox2, gtk_label_new ("Thumb height"), FALSE, FALSE, 0);
97     for (i = 0; i < 3; i++) {
98         gchar *title = g_strdup_printf ("Title %d", i);
99         button = hildon_button_new_with_text (HILDON_SIZE_THUMB_HEIGHT |
100                                               HILDON_SIZE_AUTO_WIDTH, arrangement, title,
101                                               i % 2 ? "Value" : NULL);
102         g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
103         gtk_box_pack_start (vbox2, button, FALSE, FALSE, 0);
104         g_free (title);
105         if (use_images)
106             hildon_button_set_image (HILDON_BUTTON (button), create_image ());
107         if (i % 2 == 0)
108             hildon_button_set_image_position (HILDON_BUTTON (button), GTK_POS_RIGHT);
109     }
110
111     /* Auto buttons */
112     gtk_box_pack_start (vbox3, gtk_label_new ("Auto height"), FALSE, FALSE, 0);
113     for (i = 0; i < 6; i++) {
114         gchar *title = g_strdup_printf ("Title %d", i);
115         button = hildon_button_new_with_text (HILDON_SIZE_AUTO, arrangement, title,
116                                               i % 2 ? "Value" : NULL);
117         g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
118         gtk_box_pack_start (vbox3, button, FALSE, FALSE, 0);
119         g_free (title);
120         if (use_images)
121             hildon_button_set_image (HILDON_BUTTON (button), create_image ());
122         if (i % 2 == 0)
123             hildon_button_set_image_position (HILDON_BUTTON (button), GTK_POS_RIGHT);
124     }
125
126     gtk_container_add (GTK_CONTAINER (win), GTK_WIDGET (hbox));
127
128     gtk_widget_show_all (win);
129 }
130
131 static void
132 horizontal_buttons_window                       (GtkButton *b,
133                                                  gpointer   data)
134 {
135     GtkWidget *win;
136     GtkWidget *button;
137     GtkBox *vbox;
138     GtkBox *hbox1;
139     GtkBox *hbox2;
140     GtkBox *hbox3;
141     GtkBox *hbox4;
142     HildonButtonArrangement arrangement;
143     gboolean use_images;
144
145     /* Create window */
146     win = hildon_stackable_window_new ();
147     gtk_container_set_border_width (GTK_CONTAINER (win), 20);
148
149     arrangement = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (horizontal_layout)) ?
150             HILDON_BUTTON_ARRANGEMENT_HORIZONTAL :
151             HILDON_BUTTON_ARRANGEMENT_VERTICAL;
152
153     use_images = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (images));
154
155     /* Create and pack boxes */
156     vbox = GTK_BOX (gtk_vbox_new (FALSE, 10));
157     hbox1 = GTK_BOX (gtk_hbox_new (FALSE, 10));
158     hbox2 = GTK_BOX (gtk_hbox_new (FALSE, 10));
159     hbox3 = GTK_BOX (gtk_hbox_new (FALSE, 10));
160     hbox4 = GTK_BOX (gtk_hbox_new (FALSE, 10));
161
162     gtk_box_pack_start (vbox, gtk_label_new ("(all buttons have finger height)"), FALSE, FALSE, 0);
163     gtk_box_pack_start (vbox, GTK_WIDGET (hbox1), FALSE, FALSE, 0);
164     gtk_box_pack_start (vbox, GTK_WIDGET (hbox2), FALSE, FALSE, 0);
165     gtk_box_pack_start (vbox, GTK_WIDGET (hbox3), FALSE, FALSE, 0);
166     gtk_box_pack_start (vbox, GTK_WIDGET (hbox4), FALSE, FALSE, 0);
167
168     /* Full screen width button */
169     button = hildon_button_new_with_text (HILDON_SIZE_FULLSCREEN_WIDTH |
170                                           HILDON_SIZE_FINGER_HEIGHT, arrangement, "Full width", "Value");
171     gtk_box_pack_start (hbox1, button, TRUE, TRUE, 0);
172     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
173     if (use_images)
174         hildon_button_set_image (HILDON_BUTTON (button), create_image ());
175
176     /* Half screen width buttons */
177     button = hildon_button_new_with_text (HILDON_SIZE_HALFSCREEN_WIDTH |
178                                           HILDON_SIZE_FINGER_HEIGHT, arrangement, "Half width 1", "Value");
179     gtk_box_pack_start (hbox2, button, TRUE, TRUE, 0);
180     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
181     if (use_images)
182         hildon_button_set_image (HILDON_BUTTON (button), create_image ());
183
184     button = hildon_button_new_with_text (HILDON_SIZE_HALFSCREEN_WIDTH |
185                                           HILDON_SIZE_FINGER_HEIGHT, arrangement,
186                                           "Half width 2 with long title",
187                                           "Value");
188     gtk_box_pack_start (hbox2, button, TRUE, TRUE, 0);
189     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
190     if (use_images)
191         hildon_button_set_image (HILDON_BUTTON (button), create_image ());
192     hildon_button_set_image_position (HILDON_BUTTON (button), GTK_POS_RIGHT);
193
194     /* Half screen width buttons */
195     button = hildon_button_new_with_text (HILDON_SIZE_HALFSCREEN_WIDTH |
196                                           HILDON_SIZE_FINGER_HEIGHT, arrangement, "Half width 3", NULL);
197     gtk_box_pack_start (hbox3, button, TRUE, TRUE, 0);
198     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
199     if (use_images)
200         hildon_button_set_image (HILDON_BUTTON (button), create_image ());
201     hildon_button_set_image_position (HILDON_BUTTON (button), GTK_POS_RIGHT);
202
203     button = hildon_button_new_with_text (HILDON_SIZE_HALFSCREEN_WIDTH |
204                                           HILDON_SIZE_FINGER_HEIGHT, arrangement,
205                                           "Half width 4 with very long title (REALLY long)",
206                                           "Value (title is truncated)");
207     gtk_box_pack_start (hbox3, button, TRUE, TRUE, 0);
208     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
209     if (use_images)
210         hildon_button_set_image (HILDON_BUTTON (button), create_image ());
211
212     /* Auto width button */
213     button = hildon_button_new_with_text (HILDON_SIZE_AUTO_WIDTH |
214                                           HILDON_SIZE_FINGER_HEIGHT, arrangement,
215                                           "Auto width 1", "Value");
216     gtk_box_pack_start (hbox4, button, TRUE, TRUE, 0);
217     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
218     if (use_images)
219         hildon_button_set_image (HILDON_BUTTON (button), create_image ());
220
221     button = hildon_button_new_with_text (HILDON_SIZE_AUTO_WIDTH |
222                                           HILDON_SIZE_FINGER_HEIGHT, arrangement,
223                                           "Auto width 2 with longer text", NULL);
224     gtk_box_pack_start (hbox4, button, TRUE, TRUE, 0);
225     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
226     if (use_images)
227         hildon_button_set_image (HILDON_BUTTON (button), create_image ());
228     hildon_button_set_image_position (HILDON_BUTTON (button), GTK_POS_RIGHT);
229
230     gtk_container_add (GTK_CONTAINER (win), GTK_WIDGET (vbox));
231
232     gtk_widget_show_all (win);
233 }
234
235 static void
236 common_buttons_window                           (GtkButton *b,
237                                                  gpointer   data)
238 {
239     GtkWidget *win;
240     GtkWidget *button;
241     GtkWidget *panarea;
242     GtkBox *vbox;
243     GtkSizeGroup *title1, *value1, *title2, *value2, *centered;
244
245     /* Create window */
246     win = hildon_stackable_window_new ();
247     gtk_container_set_border_width (GTK_CONTAINER (win), 20);
248
249     panarea = hildon_pannable_area_new ();
250     vbox = GTK_BOX (gtk_vbox_new (FALSE, 10));
251
252     /* Single centered title */
253     button = hildon_button_new_with_text (HILDON_SIZE_AUTO_WIDTH |
254                                           HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_VERTICAL,
255                                           "Centered title", NULL);
256     gtk_box_pack_start (vbox, button, FALSE, FALSE, 0);
257     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
258
259     /* Single left-aligned title */
260     button = hildon_button_new_with_text (HILDON_SIZE_AUTO_WIDTH |
261                                           HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_VERTICAL,
262                                           "Left-aligned title", NULL);
263     gtk_button_set_alignment (GTK_BUTTON (button), 0.0, 0.5);
264     gtk_box_pack_start (vbox, button, FALSE, FALSE, 0);
265     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
266
267     /* Single right-aligned title */
268     button = hildon_button_new_with_text (HILDON_SIZE_AUTO_WIDTH |
269                                           HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_VERTICAL,
270                                           "Right-aligned title", NULL);
271     gtk_button_set_alignment (GTK_BUTTON (button), 1.0, 0.5);
272     gtk_box_pack_start (vbox, button, FALSE, FALSE, 0);
273     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
274
275     gtk_box_pack_start (vbox, gtk_hseparator_new (), FALSE, FALSE, 0);
276
277     /* Centered title and value */
278     button = hildon_button_new_with_text (HILDON_SIZE_AUTO_WIDTH |
279                                           HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_VERTICAL,
280                                           "Centered title", "Centered value");
281     hildon_button_set_title_alignment (HILDON_BUTTON (button), 0.5, 0.5);
282     hildon_button_set_value_alignment (HILDON_BUTTON (button), 0.5, 0.5);
283     gtk_box_pack_start (vbox, button, FALSE, FALSE, 0);
284     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
285
286     /* Left-aligned title and value */
287     button = hildon_button_new_with_text (HILDON_SIZE_AUTO_WIDTH |
288                                           HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_VERTICAL,
289                                           "Left-aligned title", "Left-aligned value");
290     gtk_button_set_alignment (GTK_BUTTON (button), 0.0, 0.5);
291     gtk_box_pack_start (vbox, button, FALSE, FALSE, 0);
292     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
293
294     /* Right-aligned title and value */
295     button = hildon_button_new_with_text (HILDON_SIZE_AUTO_WIDTH |
296                                           HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_VERTICAL,
297                                           "Right-aligned title", "Right-aligned value");
298     gtk_button_set_alignment (GTK_BUTTON (button), 1.0, 0.5);
299     hildon_button_set_title_alignment (HILDON_BUTTON (button), 1.0, 0.5);
300     hildon_button_set_value_alignment (HILDON_BUTTON (button), 1.0, 0.5);
301     gtk_box_pack_start (vbox, button, FALSE, FALSE, 0);
302     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
303
304     gtk_box_pack_start (vbox, gtk_hseparator_new (), FALSE, FALSE, 0);
305
306     /* Left-aligned title and value (with image) */
307     button = hildon_button_new_with_text (HILDON_SIZE_AUTO_WIDTH |
308                                           HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_VERTICAL,
309                                           "Left-aligned title (with image)", "Left-aligned value");
310     hildon_button_set_alignment (HILDON_BUTTON (button), 0.0, 0.5, 1.0, 0.0);
311     hildon_button_set_image (HILDON_BUTTON (button), create_image ());
312     hildon_button_set_image_position (HILDON_BUTTON (button), GTK_POS_RIGHT);
313     gtk_box_pack_start (vbox, button, FALSE, FALSE, 0);
314     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
315
316     /* Right-aligned title and value (with image) */
317     button = hildon_button_new_with_text (HILDON_SIZE_AUTO_WIDTH |
318                                           HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_VERTICAL,
319                                           "Right-aligned title (with image)", "Right-aligned value");
320     hildon_button_set_alignment (HILDON_BUTTON (button), 1.0, 0.5, 1.0, 0.0);
321     hildon_button_set_title_alignment (HILDON_BUTTON (button), 1.0, 0.5);
322     hildon_button_set_value_alignment (HILDON_BUTTON (button), 1.0, 0.5);
323     hildon_button_set_image (HILDON_BUTTON (button), create_image ());
324     hildon_button_set_image_position (HILDON_BUTTON (button), GTK_POS_LEFT);
325     gtk_box_pack_start (vbox, button, FALSE, FALSE, 0);
326     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
327
328     gtk_box_pack_start (vbox, gtk_hseparator_new (), FALSE, FALSE, 0);
329
330     /* Centered title and value (horizontal) */
331     button = hildon_button_new_with_text (HILDON_SIZE_AUTO_WIDTH |
332                                           HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_HORIZONTAL,
333                                           "Centered labels", "Left and right margins are the same");
334     gtk_box_pack_start (vbox, button, FALSE, FALSE, 0);
335     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
336
337     /* Left-aligned title, right-aligned value (horizontal) */
338     button = hildon_button_new_with_text (HILDON_SIZE_AUTO_WIDTH |
339                                           HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_HORIZONTAL,
340                                           "Left-aligned title", "Right-aligned value");
341     hildon_button_set_alignment (HILDON_BUTTON (button), 0.5, 0.5, 1.0, 0.0);
342     gtk_box_pack_start (vbox, button, FALSE, FALSE, 0);
343     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
344
345     gtk_box_pack_start (vbox, gtk_hseparator_new (), FALSE, FALSE, 0);
346
347     /* Centered title and value (horizontal) */
348     centered = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
349     button = hildon_button_new_with_text (HILDON_SIZE_AUTO_WIDTH |
350                                           HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_HORIZONTAL,
351                                           "Same sized labels", "All using the same size group");
352     hildon_button_set_title_alignment (HILDON_BUTTON (button), 1.0, 0.5);
353     hildon_button_add_size_groups (HILDON_BUTTON (button), centered, centered, NULL);
354     gtk_box_pack_start (vbox, button, FALSE, FALSE, 0);
355     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
356
357     /* Centered title and value (horizontal) */
358     button = hildon_button_new_with_text (HILDON_SIZE_AUTO_WIDTH |
359                                           HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_HORIZONTAL,
360                                           "Labels aligned to the center", "Both buttons are aligned");
361     hildon_button_set_title_alignment (HILDON_BUTTON (button), 1.0, 0.5);
362     hildon_button_add_size_groups (HILDON_BUTTON (button), centered, centered, NULL);
363     gtk_box_pack_start (vbox, button, FALSE, FALSE, 0);
364     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
365
366     gtk_box_pack_start (vbox, gtk_hseparator_new (), FALSE, FALSE, 0);
367
368     /* Left-aligned title and value (horizontal) */
369     title1 = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
370     value1 = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
371     button = hildon_button_new_with_text (HILDON_SIZE_AUTO_WIDTH |
372                                           HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_HORIZONTAL,
373                                           "Left-aligned title", "Left-aligned value");
374     gtk_button_set_alignment (GTK_BUTTON (button), 0.0, 0.5);
375     hildon_button_add_size_groups (HILDON_BUTTON (button), title1, value1, NULL);
376     gtk_box_pack_start (vbox, button, FALSE, FALSE, 0);
377     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
378
379     /* Left-aligned title and value (horizontal), sharing the same GtkSizeGroup */
380     button = hildon_button_new_with_text (HILDON_SIZE_AUTO_WIDTH |
381                                           HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_HORIZONTAL,
382                                           "Left-aligned title (2)", "Left-aligned value (2)");
383     gtk_button_set_alignment (GTK_BUTTON (button), 0.0, 0.5);
384     hildon_button_add_size_groups (HILDON_BUTTON (button), title1, value1, NULL);
385     gtk_box_pack_start (vbox, button, FALSE, FALSE, 0);
386     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
387
388     gtk_box_pack_start (vbox, gtk_hseparator_new (), FALSE, FALSE, 0);
389
390     /* Right-aligned title and value (horizontal) */
391     title2 = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
392     value2 = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
393     button = hildon_button_new_with_text (HILDON_SIZE_AUTO_WIDTH |
394                                           HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_HORIZONTAL,
395                                           "Right-aligned title", "Right-aligned value");
396     gtk_button_set_alignment (GTK_BUTTON (button), 1.0, 0.5);
397     hildon_button_set_title_alignment (HILDON_BUTTON (button), 1.0, 0.5);
398     hildon_button_set_value_alignment (HILDON_BUTTON (button), 1.0, 0.5);
399     hildon_button_add_size_groups (HILDON_BUTTON (button), title2, value2, NULL);
400     gtk_box_pack_start (vbox, button, FALSE, FALSE, 0);
401     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
402
403     /* Right-aligned title and value (horizontal), sharing the same GtkSizeGroup */
404     button = hildon_button_new_with_text (HILDON_SIZE_AUTO_WIDTH |
405                                           HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_HORIZONTAL,
406                                           "Right-aligned title (2)", "Right-aligned value (2)");
407     gtk_button_set_alignment (GTK_BUTTON (button), 1.0, 0.5);
408     hildon_button_set_title_alignment (HILDON_BUTTON (button), 1.0, 0.5);
409     hildon_button_set_value_alignment (HILDON_BUTTON (button), 1.0, 0.5);
410     hildon_button_add_size_groups (HILDON_BUTTON (button), title2, value2, NULL);
411     gtk_box_pack_start (vbox, button, FALSE, FALSE, 0);
412     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
413
414     /* Pack widgets */
415     hildon_pannable_area_add_with_viewport (HILDON_PANNABLE_AREA (panarea), GTK_WIDGET (vbox));
416     gtk_container_add (GTK_CONTAINER (win), panarea);
417
418     g_object_unref (title1);
419     g_object_unref (value1);
420     g_object_unref (title2);
421     g_object_unref (value2);
422     g_object_unref (centered);
423
424     gtk_widget_show_all (win);
425 }
426
427 int
428 main                                            (int    argc,
429                                                  char **argv)
430 {
431     GtkWidget *win;
432     GtkWidget *but1;
433     GtkWidget *but2;
434     GtkWidget *but3;
435     GtkWidget *label;
436     GtkBox *vbox;
437     GtkBox *hbox;
438     GtkWidget *align;
439
440     hildon_gtk_init (&argc, &argv);
441
442     vbox = GTK_BOX (gtk_vbox_new (FALSE, 10));
443     hbox = GTK_BOX (gtk_hbox_new (TRUE, 10));
444
445     win = hildon_stackable_window_new ();
446
447     label = gtk_label_new ("HildonButton example");
448     but1 = gtk_button_new_with_label ("Buttons with different heights");
449     but2 = gtk_button_new_with_label ("Buttons with different widths");
450     but3 = gtk_button_new_with_label ("Common button layouts");
451
452     horizontal_layout = gtk_check_button_new_with_label ("Use horizontal layout");
453     images = gtk_check_button_new_with_label ("Use images");
454     gtk_box_pack_start (hbox, horizontal_layout, TRUE, TRUE, 0);
455     gtk_box_pack_start (hbox, images, TRUE, TRUE, 0);
456     align = gtk_alignment_new (0.5, 0.5, 0, 0);
457     gtk_container_add (GTK_CONTAINER (align), GTK_WIDGET (hbox));
458
459     gtk_box_pack_start (vbox, label, TRUE, TRUE, 0);
460     gtk_box_pack_start (vbox, gtk_hseparator_new (), FALSE, FALSE, 0);
461     gtk_box_pack_start (vbox, but1, TRUE, TRUE, 0);
462     gtk_box_pack_start (vbox, but2, TRUE, TRUE, 0);
463     gtk_box_pack_start (vbox, align, FALSE, FALSE, 0);
464     gtk_box_pack_start (vbox, gtk_hseparator_new (), FALSE, FALSE, 0);
465     gtk_box_pack_start (vbox, but3, TRUE, TRUE, 0);
466
467     gtk_container_set_border_width (GTK_CONTAINER (win), 20);
468     gtk_container_add (GTK_CONTAINER (win), GTK_WIDGET (vbox));
469
470     g_signal_connect (but1, "clicked", G_CALLBACK (vertical_buttons_window), NULL);
471     g_signal_connect (but2, "clicked", G_CALLBACK (horizontal_buttons_window), NULL);
472     g_signal_connect (but3, "clicked", G_CALLBACK (common_buttons_window), NULL);
473     g_signal_connect (win, "destroy", G_CALLBACK (gtk_main_quit), NULL);
474
475     gtk_widget_show_all (win);
476
477     gtk_main ();
478
479     return 0;
480 }