|
Packit |
98cdb6 |
#include <gtk/gtk.h>
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static GtkTreeModel *
|
|
Packit |
98cdb6 |
create_model (void)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GtkTreeStore *store;
|
|
Packit |
98cdb6 |
GtkTreeIter iter;
|
|
Packit |
98cdb6 |
GtkTreeIter parent;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
store = gtk_tree_store_new (1, G_TYPE_STRING);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_tree_store_insert_with_values (store, &parent, NULL, 0,
|
|
Packit |
98cdb6 |
0, "Applications", -1);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
Packit |
98cdb6 |
0, "File Manager", -1);
|
|
Packit |
98cdb6 |
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
Packit |
98cdb6 |
0, "Gossip", -1);
|
|
Packit |
98cdb6 |
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
Packit |
98cdb6 |
0, "System Settings", -1);
|
|
Packit |
98cdb6 |
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
Packit |
98cdb6 |
0, "The GIMP", -1);
|
|
Packit |
98cdb6 |
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
Packit |
98cdb6 |
0, "Terminal", -1);
|
|
Packit |
98cdb6 |
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
Packit |
98cdb6 |
0, "Word Processor", -1);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_tree_store_insert_with_values (store, &parent, NULL, 1,
|
|
Packit |
98cdb6 |
0, "Documents", -1);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
Packit |
98cdb6 |
0, "blaat.txt", -1);
|
|
Packit |
98cdb6 |
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
Packit |
98cdb6 |
0, "sliff.txt", -1);
|
|
Packit |
98cdb6 |
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
Packit |
98cdb6 |
0, "test.txt", -1);
|
|
Packit |
98cdb6 |
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
Packit |
98cdb6 |
0, "blaat.txt", -1);
|
|
Packit |
98cdb6 |
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
Packit |
98cdb6 |
0, "brrrr.txt", -1);
|
|
Packit |
98cdb6 |
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
Packit |
98cdb6 |
0, "hohoho.txt", -1);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_tree_store_insert_with_values (store, &parent, NULL, 2,
|
|
Packit |
98cdb6 |
0, "Images", -1);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
Packit |
98cdb6 |
0, "image1.png", -1);
|
|
Packit |
98cdb6 |
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
Packit |
98cdb6 |
0, "image2.png", -1);
|
|
Packit |
98cdb6 |
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
Packit |
98cdb6 |
0, "image3.jpg", -1);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
return GTK_TREE_MODEL (store);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
set_color_func (GtkTreeViewColumn *column,
|
|
Packit |
98cdb6 |
GtkCellRenderer *cell,
|
|
Packit |
98cdb6 |
GtkTreeModel *model,
|
|
Packit |
98cdb6 |
GtkTreeIter *iter,
|
|
Packit |
98cdb6 |
gpointer data)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
if (gtk_tree_model_iter_has_child (model, iter))
|
|
Packit |
98cdb6 |
g_object_set (cell, "cell-background", "Grey", NULL);
|
|
Packit |
98cdb6 |
else
|
|
Packit |
98cdb6 |
g_object_set (cell, "cell-background", NULL, NULL);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
tree_view_row_activated (GtkTreeView *tree_view,
|
|
Packit |
98cdb6 |
GtkTreePath *path,
|
|
Packit |
98cdb6 |
GtkTreeViewColumn *column)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
if (gtk_tree_path_get_depth (path) > 1)
|
|
Packit |
98cdb6 |
return;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
if (gtk_tree_view_row_expanded (GTK_TREE_VIEW (tree_view), path))
|
|
Packit |
98cdb6 |
gtk_tree_view_collapse_row (GTK_TREE_VIEW (tree_view), path);
|
|
Packit |
98cdb6 |
else
|
|
Packit |
98cdb6 |
gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, FALSE);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static gboolean
|
|
Packit |
98cdb6 |
tree_view_select_func (GtkTreeSelection *selection,
|
|
Packit |
98cdb6 |
GtkTreeModel *model,
|
|
Packit |
98cdb6 |
GtkTreePath *path,
|
|
Packit |
98cdb6 |
gboolean path_currently_selected,
|
|
Packit |
98cdb6 |
gpointer data)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
if (gtk_tree_path_get_depth (path) > 1)
|
|
Packit |
98cdb6 |
return TRUE;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
return FALSE;
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
int
|
|
Packit |
98cdb6 |
main (int argc, char **argv)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GtkWidget *window, *sw, *tv;
|
|
Packit |
98cdb6 |
GtkTreeModel *model;
|
|
Packit |
98cdb6 |
GtkCellRenderer *renderer;
|
|
Packit |
98cdb6 |
GtkTreeViewColumn *column;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_init (&argc, &argv);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
model = create_model ();
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
|
Packit |
98cdb6 |
g_signal_connect (window, "delete_event",
|
|
Packit |
98cdb6 |
G_CALLBACK (gtk_main_quit), NULL);
|
|
Packit |
98cdb6 |
gtk_window_set_default_size (GTK_WINDOW (window), 320, 480);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
sw = gtk_scrolled_window_new (NULL, NULL);
|
|
Packit |
98cdb6 |
gtk_container_add (GTK_CONTAINER (window), sw);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
tv = gtk_tree_view_new_with_model (model);
|
|
Packit |
98cdb6 |
gtk_container_add (GTK_CONTAINER (sw), tv);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
g_signal_connect (tv, "row-activated",
|
|
Packit |
98cdb6 |
G_CALLBACK (tree_view_row_activated), tv);
|
|
Packit |
98cdb6 |
g_object_set (tv,
|
|
Packit |
98cdb6 |
"show-expanders", FALSE,
|
|
Packit |
98cdb6 |
"level-indentation", 10,
|
|
Packit |
98cdb6 |
NULL);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tv), FALSE);
|
|
Packit |
98cdb6 |
gtk_tree_view_expand_all (GTK_TREE_VIEW (tv));
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_tree_selection_set_select_function (gtk_tree_view_get_selection (GTK_TREE_VIEW (tv)),
|
|
Packit |
98cdb6 |
tree_view_select_func,
|
|
Packit |
98cdb6 |
NULL,
|
|
Packit |
98cdb6 |
NULL);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
renderer = gtk_cell_renderer_text_new ();
|
|
Packit |
98cdb6 |
column = gtk_tree_view_column_new_with_attributes ("(none)",
|
|
Packit |
98cdb6 |
renderer,
|
|
Packit |
98cdb6 |
"text", 0,
|
|
Packit |
98cdb6 |
NULL);
|
|
Packit |
98cdb6 |
gtk_tree_view_column_set_cell_data_func (column,
|
|
Packit |
98cdb6 |
renderer,
|
|
Packit |
98cdb6 |
set_color_func,
|
|
Packit |
98cdb6 |
NULL,
|
|
Packit |
98cdb6 |
NULL);
|
|
Packit |
98cdb6 |
gtk_tree_view_insert_column (GTK_TREE_VIEW (tv), column, 0);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_widget_show_all (window);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_main ();
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
return 0;
|
|
Packit |
98cdb6 |
}
|