From 847581b67cf737e476c1e94c8f4cead87552afd1 Mon Sep 17 00:00:00 2001 From: Tristan Van Berkom Date: Sat, 4 Dec 2010 14:27:18 +0900 Subject: [PATCH] Adding testverticalcells.c. This test displays a GtkTreeViewColumn rendering a vertically oriented GtkCellArea along side a horizontally oriented column in the same treeview. --- tests/Makefile.am | 3 + tests/testverticalcells.c | 375 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 378 insertions(+) create mode 100644 tests/testverticalcells.c diff --git a/tests/Makefile.am b/tests/Makefile.am index 3bfd2ac397..681e9b3fda 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -87,6 +87,7 @@ noinst_PROGRAMS = $(TEST_PROGS) \ testtreecolumns \ testtreecolumnsizing \ testtreesort \ + testverticalcells \ treestoretest \ testxinerama \ testwindows \ @@ -179,6 +180,7 @@ testtreeflow_DEPENDENCIES = $(DEPS) testtreecolumns_DEPENDENCIES = $(DEPS) testtreecolumnsizing_DEPENDENCIES = $(DEPS) testtreesort_DEPENDENCIES = $(DEPS) +testverticalcells_DEPENDENCIES = $(DEPS) treestoretest_DEPENDENCIES = $(TEST_DEPS) testxinerama_DEPENDENCIES = $(TEST_DEPS) testmerge_DEPENDENCIES = $(TEST_DEPS) @@ -257,6 +259,7 @@ testtreeflow_LDADD = $(LDADDS) testtreecolumns_LDADD = $(LDADDS) testtreecolumnsizing_LDADD = $(LDADDS) testtreesort_LDADD = $(LDADDS) +testverticalcells_LDADD = $(LDADDS) treestoretest_LDADD = $(LDADDS) testxinerama_LDADD = $(LDADDS) testmerge_LDADD = $(LDADDS) diff --git a/tests/testverticalcells.c b/tests/testverticalcells.c new file mode 100644 index 0000000000..81a586abc0 --- /dev/null +++ b/tests/testverticalcells.c @@ -0,0 +1,375 @@ +/* testverticalcells.c + * + * Copyright (C) 2010 Openismus GmbH + * + * Authors: + * Tristan Van Berkom + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include "config.h" +#include + +typedef struct _TreeEntry TreeEntry; + +struct _TreeEntry { + const gchar *icon; + const gchar *info; + const gchar *description; + const gchar *fine_print; + const gchar *fine_print_color; + gint progress; + TreeEntry *entries; +}; + +enum { + ICON_COLUMN, + INFO_COLUMN, + DESCRIPTION_COLUMN, + FINE_PRINT_COLUMN, + FINE_PRINT_COLOR_COLUMN, + PROGRESS_COLUMN, + NUM_COLUMNS +}; + + +static TreeEntry info_entries[] = + { + { + "gtk-execute", + "Will you\n" + "run this ?", + "Currently executing that thing... you might want to abort", + "and every day he went fishing for pigs in the sky", + "green", + 83, + NULL + }, + { + "gtk-dialog-authentication", + "This is the\n" + "realest of the real", + "We are about to authenticate the actual realness, this could take some time", + "one day he caught a giant ogre who barked and barked and barked", + "purple", + 4, + NULL + }, + { 0, }, + }; + +static TreeEntry directory_entries[] = + { + { + "gtk-edit", + "We can edit\n" + "things in here", + "Time to edit your directory, almost finished now", + "she thought the best remedy for daydreams was going to be sleep", + "dark sea green", + 99, + NULL + }, + { + "gtk-file", + "You have a\n" + "file here", + "Who would of thought there would be a file in the directory ?", + "after taking loads of sleeping pills he could still hear the pigs barking", + "green yellow", + 33, + NULL + }, + { + "gtk-dialog-question", + "Any questions ?", + "This file would like to ask you a question", + "so he decided that the fine print underneath the progress bar probably made no sense at all", + "lavender", + 73, + NULL + }, + { 0, }, + }; + +static TreeEntry other_entries[] = + { + { + "gtk-zoom-fit", + "Thats the\n" + "perfect fit", + "Now fitting foo into bar using frobnicator", + "using his nifty wide angle lense, he was able to catch a 'dark salmon', it was no flying pig " + "however it was definitely a keeper", + "dark salmon", + 59, + NULL + }, + { + "gtk-underline", + "Under the\n" + "line", + "Now underlining that this demo would look alot niftier with some real content", + "it was indeed strange to catch a red salmon while fishing for pigs in the deep sky blue.", + "deep sky blue", + 99, + NULL + }, + }; + +static TreeEntry add_entries[] = + { + { + "gtk-about", + "its about\n" + "to start", + "This is what it's all about", + "so he went ahead and added the 'gtk-about' icon to his story, thinking 'mint cream' would be the " + "right color for something like that", + "dark violet", + 1, + NULL + }, + { + "gtk-zoom-in", + "Watch it\n" + "Zoom !", + "Now zooming into something", + "while fishing for pigs in the sky, maybe he would have caught something faster if only he had zoomed in", + "orchid", + 6, + NULL + }, + { + "gtk-zoom-out", + "Zoom Zoom\n" + "Zoom !", + "Now zooming out of something else", + "the daydream had a much prettier picture over all once he had zoomed out for the wide angle, " + "jill agreed", + "dark magenta", + 46, + other_entries + }, + { 0, }, + }; + + +static TreeEntry main_entries[] = + { + { + "gtk-info", + "This is all\n" + "the info", + "We are currently informing you", + "once upon a time in a land far far away there was a guy named buba", + "red", + 64, + info_entries + }, + { + "gtk-dialog-warning", + "This is a\n" + "warning", + "We would like to warn you that your laptop might explode after we're done", + "so he decided that he must be stark raving mad", + "orange", + 43, + NULL + }, + { + "gtk-dialog-error", + "An error will\n" + "occur", + "Once we're done here, dont worry... an error will surely occur.", + "and went to a see a yellow physiotherapist who's name was jill", + "yellow", + 98, + NULL + }, + { + "gtk-directory", + "The directory", + "Currently scanning your directories.", + "jill didnt know what to make of the barking pigs either so she fed him sleeping pills", + "brown", + 20, + directory_entries + }, + { + "gtk-delete", + "Now deleting\n" + "the whole thing", + "Time to delete the sucker", + "and he decided to just delete the whole conversation since it didnt make sense to him", + "dark orange", + 26, + NULL + }, + { + "gtk-add", + "Anything\n" + "to add ?", + "Now adding stuff... please be patient", + "but on second thought, maybe he had something to add so that things could make a little less sense.", + "maroon", + 72, + add_entries + }, + { + "gtk-redo", + "Time to\n" + "do it again", + "For the hell of it, lets add the content to the treeview over and over again !", + "buba likes telling his story, so maybe he's going to tell it 20 times more.", + "deep pink", + 100, + NULL + }, + { 0, }, + }; + + +static void +populate_model (GtkTreeStore *model, + GtkTreeIter *parent, + TreeEntry *entries) +{ + GtkTreeIter iter; + gint i; + + for (i = 0; entries[i].info != NULL; i++) + { + gtk_tree_store_append (model, &iter, parent); + gtk_tree_store_set (model, &iter, + ICON_COLUMN, entries[i].icon, + INFO_COLUMN, entries[i].info, + DESCRIPTION_COLUMN, entries[i].description, + FINE_PRINT_COLUMN, entries[i].fine_print, + FINE_PRINT_COLOR_COLUMN, entries[i].fine_print_color, + PROGRESS_COLUMN, entries[i].progress, + -1); + + if (entries[i].entries) + populate_model (model, &iter, entries[i].entries); + } +} + +static GtkTreeModel * +create_model (void) +{ + GtkTreeStore *model; + gint i; + + model = gtk_tree_store_new (NUM_COLUMNS, + G_TYPE_STRING, + G_TYPE_STRING, + G_TYPE_STRING, + G_TYPE_STRING, + G_TYPE_STRING, + G_TYPE_INT); + + for (i = 0; i < 20; i++) + populate_model (model, NULL, main_entries); + + return GTK_TREE_MODEL (model); +} + +gint +main (gint argc, gchar **argv) +{ + GtkWidget *window; + GtkWidget *scrolled_window; + GtkWidget *tree_view; + GtkTreeModel *tree_model; + GtkCellRenderer *renderer; + GtkTreeViewColumn *column; + GtkCellArea *area; + + gtk_init (&argc, &argv); + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_title (GTK_WINDOW (window), "Vertical cells in GtkTreeViewColumn example"); + g_signal_connect (window, "destroy", gtk_main_quit, NULL); + + 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_container_add (GTK_CONTAINER (window), scrolled_window); + + tree_model = create_model (); + tree_view = gtk_tree_view_new_with_model (tree_model); + gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tree_view), FALSE); + + /* First column */ + column = gtk_tree_view_column_new (); + + renderer = gtk_cell_renderer_pixbuf_new (); + g_object_set (renderer, "stock-size", GTK_ICON_SIZE_DIALOG, NULL); + gtk_tree_view_column_pack_start (column, renderer, TRUE); + gtk_tree_view_column_set_attributes (column, renderer, + "stock-id", ICON_COLUMN, NULL); + + renderer = gtk_cell_renderer_text_new (); + g_object_set (renderer, "scale", 1.2F, "weight", PANGO_WEIGHT_BOLD, NULL); + gtk_tree_view_column_pack_start (column, renderer, TRUE); + gtk_tree_view_column_set_attributes (column, renderer, + "text", INFO_COLUMN, + NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column); + + /* Second (vertical) column */ + column = gtk_tree_view_column_new (); + area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (column)); + gtk_orientable_set_orientation (GTK_ORIENTABLE (area), GTK_ORIENTATION_VERTICAL); + + renderer = gtk_cell_renderer_text_new (); + g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL); + gtk_tree_view_column_pack_start (column, renderer, TRUE); + gtk_tree_view_column_set_attributes (column, renderer, + "text", DESCRIPTION_COLUMN, + NULL); + + renderer = gtk_cell_renderer_progress_new (); + gtk_tree_view_column_pack_start (column, renderer, TRUE); + gtk_tree_view_column_set_attributes (column, renderer, + "value", PROGRESS_COLUMN, + NULL); + + renderer = gtk_cell_renderer_text_new (); + g_object_set (renderer, "scale", 0.6F, "ellipsize", PANGO_ELLIPSIZE_END, NULL); + gtk_tree_view_column_pack_start (column, renderer, TRUE); + gtk_tree_view_column_set_attributes (column, renderer, + "text", FINE_PRINT_COLUMN, + "foreground", FINE_PRINT_COLOR_COLUMN, + NULL); + + gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column); + + gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view)); + + gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view); + + gtk_window_set_default_size (GTK_WINDOW (window), + 800, 400); + + gtk_widget_show_all (window); + gtk_main (); + + return 0; +}