2008-07-31 Alberto Garcia <agarcia@igalia.com>
[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-button.h>
27
28 static void
29 button_clicked_cb                               (HildonButton *button,
30                                                  gpointer      data)
31 {
32     g_debug ("Pressed button: %s", hildon_button_get_title (button));
33 }
34
35 static void
36 vertical_buttons_window                         (void)
37 {
38     GtkWidget *win;
39     GtkWidget *button;
40     GtkBox *hbox;
41     GtkBox *vbox1;
42     GtkBox *vbox2;
43     GtkBox *vbox3;
44     int i;
45
46     /* Create window */
47     win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
48     gtk_container_set_border_width (GTK_CONTAINER (win), 20);
49
50     /* Create and pack boxes */
51     hbox = GTK_BOX (gtk_hbox_new (FALSE, 10));
52     vbox1 = GTK_BOX (gtk_vbox_new (FALSE, 10));
53     vbox2 = GTK_BOX (gtk_vbox_new (FALSE, 10));
54     vbox3 = GTK_BOX (gtk_vbox_new (FALSE, 10));
55
56     gtk_box_pack_start (hbox, GTK_WIDGET (vbox1), TRUE, TRUE, 0);
57     gtk_box_pack_start (hbox, GTK_WIDGET (vbox2), TRUE, TRUE, 0);
58     gtk_box_pack_start (hbox, GTK_WIDGET (vbox3), TRUE, TRUE, 0);
59
60     /* Finger buttons */
61     gtk_box_pack_start (vbox1, gtk_label_new ("Finger height"), FALSE, FALSE, 0);
62     for (i = 0; i < 4; i++) {
63         char *title = g_strdup_printf ("Title %d", i);
64         button = hildon_button_new_with_text (HILDON_BUTTON_WITH_VERTICAL_VALUE |
65                                               HILDON_BUTTON_FINGER_HEIGHT, title,
66                                               i % 2 ? "Value" : NULL);
67         g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
68         gtk_box_pack_start (vbox1, button, FALSE, FALSE, 0);
69         g_free (title);
70     }
71
72     /* Thumb buttons */
73     gtk_box_pack_start (vbox2, gtk_label_new ("Thumb height"), FALSE, FALSE, 0);
74     for (i = 0; i < 3; i++) {
75         char *title = g_strdup_printf ("Title %d", i);
76         button = hildon_button_new_with_text (HILDON_BUTTON_WITH_VERTICAL_VALUE |
77                                               HILDON_BUTTON_THUMB_HEIGHT, title,
78                                               i % 2 ? "Value" : NULL);
79         g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
80         gtk_box_pack_start (vbox2, button, FALSE, FALSE, 0);
81         g_free (title);
82     }
83
84     /* Auto buttons */
85     gtk_box_pack_start (vbox3, gtk_label_new ("Auto height"), FALSE, FALSE, 0);
86     for (i = 0; i < 6; i++) {
87         char *title = g_strdup_printf ("Title %d", i);
88         button = hildon_button_new_with_text (HILDON_BUTTON_WITH_VERTICAL_VALUE, title,
89                                               i % 2 ? "Value" : NULL);
90         g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
91         gtk_box_pack_start (vbox3, button, FALSE, FALSE, 0);
92         g_free (title);
93     }
94
95     gtk_container_add (GTK_CONTAINER (win), GTK_WIDGET (hbox));
96
97     g_signal_connect (win, "delete_event", G_CALLBACK (gtk_widget_destroy), NULL);
98
99     gtk_widget_show_all (win);
100 }
101
102 static void
103 horizontal_buttons_window                       (void)
104 {
105     GtkWidget *win;
106     GtkWidget *button;
107     GtkBox *vbox;
108     GtkBox *hbox1;
109     GtkBox *hbox2;
110     GtkBox *hbox3;
111     GtkBox *hbox4;
112
113     /* Create window */
114     win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
115     gtk_container_set_border_width (GTK_CONTAINER (win), 20);
116
117     /* Create and pack boxes */
118     vbox = GTK_BOX (gtk_vbox_new (FALSE, 10));
119     hbox1 = GTK_BOX (gtk_hbox_new (FALSE, 10));
120     hbox2 = GTK_BOX (gtk_hbox_new (FALSE, 10));
121     hbox3 = GTK_BOX (gtk_hbox_new (FALSE, 10));
122     hbox4 = GTK_BOX (gtk_hbox_new (FALSE, 10));
123
124     gtk_box_pack_start (vbox, gtk_label_new ("(all buttons have finger height)"), FALSE, FALSE, 0);
125     gtk_box_pack_start (vbox, GTK_WIDGET (hbox1), FALSE, FALSE, 0);
126     gtk_box_pack_start (vbox, GTK_WIDGET (hbox2), FALSE, FALSE, 0);
127     gtk_box_pack_start (vbox, GTK_WIDGET (hbox3), FALSE, FALSE, 0);
128     gtk_box_pack_start (vbox, GTK_WIDGET (hbox4), FALSE, FALSE, 0);
129
130     /* Full screen width button */
131     button = hildon_button_new_with_text (HILDON_BUTTON_WITH_VERTICAL_VALUE |
132                                           HILDON_BUTTON_FULLSCREEN_WIDTH |
133                                           HILDON_BUTTON_FINGER_HEIGHT, "Full width", "Value");
134     gtk_box_pack_start (hbox1, button, TRUE, TRUE, 0);
135     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
136
137     /* Half screen width buttons */
138     button = hildon_button_new_with_text (HILDON_BUTTON_WITH_VERTICAL_VALUE |
139                                           HILDON_BUTTON_HALFSCREEN_WIDTH |
140                                           HILDON_BUTTON_FINGER_HEIGHT, "Half width 1", "Value");
141     gtk_box_pack_start (hbox2, button, TRUE, TRUE, 0);
142     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
143
144     button = hildon_button_new_with_text (HILDON_BUTTON_WITH_VERTICAL_VALUE |
145                                           HILDON_BUTTON_HALFSCREEN_WIDTH |
146                                           HILDON_BUTTON_FINGER_HEIGHT,
147                                           "Half width 2 with long title",
148                                           "Value");
149     gtk_box_pack_start (hbox2, button, TRUE, TRUE, 0);
150     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
151
152     /* Half screen width buttons */
153     button = hildon_button_new_with_text (HILDON_BUTTON_WITH_VERTICAL_VALUE |
154                                           HILDON_BUTTON_HALFSCREEN_WIDTH |
155                                           HILDON_BUTTON_FINGER_HEIGHT, "Half width 3", NULL);
156     gtk_box_pack_start (hbox3, button, TRUE, TRUE, 0);
157     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
158
159     button = hildon_button_new_with_text (HILDON_BUTTON_WITH_VERTICAL_VALUE |
160                                           HILDON_BUTTON_HALFSCREEN_WIDTH |
161                                           HILDON_BUTTON_FINGER_HEIGHT,
162                                           "Half width 4 with very long title (REALLY long)",
163                                           "Value (title is truncated)");
164     gtk_box_pack_start (hbox3, button, TRUE, TRUE, 0);
165     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
166
167     /* Auto width button */
168     button = hildon_button_new_with_text (HILDON_BUTTON_WITH_VERTICAL_VALUE |
169                                           HILDON_BUTTON_AUTO_WIDTH |
170                                           HILDON_BUTTON_FINGER_HEIGHT,
171                                           "Auto width 1", "Value");
172     gtk_box_pack_start (hbox4, button, TRUE, TRUE, 0);
173     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
174
175     button = hildon_button_new_with_text (HILDON_BUTTON_WITH_VERTICAL_VALUE |
176                                           HILDON_BUTTON_AUTO_WIDTH |
177                                           HILDON_BUTTON_FINGER_HEIGHT,
178                                           "Auto width 2 with longer text", NULL);
179     gtk_box_pack_start (hbox4, button, TRUE, TRUE, 0);
180     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
181
182     gtk_container_add (GTK_CONTAINER (win), GTK_WIDGET (vbox));
183
184     g_signal_connect (win, "delete_event", G_CALLBACK (gtk_widget_destroy), NULL);
185
186     gtk_widget_show_all (win);
187 }
188
189 int
190 main                                            (int    argc,
191                                                  char **argv)
192 {
193     GtkWidget *win;
194     GtkWidget *but1;
195     GtkWidget *but2;
196     GtkWidget *label;
197     GtkBox *vbox;
198
199     gtk_init (&argc, &argv);
200
201     vbox = GTK_BOX (gtk_vbox_new (FALSE, 10));
202
203     win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
204
205     label = gtk_label_new ("HildonButton example");
206     but1 = gtk_button_new_with_label ("Buttons with different heights");
207     but2 = gtk_button_new_with_label ("Buttons with different widths");
208
209     gtk_box_pack_start (vbox, label, TRUE, TRUE, 0);
210     gtk_box_pack_start (vbox, but1, TRUE, TRUE, 0);
211     gtk_box_pack_start (vbox, but2, TRUE, TRUE, 0);
212
213     gtk_container_set_border_width (GTK_CONTAINER (win), 20);
214     gtk_container_add (GTK_CONTAINER (win), GTK_WIDGET (vbox));
215
216     g_signal_connect (but1, "clicked", G_CALLBACK (vertical_buttons_window), NULL);
217     g_signal_connect (but2, "clicked", G_CALLBACK (horizontal_buttons_window), NULL);
218     g_signal_connect (win, "delete_event", G_CALLBACK (gtk_main_quit), NULL);
219
220     gtk_widget_show_all (win);
221
222     gtk_main ();
223
224     return 0;
225 }