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.
24 #include "../gtk/gtktreedatalist.h"
27 typedef struct _ListSort ListSort;
37 static ListSort data[] =
39 { "Apples", "Transmogrify long word to demonstrate weirdness", "Exculpatory", "Gesundheit", 30 },
40 { "Oranges", "Wicker", "Adamantine", "Convivial", 10 },
41 { "Bovine Spongiform Encephilopathy", "Sleazebucket", "Mountaineer", "Pander", 40 },
42 { "Foot and Mouth", "Lampshade", "Skim Milk\nFull Milk", "Viewless", 20 },
43 { "Blood,\nsweat,\ntears", "The Man", "Horses", "Muckety-Muck", 435 },
44 { "Rare Steak", "Siam", "Watchdog", "Xantippe" , 99999 },
45 { "SIGINT", "Rabbit Breath", "Alligator", "Bloodstained", 4123 },
46 { "Google", "Chrysanthemums", "Hobnob", "Leapfrog", 1 },
47 { "Technology fibre optic", "Turtle", "Academe", "Lonely", 3 },
48 { "Freon", "Harpes", "Quidditch", "Reagan", 6},
49 { "Transposition", "Fruit Basket", "Monkey Wort", "Glogg", 54 },
50 { "Fern", "Glasnost and Perestroika", "Latitude", "Bomberman!!!", 2 },
54 static ListSort childdata[] =
56 { "Heineken", "Nederland", "Wanda de vis", "Electronische post", 2},
57 { "Hottentottententententoonstelling", "Rotterdam", "Ionentransport", "Palm", 45},
58 { "Fruitvlieg", "Eigenfrequentie", "Supernoodles", "Ramen", 2002},
59 { "Gereedschapskist", "Stelsel van lineaire vergelijkingen", "Tulpen", "Badlaken", 1311},
60 { "Stereoinstallatie", "Rood tapijt", "Het periodieke systeem der elementen", "Laaste woord", 200},
76 select_func (GtkTreeSelection *selection,
79 gboolean path_currently_selected,
82 if (gtk_tree_path_get_depth (path) > 1)
88 main (int argc, char *argv[])
92 GtkWidget *scrolled_window;
95 GtkTreeModel *smodel = NULL;
96 GtkTreeModel *ssmodel = NULL;
97 GtkCellRenderer *renderer;
98 GtkTreeViewColumn *column;
102 GtkWidget *window2, *vbox2, *scrolled_window2, *tree_view2;
103 GtkWidget *window3, *vbox3, *scrolled_window3, *tree_view3;
105 gtk_init (&argc, &argv);
108 * First window - Just a GtkTreeStore
111 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
112 gtk_window_set_title (GTK_WINDOW (window), "Words, words, words - Window 1");
113 g_signal_connect (window, "destroy", gtk_main_quit, NULL);
114 vbox = gtk_vbox_new (FALSE, 8);
115 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
116 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);
117 gtk_container_add (GTK_CONTAINER (window), vbox);
119 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
120 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_ETCHED_IN);
121 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
122 gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
124 model = gtk_tree_store_new (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
127 smodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (model));
128 ssmodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (smodel));
130 tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
131 gtk_tree_selection_set_select_function (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)), select_func, NULL, NULL);
132 /* 12 iters now, 12 later... */
133 for (i = 0; data[i].word_1 != NULL; i++)
136 GtkTreeIter child_iter;
139 gtk_tree_store_prepend (GTK_TREE_STORE (model), &iter, NULL);
140 gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
141 WORD_COLUMN_1, data[i].word_1,
142 WORD_COLUMN_2, data[i].word_2,
143 WORD_COLUMN_3, data[i].word_3,
144 WORD_COLUMN_4, data[i].word_4,
145 NUMBER_COLUMN_1, data[i].number_1,
148 gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
149 gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter,
150 WORD_COLUMN_1, data[i].word_1,
151 WORD_COLUMN_2, data[i].word_2,
152 WORD_COLUMN_3, data[i].word_3,
153 WORD_COLUMN_4, data[i].word_4,
154 NUMBER_COLUMN_1, data[i].number_1,
157 for (k = 0; childdata[k].word_1 != NULL; k++)
159 gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
160 gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter,
161 WORD_COLUMN_1, childdata[k].word_1,
162 WORD_COLUMN_2, childdata[k].word_2,
163 WORD_COLUMN_3, childdata[k].word_3,
164 WORD_COLUMN_4, childdata[k].word_4,
165 NUMBER_COLUMN_1, childdata[k].number_1,
172 smodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (model));
173 ssmodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (smodel));
174 g_object_unref (model);
176 gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
178 renderer = gtk_cell_renderer_text_new ();
179 column = gtk_tree_view_column_new_with_attributes ("First Word", renderer,
180 "text", WORD_COLUMN_1,
182 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
183 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_1);
185 renderer = gtk_cell_renderer_text_new ();
186 column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer,
187 "text", WORD_COLUMN_2,
189 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_2);
190 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
192 renderer = gtk_cell_renderer_text_new ();
193 column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
194 "text", WORD_COLUMN_3,
196 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_3);
197 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
199 renderer = gtk_cell_renderer_text_new ();
200 column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer,
201 "text", WORD_COLUMN_4,
203 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_4);
204 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
206 renderer = gtk_cell_renderer_text_new ();
207 column = gtk_tree_view_column_new_with_attributes ("First Number", renderer,
208 "text", NUMBER_COLUMN_1,
210 gtk_tree_view_column_set_sort_column_id (column, NUMBER_COLUMN_1);
211 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
213 /* gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (smodel),
215 GTK_SORT_ASCENDING);*/
217 gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
218 gtk_window_set_default_size (GTK_WINDOW (window), 400, 400);
219 gtk_widget_show_all (window);
222 * Second window - GtkTreeModelSort wrapping the GtkTreeStore
227 window2 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
228 gtk_window_set_title (GTK_WINDOW (window2),
229 "Words, words, words - window 2");
230 g_signal_connect (window2, "destroy", gtk_main_quit, NULL);
231 vbox2 = gtk_vbox_new (FALSE, 8);
232 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
233 gtk_box_pack_start (GTK_BOX (vbox2),
234 gtk_label_new ("Jonathan and Kristian's list of words.\n\nA GtkTreeModelSort wrapping the GtkTreeStore of window 1"),
236 gtk_container_add (GTK_CONTAINER (window2), vbox2);
238 scrolled_window2 = gtk_scrolled_window_new (NULL, NULL);
239 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window2),
240 GTK_SHADOW_ETCHED_IN);
241 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window2),
242 GTK_POLICY_AUTOMATIC,
243 GTK_POLICY_AUTOMATIC);
244 gtk_box_pack_start (GTK_BOX (vbox2), scrolled_window2, TRUE, TRUE, 0);
247 tree_view2 = gtk_tree_view_new_with_model (smodel);
248 gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view2), TRUE);
251 renderer = gtk_cell_renderer_text_new ();
252 column = gtk_tree_view_column_new_with_attributes ("First Word", renderer,
253 "text", WORD_COLUMN_1,
255 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
256 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_1);
258 renderer = gtk_cell_renderer_text_new ();
259 column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer,
260 "text", WORD_COLUMN_2,
262 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_2);
263 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
265 renderer = gtk_cell_renderer_text_new ();
266 column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
267 "text", WORD_COLUMN_3,
269 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_3);
270 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
272 renderer = gtk_cell_renderer_text_new ();
273 column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer,
274 "text", WORD_COLUMN_4,
276 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_4);
277 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
279 /* gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (smodel),
280 (GtkTreeIterCompareFunc)gtk_tree_data_list_compare_func,
282 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (smodel),
284 GTK_SORT_DESCENDING);*/
287 gtk_container_add (GTK_CONTAINER (scrolled_window2), tree_view2);
288 gtk_window_set_default_size (GTK_WINDOW (window2), 400, 400);
289 gtk_widget_show_all (window2);
293 * Third window - GtkTreeModelSort wrapping the GtkTreeModelSort which
294 * is wrapping the GtkTreeStore.
299 window3 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
300 gtk_window_set_title (GTK_WINDOW (window3),
301 "Words, words, words - Window 3");
302 g_signal_connect (window3, "destroy", gtk_main_quit, NULL);
303 vbox3 = gtk_vbox_new (FALSE, 8);
304 gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8);
305 gtk_box_pack_start (GTK_BOX (vbox3),
306 gtk_label_new ("Jonathan and Kristian's list of words.\n\nA GtkTreeModelSort wrapping the GtkTreeModelSort of window 2"),
308 gtk_container_add (GTK_CONTAINER (window3), vbox3);
310 scrolled_window3 = gtk_scrolled_window_new (NULL, NULL);
311 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window3),
312 GTK_SHADOW_ETCHED_IN);
313 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window3),
314 GTK_POLICY_AUTOMATIC,
315 GTK_POLICY_AUTOMATIC);
316 gtk_box_pack_start (GTK_BOX (vbox3), scrolled_window3, TRUE, TRUE, 0);
319 tree_view3 = gtk_tree_view_new_with_model (ssmodel);
320 gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view3), TRUE);
322 renderer = gtk_cell_renderer_text_new ();
323 column = gtk_tree_view_column_new_with_attributes ("First Word", renderer,
324 "text", WORD_COLUMN_1,
326 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view3), column);
327 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_1);
329 renderer = gtk_cell_renderer_text_new ();
330 column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer,
331 "text", WORD_COLUMN_2,
333 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_2);
334 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view3), column);
336 renderer = gtk_cell_renderer_text_new ();
337 column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
338 "text", WORD_COLUMN_3,
340 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_3);
341 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view3), column);
343 renderer = gtk_cell_renderer_text_new ();
344 column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer,
345 "text", WORD_COLUMN_4,
347 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_4);
348 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view3), column);
350 /* gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (ssmodel),
351 (GtkTreeIterCompareFunc)gtk_tree_data_list_compare_func,
353 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (ssmodel),
355 GTK_SORT_ASCENDING);*/
357 gtk_container_add (GTK_CONTAINER (scrolled_window3), tree_view3);
358 gtk_window_set_default_size (GTK_WINDOW (window3), 400, 400);
359 gtk_widget_show_all (window3);
362 for (i = 0; data[i].word_1 != NULL; i++)
366 gtk_tree_store_prepend (GTK_TREE_STORE (model), &iter, NULL);
367 gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
368 WORD_COLUMN_1, data[i].word_1,
369 WORD_COLUMN_2, data[i].word_2,
370 WORD_COLUMN_3, data[i].word_3,
371 WORD_COLUMN_4, data[i].word_4,
373 for (k = 0; childdata[k].word_1 != NULL; k++)
375 GtkTreeIter child_iter;
377 gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
378 gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter,
379 WORD_COLUMN_1, childdata[k].word_1,
380 WORD_COLUMN_2, childdata[k].word_2,
381 WORD_COLUMN_3, childdata[k].word_3,
382 WORD_COLUMN_4, childdata[k].word_4,