2 * This file is a part of hildon examples
4 * Copyright (C) 2008 Nokia Corporation, all rights reserved.
6 * Author: Karl Lattimer <karl.lattimer@nokia.com>
8 * Based on testhildontreeview.c by Kristian Rietveld <kris@imendio.com>
10 * This library is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public License
12 * as published by the Free Software Foundation; version 2.1 of
13 * the License, or (at your option) any later version.
15 * This library is distributed in the hope that it will be useful, but
16 * WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * Lesser General Public License for more details.
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with this library; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
28 #include <hildon/hildon.h>
32 MULTI_SELECT = 1 << 0,
44 store = gtk_list_store_new (1, G_TYPE_STRING);
46 for (i = 0; i < 50; i++)
50 str = g_strdup_printf ("\nRow %d\n", i);
51 gtk_list_store_insert_with_values (store, NULL, i, 0, str, -1);
55 return GTK_TREE_MODEL (store);
59 row_activated_callback (GtkWidget *tree_view,
61 GtkTreeViewColumn *column,
64 g_print ("row-activated emitted.\n");
68 row_insensitive_callback (GtkWidget *tree_view,
72 g_print ("row-insensitive emitted.\n");
76 create_tree_view (HildonUIMode mode,
78 gboolean multi_select)
81 GtkCellRenderer *renderer;
82 GtkTreeSelection *selection;
85 if (name && g_str_equal (name, "fremantle-widget"))
86 tree_view = hildon_gtk_tree_view_new (mode);
88 tree_view = gtk_tree_view_new ();
91 gtk_widget_set_name (tree_view, name);
93 gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
95 model = create_model ();
96 gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), model);
97 g_object_unref (model);
99 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
101 gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
102 else if (mode != HILDON_UI_MODE_NORMAL)
103 gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
105 renderer = gtk_cell_renderer_text_new ();
106 g_object_set (renderer,
108 "weight", PANGO_WEIGHT_BOLD,
111 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
121 create_tree_view_window (GtkWidget *button,
127 GtkWidget *tree_view;
128 HildonUIMode mode = 0;
130 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
131 g_signal_connect (window, "delete-event",
132 G_CALLBACK (gtk_widget_destroy), window);
133 gtk_container_set_border_width (GTK_CONTAINER (window), 6);
135 sw = hildon_pannable_area_new ();
136 gtk_container_add (GTK_CONTAINER (window), sw);
138 if ((GPOINTER_TO_INT (user_data) & NORMAL_MODE) == NORMAL_MODE)
140 mode = HILDON_UI_MODE_NORMAL;
141 name = "fremantle-widget";
143 else if ((GPOINTER_TO_INT (user_data) & EDIT_MODE) == EDIT_MODE)
145 mode = HILDON_UI_MODE_EDIT;
146 name = "fremantle-widget";
151 tree_view = create_tree_view (mode, name,
152 (GPOINTER_TO_INT (user_data) & MULTI_SELECT) == MULTI_SELECT);
154 /* Some signals doing printfs() to see if the behavior is correct. */
155 g_signal_connect (tree_view, "row-activated",
156 G_CALLBACK (row_activated_callback), NULL);
157 g_signal_connect (tree_view, "row-insensitive",
158 G_CALLBACK (row_insensitive_callback), NULL);
160 gtk_widget_set_size_request (tree_view, 480, 800);
161 gtk_container_add (GTK_CONTAINER (sw), tree_view);
163 gtk_widget_show_all (window);
167 main (int argc, char **argv)
176 hildon_gtk_init (&argc, &argv);
178 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
179 g_signal_connect (window, "delete-event",
180 G_CALLBACK (gtk_main_quit), NULL);
181 gtk_container_set_border_width (GTK_CONTAINER (window), 6);
183 mainbox = gtk_vbox_new (FALSE, 6);
184 gtk_container_add (GTK_CONTAINER (window), mainbox);
187 label = gtk_label_new (NULL);
188 gtk_label_set_markup (GTK_LABEL (label), "<b>Old-style behavior</b>");
189 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
190 gtk_box_pack_start (GTK_BOX (mainbox), label, FALSE, FALSE, 0);
192 padbox = gtk_hbox_new (FALSE, 6);
193 gtk_box_pack_start (GTK_BOX (mainbox), padbox, FALSE, FALSE, 6);
195 gtk_box_pack_start (GTK_BOX (padbox), gtk_label_new (" "),
198 vbox = gtk_vbox_new (FALSE, 6);
199 gtk_box_pack_start (GTK_BOX (padbox), vbox, TRUE, TRUE, 6);
201 button = gtk_button_new_with_label ("Single selection");
202 g_signal_connect (button, "clicked",
203 G_CALLBACK (create_tree_view_window), 0x0);
204 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
206 button = gtk_button_new_with_label ("Multiple selections");
207 g_signal_connect (button, "clicked",
208 G_CALLBACK (create_tree_view_window),
209 GINT_TO_POINTER (MULTI_SELECT));
210 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
213 label = gtk_label_new (NULL);
214 gtk_label_set_markup (GTK_LABEL (label), "<b>Fremantle Normal mode</b>");
215 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
216 gtk_box_pack_start (GTK_BOX (mainbox), label, FALSE, FALSE, 0);
218 padbox = gtk_hbox_new (FALSE, 6);
219 gtk_box_pack_start (GTK_BOX (mainbox), padbox, FALSE, FALSE, 6);
221 gtk_box_pack_start (GTK_BOX (padbox), gtk_label_new (" "),
224 vbox = gtk_vbox_new (FALSE, 6);
225 gtk_box_pack_start (GTK_BOX (padbox), vbox, TRUE, TRUE, 6);
227 button = gtk_button_new_with_label ("Direct activation");
228 g_signal_connect (button, "clicked",
229 G_CALLBACK (create_tree_view_window),
230 GINT_TO_POINTER (NORMAL_MODE));
231 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
234 label = gtk_label_new (NULL);
235 gtk_label_set_markup (GTK_LABEL (label), "<b>Fremantle Edit mode</b>");
236 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
237 gtk_box_pack_start (GTK_BOX (mainbox), label, FALSE, FALSE, 0);
239 padbox = gtk_hbox_new (FALSE, 6);
240 gtk_box_pack_start (GTK_BOX (mainbox), padbox, FALSE, FALSE, 6);
242 gtk_box_pack_start (GTK_BOX (padbox), gtk_label_new (" "),
245 vbox = gtk_vbox_new (FALSE, 6);
246 gtk_box_pack_start (GTK_BOX (padbox), vbox, TRUE, TRUE, 6);
248 button = gtk_button_new_with_label ("Single selection");
249 g_signal_connect (button, "clicked",
250 G_CALLBACK (create_tree_view_window),
251 GINT_TO_POINTER (EDIT_MODE));
252 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
254 button = gtk_button_new_with_label ("Multiple selections");
255 g_signal_connect (button, "clicked",
256 G_CALLBACK (create_tree_view_window),
257 GINT_TO_POINTER (EDIT_MODE | MULTI_SELECT));
258 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
261 button = gtk_button_new_with_label ("Close");
262 g_signal_connect (button, "clicked",
263 G_CALLBACK (gtk_main_quit), NULL);
264 gtk_box_pack_end (GTK_BOX (mainbox), button, FALSE, FALSE, 0);
266 gtk_box_pack_end (GTK_BOX (mainbox), gtk_hseparator_new (),
269 gtk_widget_show_all (window);