3 #include "../gtk/gtktreedatalist.h"
6 typedef struct _ListSort ListSort;
16 static ListSort data[] =
18 { "Apples", "Transmogrify long word to demonstrate weirdness", "Exculpatory", "Gesundheit", 30 },
19 { "Oranges", "Wicker", "Adamantine", "Convivial", 10 },
20 { "Bovine Spongiform Encephilopathy", "Sleazebucket", "Mountaineer", "Pander", 40 },
21 { "Foot and Mouth", "Lampshade", "Skim Milk\nFull Milk", "Viewless", 20 },
22 { "Blood,\nsweat,\ntears", "The Man", "Horses", "Muckety-Muck", 435 },
23 { "Rare Steak", "Siam", "Watchdog", "Xantippe" , 99999 },
24 { "SIGINT", "Rabbit Breath", "Alligator", "Bloodstained", 4123 },
25 { "Google", "Chrysanthemums", "Hobnob", "Leapfrog", 1 },
26 { "Technology fibre optic", "Turtle", "Academe", "Lonely", 3 },
27 { "Freon", "Harpes", "Quidditch", "Reagan", 6},
28 { "Transposition", "Fruit Basket", "Monkey Wort", "Glogg", 54 },
29 { "Fern", "Glasnost and Perestroika", "Latitude", "Bomberman!!!", 2 },
33 static ListSort childdata[] =
35 { "Heineken", "Nederland", "Wanda de vis", "Electronische post", 2},
36 { "Hottentottententententoonstelling", "Rotterdam", "Ionentransport", "Palm", 45},
37 { "Fruitvlieg", "Eigenfrequentie", "Supernoodles", "Ramen", 2002},
38 { "Gereedschapskist", "Stelsel van lineaire vergelijkingen", "Tulpen", "Badlaken", 1311},
39 { "Stereoinstallatie", "Rood tapijt", "Het periodieke systeem der elementen", "Laaste woord", 200},
55 select_func (GtkTreeSelection *selection,
58 gboolean path_currently_selected,
61 if (gtk_tree_path_get_depth (path) > 1)
67 main (int argc, char *argv[])
71 GtkWidget *scrolled_window;
74 GtkTreeModel *smodel = NULL;
75 GtkTreeModel *ssmodel = NULL;
76 GtkCellRenderer *renderer;
77 GtkTreeViewColumn *column;
81 GtkWidget *window2, *vbox2, *scrolled_window2, *tree_view2;
82 GtkWidget *window3, *vbox3, *scrolled_window3, *tree_view3;
84 gtk_init (&argc, &argv);
87 * First window - Just a GtkTreeStore
90 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
91 gtk_window_set_title (GTK_WINDOW (window), "Words, words, words - Window 1");
92 gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL);
93 vbox = gtk_vbox_new (FALSE, 8);
94 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
95 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);
96 gtk_container_add (GTK_CONTAINER (window), vbox);
98 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
99 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_ETCHED_IN);
100 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
101 gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
103 model = gtk_tree_store_new (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
106 smodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (model));
107 ssmodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (smodel));
109 tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
110 gtk_tree_selection_set_select_function (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)), select_func, NULL, NULL);
111 /* 12 iters now, 12 later... */
112 for (i = 0; data[i].word_1 != NULL; i++)
115 GtkTreeIter child_iter;
118 gtk_tree_store_prepend (GTK_TREE_STORE (model), &iter, NULL);
119 gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
120 WORD_COLUMN_1, data[i].word_1,
121 WORD_COLUMN_2, data[i].word_2,
122 WORD_COLUMN_3, data[i].word_3,
123 WORD_COLUMN_4, data[i].word_4,
124 NUMBER_COLUMN_1, data[i].number_1,
127 gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
128 gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter,
129 WORD_COLUMN_1, data[i].word_1,
130 WORD_COLUMN_2, data[i].word_2,
131 WORD_COLUMN_3, data[i].word_3,
132 WORD_COLUMN_4, data[i].word_4,
133 NUMBER_COLUMN_1, data[i].number_1,
136 for (k = 0; childdata[k].word_1 != NULL; k++)
138 gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
139 gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter,
140 WORD_COLUMN_1, childdata[k].word_1,
141 WORD_COLUMN_2, childdata[k].word_2,
142 WORD_COLUMN_3, childdata[k].word_3,
143 WORD_COLUMN_4, childdata[k].word_4,
144 NUMBER_COLUMN_1, childdata[k].number_1,
151 smodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (model));
152 ssmodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (smodel));
154 g_object_unref (G_OBJECT (model));
155 gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
157 renderer = gtk_cell_renderer_text_new ();
158 column = gtk_tree_view_column_new_with_attributes ("First Word", renderer,
159 "text", WORD_COLUMN_1,
161 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
162 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_1);
164 renderer = gtk_cell_renderer_text_new ();
165 column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer,
166 "text", WORD_COLUMN_2,
168 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_2);
169 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
171 renderer = gtk_cell_renderer_text_new ();
172 column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
173 "text", WORD_COLUMN_3,
175 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_3);
176 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
178 renderer = gtk_cell_renderer_text_new ();
179 column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer,
180 "text", WORD_COLUMN_4,
182 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_4);
183 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
185 renderer = gtk_cell_renderer_text_new ();
186 column = gtk_tree_view_column_new_with_attributes ("First Number", renderer,
187 "text", NUMBER_COLUMN_1,
189 gtk_tree_view_column_set_sort_column_id (column, NUMBER_COLUMN_1);
190 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
192 /* gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (smodel),
194 GTK_SORT_ASCENDING);*/
196 gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
197 gtk_window_set_default_size (GTK_WINDOW (window), 400, 400);
198 gtk_widget_show_all (window);
201 * Second window - GtkTreeModelSort wrapping the GtkTreeStore
206 window2 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
207 gtk_window_set_title (GTK_WINDOW (window2),
208 "Words, words, words - window 2");
209 gtk_signal_connect (GTK_OBJECT (window2), "destroy", gtk_main_quit, NULL);
210 vbox2 = gtk_vbox_new (FALSE, 8);
211 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
212 gtk_box_pack_start (GTK_BOX (vbox2),
213 gtk_label_new ("Jonathan and Kristian's list of words.\n\nA GtkTreeModelSort wrapping the GtkTreeStore of window 1"),
215 gtk_container_add (GTK_CONTAINER (window2), vbox2);
217 scrolled_window2 = gtk_scrolled_window_new (NULL, NULL);
218 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window2),
219 GTK_SHADOW_ETCHED_IN);
220 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window2),
221 GTK_POLICY_AUTOMATIC,
222 GTK_POLICY_AUTOMATIC);
223 gtk_box_pack_start (GTK_BOX (vbox2), scrolled_window2, TRUE, TRUE, 0);
226 tree_view2 = gtk_tree_view_new_with_model (smodel);
227 gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view2), TRUE);
230 renderer = gtk_cell_renderer_text_new ();
231 column = gtk_tree_view_column_new_with_attributes ("First Word", renderer,
232 "text", WORD_COLUMN_1,
234 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
235 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_1);
237 renderer = gtk_cell_renderer_text_new ();
238 column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer,
239 "text", WORD_COLUMN_2,
241 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_2);
242 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
244 renderer = gtk_cell_renderer_text_new ();
245 column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
246 "text", WORD_COLUMN_3,
248 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_3);
249 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
251 renderer = gtk_cell_renderer_text_new ();
252 column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer,
253 "text", WORD_COLUMN_4,
255 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_4);
256 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
258 /* gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (smodel),
259 (GtkTreeIterCompareFunc)gtk_tree_data_list_compare_func,
261 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (smodel),
263 GTK_SORT_DESCENDING);*/
266 gtk_container_add (GTK_CONTAINER (scrolled_window2), tree_view2);
267 gtk_window_set_default_size (GTK_WINDOW (window2), 400, 400);
268 gtk_widget_show_all (window2);
272 * Third window - GtkTreeModelSort wrapping the GtkTreeModelSort which
273 * is wrapping the GtkTreeStore.
278 window3 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
279 gtk_window_set_title (GTK_WINDOW (window3),
280 "Words, words, words - Window 3");
281 gtk_signal_connect (GTK_OBJECT (window3), "destroy", gtk_main_quit, NULL);
282 vbox3 = gtk_vbox_new (FALSE, 8);
283 gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8);
284 gtk_box_pack_start (GTK_BOX (vbox3),
285 gtk_label_new ("Jonathan and Kristian's list of words.\n\nA GtkTreeModelSort wrapping the GtkTreeModelSort of window 2"),
287 gtk_container_add (GTK_CONTAINER (window3), vbox3);
289 scrolled_window3 = gtk_scrolled_window_new (NULL, NULL);
290 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window3),
291 GTK_SHADOW_ETCHED_IN);
292 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window3),
293 GTK_POLICY_AUTOMATIC,
294 GTK_POLICY_AUTOMATIC);
295 gtk_box_pack_start (GTK_BOX (vbox3), scrolled_window3, TRUE, TRUE, 0);
298 tree_view3 = gtk_tree_view_new_with_model (ssmodel);
299 gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view3), TRUE);
301 renderer = gtk_cell_renderer_text_new ();
302 column = gtk_tree_view_column_new_with_attributes ("First Word", renderer,
303 "text", WORD_COLUMN_1,
305 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view3), column);
306 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_1);
308 renderer = gtk_cell_renderer_text_new ();
309 column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer,
310 "text", WORD_COLUMN_2,
312 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_2);
313 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view3), column);
315 renderer = gtk_cell_renderer_text_new ();
316 column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
317 "text", WORD_COLUMN_3,
319 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_3);
320 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view3), column);
322 renderer = gtk_cell_renderer_text_new ();
323 column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer,
324 "text", WORD_COLUMN_4,
326 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_4);
327 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view3), column);
329 /* gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (ssmodel),
330 (GtkTreeIterCompareFunc)gtk_tree_data_list_compare_func,
332 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (ssmodel),
334 GTK_SORT_ASCENDING);*/
336 gtk_container_add (GTK_CONTAINER (scrolled_window3), tree_view3);
337 gtk_window_set_default_size (GTK_WINDOW (window3), 400, 400);
338 gtk_widget_show_all (window3);
341 for (i = 0; data[i].word_1 != NULL; i++)
345 gtk_tree_store_prepend (GTK_TREE_STORE (model), &iter, NULL);
346 gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
347 WORD_COLUMN_1, data[i].word_1,
348 WORD_COLUMN_2, data[i].word_2,
349 WORD_COLUMN_3, data[i].word_3,
350 WORD_COLUMN_4, data[i].word_4,
352 for (k = 0; childdata[k].word_1 != NULL; k++)
354 GtkTreeIter child_iter;
356 gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
357 gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter,
358 WORD_COLUMN_1, childdata[k].word_1,
359 WORD_COLUMN_2, childdata[k].word_2,
360 WORD_COLUMN_3, childdata[k].word_3,
361 WORD_COLUMN_4, childdata[k].word_4,