]> Pileus Git - ~andy/gtk/blob - tests/testtreesort.c
sync minor clenup
[~andy/gtk] / tests / testtreesort.c
1 #include <gtk/gtk.h>
2
3 #include "../gtk/gtktreedatalist.h"
4
5
6 typedef struct _ListSort ListSort;
7 struct _ListSort
8 {
9   const gchar *word_1;
10   const gchar *word_2;
11   const gchar *word_3;
12   const gchar *word_4;
13 };
14
15 static ListSort data[] =
16 {
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!!!" },
29   {NULL, }
30 };
31
32 static ListSort childdata[] =
33 {
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"},
39   {NULL, }
40 };
41   
42
43 enum
44 {
45   WORD_COLUMN_1 = 0,
46   WORD_COLUMN_2,
47   WORD_COLUMN_3,
48   WORD_COLUMN_4,
49   NUM_COLUMNS
50 };
51
52 int
53 main (int argc, char *argv[])
54 {
55   GtkWidget *window;
56   GtkWidget *vbox;
57   GtkWidget *scrolled_window;
58   GtkWidget *tree_view;
59   GtkTreeStore *model;
60   GtkTreeModel *smodel = NULL;
61   GtkTreeModel *ssmodel = NULL;
62   GtkCellRenderer *renderer;
63   GtkTreeViewColumn *column;
64   GtkTreeIter iter;
65   gint i;
66
67   GtkWidget *window2, *vbox2, *scrolled_window2, *tree_view2;
68   GtkWidget *window3, *vbox3, *scrolled_window3, *tree_view3;
69
70   gtk_init (&argc, &argv);
71
72   /**
73    * First window - Just a GtkTreeStore
74    */
75
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);
83
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);
88
89   model = gtk_tree_store_new (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
90
91 /*
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));
94 */
95   tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
96
97   /* 12 iters now, 12 later... */
98   for (i = 0; data[i].word_1 != NULL; i++)
99     {
100       gint k;
101       GtkTreeIter child_iter;
102
103
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,
110                           -1);
111
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,
118                           -1);
119       for (k = 0; childdata[k].word_1 != NULL; k++)
120         {
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,
127                               -1);
128         }
129     }
130   
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));
133
134   g_object_unref (G_OBJECT (model));
135   gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
136
137   renderer = gtk_cell_renderer_text_new ();
138   column = gtk_tree_view_column_new_with_attributes ("First Word", renderer,
139                                                      "text", WORD_COLUMN_1,
140                                                      NULL);
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);
143
144   renderer = gtk_cell_renderer_text_new ();
145   column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer,
146                                                      "text", WORD_COLUMN_2,
147                                                      NULL);
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);
150
151   renderer = gtk_cell_renderer_text_new ();
152   column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
153                                                      "text", WORD_COLUMN_3,
154                                                      NULL);
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);
157
158   renderer = gtk_cell_renderer_text_new ();
159   column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer,
160                                                      "text", WORD_COLUMN_4,
161                                                      NULL);
162   gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_4);
163
164   gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
165
166   gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (smodel),
167                                         WORD_COLUMN_1,
168                                         GTK_SORT_ASCENDING);
169
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);
173
174
175   /**
176    * Second window - GtkTreeModelSort wrapping the GtkTreeStore
177    */
178
179   if (smodel)
180     {
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"),
189                           FALSE, FALSE, 0);
190       gtk_container_add (GTK_CONTAINER (window2), vbox2);
191       
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);
199       
200       
201       tree_view2 = gtk_tree_view_new_with_model (smodel);
202       gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view2), TRUE);
203       
204       
205       renderer = gtk_cell_renderer_text_new ();
206       column = gtk_tree_view_column_new_with_attributes ("First Word", renderer,
207                                                          "text", WORD_COLUMN_1,
208                                                          NULL);
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);
211       
212       renderer = gtk_cell_renderer_text_new ();
213       column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer,
214                                                          "text", WORD_COLUMN_2,
215                                                          NULL);
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);
218       
219       renderer = gtk_cell_renderer_text_new ();
220       column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
221                                                          "text", WORD_COLUMN_3,
222                                                          NULL);
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);
225       
226       renderer = gtk_cell_renderer_text_new ();
227       column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer,
228                                                          "text", WORD_COLUMN_4,
229                                                          NULL);
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);
232       
233       gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (smodel),
234                                                (GtkTreeIterCompareFunc)gtk_tree_data_list_compare_func,
235                                                NULL, NULL);
236       gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (smodel),
237                                             WORD_COLUMN_1,
238                                             GTK_SORT_DESCENDING);
239       
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);
243     }
244   
245   /**
246    * Third window - GtkTreeModelSort wrapping the GtkTreeModelSort which
247    * is wrapping the GtkTreeStore.
248    */
249   
250   if (ssmodel)
251     {
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"),
260                           FALSE, FALSE, 0);
261       gtk_container_add (GTK_CONTAINER (window3), vbox3);
262       
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);
270       
271       
272       tree_view3 = gtk_tree_view_new_with_model (ssmodel);
273       gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view3), TRUE);
274       
275       
276       renderer = gtk_cell_renderer_text_new ();
277       column = gtk_tree_view_column_new_with_attributes ("First Word", renderer,
278                                                          "text", WORD_COLUMN_1,
279                                                          NULL);
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);
282       
283       renderer = gtk_cell_renderer_text_new ();
284       column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer,
285                                                          "text", WORD_COLUMN_2,
286                                                          NULL);
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);
289       
290       renderer = gtk_cell_renderer_text_new ();
291       column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
292                                                          "text", WORD_COLUMN_3,
293                                                          NULL);
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);
296       
297       renderer = gtk_cell_renderer_text_new ();
298       column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer,
299                                                          "text", WORD_COLUMN_4,
300                                                          NULL);
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);
303       
304       gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (ssmodel),
305                                                (GtkTreeIterCompareFunc)gtk_tree_data_list_compare_func,
306                                                NULL, NULL);
307       gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (ssmodel),
308                                             WORD_COLUMN_1,
309                                             GTK_SORT_ASCENDING);
310       
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);
314     }
315 #if 0  
316   for (i = 0; data[i].word_1 != NULL; i++)
317     {
318       gint k;
319       
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,
326                           -1);
327       for (k = 0; childdata[k].word_1 != NULL; k++)
328         {
329           GtkTreeIter child_iter;
330           
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,
337                               -1);
338         }
339     }
340 #endif  
341   gtk_main ();
342   
343   return 0;
344 }