2008-09-25 Alejandro Pinheiro <apinheiro@igalia.com> * src/hildon-touch-selector...
[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
27 #include "hildon-program.h"
28 #include "hildon-stackable-window.h"
29
30 #include "hildon-touch-selector.h"
31 #include "hildon-picker-dialog.h"
32 #include "hildon-picker-button.h"
33
34 static GtkWidget *create_selector ();
35 static GtkWidget *get_visible_content (GtkWidget * window);
36
37 static GtkWindow *parent_window = NULL;
38
39 static GtkWidget *label = NULL;
40
41 static void
42 value_changed (HildonPickerButton * button,
43                gpointer user_data)
44 {
45   HildonTouchSelector *selector;
46   gchar *aux_string = NULL;
47
48   selector = hildon_picker_button_get_selector (button);
49   aux_string = hildon_touch_selector_get_current_text (selector);
50   gtk_label_set_text (GTK_LABEL (label), aux_string);
51   g_free (aux_string);
52 }
53
54 static GtkWidget *
55 create_selector ()
56 {
57   GtkWidget *selector = NULL;
58   GSList *icon_list = NULL;
59   GtkListStore *store_icons = NULL;
60   GSList *item = NULL;
61   GtkCellRenderer *renderer = NULL;
62   HildonTouchSelectorColumn *column = NULL;
63
64   selector = hildon_touch_selector_new ();
65
66   icon_list = gtk_stock_list_ids ();
67
68   store_icons = gtk_list_store_new (1, G_TYPE_STRING);
69   for (item = icon_list; item; item = g_slist_next (item)) {
70     GtkTreeIter iter;
71     gchar *label = item->data;
72
73     gtk_list_store_append (store_icons, &iter);
74     gtk_list_store_set (store_icons, &iter, 0, label, -1);
75     g_free (label);
76   }
77   g_slist_free (icon_list);
78
79   column = hildon_touch_selector_append_text_column (HILDON_TOUCH_SELECTOR (selector),
80                                                      GTK_TREE_MODEL (store_icons),
81                                                      TRUE);
82
83   renderer = gtk_cell_renderer_pixbuf_new ();
84   gtk_cell_renderer_set_fixed_size (renderer, -1, 100);
85   gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (column), renderer, FALSE);
86   gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (column), renderer,
87                                   "stock-id", 0, NULL);
88
89   renderer = gtk_cell_renderer_pixbuf_new ();
90   gtk_cell_renderer_set_fixed_size (renderer, -1, 100);
91   gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (column), renderer, FALSE);
92   gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (column), renderer,
93                                   "stock-id", 0, NULL);
94   gtk_cell_layout_reorder (GTK_CELL_LAYOUT (column), renderer, 0);
95
96   hildon_touch_selector_set_column_selection_mode (HILDON_TOUCH_SELECTOR (selector),
97                                                    HILDON_TOUCH_SELECTOR_SELECTION_MODE_MULTIPLE);
98
99   return selector;
100 }
101
102 static GtkWidget *
103 get_visible_content (GtkWidget * window)
104 {
105   GtkWidget *result = NULL;
106   GtkWidget *button = NULL;
107   GtkWidget *selector;
108
109   label = gtk_label_new ("Here we are going to put the selection");
110
111   button = hildon_picker_button_new (HILDON_SIZE_AUTO, HILDON_BUTTON_ARRANGEMENT_VERTICAL);
112   hildon_button_set_title (HILDON_BUTTON (button), "Click me..");
113   selector = create_selector ();
114   hildon_picker_button_set_selector (HILDON_PICKER_BUTTON (button),
115                                      HILDON_TOUCH_SELECTOR (selector));
116
117   g_signal_connect (G_OBJECT (button), "value-changed",
118                     G_CALLBACK (value_changed), window);
119
120   result = gtk_vbox_new (FALSE, 6);
121
122   gtk_container_add (GTK_CONTAINER (result), button);
123   gtk_container_add (GTK_CONTAINER (result), label);
124
125   return result;
126 }
127
128 int
129 main (int argc, char **args)
130 {
131   HildonProgram *program = NULL;
132   GtkWidget *window = NULL;
133
134   gtk_init (&argc, &args);
135
136   program = hildon_program_get_instance ();
137   g_set_application_name
138     ("hildon-touch-selector cell renderer example program");
139
140   window = hildon_stackable_window_new ();
141   parent_window = GTK_WINDOW (window);
142   hildon_program_add_window (program, HILDON_WINDOW (window));
143
144   gtk_container_set_border_width (GTK_CONTAINER (window), 6);
145
146   gtk_rc_parse_string ("style \"fremantle-widget\" {\n"
147                        " GtkWidget::hildon-mode = 1 \n"
148                        "} widget \"*.fremantle-widget\" style \"fremantle-widget\"\n");
149
150
151   GtkWidget *vbox = get_visible_content (window);
152
153   gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (vbox));
154
155   g_signal_connect (G_OBJECT (window), "destroy",
156                     G_CALLBACK (gtk_main_quit), NULL);
157   gtk_widget_show_all (GTK_WIDGET (window));
158
159   gtk_main ();
160
161   return 0;
162 }