2008-07-29 Claudio Saavedra <csaavedra@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     for (i = 0; i < 4; i++) {
62         char *title = g_strdup_printf ("Finger %d", i);
63         button = hildon_button_new_with_text (HILDON_BUTTON_WITH_VERTICAL_VALUE |
64                                               HILDON_BUTTON_FINGER_HEIGHT, title, "Some value");
65         g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
66         gtk_box_pack_start (vbox1, button, FALSE, FALSE, 0);
67         g_free (title);
68     }
69
70     /* Thumb buttons */
71     for (i = 0; i < 3; i++) {
72         char *title = g_strdup_printf ("Thumb %d", i);
73         button = hildon_button_new_with_text (HILDON_BUTTON_WITH_VERTICAL_VALUE |
74                                               HILDON_BUTTON_THUMB_HEIGHT, title, "Some value");
75         g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
76         gtk_box_pack_start (vbox2, button, FALSE, FALSE, 0);
77         g_free (title);
78     }
79
80     /* Auto buttons */
81     for (i = 0; i < 4; i++) {
82         char *title = g_strdup_printf ("Auto %d", i);
83         button = hildon_button_new_with_text (HILDON_BUTTON_WITH_VERTICAL_VALUE, title, "Some value");
84         g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
85         gtk_box_pack_start (vbox3, button, FALSE, FALSE, 0);
86         g_free (title);
87     }
88
89     gtk_container_add (GTK_CONTAINER (win), GTK_WIDGET (hbox));
90
91     g_signal_connect (win, "delete_event", G_CALLBACK (gtk_widget_destroy), NULL);
92
93     gtk_widget_show_all (win);
94 }
95
96 static void
97 horizontal_buttons_window                       (void)
98 {
99     GtkWidget *win;
100     GtkWidget *button;
101     GtkBox *vbox;
102     GtkBox *hbox1;
103     GtkBox *hbox2;
104     GtkBox *hbox3;
105
106     /* Create window */
107     win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
108     gtk_container_set_border_width (GTK_CONTAINER (win), 20);
109
110     /* Create and pack boxes */
111     vbox = GTK_BOX (gtk_vbox_new (FALSE, 10));
112     hbox1 = GTK_BOX (gtk_hbox_new (FALSE, 10));
113     hbox2 = GTK_BOX (gtk_hbox_new (FALSE, 10));
114     hbox3 = GTK_BOX (gtk_hbox_new (FALSE, 10));
115
116     gtk_box_pack_start (vbox, GTK_WIDGET (hbox1), TRUE, TRUE, 0);
117     gtk_box_pack_start (vbox, GTK_WIDGET (hbox2), TRUE, TRUE, 0);
118     gtk_box_pack_start (vbox, GTK_WIDGET (hbox3), TRUE, TRUE, 0);
119
120     /* Full screen width button */
121     button = hildon_button_new_with_text (HILDON_BUTTON_WITH_VERTICAL_VALUE |
122                                           HILDON_BUTTON_FULLSCREEN_WIDTH, "Full width", "Some value");
123     gtk_box_pack_start (hbox1, button, TRUE, TRUE, 0);
124     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
125
126     /* Half screen width buttons */
127     button = hildon_button_new_with_text (HILDON_BUTTON_WITH_VERTICAL_VALUE |
128                                           HILDON_BUTTON_HALFSCREEN_WIDTH, "Half width 1", "Some value");
129     gtk_box_pack_start (hbox2, button, TRUE, TRUE, 0);
130     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
131
132     button = hildon_button_new_with_text (HILDON_BUTTON_WITH_VERTICAL_VALUE |
133                                           HILDON_BUTTON_HALFSCREEN_WIDTH, "Half width 2 with longer text", "Some value");
134     gtk_box_pack_start (hbox2, button, TRUE, TRUE, 0);
135     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
136
137     /* Auto width button */
138     button = hildon_button_new_with_text (HILDON_BUTTON_WITH_VERTICAL_VALUE, "Auto 1", "Some value");
139     gtk_box_pack_start (hbox3, button, TRUE, TRUE, 0);
140     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
141
142     button = hildon_button_new_with_text (HILDON_BUTTON_WITH_VERTICAL_VALUE, "Auto 2 with longer text", "Some value");
143     gtk_box_pack_start (hbox3, button, TRUE, TRUE, 0);
144     g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), NULL);
145
146     gtk_container_add (GTK_CONTAINER (win), GTK_WIDGET (vbox));
147
148     g_signal_connect (win, "delete_event", G_CALLBACK (gtk_widget_destroy), NULL);
149
150     gtk_widget_show_all (win);
151 }
152
153 int
154 main                                            (int    argc,
155                                                  char **argv)
156 {
157     GtkWidget *win;
158     GtkWidget *but1;
159     GtkWidget *but2;
160     GtkWidget *label;
161     GtkBox *vbox;
162
163     gtk_init (&argc, &argv);
164
165     vbox = GTK_BOX (gtk_vbox_new (FALSE, 10));
166
167     win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
168
169     label = gtk_label_new ("HildonButton example");
170     but1 = gtk_button_new_with_label ("Buttons with different heights");
171     but2 = gtk_button_new_with_label ("Buttons with differend widths");
172
173     gtk_box_pack_start (vbox, label, TRUE, TRUE, 0);
174     gtk_box_pack_start (vbox, but1, TRUE, TRUE, 0);
175     gtk_box_pack_start (vbox, but2, TRUE, TRUE, 0);
176
177     gtk_container_set_border_width (GTK_CONTAINER (win), 20);
178     gtk_container_add (GTK_CONTAINER (win), GTK_WIDGET (vbox));
179
180     g_signal_connect (but1, "clicked", G_CALLBACK (vertical_buttons_window), NULL);
181     g_signal_connect (but2, "clicked", G_CALLBACK (horizontal_buttons_window), NULL);
182     g_signal_connect (win, "delete_event", G_CALLBACK (gtk_main_quit), NULL);
183
184     gtk_widget_show_all (win);
185
186     gtk_main ();
187
188     return 0;
189 }