X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fcheckbox-treeview.c;h=324943ab84364f743040503379d086acdddf9b0e;hb=811c669032a18cfff53291a98e5803afdf39db36;hp=2639665fc08b5d856f04f2a9787de068ef26d929;hpb=c86f5b8a45cca158b46a4fe3b48280e88ce9aba1;p=pspp diff --git a/src/ui/gui/checkbox-treeview.c b/src/ui/gui/checkbox-treeview.c index 2639665fc0..324943ab84 100644 --- a/src/ui/gui/checkbox-treeview.c +++ b/src/ui/gui/checkbox-treeview.c @@ -1,5 +1,5 @@ /* PSPPIRE - a graphical user interface for PSPP. - Copyright (C) 2007 Free Software Foundation + Copyright (C) 2007, 2012 Free Software Foundation This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -24,42 +24,13 @@ #define N_(msgid) msgid -/* A GtkTreeCellDataFunc which renders a checkbox that determines - whether to calculate the statistic. */ -static void -stat_calculate_cell_data_func (GtkTreeViewColumn *col, - GtkCellRenderer *cell, - GtkTreeModel *model, - GtkTreeIter *iter, - gpointer data) -{ - gboolean selected; - - gtk_tree_model_get (model, iter, CHECKBOX_COLUMN_SELECTED, &selected, -1); - g_object_set (cell, "active", selected, NULL); -} - - -/* A GtkTreeCellDataFunc which renders the label of the statistic. */ -static void -stat_label_cell_data_func (GtkTreeViewColumn *col, - GtkCellRenderer *cell, - GtkTreeModel *model, - GtkTreeIter *iter, - gpointer statistic) -{ - gchar *label = NULL; - gtk_tree_model_get (model, iter, CHECKBOX_COLUMN_LABEL, &label, -1); - g_object_set (cell, "text", gettext (label), NULL); - g_free (label); -} - /* Callback for checkbox cells in the statistics tree view. Toggles the checkbox. */ static void toggle (GtkCellRendererToggle *cell_renderer, gchar *path_str, gpointer data) { - GtkTreeModel *model = (GtkTreeModel *)data; + GtkTreeView *tv = GTK_TREE_VIEW (data); + GtkTreeModel *model = gtk_tree_view_get_model (tv); GtkTreeIter iter; GtkTreePath *path = gtk_tree_path_new_from_string (path_str); gboolean selected; @@ -72,52 +43,60 @@ toggle (GtkCellRendererToggle *cell_renderer, gchar *path_str, gpointer data) } -void -put_checkbox_items_in_treeview (GtkTreeView *treeview, +static void +treeview_create_checkbox_model (GtkTreeView *treeview, guint default_items, gint n_items, const struct checkbox_entry_item *items ) { - GtkTreeViewColumn *col; - GtkCellRenderer *renderer; GtkListStore *list; size_t i; list = gtk_list_store_new (N_CHECKBOX_COLUMNS, G_TYPE_STRING, G_TYPE_BOOLEAN); - gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (list)); for (i = 0; i < n_items; i++) { GtkTreeIter iter; gtk_list_store_append (list, &iter); gtk_list_store_set (list, &iter, - CHECKBOX_COLUMN_LABEL, items[i].label, + CHECKBOX_COLUMN_LABEL, gettext (items[i].label), CHECKBOX_COLUMN_SELECTED, (default_items & (1u << i)) != 0, -1); } - /* Calculate column. */ + gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (list)); + g_object_unref (list); +} + +static void +treeview_checkbox_populate (GtkTreeView *treeview) +{ + GtkTreeViewColumn *col; + GtkCellRenderer *renderer; + + /* Checkbox column. */ col = gtk_tree_view_column_new (); renderer = gtk_cell_renderer_toggle_new (); - g_signal_connect (GTK_CELL_RENDERER_TOGGLE (renderer), - "toggled", G_CALLBACK (toggle), GTK_TREE_MODEL (list)); + gtk_tree_view_column_pack_start (col, renderer, TRUE); - gtk_tree_view_column_set_cell_data_func (col, renderer, - stat_calculate_cell_data_func, - NULL, NULL); + gtk_tree_view_append_column (treeview, col); - /* Statistic column. */ + gtk_tree_view_column_add_attribute (col, renderer, "active", CHECKBOX_COLUMN_SELECTED); + + g_signal_connect (renderer, "toggled", G_CALLBACK (toggle), treeview); + + /* Label column. */ col = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (col, _("Statistic")); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (col, renderer, TRUE); - gtk_tree_view_column_set_cell_data_func (col, renderer, - stat_label_cell_data_func, - NULL, NULL); + + gtk_tree_view_column_add_attribute (col, renderer, "text", CHECKBOX_COLUMN_LABEL); + g_object_set (renderer, "ellipsize-set", TRUE, NULL); g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL); gtk_tree_view_column_set_min_width (col, 200); @@ -125,3 +104,15 @@ put_checkbox_items_in_treeview (GtkTreeView *treeview, gtk_tree_view_column_set_resizable (col, TRUE); gtk_tree_view_append_column (treeview, col); } + + +void +put_checkbox_items_in_treeview (GtkTreeView *treeview, + guint default_items, + gint n_items, + const struct checkbox_entry_item *items + ) +{ + treeview_create_checkbox_model (treeview, default_items, n_items, items); + treeview_checkbox_populate (treeview); +}