mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-26 05:31:07 +00:00
386b63b85d
In 99.9% of all cases, these are just NULL, NULL. So just do away with these arguments, people can use the setters for the rare cases where they want the scrolled window to use a different adjustment.
168 lines
4.5 KiB
C
168 lines
4.5 KiB
C
#include <gtk/gtk.h>
|
|
|
|
|
|
static GtkTreeModel *
|
|
create_model (void)
|
|
{
|
|
GtkTreeStore *store;
|
|
GtkTreeIter iter;
|
|
GtkTreeIter parent;
|
|
|
|
store = gtk_tree_store_new (1, G_TYPE_STRING);
|
|
|
|
gtk_tree_store_insert_with_values (store, &parent, NULL, 0,
|
|
0, "Applications", -1);
|
|
|
|
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
0, "File Manager", -1);
|
|
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
0, "Gossip", -1);
|
|
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
0, "System Settings", -1);
|
|
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
0, "The GIMP", -1);
|
|
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
0, "Terminal", -1);
|
|
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
0, "Word Processor", -1);
|
|
|
|
|
|
gtk_tree_store_insert_with_values (store, &parent, NULL, 1,
|
|
0, "Documents", -1);
|
|
|
|
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
0, "blaat.txt", -1);
|
|
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
0, "sliff.txt", -1);
|
|
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
0, "test.txt", -1);
|
|
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
0, "blaat.txt", -1);
|
|
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
0, "brrrr.txt", -1);
|
|
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
0, "hohoho.txt", -1);
|
|
|
|
|
|
gtk_tree_store_insert_with_values (store, &parent, NULL, 2,
|
|
0, "Images", -1);
|
|
|
|
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
0, "image1.png", -1);
|
|
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
0, "image2.png", -1);
|
|
gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
|
|
0, "image3.jpg", -1);
|
|
|
|
return GTK_TREE_MODEL (store);
|
|
}
|
|
|
|
static void
|
|
set_color_func (GtkTreeViewColumn *column,
|
|
GtkCellRenderer *cell,
|
|
GtkTreeModel *model,
|
|
GtkTreeIter *iter,
|
|
gpointer data)
|
|
{
|
|
if (gtk_tree_model_iter_has_child (model, iter))
|
|
g_object_set (cell, "cell-background", "Grey", NULL);
|
|
else
|
|
g_object_set (cell, "cell-background", NULL, NULL);
|
|
}
|
|
|
|
static void
|
|
tree_view_row_activated (GtkTreeView *tree_view,
|
|
GtkTreePath *path,
|
|
GtkTreeViewColumn *column)
|
|
{
|
|
if (gtk_tree_path_get_depth (path) > 1)
|
|
return;
|
|
|
|
if (gtk_tree_view_row_expanded (GTK_TREE_VIEW (tree_view), path))
|
|
gtk_tree_view_collapse_row (GTK_TREE_VIEW (tree_view), path);
|
|
else
|
|
gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, FALSE);
|
|
}
|
|
|
|
static gboolean
|
|
tree_view_select_func (GtkTreeSelection *selection,
|
|
GtkTreeModel *model,
|
|
GtkTreePath *path,
|
|
gboolean path_currently_selected,
|
|
gpointer data)
|
|
{
|
|
if (gtk_tree_path_get_depth (path) > 1)
|
|
return TRUE;
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
static void
|
|
quit_cb (GtkWidget *widget,
|
|
gpointer data)
|
|
{
|
|
gboolean *done = data;
|
|
|
|
*done = TRUE;
|
|
|
|
g_main_context_wakeup (NULL);
|
|
}
|
|
|
|
int
|
|
main (int argc, char **argv)
|
|
{
|
|
GtkWidget *window, *sw, *tv;
|
|
GtkTreeModel *model;
|
|
GtkCellRenderer *renderer;
|
|
GtkTreeViewColumn *column;
|
|
gboolean done = FALSE;
|
|
|
|
gtk_init ();
|
|
|
|
model = create_model ();
|
|
|
|
window = gtk_window_new ();
|
|
g_signal_connect (window, "destroy", G_CALLBACK (quit_cb), &done);
|
|
gtk_window_set_default_size (GTK_WINDOW (window), 320, 480);
|
|
|
|
sw = gtk_scrolled_window_new ();
|
|
gtk_window_set_child (GTK_WINDOW (window), sw);
|
|
|
|
tv = gtk_tree_view_new_with_model (model);
|
|
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), tv);
|
|
|
|
g_signal_connect (tv, "row-activated",
|
|
G_CALLBACK (tree_view_row_activated), tv);
|
|
g_object_set (tv,
|
|
"show-expanders", FALSE,
|
|
"level-indentation", 10,
|
|
NULL);
|
|
|
|
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tv), FALSE);
|
|
gtk_tree_view_expand_all (GTK_TREE_VIEW (tv));
|
|
|
|
gtk_tree_selection_set_select_function (gtk_tree_view_get_selection (GTK_TREE_VIEW (tv)),
|
|
tree_view_select_func,
|
|
NULL,
|
|
NULL);
|
|
|
|
renderer = gtk_cell_renderer_text_new ();
|
|
column = gtk_tree_view_column_new_with_attributes ("(none)",
|
|
renderer,
|
|
"text", 0,
|
|
NULL);
|
|
gtk_tree_view_column_set_cell_data_func (column,
|
|
renderer,
|
|
set_color_func,
|
|
NULL,
|
|
NULL);
|
|
gtk_tree_view_insert_column (GTK_TREE_VIEW (tv), column, 0);
|
|
|
|
gtk_widget_show (window);
|
|
|
|
while (!done)
|
|
g_main_context_iteration (NULL, TRUE);
|
|
|
|
return 0;
|
|
}
|