#include typedef struct _ListSort ListSort; struct _ListSort { const gchar *word_1; const gchar *word_2; const gchar *word_3; const gchar *word_4; }; static ListSort data[] = { { "Apples", "Transmorgrify long word to demonstrate weirdness", "Exculpatory", "Gesundheit"}, { "Oranges", "Wicker", "Adamantine", "Convivial" }, { "Bovine Spongiform Encephilopathy", "Sleazebucket", "Mountaineer", "Pander" }, { "Foot and Mouth", "Lampshade", "Skim Milk\nFull Milk", "Viewless" }, { "Blood,\nsweat,\ntears", "The Man", "Horses", "Muckety-Muck" }, { "Rare Steak", "Siam", "Watchdog", "Xantippe" }, { "SIGINT", "Rabbit Breath", "Alligator", "Bloodstained" }, { "Google", "Chrysanthemums", "Hobnob", "Leapfrog"}, { "Technology fibre optic", "Turtle", "Academe", "Lonely" }, { "Freon", "Harpes", "Quidditch", "Reagan" }, { "Transposition", "Fruit Basket", "Monkey Wort", "Glogg" }, { "Fern", "Glasnost and Perestroika", "Latitude", "Bomberman!!!" }, {NULL, } }; enum { WORD_COLUMN_1 = 0, WORD_COLUMN_2, WORD_COLUMN_3, WORD_COLUMN_4, NUM_COLUMNS }; int main (int argc, char *argv[]) { GtkWidget *window; GtkWidget *vbox; GtkWidget *scrolled_window; GtkWidget *tree_view; GtkTreeModel *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeIter iter; gint i, j; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), "Words, words, words"); gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL); vbox = gtk_vbox_new (FALSE, 8); gtk_container_set_border_width (GTK_CONTAINER (vbox), 8); gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("My list of cool words"), FALSE, FALSE, 0); gtk_container_add (GTK_CONTAINER (window), vbox); scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_ETCHED_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0); model = GTK_TREE_MODEL (gtk_tree_store_new (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING)); // gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model), 0, GTK_TREE_SORT_ASCENDING); g_print ("start model\n"); tree_view = gtk_tree_view_new_with_model (model); gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)), GTK_TREE_SELECTION_MULTI); for (j = 0; j < 2; j++) for (i = 0; data[i].word_1 != NULL; i++) { gtk_tree_store_prepend (GTK_TREE_STORE (model), &iter, NULL); gtk_tree_store_set (GTK_TREE_STORE (model), &iter, WORD_COLUMN_1, data[i].word_1, WORD_COLUMN_2, data[i].word_2, WORD_COLUMN_3, data[i].word_3, WORD_COLUMN_4, data[i].word_4, -1); } g_print ("done with model\n"); g_object_unref (G_OBJECT (model)); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("First Word", renderer, "text", WORD_COLUMN_1, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column); gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_1); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Second Word", renderer, "text", WORD_COLUMN_2, NULL); gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_2); gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer, "text", WORD_COLUMN_3, NULL); gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_3); gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Fourth Word", renderer, "text", WORD_COLUMN_4, NULL); gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_4); gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column); gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view); gtk_window_set_default_size (GTK_WINDOW (window), 400, 400); gtk_widget_show_all (window); gtk_main (); return 0; }