]> Pileus Git - ~andy/gtk/blob - tests/testtreesort.c
Add GTK_SELECTION_NONE enum, #61695
[~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   /* 12 iters now, 12 later... */
97   for (i = 0; data[i].word_1 != NULL; i++)
98     {
99       gint k;
100       GtkTreeIter child_iter;
101
102
103       gtk_tree_store_prepend (GTK_TREE_STORE (model), &iter, NULL);
104       gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
105                           WORD_COLUMN_1, data[i].word_1,
106                           WORD_COLUMN_2, data[i].word_2,
107                           WORD_COLUMN_3, data[i].word_3,
108                           WORD_COLUMN_4, data[i].word_4,
109                           -1);
110
111       gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
112       gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter,
113                           WORD_COLUMN_1, data[i].word_1,
114                           WORD_COLUMN_2, data[i].word_2,
115                           WORD_COLUMN_3, data[i].word_3,
116                           WORD_COLUMN_4, data[i].word_4,
117                           -1);
118       for (k = 0; childdata[k].word_1 != NULL; k++)
119         {
120           gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
121           gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter,
122                               WORD_COLUMN_1, childdata[k].word_1,
123                               WORD_COLUMN_2, childdata[k].word_2,
124                               WORD_COLUMN_3, childdata[k].word_3,
125                               WORD_COLUMN_4, childdata[k].word_4,
126                               -1);
127         }
128     }
129   
130   smodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (model));
131   ssmodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (smodel));
132
133   g_object_unref (G_OBJECT (model));
134   gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
135
136   renderer = gtk_cell_renderer_text_new ();
137   column = gtk_tree_view_column_new_with_attributes ("First Word", renderer,
138                                                      "text", WORD_COLUMN_1,
139                                                      NULL);
140   gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
141   gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_1);
142
143   renderer = gtk_cell_renderer_text_new ();
144   column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer,
145                                                      "text", WORD_COLUMN_2,
146                                                      NULL);
147   gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_2);
148   gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
149
150   renderer = gtk_cell_renderer_text_new ();
151   column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
152                                                      "text", WORD_COLUMN_3,
153                                                      NULL);
154   gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_3);
155   gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
156
157   renderer = gtk_cell_renderer_text_new ();
158   column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer,
159                                                      "text", WORD_COLUMN_4,
160                                                      NULL);
161   gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_4);
162
163   gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
164
165   /*  gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (smodel),
166                                         WORD_COLUMN_1,
167                                         GTK_SORT_ASCENDING);*/
168
169   gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
170   gtk_window_set_default_size (GTK_WINDOW (window), 400, 400);
171   gtk_widget_show_all (window);
172
173
174   /**
175    * Second window - GtkTreeModelSort wrapping the GtkTreeStore
176    */
177
178   if (smodel)
179     {
180       window2 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
181       gtk_window_set_title (GTK_WINDOW (window2), 
182                             "Words, words, words - window 2");
183       gtk_signal_connect (GTK_OBJECT (window2), "destroy", gtk_main_quit, NULL);
184       vbox2 = gtk_vbox_new (FALSE, 8);
185       gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
186       gtk_box_pack_start (GTK_BOX (vbox2), 
187                           gtk_label_new ("Jonathan and Kristian's list of words.\n\nA GtkTreeModelSort wrapping the GtkTreeStore of window 1"),
188                           FALSE, FALSE, 0);
189       gtk_container_add (GTK_CONTAINER (window2), vbox2);
190       
191       scrolled_window2 = gtk_scrolled_window_new (NULL, NULL);
192       gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window2),
193                                            GTK_SHADOW_ETCHED_IN);
194       gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window2),
195                                       GTK_POLICY_AUTOMATIC,
196                                       GTK_POLICY_AUTOMATIC);
197       gtk_box_pack_start (GTK_BOX (vbox2), scrolled_window2, TRUE, TRUE, 0);
198       
199       
200       tree_view2 = gtk_tree_view_new_with_model (smodel);
201       gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view2), TRUE);
202       
203       
204       renderer = gtk_cell_renderer_text_new ();
205       column = gtk_tree_view_column_new_with_attributes ("First Word", renderer,
206                                                          "text", WORD_COLUMN_1,
207                                                          NULL);
208       gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
209       gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_1);
210       
211       renderer = gtk_cell_renderer_text_new ();
212       column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer,
213                                                          "text", WORD_COLUMN_2,
214                                                          NULL);
215       gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_2);
216       gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
217       
218       renderer = gtk_cell_renderer_text_new ();
219       column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
220                                                          "text", WORD_COLUMN_3,
221                                                          NULL);
222       gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_3);
223       gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
224       
225       renderer = gtk_cell_renderer_text_new ();
226       column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer,
227                                                          "text", WORD_COLUMN_4,
228                                                          NULL);
229       gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_4);
230       gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
231       
232       /*      gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (smodel),
233                                                (GtkTreeIterCompareFunc)gtk_tree_data_list_compare_func,
234                                                NULL, NULL);
235       gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (smodel),
236                                             WORD_COLUMN_1,
237                                             GTK_SORT_DESCENDING);*/
238       
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 }