Make sure that all timeouts in HildonBanner are removed
[hildon] / examples / hildon-touch-selector-multi-cells-example.c
1 /*
2  * This file is a part of hildon examples
3  *
4  * Copyright (C) 2008 Nokia Corporation, all rights reserved.
5  *
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public License
9  * as published by the Free Software Foundation; version 2.1 of
10  * the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20  * 02110-1301 USA
21  *
22  */
23
24 #include                                        <glib.h>
25 #include                                        <gtk/gtk.h>
26 #include                                        <hildon/hildon.h>
27
28 static GtkWidget *create_selector ();
29 static GtkWidget *get_visible_content (GtkWidget * window);
30
31 static GtkWindow *parent_window = NULL;
32
33 static GtkWidget *label = NULL;
34
35 static void
36 value_changed (HildonPickerButton * button,
37                gpointer user_data)
38 {
39   HildonTouchSelector *selector;
40   gchar *aux_string = NULL;
41
42   selector = hildon_picker_button_get_selector (button);
43   aux_string = hildon_touch_selector_get_current_text (selector);
44   gtk_label_set_text (GTK_LABEL (label), aux_string);
45   g_free (aux_string);
46 }
47
48 static GtkWidget *
49 create_selector ()
50 {
51   GtkWidget *selector = NULL;
52   GSList *icon_list = NULL;
53   GtkListStore *store_icons = NULL;
54   GSList *item = NULL;
55   GtkCellRenderer *renderer = NULL;
56   HildonTouchSelectorColumn *column = NULL;
57
58   selector = hildon_touch_selector_new ();
59
60   icon_list = gtk_stock_list_ids ();
61
62   store_icons = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
63   for (item = icon_list; item; item = g_slist_next (item)) {
64     GtkTreeIter iter;
65     GtkStockItem stock_item;
66     gchar *stock_id;
67
68     stock_id = (gchar *)item->data;
69     gtk_stock_lookup (stock_id, &stock_item);
70     gtk_list_store_append (store_icons, &iter);
71     gtk_list_store_set (store_icons, &iter, 0, stock_id, 1, stock_item.label, -1);
72
73     g_free (stock_id);
74   }
75   g_slist_free (icon_list);
76
77   column = hildon_touch_selector_append_column (HILDON_TOUCH_SELECTOR (selector),
78                                                 GTK_TREE_MODEL (store_icons),
79                                                 NULL, NULL);
80   hildon_touch_selector_column_set_text_column (column, 1);
81
82   renderer = gtk_cell_renderer_pixbuf_new ();
83   gtk_cell_renderer_set_fixed_size (renderer, 75, 75);
84   gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (column), renderer, FALSE);
85   gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (column), renderer,
86                                   "stock-id", 0, NULL);
87
88   renderer = gtk_cell_renderer_text_new ();
89   g_object_set (renderer, "xalign", 0.5, NULL);
90   gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (column), renderer, TRUE);
91   gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (column), renderer,
92                                   "text", 1, NULL);
93
94   hildon_touch_selector_set_column_selection_mode (HILDON_TOUCH_SELECTOR (selector),
95                                                    HILDON_TOUCH_SELECTOR_SELECTION_MODE_MULTIPLE);
96
97   return selector;
98 }
99
100 static GtkWidget *
101 get_visible_content (GtkWidget * window)
102 {
103   GtkWidget *result = NULL;
104   GtkWidget *button = NULL;
105   GtkWidget *selector;
106
107   label = gtk_label_new ("Here we are going to put the selection");
108
109   button = hildon_picker_button_new (HILDON_SIZE_AUTO, HILDON_BUTTON_ARRANGEMENT_VERTICAL);
110   hildon_button_set_title (HILDON_BUTTON (button), "Click me..");
111   selector = create_selector ();
112   hildon_picker_button_set_selector (HILDON_PICKER_BUTTON (button),
113                                      HILDON_TOUCH_SELECTOR (selector));
114
115   g_signal_connect (G_OBJECT (button), "value-changed",
116                     G_CALLBACK (value_changed), window);
117
118   result = gtk_vbox_new (FALSE, 6);
119
120   gtk_container_add (GTK_CONTAINER (result), button);
121   gtk_container_add (GTK_CONTAINER (result), label);
122
123   return result;
124 }
125
126 int
127 main (int argc, char **argv)
128 {
129   HildonProgram *program = NULL;
130   GtkWidget *window = NULL;
131
132   hildon_gtk_init (&argc, &argv);
133
134   program = hildon_program_get_instance ();
135   g_set_application_name
136     ("hildon-touch-selector cell renderer example program");
137
138   window = hildon_stackable_window_new ();
139   parent_window = GTK_WINDOW (window);
140   hildon_program_add_window (program, HILDON_WINDOW (window));
141
142   gtk_container_set_border_width (GTK_CONTAINER (window), 6);
143
144   GtkWidget *vbox = get_visible_content (window);
145
146   gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (vbox));
147
148   g_signal_connect (G_OBJECT (window), "destroy",
149                     G_CALLBACK (gtk_main_quit), NULL);
150   gtk_widget_show_all (GTK_WIDGET (window));
151
152   gtk_main ();
153
154   return 0;
155 }