3 #include "../gtk/gtktreedatalist.h"
6 typedef struct _ListSort ListSort;
15 static ListSort data[] =
17 { "Apples", "Transmogrify long word to demonstrate weirdness", "Exculpatory", "Gesundheit"},
18 { "Oranges", "Wicker", "Adamantine", "Convivial" },
19 { "Bovine Spongiform Encephilopathy", "Sleazebucket", "Mountaineer", "Pander" },
20 { "Foot and Mouth", "Lampshade", "Skim Milk\nFull Milk", "Viewless" },
21 { "Blood,\nsweat,\ntears", "The Man", "Horses", "Muckety-Muck" },
22 { "Rare Steak", "Siam", "Watchdog", "Xantippe" },
23 { "SIGINT", "Rabbit Breath", "Alligator", "Bloodstained" },
24 { "Google", "Chrysanthemums", "Hobnob", "Leapfrog"},
25 { "Technology fibre optic", "Turtle", "Academe", "Lonely" },
26 { "Freon", "Harpes", "Quidditch", "Reagan" },
27 { "Transposition", "Fruit Basket", "Monkey Wort", "Glogg" },
28 { "Fern", "Glasnost and Perestroika", "Latitude", "Bomberman!!!" },
32 static ListSort childdata[] =
34 { "Heineken", "Nederland", "Wanda de vis", "Electronische post"},
35 { "Hottentottententententoonstelling", "Rotterdam", "Ionentransport", "Palm"},
36 { "Fruitvlieg", "Eigenfrequentie", "Supernoodles", "Ramen"},
37 { "Gereedschapskist", "Stelsel van lineaire vergelijkingen", "Tulpen", "Badlaken"},
38 { "Stereoinstallatie", "Rood tapijt", "Het periodieke systeem der elementen", "Laaste woord"},
53 main (int argc, char *argv[])
57 GtkWidget *scrolled_window;
60 GtkTreeModel *smodel = NULL;
61 GtkTreeModel *ssmodel = NULL;
62 GtkCellRenderer *renderer;
63 GtkTreeViewColumn *column;
67 GtkWidget *window2, *vbox2, *scrolled_window2, *tree_view2;
68 GtkWidget *window3, *vbox3, *scrolled_window3, *tree_view3;
70 gtk_init (&argc, &argv);
73 * First window - Just a GtkTreeStore
76 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
77 gtk_window_set_title (GTK_WINDOW (window), "Words, words, words - Window 1");
78 gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL);
79 vbox = gtk_vbox_new (FALSE, 8);
80 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
81 gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Jonathan and Kristian's list of cool words.\n\nThis is just a GtkTreeStore"), FALSE, FALSE, 0);
82 gtk_container_add (GTK_CONTAINER (window), vbox);
84 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
85 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_ETCHED_IN);
86 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
87 gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
89 model = gtk_tree_store_new (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
92 smodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (model));
93 ssmodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (smodel));
95 tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
97 /* 12 iters now, 12 later... */
98 for (i = 0; data[i].word_1 != NULL; i++)
101 GtkTreeIter child_iter;
104 gtk_tree_store_prepend (GTK_TREE_STORE (model), &iter, NULL);
105 gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
106 WORD_COLUMN_1, data[i].word_1,
107 WORD_COLUMN_2, data[i].word_2,
108 WORD_COLUMN_3, data[i].word_3,
109 WORD_COLUMN_4, data[i].word_4,
112 gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
113 gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter,
114 WORD_COLUMN_1, data[i].word_1,
115 WORD_COLUMN_2, data[i].word_2,
116 WORD_COLUMN_3, data[i].word_3,
117 WORD_COLUMN_4, data[i].word_4,
119 for (k = 0; childdata[k].word_1 != NULL; k++)
121 gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
122 gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter,
123 WORD_COLUMN_1, childdata[k].word_1,
124 WORD_COLUMN_2, childdata[k].word_2,
125 WORD_COLUMN_3, childdata[k].word_3,
126 WORD_COLUMN_4, childdata[k].word_4,
131 smodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (model));
132 ssmodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (smodel));
134 g_object_unref (G_OBJECT (model));
135 gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
137 renderer = gtk_cell_renderer_text_new ();
138 column = gtk_tree_view_column_new_with_attributes ("First Word", renderer,
139 "text", WORD_COLUMN_1,
141 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
142 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_1);
144 renderer = gtk_cell_renderer_text_new ();
145 column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer,
146 "text", WORD_COLUMN_2,
148 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_2);
149 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
151 renderer = gtk_cell_renderer_text_new ();
152 column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
153 "text", WORD_COLUMN_3,
155 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_3);
156 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
158 renderer = gtk_cell_renderer_text_new ();
159 column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer,
160 "text", WORD_COLUMN_4,
162 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_4);
164 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
166 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (smodel),
170 gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
171 gtk_window_set_default_size (GTK_WINDOW (window), 400, 400);
172 gtk_widget_show_all (window);
176 * Second window - GtkTreeModelSort wrapping the GtkTreeStore
181 window2 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
182 gtk_window_set_title (GTK_WINDOW (window2),
183 "Words, words, words - window 2");
184 gtk_signal_connect (GTK_OBJECT (window2), "destroy", gtk_main_quit, NULL);
185 vbox2 = gtk_vbox_new (FALSE, 8);
186 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
187 gtk_box_pack_start (GTK_BOX (vbox2),
188 gtk_label_new ("Jonathan and Kristian's list of words.\n\nA GtkTreeModelSort wrapping the GtkTreeStore of window 1"),
190 gtk_container_add (GTK_CONTAINER (window2), vbox2);
192 scrolled_window2 = gtk_scrolled_window_new (NULL, NULL);
193 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window2),
194 GTK_SHADOW_ETCHED_IN);
195 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window2),
196 GTK_POLICY_AUTOMATIC,
197 GTK_POLICY_AUTOMATIC);
198 gtk_box_pack_start (GTK_BOX (vbox2), scrolled_window2, TRUE, TRUE, 0);
201 tree_view2 = gtk_tree_view_new_with_model (smodel);
202 gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view2), TRUE);
205 renderer = gtk_cell_renderer_text_new ();
206 column = gtk_tree_view_column_new_with_attributes ("First Word", renderer,
207 "text", WORD_COLUMN_1,
209 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
210 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_1);
212 renderer = gtk_cell_renderer_text_new ();
213 column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer,
214 "text", WORD_COLUMN_2,
216 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_2);
217 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
219 renderer = gtk_cell_renderer_text_new ();
220 column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
221 "text", WORD_COLUMN_3,
223 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_3);
224 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
226 renderer = gtk_cell_renderer_text_new ();
227 column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer,
228 "text", WORD_COLUMN_4,
230 gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_4);
231 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
233 gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (smodel),
234 (GtkTreeIterCompareFunc)gtk_tree_data_list_compare_func,
236 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (smodel),
238 GTK_SORT_DESCENDING);
240 gtk_container_add (GTK_CONTAINER (scrolled_window2), tree_view2);
241 gtk_window_set_default_size (GTK_WINDOW (window2), 400, 400);
242 gtk_widget_show_all (window2);
246 * Third window - GtkTreeModelSort wrapping the GtkTreeModelSort which
247 * is wrapping the GtkTreeStore.
252 window3 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
253 gtk_window_set_title (GTK_WINDOW (window3),
254 "Words, words, words - Window 3");
255 gtk_signal_connect (GTK_OBJECT (window3), "destroy", gtk_main_quit, NULL);
256 vbox3 = gtk_vbox_new (FALSE, 8);
257 gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8);
258 gtk_box_pack_start (GTK_BOX (vbox3),
259 gtk_label_new ("Jonathan and Kristian's list of words.\n\nA GtkTreeModelSort wrapping the GtkTreeModelSort of window 2"),
261 gtk_container_add (GTK_CONTAINER (window3), vbox3);
263 scrolled_window3 = gtk_scrolled_window_new (NULL, NULL);
264 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window3),
265 GTK_SHADOW_ETCHED_IN);
266 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window3),
267 GTK_POLICY_AUTOMATIC,
268 GTK_POLICY_AUTOMATIC);
269 gtk_box_pack_start (GTK_BOX (vbox3), scrolled_window3, TRUE, TRUE, 0);
272 tree_view3 = gtk_tree_view_new_with_model (ssmodel);
273 gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view3), 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_view3), 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_view3), 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_view3), 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_view3), column);
304 gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (ssmodel),
305 (GtkTreeIterCompareFunc)gtk_tree_data_list_compare_func,
307 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (ssmodel),
311 gtk_container_add (GTK_CONTAINER (scrolled_window3), tree_view3);
312 gtk_window_set_default_size (GTK_WINDOW (window3), 400, 400);
313 gtk_widget_show_all (window3);
316 for (i = 0; data[i].word_1 != NULL; i++)
320 gtk_tree_store_prepend (GTK_TREE_STORE (model), &iter, NULL);
321 gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
322 WORD_COLUMN_1, data[i].word_1,
323 WORD_COLUMN_2, data[i].word_2,
324 WORD_COLUMN_3, data[i].word_3,
325 WORD_COLUMN_4, data[i].word_4,
327 for (k = 0; childdata[k].word_1 != NULL; k++)
329 GtkTreeIter child_iter;
331 gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
332 gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter,
333 WORD_COLUMN_1, childdata[k].word_1,
334 WORD_COLUMN_2, childdata[k].word_2,
335 WORD_COLUMN_3, childdata[k].word_3,
336 WORD_COLUMN_4, childdata[k].word_4,