Initial commit
This is the latest version found at http://scentric.net/tutorial/treeview-tutorial-xml.tar.gz
This commit is contained in:
14
examples/treeview-demo/Makefile
Normal file
14
examples/treeview-demo/Makefile
Normal file
@@ -0,0 +1,14 @@
|
||||
|
||||
CC = gcc
|
||||
|
||||
CFLAGS = -g -O2 `pkg-config --cflags gtk+-2.0`
|
||||
|
||||
all: treeview-demo icon-with-text
|
||||
|
||||
treeview-demo: main.o
|
||||
gcc -o treeview-demo main.o `pkg-config --libs gtk+-2.0`
|
||||
|
||||
icon-with-text: main-icon-with-text.o
|
||||
gcc -o icon-with-text main-icon-with-text.o `pkg-config --libs gtk+-2.0`
|
||||
clean:
|
||||
rm -f *.o treeview-demo icon-with-text 2>/dev/null
|
BIN
examples/treeview-demo/icon.png
Normal file
BIN
examples/treeview-demo/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.7 KiB |
123
examples/treeview-demo/main-icon-with-text.c
Normal file
123
examples/treeview-demo/main-icon-with-text.c
Normal file
@@ -0,0 +1,123 @@
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
enum
|
||||
{
|
||||
COL_ICON = 0,
|
||||
COL_TEXT,
|
||||
COL_TEXT2,
|
||||
NUM_COLS
|
||||
};
|
||||
|
||||
/**************************************************************
|
||||
*
|
||||
* create_liststore
|
||||
*
|
||||
**************************************************************/
|
||||
|
||||
GtkListStore *
|
||||
create_liststore(void)
|
||||
{
|
||||
GtkListStore *store;
|
||||
GtkTreeIter iter;
|
||||
GdkPixbuf *icon;
|
||||
GError *error = NULL;
|
||||
|
||||
store = gtk_list_store_new(3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING);
|
||||
|
||||
icon = gdk_pixbuf_new_from_file("icon.png", &error);
|
||||
if (error)
|
||||
{
|
||||
g_warning ("Could not load icon: %s\n", error->message);
|
||||
g_error_free(error);
|
||||
error = NULL;
|
||||
}
|
||||
|
||||
gtk_list_store_append(store, &iter);
|
||||
gtk_list_store_set(store, &iter,
|
||||
COL_ICON, icon,
|
||||
COL_TEXT, "Smile",
|
||||
COL_TEXT2, "and another column",
|
||||
-1);
|
||||
|
||||
return store;
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************
|
||||
*
|
||||
* create_treeview
|
||||
*
|
||||
**************************************************************/
|
||||
|
||||
GtkWidget *
|
||||
create_treeview(void)
|
||||
{
|
||||
GtkTreeModel *model;
|
||||
GtkTreeViewColumn *col;
|
||||
GtkCellRenderer *renderer;
|
||||
GtkWidget *view;
|
||||
|
||||
model = GTK_TREE_MODEL(create_liststore());
|
||||
|
||||
view = gtk_tree_view_new_with_model(model);
|
||||
|
||||
col = gtk_tree_view_column_new();
|
||||
gtk_tree_view_column_set_title(col, "Column #1");
|
||||
|
||||
renderer = gtk_cell_renderer_pixbuf_new();
|
||||
gtk_tree_view_column_pack_start(col, renderer, FALSE);
|
||||
gtk_tree_view_column_set_attributes(col, renderer,
|
||||
"pixbuf", COL_ICON,
|
||||
NULL);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(col, renderer, TRUE);
|
||||
gtk_tree_view_column_set_attributes(col, renderer,
|
||||
"text", COL_TEXT,
|
||||
NULL);
|
||||
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(view), col);
|
||||
|
||||
/* 2nd column */
|
||||
|
||||
col = gtk_tree_view_column_new();
|
||||
gtk_tree_view_column_set_title(col, "Column #2");
|
||||
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(col, renderer, TRUE);
|
||||
gtk_tree_view_column_set_attributes(col, renderer,
|
||||
"text", COL_TEXT2,
|
||||
NULL);
|
||||
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(view), col);
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************
|
||||
*
|
||||
* main
|
||||
*
|
||||
**************************************************************/
|
||||
|
||||
gint
|
||||
main (gint argc, gchar **argv)
|
||||
{
|
||||
GtkWidget *mainwindow, *vbox;
|
||||
|
||||
gtk_init(&argc, &argv);
|
||||
|
||||
mainwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||
|
||||
/* quit when window close button is clicked */
|
||||
g_signal_connect(mainwindow, "delete_event", gtk_main_quit, NULL); /* dirty */
|
||||
|
||||
gtk_container_add(GTK_CONTAINER(mainwindow), create_treeview());
|
||||
|
||||
gtk_widget_show_all(mainwindow);
|
||||
|
||||
gtk_main();
|
||||
|
||||
return 0;
|
||||
}
|
178
examples/treeview-demo/main.c
Normal file
178
examples/treeview-demo/main.c
Normal file
@@ -0,0 +1,178 @@
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
enum
|
||||
{
|
||||
COL_FIRST_NAME = 0,
|
||||
COL_LAST_NAME,
|
||||
COL_YEAR_BORN,
|
||||
NUM_COLS
|
||||
} ;
|
||||
|
||||
static GtkTreeModel *
|
||||
create_and_fill_model (void)
|
||||
{
|
||||
GtkTreeStore *treestore;
|
||||
GtkTreeIter toplevel, child;
|
||||
|
||||
treestore = gtk_tree_store_new(NUM_COLS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT); /* NUM_COLS = 3 */
|
||||
|
||||
/* Append a top level row and leave it empty */
|
||||
gtk_tree_store_append(treestore, &toplevel, NULL);
|
||||
gtk_tree_store_set(treestore, &toplevel,
|
||||
COL_FIRST_NAME, "Maria",
|
||||
COL_LAST_NAME, "Incognito",
|
||||
-1);
|
||||
|
||||
/* Append a second top level row, and fill it with some data */
|
||||
gtk_tree_store_append(treestore, &toplevel, NULL);
|
||||
gtk_tree_store_set(treestore, &toplevel,
|
||||
COL_FIRST_NAME, "Jane",
|
||||
COL_LAST_NAME, "Average",
|
||||
COL_YEAR_BORN, (guint) 1962,
|
||||
-1);
|
||||
|
||||
/* Append a child to the second top level row, and fill in some data */
|
||||
gtk_tree_store_append(treestore, &child, &toplevel);
|
||||
gtk_tree_store_set(treestore, &child,
|
||||
COL_FIRST_NAME, "Janinita",
|
||||
COL_LAST_NAME, "Average",
|
||||
COL_YEAR_BORN, (guint) 1985,
|
||||
-1);
|
||||
|
||||
return GTK_TREE_MODEL(treestore);
|
||||
}
|
||||
|
||||
void
|
||||
age_cell_data_func (GtkTreeViewColumn *col,
|
||||
GtkCellRenderer *renderer,
|
||||
GtkTreeModel *model,
|
||||
GtkTreeIter *iter,
|
||||
gpointer user_data)
|
||||
{
|
||||
guint year_born;
|
||||
guint year_now = 2003; /* to save code not relevant for the example */
|
||||
gchar buf[64];
|
||||
|
||||
gtk_tree_model_get(model, iter, COL_YEAR_BORN, &year_born, -1);
|
||||
|
||||
if (year_born <= year_now && year_born > 0)
|
||||
{
|
||||
guint age = year_now - year_born;
|
||||
|
||||
g_snprintf(buf, sizeof(buf), "%u years old", age);
|
||||
|
||||
g_object_set(renderer, "foreground-set", FALSE, NULL); /* print this normal */
|
||||
}
|
||||
else
|
||||
{
|
||||
g_snprintf(buf, sizeof(buf), "age unknown");
|
||||
g_object_set(renderer, "foreground", "Red", "foreground-set", TRUE, NULL); /* make red */
|
||||
}
|
||||
|
||||
g_object_set(renderer, "text", buf, NULL);
|
||||
}
|
||||
|
||||
|
||||
static GtkWidget *
|
||||
create_view_and_model (void)
|
||||
{
|
||||
GtkTreeViewColumn *col;
|
||||
GtkCellRenderer *renderer;
|
||||
GtkWidget *view;
|
||||
GtkTreeModel *model;
|
||||
|
||||
view = gtk_tree_view_new();
|
||||
|
||||
/* --- Column #1 --- */
|
||||
|
||||
col = gtk_tree_view_column_new();
|
||||
|
||||
gtk_tree_view_column_set_title(col, "First Name");
|
||||
|
||||
/* pack tree view column into tree view */
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(view), col);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
|
||||
/* pack cell renderer into tree view column */
|
||||
gtk_tree_view_column_pack_start(col, renderer, TRUE);
|
||||
|
||||
/* connect 'text' property of the cell renderer to model column that contains the first name */
|
||||
gtk_tree_view_column_add_attribute(col, renderer, "text", COL_FIRST_NAME);
|
||||
|
||||
|
||||
/* --- Column #2 --- */
|
||||
|
||||
col = gtk_tree_view_column_new();
|
||||
|
||||
gtk_tree_view_column_set_title(col, "Last Name");
|
||||
|
||||
/* pack tree view column into tree view */
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(view), col);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
|
||||
/* pack cell renderer into tree view column */
|
||||
gtk_tree_view_column_pack_start(col, renderer, TRUE);
|
||||
|
||||
/* connect 'text' property of the cell renderer to model column that contains the last name */
|
||||
gtk_tree_view_column_add_attribute(col, renderer, "text", COL_LAST_NAME);
|
||||
|
||||
/* set 'weight' property of the cell renderer to bold print (we want all last names in bold) */
|
||||
g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", TRUE, NULL);
|
||||
|
||||
|
||||
/* --- Column #3 --- */
|
||||
|
||||
col = gtk_tree_view_column_new();
|
||||
|
||||
gtk_tree_view_column_set_title(col, "Age");
|
||||
|
||||
/* pack tree view column into tree view */
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(view), col);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
|
||||
/* pack cell renderer into tree view column */
|
||||
gtk_tree_view_column_pack_start(col, renderer, TRUE);
|
||||
|
||||
/* connect a cell data function */
|
||||
gtk_tree_view_column_set_cell_data_func(col, renderer, age_cell_data_func, NULL, NULL);
|
||||
|
||||
|
||||
model = create_and_fill_model();
|
||||
|
||||
gtk_tree_view_set_model(GTK_TREE_VIEW(view), model);
|
||||
|
||||
g_object_unref(model); /* destroy model automatically with view */
|
||||
|
||||
gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(view)), GTK_SELECTION_NONE);
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
GtkWidget *window;
|
||||
GtkWidget *view;
|
||||
|
||||
gtk_init(&argc, &argv);
|
||||
|
||||
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);
|
||||
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
|
||||
|
||||
g_signal_connect(window, "delete_event", gtk_main_quit, NULL); /* dirty */
|
||||
|
||||
view = create_view_and_model();
|
||||
|
||||
gtk_container_add(GTK_CONTAINER(window), view);
|
||||
|
||||
gtk_widget_show_all(window);
|
||||
|
||||
gtk_main();
|
||||
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user