]> Pileus Git - ~andy/gtk/blob - tests/testtreesort.c
Whoops. Forgot this a couple months ago. Now GtkTreeStore sort of sorts.
[~andy/gtk] / tests / testtreesort.c
1 #include <gtk/gtk.h>
2
3
4 typedef struct _ListSort ListSort;
5 struct _ListSort
6 {
7   const gchar *word_1;
8   const gchar *word_2;
9   const gchar *word_3;
10   const gchar *word_4;
11 };
12
13 static ListSort data[] =
14 {
15   { "Apples", "Transmorgrify long word to demonstrate weirdness", "Exculpatory", "Gesundheit"},
16   { "Oranges", "Wicker", "Adamantine", "Convivial" },
17   { "Bovine Spongiform Encephilopathy", "Sleazebucket", "Mountaineer", "Pander" },
18   { "Foot and Mouth", "Lampshade", "Skim Milk\nFull Milk", "Viewless" },
19   { "Blood,\nsweat,\ntears", "The Man", "Horses", "Muckety-Muck" },
20   { "Rare Steak", "Siam", "Watchdog", "Xantippe" },
21   { "SIGINT", "Rabbit Breath", "Alligator", "Bloodstained" },
22   { "Google", "Chrysanthemums", "Hobnob", "Leapfrog"},
23   { "Technology fibre optic", "Turtle", "Academe", "Lonely"  },
24   { "Freon", "Harpes", "Quidditch", "Reagan" },
25   { "Transposition", "Fruit Basket", "Monkey Wort", "Glogg" },
26   { "Fern", "Glasnost and Perestroika", "Latitude", "Bomberman!!!" },
27   {NULL, }
28 };
29   
30
31 enum
32 {
33   WORD_COLUMN_1 = 0,
34   WORD_COLUMN_2,
35   WORD_COLUMN_3,
36   WORD_COLUMN_4,
37   NUM_COLUMNS
38 };
39
40 int
41 main (int argc, char *argv[])
42 {
43   GtkWidget *window;
44   GtkWidget *vbox;
45   GtkWidget *scrolled_window;
46   GtkWidget *tree_view;
47   GtkTreeModel *model;
48   GtkCellRenderer *renderer;
49   GtkTreeViewColumn *column;
50   GtkTreeIter iter;
51   gint i, j;
52
53   gtk_init (&argc, &argv);
54
55   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
56   gtk_window_set_title (GTK_WINDOW (window), "Words, words, words");
57   gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL);
58   vbox = gtk_vbox_new (FALSE, 8);
59   gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
60   gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("My list of cool words"), FALSE, FALSE, 0);
61   gtk_container_add (GTK_CONTAINER (window), vbox);
62
63   scrolled_window = gtk_scrolled_window_new (NULL, NULL);
64   gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_ETCHED_IN);
65   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
66   gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
67
68   model = gtk_tree_store_new_with_types (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
69   //  gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model), 0, GTK_TREE_SORT_ASCENDING);
70   g_print ("start model\n");
71   tree_view = gtk_tree_view_new_with_model (model);
72   for (j = 0; j < 2; j++)
73     for (i = 0; data[i].word_1 != NULL; i++)
74       {
75         gtk_tree_store_prepend (GTK_TREE_STORE (model), &iter, NULL);
76         gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
77                             WORD_COLUMN_1, data[i].word_1,
78                             WORD_COLUMN_2, data[i].word_2,
79                             WORD_COLUMN_3, data[i].word_3,
80                             WORD_COLUMN_4, data[i].word_4,
81                             -1);
82       }
83   g_print ("done with model\n");
84
85   g_object_unref (G_OBJECT (model));
86   gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
87
88   renderer = gtk_cell_renderer_text_new ();
89   column = gtk_tree_view_column_new_with_attributes ("First Word", renderer,
90                                                      "text", WORD_COLUMN_1,
91                                                      NULL);
92   gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
93   gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_1);
94
95   g_object_unref (column);
96   g_object_unref (renderer);
97
98   renderer = gtk_cell_renderer_text_new ();
99   column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer,
100                                                      "text", WORD_COLUMN_2,
101                                                      NULL);
102   gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_2);
103   gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
104   g_object_unref (column);
105   g_object_unref (renderer);
106
107   renderer = gtk_cell_renderer_text_new ();
108   column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
109                                                      "text", WORD_COLUMN_3,
110                                                      NULL);
111   gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_3);
112   gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
113   g_object_unref (column);
114   g_object_unref (renderer);
115
116   renderer = gtk_cell_renderer_text_new ();
117   column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer,
118                                                      "text", WORD_COLUMN_4,
119                                                      NULL);
120   gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_4);
121
122   gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
123   g_object_unref (column);
124   g_object_unref (renderer);
125
126   gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
127   gtk_window_set_default_size (GTK_WINDOW (window), 400, 400);
128   gtk_widget_show_all (window);
129   gtk_main ();
130
131   return 0;
132 }