2 * Copyright (C) 2001 Red Hat, Inc
3 * Author: Jonathan Blandford
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details.
15 * You should have received a copy of the GNU Library General Public
16 * License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 * Boston, MA 02111-1307, USA.
25 typedef struct _ListSort ListSort;
35 static ListSort data[] =
37 { "Apples", "Transmogrify long word to demonstrate weirdness", "Exculpatory", "Gesundheit", 30 },
38 { "Oranges", "Wicker", "Adamantine", "Convivial", 10 },
39 { "Bovine Spongiform Encephilopathy", "Sleazebucket", "Mountaineer", "Pander", 40 },
40 { "Foot and Mouth", "Lampshade", "Skim Milk\nFull Milk", "Viewless", 20 },
41 { "Blood,\nsweat,\ntears", "The Man", "Horses", "Muckety-Muck", 435 },
42 { "Rare Steak", "Siam", "Watchdog", "Xantippe" , 99999 },
43 { "SIGINT", "Rabbit Breath", "Alligator", "Bloodstained", 4123 },
44 { "Google", "Chrysanthemums", "Hobnob", "Leapfrog", 1 },
45 { "Technology fibre optic", "Turtle", "Academe", "Lonely", 3 },
46 { "Freon", "Harpes", "Quidditch", "Reagan", 6},
47 { "Transposition", "Fruit Basket", "Monkey Wort", "Glogg", 54 },
48 { "Fern", "Glasnost and Perestroika", "Latitude", "Bomberman!!!", 2 },
52 static ListSort childdata[] =
54 { "Heineken", "Nederland", "Wanda de vis", "Electronische post", 2},
55 { "Hottentottententententoonstelling", "Rotterdam", "Ionentransport", "Palm", 45},
56 { "Fruitvlieg", "Eigenfrequentie", "Supernoodles", "Ramen", 2002},
57 { "Gereedschapskist", "Stelsel van lineaire vergelijkingen", "Tulpen", "Badlaken", 1311},
58 { "Stereoinstallatie", "Rood tapijt", "Het periodieke systeem der elementen", "Laaste woord", 200},
74 select_func (GtkTreeSelection *selection,
77 gboolean path_currently_selected,
80 if (gtk_tree_path_get_depth (path) > 1)
86 switch_search_method (GtkWidget *button,
89 if (!gtk_tree_view_get_search_entry (GTK_TREE_VIEW (tree_view)))
91 gpointer data = g_object_get_data (tree_view, "my-search-entry");
92 gtk_tree_view_set_search_entry (GTK_TREE_VIEW (tree_view), GTK_ENTRY (data));
95 gtk_tree_view_set_search_entry (GTK_TREE_VIEW (tree_view), NULL);
99 main (int argc, char *argv[])
103 GtkWidget *scrolled_window;
104 GtkWidget *tree_view;
106 GtkTreeModel *smodel = NULL;
107 GtkTreeModel *ssmodel = NULL;
108 GtkCellRenderer *renderer;
109 GtkTreeViewColumn *column;
113 GtkWidget *entry, *button;
114 GtkWidget *window2, *vbox2, *scrolled_window2, *tree_view2;
115 GtkWidget *window3, *vbox3, *scrolled_window3, *tree_view3;
117 gtk_init (&argc, &argv);
120 * First window - Just a GtkTreeStore
123 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
124 gtk_window_set_title (GTK_WINDOW (window), "Words, words, words - Window 1");
125 g_signal_connect (window, "destroy", gtk_main_quit, NULL);
126 vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
127 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
128 gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Jonathan and Kristian's list of cool words. (And Anders' cool list of numbers) \n\nThis is just a GtkTreeStore"), FALSE, FALSE, 0);
129 gtk_container_add (GTK_CONTAINER (window), vbox);
131 entry = gtk_entry_new ();
132 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
134 button = gtk_button_new_with_label ("Switch search method");
135 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
137 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
138 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_ETCHED_IN);
139 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
140 gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
142 model = gtk_tree_store_new (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
145 smodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (model));
146 ssmodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (smodel));
148 tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
150 gtk_tree_view_set_search_entry (GTK_TREE_VIEW (tree_view), GTK_ENTRY (entry));
151 g_object_set_data (G_OBJECT (tree_view), "my-search-entry", entry);
152 g_signal_connect (button, "clicked",
153 G_CALLBACK (switch_search_method), tree_view);
155 /* gtk_tree_selection_set_select_function (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)), select_func, NULL, NULL);*/
157 /* 12 iters now, 12 later... */
158 for (i = 0; data[i].word_1 != NULL; i++)
161 GtkTreeIter child_iter;
164 gtk_tree_store_prepend (GTK_TREE_STORE (model), &iter, NULL);
165 gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
166 WORD_COLUMN_1, data[i].word_1,
167 WORD_COLUMN_2, data[i].word_2,
168 WORD_COLUMN_3, data[i].word_3,
169 WORD_COLUMN_4, data[i].word_4,
170 NUMBER_COLUMN_1, data[i].number_1,
173 gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
174 gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter,
175 WORD_COLUMN_1, data[i].word_1,
176 WORD_COLUMN_2, data[i].word_2,
177 WORD_COLUMN_3, data[i].word_3,
178 WORD_COLUMN_4, data[i].word_4,
179 NUMBER_COLUMN_1, data[i].number_1,
182 for (k = 0; childdata[k].word_1 != NULL; k++)
184 gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
185 gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter,
186 WORD_COLUMN_1, childdata[k].word_1,
187 WORD_COLUMN_2, childdata[k].word_2,
188 WORD_COLUMN_3, childdata[k].word_3,
189 WORD_COLUMN_4, childdata[k].word_4,
190 NUMBER_COLUMN_1, childdata[k].number_1,
197 smodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (model));
198 ssmodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (smodel));
199 g_object_unref (model);
201 gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
203 renderer = gtk_cell_renderer_text_new ();
204 column = gtk_tree_view_column_new_with_attributes ("First Word", renderer,
205 "text", WORD_COLUMN_1,
207 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
208 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_1);
210 renderer = gtk_cell_renderer_text_new ();
211 column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer,
212 "text", WORD_COLUMN_2,
214 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_2);
215 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
217 renderer = gtk_cell_renderer_text_new ();
218 column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
219 "text", WORD_COLUMN_3,
221 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_3);
222 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
224 renderer = gtk_cell_renderer_text_new ();
225 column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer,
226 "text", WORD_COLUMN_4,
228 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_4);
229 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
231 renderer = gtk_cell_renderer_text_new ();
232 column = gtk_tree_view_column_new_with_attributes ("First Number", renderer,
233 "text", NUMBER_COLUMN_1,
235 gtk_tree_view_column_set_sort_column_id (column, NUMBER_COLUMN_1);
236 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
238 /* gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (smodel),
240 GTK_SORT_ASCENDING);*/
242 gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
243 gtk_window_set_default_size (GTK_WINDOW (window), 400, 400);
244 gtk_widget_show_all (window);
247 * Second window - GtkTreeModelSort wrapping the GtkTreeStore
252 window2 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
253 gtk_window_set_title (GTK_WINDOW (window2),
254 "Words, words, words - window 2");
255 g_signal_connect (window2, "destroy", gtk_main_quit, NULL);
256 vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
257 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
258 gtk_box_pack_start (GTK_BOX (vbox2),
259 gtk_label_new ("Jonathan and Kristian's list of words.\n\nA GtkTreeModelSort wrapping the GtkTreeStore of window 1"),
261 gtk_container_add (GTK_CONTAINER (window2), vbox2);
263 scrolled_window2 = gtk_scrolled_window_new (NULL, NULL);
264 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window2),
265 GTK_SHADOW_ETCHED_IN);
266 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window2),
267 GTK_POLICY_AUTOMATIC,
268 GTK_POLICY_AUTOMATIC);
269 gtk_box_pack_start (GTK_BOX (vbox2), scrolled_window2, TRUE, TRUE, 0);
272 tree_view2 = gtk_tree_view_new_with_model (smodel);
273 gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view2), TRUE);
276 renderer = gtk_cell_renderer_text_new ();
277 column = gtk_tree_view_column_new_with_attributes ("First Word", renderer,
278 "text", WORD_COLUMN_1,
280 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
281 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_1);
283 renderer = gtk_cell_renderer_text_new ();
284 column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer,
285 "text", WORD_COLUMN_2,
287 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_2);
288 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
290 renderer = gtk_cell_renderer_text_new ();
291 column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
292 "text", WORD_COLUMN_3,
294 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_3);
295 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
297 renderer = gtk_cell_renderer_text_new ();
298 column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer,
299 "text", WORD_COLUMN_4,
301 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_4);
302 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
304 /* gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (smodel),
305 (GtkTreeIterCompareFunc)gtk_tree_data_list_compare_func,
307 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (smodel),
309 GTK_SORT_DESCENDING);*/
312 gtk_container_add (GTK_CONTAINER (scrolled_window2), tree_view2);
313 gtk_window_set_default_size (GTK_WINDOW (window2), 400, 400);
314 gtk_widget_show_all (window2);
318 * Third window - GtkTreeModelSort wrapping the GtkTreeModelSort which
319 * is wrapping the GtkTreeStore.
324 window3 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
325 gtk_window_set_title (GTK_WINDOW (window3),
326 "Words, words, words - Window 3");
327 g_signal_connect (window3, "destroy", gtk_main_quit, NULL);
328 vbox3 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
329 gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8);
330 gtk_box_pack_start (GTK_BOX (vbox3),
331 gtk_label_new ("Jonathan and Kristian's list of words.\n\nA GtkTreeModelSort wrapping the GtkTreeModelSort of window 2"),
333 gtk_container_add (GTK_CONTAINER (window3), vbox3);
335 scrolled_window3 = gtk_scrolled_window_new (NULL, NULL);
336 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window3),
337 GTK_SHADOW_ETCHED_IN);
338 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window3),
339 GTK_POLICY_AUTOMATIC,
340 GTK_POLICY_AUTOMATIC);
341 gtk_box_pack_start (GTK_BOX (vbox3), scrolled_window3, TRUE, TRUE, 0);
344 tree_view3 = gtk_tree_view_new_with_model (ssmodel);
345 gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view3), TRUE);
347 renderer = gtk_cell_renderer_text_new ();
348 column = gtk_tree_view_column_new_with_attributes ("First Word", renderer,
349 "text", WORD_COLUMN_1,
351 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view3), column);
352 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_1);
354 renderer = gtk_cell_renderer_text_new ();
355 column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer,
356 "text", WORD_COLUMN_2,
358 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_2);
359 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view3), column);
361 renderer = gtk_cell_renderer_text_new ();
362 column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
363 "text", WORD_COLUMN_3,
365 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_3);
366 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view3), column);
368 renderer = gtk_cell_renderer_text_new ();
369 column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer,
370 "text", WORD_COLUMN_4,
372 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_4);
373 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view3), column);
375 /* gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (ssmodel),
376 (GtkTreeIterCompareFunc)gtk_tree_data_list_compare_func,
378 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (ssmodel),
380 GTK_SORT_ASCENDING);*/
382 gtk_container_add (GTK_CONTAINER (scrolled_window3), tree_view3);
383 gtk_window_set_default_size (GTK_WINDOW (window3), 400, 400);
384 gtk_widget_show_all (window3);
387 for (i = 0; data[i].word_1 != NULL; i++)
391 gtk_tree_store_prepend (GTK_TREE_STORE (model), &iter, NULL);
392 gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
393 WORD_COLUMN_1, data[i].word_1,
394 WORD_COLUMN_2, data[i].word_2,
395 WORD_COLUMN_3, data[i].word_3,
396 WORD_COLUMN_4, data[i].word_4,
398 for (k = 0; childdata[k].word_1 != NULL; k++)
400 GtkTreeIter child_iter;
402 gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
403 gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter,
404 WORD_COLUMN_1, childdata[k].word_1,
405 WORD_COLUMN_2, childdata[k].word_2,
406 WORD_COLUMN_3, childdata[k].word_3,
407 WORD_COLUMN_4, childdata[k].word_4,