]> Pileus Git - ~andy/gtk/blob - tests/testtreesort.c
Fix double-click activation.
[~andy/gtk] / tests / testtreesort.c
1 #include <config.h>
2 #include <gtk/gtk.h>
3
4 #include "../gtk/gtktreedatalist.h"
5
6
7 typedef struct _ListSort ListSort;
8 struct _ListSort
9 {
10   const gchar *word_1;
11   const gchar *word_2;
12   const gchar *word_3;
13   const gchar *word_4;
14   gint number_1;
15 };
16
17 static ListSort data[] =
18 {
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 },
31   {NULL, }
32 };
33
34 static ListSort childdata[] =
35 {
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},
41   {NULL, }
42 };
43   
44
45 enum
46 {
47   WORD_COLUMN_1 = 0,
48   WORD_COLUMN_2,
49   WORD_COLUMN_3,
50   WORD_COLUMN_4,
51   NUMBER_COLUMN_1,
52   NUM_COLUMNS
53 };
54
55 gboolean
56 select_func (GtkTreeSelection  *selection,
57              GtkTreeModel      *model,
58              GtkTreePath       *path,
59              gboolean           path_currently_selected,
60              gpointer           data)
61 {
62   if (gtk_tree_path_get_depth (path) > 1)
63     return TRUE;
64   return FALSE;
65 }
66
67 int
68 main (int argc, char *argv[])
69 {
70   GtkWidget *window;
71   GtkWidget *vbox;
72   GtkWidget *scrolled_window;
73   GtkWidget *tree_view;
74   GtkTreeStore *model;
75   GtkTreeModel *smodel = NULL;
76   GtkTreeModel *ssmodel = NULL;
77   GtkCellRenderer *renderer;
78   GtkTreeViewColumn *column;
79   GtkTreeIter iter;
80   gint i;
81
82   GtkWidget *window2, *vbox2, *scrolled_window2, *tree_view2;
83   GtkWidget *window3, *vbox3, *scrolled_window3, *tree_view3;
84
85   gtk_init (&argc, &argv);
86
87   /**
88    * First window - Just a GtkTreeStore
89    */
90
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);
98
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);
103
104   model = gtk_tree_store_new (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
105
106 /*
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));
109 */
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++)
114     {
115       gint k;
116       GtkTreeIter child_iter;
117
118
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,
126                           -1);
127
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,
135                           -1);
136
137       for (k = 0; childdata[k].word_1 != NULL; k++)
138         {
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,
146                               -1);
147
148         }
149
150     }
151   
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);
155
156   gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
157
158   renderer = gtk_cell_renderer_text_new ();
159   column = gtk_tree_view_column_new_with_attributes ("First Word", renderer,
160                                                      "text", WORD_COLUMN_1,
161                                                      NULL);
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);
164
165   renderer = gtk_cell_renderer_text_new ();
166   column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer,
167                                                      "text", WORD_COLUMN_2,
168                                                      NULL);
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);
171
172   renderer = gtk_cell_renderer_text_new ();
173   column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
174                                                      "text", WORD_COLUMN_3,
175                                                      NULL);
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);
178
179   renderer = gtk_cell_renderer_text_new ();
180   column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer,
181                                                      "text", WORD_COLUMN_4,
182                                                      NULL);
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);
185   
186   renderer = gtk_cell_renderer_text_new ();
187   column = gtk_tree_view_column_new_with_attributes ("First Number", renderer,
188                                                      "text", NUMBER_COLUMN_1,
189                                                      NULL);
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);
192
193   /*  gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (smodel),
194                                         WORD_COLUMN_1,
195                                         GTK_SORT_ASCENDING);*/
196
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);
200
201   /**
202    * Second window - GtkTreeModelSort wrapping the GtkTreeStore
203    */
204
205   if (smodel)
206     {
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"),
215                           FALSE, FALSE, 0);
216       gtk_container_add (GTK_CONTAINER (window2), vbox2);
217       
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);
225       
226       
227       tree_view2 = gtk_tree_view_new_with_model (smodel);
228       gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view2), TRUE);
229       
230       
231       renderer = gtk_cell_renderer_text_new ();
232       column = gtk_tree_view_column_new_with_attributes ("First Word", renderer,
233                                                          "text", WORD_COLUMN_1,
234                                                          NULL);
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);
237       
238       renderer = gtk_cell_renderer_text_new ();
239       column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer,
240                                                          "text", WORD_COLUMN_2,
241                                                          NULL);
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);
244       
245       renderer = gtk_cell_renderer_text_new ();
246       column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
247                                                          "text", WORD_COLUMN_3,
248                                                          NULL);
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);
251       
252       renderer = gtk_cell_renderer_text_new ();
253       column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer,
254                                                          "text", WORD_COLUMN_4,
255                                                          NULL);
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);
258       
259       /*      gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (smodel),
260                                                (GtkTreeIterCompareFunc)gtk_tree_data_list_compare_func,
261                                                NULL, NULL);
262       gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (smodel),
263                                             WORD_COLUMN_1,
264                                             GTK_SORT_DESCENDING);*/
265       
266       
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);
270     }
271   
272   /**
273    * Third window - GtkTreeModelSort wrapping the GtkTreeModelSort which
274    * is wrapping the GtkTreeStore.
275    */
276   
277   if (ssmodel)
278     {
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"),
287                           FALSE, FALSE, 0);
288       gtk_container_add (GTK_CONTAINER (window3), vbox3);
289       
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);
297       
298       
299       tree_view3 = gtk_tree_view_new_with_model (ssmodel);
300       gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view3), TRUE);
301       
302       renderer = gtk_cell_renderer_text_new ();
303       column = gtk_tree_view_column_new_with_attributes ("First Word", renderer,
304                                                          "text", WORD_COLUMN_1,
305                                                          NULL);
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);
308       
309       renderer = gtk_cell_renderer_text_new ();
310       column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer,
311                                                          "text", WORD_COLUMN_2,
312                                                          NULL);
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);
315       
316       renderer = gtk_cell_renderer_text_new ();
317       column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
318                                                          "text", WORD_COLUMN_3,
319                                                          NULL);
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);
322       
323       renderer = gtk_cell_renderer_text_new ();
324       column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer,
325                                                          "text", WORD_COLUMN_4,
326                                                          NULL);
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);
329       
330       /*      gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (ssmodel),
331                                                (GtkTreeIterCompareFunc)gtk_tree_data_list_compare_func,
332                                                NULL, NULL);
333       gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (ssmodel),
334                                             WORD_COLUMN_1,
335                                             GTK_SORT_ASCENDING);*/
336       
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);
340     }
341
342   for (i = 0; data[i].word_1 != NULL; i++)
343     {
344       gint k;
345       
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,
352                           -1);
353       for (k = 0; childdata[k].word_1 != NULL; k++)
354         {
355           GtkTreeIter child_iter;
356           
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,
363                               -1);
364         }
365     }
366
367   gtk_main ();
368   
369   return 0;
370 }