4 #include "../gtk/gtktreedatalist.h"
7 typedef struct _ListSort ListSort;
17 static ListSort data[] =
19 { "Apples", "Transmogrify long word to demonstrate weirdness", "Exculpatory", "Gesundheit", 30 },
20 { "Oranges", "Wicker", "Adamantine", "Convivial", 10 },
21 { "Bovine Spongiform Encephilopathy", "Sleazebucket", "Mountaineer", "Pander", 40 },
22 { "Foot and Mouth", "Lampshade", "Skim Milk\nFull Milk", "Viewless", 20 },
23 { "Blood,\nsweat,\ntears", "The Man", "Horses", "Muckety-Muck", 435 },
24 { "Rare Steak", "Siam", "Watchdog", "Xantippe" , 99999 },
25 { "SIGINT", "Rabbit Breath", "Alligator", "Bloodstained", 4123 },
26 { "Google", "Chrysanthemums", "Hobnob", "Leapfrog", 1 },
27 { "Technology fibre optic", "Turtle", "Academe", "Lonely", 3 },
28 { "Freon", "Harpes", "Quidditch", "Reagan", 6},
29 { "Transposition", "Fruit Basket", "Monkey Wort", "Glogg", 54 },
30 { "Fern", "Glasnost and Perestroika", "Latitude", "Bomberman!!!", 2 },
34 static ListSort childdata[] =
36 { "Heineken", "Nederland", "Wanda de vis", "Electronische post", 2},
37 { "Hottentottententententoonstelling", "Rotterdam", "Ionentransport", "Palm", 45},
38 { "Fruitvlieg", "Eigenfrequentie", "Supernoodles", "Ramen", 2002},
39 { "Gereedschapskist", "Stelsel van lineaire vergelijkingen", "Tulpen", "Badlaken", 1311},
40 { "Stereoinstallatie", "Rood tapijt", "Het periodieke systeem der elementen", "Laaste woord", 200},
56 select_func (GtkTreeSelection *selection,
59 gboolean path_currently_selected,
62 if (gtk_tree_path_get_depth (path) > 1)
68 main (int argc, char *argv[])
72 GtkWidget *scrolled_window;
75 GtkTreeModel *smodel = NULL;
76 GtkTreeModel *ssmodel = NULL;
77 GtkCellRenderer *renderer;
78 GtkTreeViewColumn *column;
82 GtkWidget *window2, *vbox2, *scrolled_window2, *tree_view2;
83 GtkWidget *window3, *vbox3, *scrolled_window3, *tree_view3;
85 gtk_init (&argc, &argv);
88 * First window - Just a GtkTreeStore
91 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
92 gtk_window_set_title (GTK_WINDOW (window), "Words, words, words - Window 1");
93 g_signal_connect (window, "destroy", gtk_main_quit, NULL);
94 vbox = gtk_vbox_new (FALSE, 8);
95 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
96 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);
97 gtk_container_add (GTK_CONTAINER (window), vbox);
99 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
100 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_ETCHED_IN);
101 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
102 gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
104 model = gtk_tree_store_new (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
107 smodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (model));
108 ssmodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (smodel));
110 tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
111 gtk_tree_selection_set_select_function (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)), select_func, NULL, NULL);
112 /* 12 iters now, 12 later... */
113 for (i = 0; data[i].word_1 != NULL; i++)
116 GtkTreeIter child_iter;
119 gtk_tree_store_prepend (GTK_TREE_STORE (model), &iter, NULL);
120 gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
121 WORD_COLUMN_1, data[i].word_1,
122 WORD_COLUMN_2, data[i].word_2,
123 WORD_COLUMN_3, data[i].word_3,
124 WORD_COLUMN_4, data[i].word_4,
125 NUMBER_COLUMN_1, data[i].number_1,
128 gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
129 gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter,
130 WORD_COLUMN_1, data[i].word_1,
131 WORD_COLUMN_2, data[i].word_2,
132 WORD_COLUMN_3, data[i].word_3,
133 WORD_COLUMN_4, data[i].word_4,
134 NUMBER_COLUMN_1, data[i].number_1,
137 for (k = 0; childdata[k].word_1 != NULL; k++)
139 gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
140 gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter,
141 WORD_COLUMN_1, childdata[k].word_1,
142 WORD_COLUMN_2, childdata[k].word_2,
143 WORD_COLUMN_3, childdata[k].word_3,
144 WORD_COLUMN_4, childdata[k].word_4,
145 NUMBER_COLUMN_1, childdata[k].number_1,
152 smodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (model));
153 ssmodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (smodel));
154 g_object_unref (model);
156 gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
158 renderer = gtk_cell_renderer_text_new ();
159 column = gtk_tree_view_column_new_with_attributes ("First Word", renderer,
160 "text", WORD_COLUMN_1,
162 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
163 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_1);
165 renderer = gtk_cell_renderer_text_new ();
166 column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer,
167 "text", WORD_COLUMN_2,
169 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_2);
170 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
172 renderer = gtk_cell_renderer_text_new ();
173 column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
174 "text", WORD_COLUMN_3,
176 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_3);
177 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
179 renderer = gtk_cell_renderer_text_new ();
180 column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer,
181 "text", WORD_COLUMN_4,
183 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_4);
184 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
186 renderer = gtk_cell_renderer_text_new ();
187 column = gtk_tree_view_column_new_with_attributes ("First Number", renderer,
188 "text", NUMBER_COLUMN_1,
190 gtk_tree_view_column_set_sort_column_id (column, NUMBER_COLUMN_1);
191 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
193 /* gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (smodel),
195 GTK_SORT_ASCENDING);*/
197 gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
198 gtk_window_set_default_size (GTK_WINDOW (window), 400, 400);
199 gtk_widget_show_all (window);
202 * Second window - GtkTreeModelSort wrapping the GtkTreeStore
207 window2 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
208 gtk_window_set_title (GTK_WINDOW (window2),
209 "Words, words, words - window 2");
210 g_signal_connect (window2, "destroy", gtk_main_quit, NULL);
211 vbox2 = gtk_vbox_new (FALSE, 8);
212 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
213 gtk_box_pack_start (GTK_BOX (vbox2),
214 gtk_label_new ("Jonathan and Kristian's list of words.\n\nA GtkTreeModelSort wrapping the GtkTreeStore of window 1"),
216 gtk_container_add (GTK_CONTAINER (window2), vbox2);
218 scrolled_window2 = gtk_scrolled_window_new (NULL, NULL);
219 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window2),
220 GTK_SHADOW_ETCHED_IN);
221 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window2),
222 GTK_POLICY_AUTOMATIC,
223 GTK_POLICY_AUTOMATIC);
224 gtk_box_pack_start (GTK_BOX (vbox2), scrolled_window2, TRUE, TRUE, 0);
227 tree_view2 = gtk_tree_view_new_with_model (smodel);
228 gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view2), TRUE);
231 renderer = gtk_cell_renderer_text_new ();
232 column = gtk_tree_view_column_new_with_attributes ("First Word", renderer,
233 "text", WORD_COLUMN_1,
235 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
236 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_1);
238 renderer = gtk_cell_renderer_text_new ();
239 column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer,
240 "text", WORD_COLUMN_2,
242 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_2);
243 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
245 renderer = gtk_cell_renderer_text_new ();
246 column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
247 "text", WORD_COLUMN_3,
249 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_3);
250 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
252 renderer = gtk_cell_renderer_text_new ();
253 column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer,
254 "text", WORD_COLUMN_4,
256 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_4);
257 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
259 /* gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (smodel),
260 (GtkTreeIterCompareFunc)gtk_tree_data_list_compare_func,
262 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (smodel),
264 GTK_SORT_DESCENDING);*/
267 gtk_container_add (GTK_CONTAINER (scrolled_window2), tree_view2);
268 gtk_window_set_default_size (GTK_WINDOW (window2), 400, 400);
269 gtk_widget_show_all (window2);
273 * Third window - GtkTreeModelSort wrapping the GtkTreeModelSort which
274 * is wrapping the GtkTreeStore.
279 window3 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
280 gtk_window_set_title (GTK_WINDOW (window3),
281 "Words, words, words - Window 3");
282 g_signal_connect (window3, "destroy", gtk_main_quit, NULL);
283 vbox3 = gtk_vbox_new (FALSE, 8);
284 gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8);
285 gtk_box_pack_start (GTK_BOX (vbox3),
286 gtk_label_new ("Jonathan and Kristian's list of words.\n\nA GtkTreeModelSort wrapping the GtkTreeModelSort of window 2"),
288 gtk_container_add (GTK_CONTAINER (window3), vbox3);
290 scrolled_window3 = gtk_scrolled_window_new (NULL, NULL);
291 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window3),
292 GTK_SHADOW_ETCHED_IN);
293 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window3),
294 GTK_POLICY_AUTOMATIC,
295 GTK_POLICY_AUTOMATIC);
296 gtk_box_pack_start (GTK_BOX (vbox3), scrolled_window3, TRUE, TRUE, 0);
299 tree_view3 = gtk_tree_view_new_with_model (ssmodel);
300 gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view3), TRUE);
302 renderer = gtk_cell_renderer_text_new ();
303 column = gtk_tree_view_column_new_with_attributes ("First Word", renderer,
304 "text", WORD_COLUMN_1,
306 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view3), column);
307 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_1);
309 renderer = gtk_cell_renderer_text_new ();
310 column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer,
311 "text", WORD_COLUMN_2,
313 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_2);
314 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view3), column);
316 renderer = gtk_cell_renderer_text_new ();
317 column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
318 "text", WORD_COLUMN_3,
320 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_3);
321 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view3), column);
323 renderer = gtk_cell_renderer_text_new ();
324 column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer,
325 "text", WORD_COLUMN_4,
327 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_4);
328 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view3), column);
330 /* gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (ssmodel),
331 (GtkTreeIterCompareFunc)gtk_tree_data_list_compare_func,
333 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (ssmodel),
335 GTK_SORT_ASCENDING);*/
337 gtk_container_add (GTK_CONTAINER (scrolled_window3), tree_view3);
338 gtk_window_set_default_size (GTK_WINDOW (window3), 400, 400);
339 gtk_widget_show_all (window3);
342 for (i = 0; data[i].word_1 != NULL; i++)
346 gtk_tree_store_prepend (GTK_TREE_STORE (model), &iter, NULL);
347 gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
348 WORD_COLUMN_1, data[i].word_1,
349 WORD_COLUMN_2, data[i].word_2,
350 WORD_COLUMN_3, data[i].word_3,
351 WORD_COLUMN_4, data[i].word_4,
353 for (k = 0; childdata[k].word_1 != NULL; k++)
355 GtkTreeIter child_iter;
357 gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
358 gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter,
359 WORD_COLUMN_1, childdata[k].word_1,
360 WORD_COLUMN_2, childdata[k].word_2,
361 WORD_COLUMN_3, childdata[k].word_3,
362 WORD_COLUMN_4, childdata[k].word_4,