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-pannable-area.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;
84 tree_view = g_object_new (GTK_TYPE_TREE_VIEW,
85 "model", create_model (),
87 "hildon-ui-mode", mode,
91 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
93 gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
94 else if (mode != HILDON_UI_MODE_NORMAL)
95 gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
97 renderer = gtk_cell_renderer_text_new ();
98 g_object_set (renderer,
100 "weight", PANGO_WEIGHT_BOLD,
103 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
113 create_tree_view_window (GtkWidget *button,
119 GtkWidget *tree_view;
120 HildonUIMode mode = 0;
122 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
123 g_signal_connect (window, "delete-event",
124 G_CALLBACK (gtk_widget_destroy), window);
125 gtk_container_set_border_width (GTK_CONTAINER (window), 6);
127 sw = hildon_pannable_area_new ();
128 gtk_container_add (GTK_CONTAINER (window), sw);
130 if ((GPOINTER_TO_INT (user_data) & NORMAL_MODE) == NORMAL_MODE)
132 mode = HILDON_UI_MODE_NORMAL;
133 name = "fremantle-widget";
135 else if ((GPOINTER_TO_INT (user_data) & EDIT_MODE) == EDIT_MODE)
137 mode = HILDON_UI_MODE_EDIT;
138 name = "fremantle-widget";
143 tree_view = create_tree_view (mode, name,
144 (GPOINTER_TO_INT (user_data) & MULTI_SELECT) == MULTI_SELECT);
146 /* Some signals doing printfs() to see if the behavior is correct. */
147 g_signal_connect (tree_view, "row-activated",
148 G_CALLBACK (row_activated_callback), NULL);
149 g_signal_connect (tree_view, "row-insensitive",
150 G_CALLBACK (row_insensitive_callback), NULL);
152 gtk_widget_set_size_request (tree_view, 480, 800);
153 gtk_container_add (GTK_CONTAINER (sw), tree_view);
155 gtk_widget_show_all (window);
159 main (int argc, char **argv)
168 gtk_init (&argc, &argv);
170 gtk_rc_parse_string ("style \"fremantle-widget\" {\n"
171 " GtkWidget::hildon-mode = 1\n"
172 "} widget \"*.fremantle-widget\" style \"fremantle-widget\"");
174 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
175 g_signal_connect (window, "delete-event",
176 G_CALLBACK (gtk_main_quit), NULL);
177 gtk_container_set_border_width (GTK_CONTAINER (window), 6);
179 mainbox = gtk_vbox_new (FALSE, 6);
180 gtk_container_add (GTK_CONTAINER (window), mainbox);
183 label = gtk_label_new (NULL);
184 gtk_label_set_markup (GTK_LABEL (label), "<b>Old-style behavior</b>");
185 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
186 gtk_box_pack_start (GTK_BOX (mainbox), label, FALSE, FALSE, 0);
188 padbox = gtk_hbox_new (FALSE, 6);
189 gtk_box_pack_start (GTK_BOX (mainbox), padbox, FALSE, FALSE, 6);
191 gtk_box_pack_start (GTK_BOX (padbox), gtk_label_new (" "),
194 vbox = gtk_vbox_new (FALSE, 6);
195 gtk_box_pack_start (GTK_BOX (padbox), vbox, TRUE, TRUE, 6);
197 button = gtk_button_new_with_label ("Single selection");
198 g_signal_connect (button, "clicked",
199 G_CALLBACK (create_tree_view_window), 0x0);
200 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
202 button = gtk_button_new_with_label ("Multiple selections");
203 g_signal_connect (button, "clicked",
204 G_CALLBACK (create_tree_view_window),
205 GINT_TO_POINTER (MULTI_SELECT));
206 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
209 label = gtk_label_new (NULL);
210 gtk_label_set_markup (GTK_LABEL (label), "<b>Fremantle Normal mode</b>");
211 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
212 gtk_box_pack_start (GTK_BOX (mainbox), label, FALSE, FALSE, 0);
214 padbox = gtk_hbox_new (FALSE, 6);
215 gtk_box_pack_start (GTK_BOX (mainbox), padbox, FALSE, FALSE, 6);
217 gtk_box_pack_start (GTK_BOX (padbox), gtk_label_new (" "),
220 vbox = gtk_vbox_new (FALSE, 6);
221 gtk_box_pack_start (GTK_BOX (padbox), vbox, TRUE, TRUE, 6);
223 button = gtk_button_new_with_label ("Direct activation");
224 g_signal_connect (button, "clicked",
225 G_CALLBACK (create_tree_view_window),
226 GINT_TO_POINTER (NORMAL_MODE));
227 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
230 label = gtk_label_new (NULL);
231 gtk_label_set_markup (GTK_LABEL (label), "<b>Fremantle Edit mode</b>");
232 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
233 gtk_box_pack_start (GTK_BOX (mainbox), label, FALSE, FALSE, 0);
235 padbox = gtk_hbox_new (FALSE, 6);
236 gtk_box_pack_start (GTK_BOX (mainbox), padbox, FALSE, FALSE, 6);
238 gtk_box_pack_start (GTK_BOX (padbox), gtk_label_new (" "),
241 vbox = gtk_vbox_new (FALSE, 6);
242 gtk_box_pack_start (GTK_BOX (padbox), vbox, TRUE, TRUE, 6);
244 button = gtk_button_new_with_label ("Single selection");
245 g_signal_connect (button, "clicked",
246 G_CALLBACK (create_tree_view_window),
247 GINT_TO_POINTER (EDIT_MODE));
248 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
250 button = gtk_button_new_with_label ("Multiple selections");
251 g_signal_connect (button, "clicked",
252 G_CALLBACK (create_tree_view_window),
253 GINT_TO_POINTER (EDIT_MODE | MULTI_SELECT));
254 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
257 button = gtk_button_new_with_label ("Close");
258 g_signal_connect (button, "clicked",
259 G_CALLBACK (gtk_main_quit), NULL);
260 gtk_box_pack_end (GTK_BOX (mainbox), button, FALSE, FALSE, 0);
262 gtk_box_pack_end (GTK_BOX (mainbox), gtk_hseparator_new (),
265 gtk_widget_show_all (window);