diff options
author | Matthias Clasen <mclasen@redhat.com> | 2015-07-24 14:27:08 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2015-07-24 14:27:08 -0400 |
commit | b847937772a1d2c2be98053fe849eca73aa58c7b (patch) | |
tree | 51811959ce7db2368045537e0c23a8546c266b87 /demos | |
parent | 13b4500f52c42256259bdaaa3e8056026fb9441c (diff) | |
download | gtk+-b847937772a1d2c2be98053fe849eca73aa58c7b.tar.gz |
gtk-demo: Expand the filter model example
Show normal filtering as well.
Diffstat (limited to 'demos')
-rw-r--r-- | demos/gtk-demo/demo.gresource.xml | 3 | ||||
-rw-r--r-- | demos/gtk-demo/filtermodel.c | 104 | ||||
-rw-r--r-- | demos/gtk-demo/filtermodel.ui | 206 |
3 files changed, 270 insertions, 43 deletions
diff --git a/demos/gtk-demo/demo.gresource.xml b/demos/gtk-demo/demo.gresource.xml index c3dd82ce77..2ac7dd508d 100644 --- a/demos/gtk-demo/demo.gresource.xml +++ b/demos/gtk-demo/demo.gresource.xml @@ -193,4 +193,7 @@ <gresource prefix="/spinbutton"> <file>spinbutton.ui</file> </gresource> + <gresource prefix="/filtermodel"> + <file>filtermodel.ui</file> + </gresource> </gresources> diff --git a/demos/gtk-demo/filtermodel.c b/demos/gtk-demo/filtermodel.c index c2acea363b..bca6674fa6 100644 --- a/demos/gtk-demo/filtermodel.c +++ b/demos/gtk-demo/filtermodel.c @@ -1,8 +1,8 @@ /* Tree View/Filter Model * - * This example demonstrates how GtkTreeModelFilter can be used - * to compute columns that are not actually present in the underlying - * model. + * This example demonstrates how GtkTreeModelFilter can be used not + * just to show a subset of the rows, but also to compute columns + * that are not actually present in the underlying model. */ #include <gtk/gtk.h> @@ -69,6 +69,20 @@ filter_modify_func (GtkTreeModel *model, } } +static gboolean +visible_func (GtkTreeModel *model, + GtkTreeIter *iter, + gpointer data) +{ + gint width; + + gtk_tree_model_get (model, iter, + WIDTH_COLUMN, &width, + -1); + + return width < 10; +} + GtkWidget * do_filtermodel (GtkWidget *do_widget) { @@ -82,62 +96,47 @@ do_filtermodel (GtkWidget *do_widget) if (!window) { - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + GtkBuilder *builder; + + builder = gtk_builder_new_from_resource ("/filtermodel/filtermodel.ui"); + gtk_builder_connect_signals (builder, NULL); + window = GTK_WIDGET (gtk_builder_get_object (builder, "window1")); gtk_window_set_screen (GTK_WINDOW (window), gtk_widget_get_screen (do_widget)); - gtk_window_set_title (GTK_WINDOW (window), "Filter Model"); g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window); - tree = gtk_tree_view_new (); - gtk_container_add (GTK_CONTAINER (window), tree); + column = (GtkTreeViewColumn*)gtk_builder_get_object (builder, "treeviewcolumn1"); + cell = (GtkCellRenderer*)gtk_builder_get_object (builder, "cellrenderertext1"); + gtk_tree_view_column_set_cell_data_func (column, cell, + format_number, GINT_TO_POINTER (WIDTH_COLUMN), NULL); + + column = (GtkTreeViewColumn*)gtk_builder_get_object (builder, "treeviewcolumn2"); + cell = (GtkCellRenderer*)gtk_builder_get_object (builder, "cellrenderertext2"); + gtk_tree_view_column_set_cell_data_func (column, cell, + format_number, GINT_TO_POINTER (HEIGHT_COLUMN), NULL); - column = gtk_tree_view_column_new (); - gtk_tree_view_column_set_title (column, "Width"); - cell = gtk_cell_renderer_text_new (); - gtk_tree_view_column_pack_start (column, cell, FALSE); + column = (GtkTreeViewColumn*)gtk_builder_get_object (builder, "treeviewcolumn3"); + cell = (GtkCellRenderer*)gtk_builder_get_object (builder, "cellrenderertext3"); gtk_tree_view_column_set_cell_data_func (column, cell, format_number, GINT_TO_POINTER (WIDTH_COLUMN), NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column); - column = gtk_tree_view_column_new (); - gtk_tree_view_column_set_title (column, "Height"); - cell = gtk_cell_renderer_text_new (); - gtk_tree_view_column_pack_start (column, cell, FALSE); + column = (GtkTreeViewColumn*)gtk_builder_get_object (builder, "treeviewcolumn4"); + cell = (GtkCellRenderer*)gtk_builder_get_object (builder, "cellrenderertext4"); gtk_tree_view_column_set_cell_data_func (column, cell, format_number, GINT_TO_POINTER (HEIGHT_COLUMN), NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column); - column = gtk_tree_view_column_new (); - gtk_tree_view_column_set_title (column, "Area"); - cell = gtk_cell_renderer_text_new (); - gtk_tree_view_column_pack_start (column, cell, FALSE); + column = (GtkTreeViewColumn*)gtk_builder_get_object (builder, "treeviewcolumn5"); + cell = (GtkCellRenderer*)gtk_builder_get_object (builder, "cellrenderertext5"); gtk_tree_view_column_set_cell_data_func (column, cell, format_number, GINT_TO_POINTER (AREA_COLUMN), NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column); - column = gtk_tree_view_column_new (); - gtk_tree_view_column_set_title (column, "Square"); - cell = gtk_cell_renderer_pixbuf_new (); - g_object_set (cell, "icon-name", "object-select-symbolic", NULL); - gtk_tree_view_column_pack_start (column, cell, FALSE); + column = (GtkTreeViewColumn*)gtk_builder_get_object (builder, "treeviewcolumn6"); + cell = (GtkCellRenderer*)gtk_builder_get_object (builder, "cellrendererpixbuf1"); gtk_tree_view_column_add_attribute (column, cell, "visible", SQUARE_COLUMN); - gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column); - - store = gtk_list_store_new (2, G_TYPE_INT, G_TYPE_INT); - store = gtk_list_store_new (2, G_TYPE_INT, G_TYPE_INT); - gtk_list_store_insert_with_values (store, NULL, -1, - WIDTH_COLUMN, 10, - HEIGHT_COLUMN, 20, - -1); - gtk_list_store_insert_with_values (store, NULL, -1, - WIDTH_COLUMN, 5, - HEIGHT_COLUMN, 25, - -1); - gtk_list_store_insert_with_values (store, NULL, -1, - WIDTH_COLUMN, 15, - HEIGHT_COLUMN, 15, - -1); + + store = (GtkListStore*)gtk_builder_get_object (builder, "liststore1"); + tree = (GtkWidget*)gtk_builder_get_object (builder, "treeview2"); types[WIDTH_COLUMN] = G_TYPE_INT; types[HEIGHT_COLUMN] = G_TYPE_INT; @@ -149,6 +148,25 @@ do_filtermodel (GtkWidget *do_widget) filter_modify_func, NULL, NULL); gtk_tree_view_set_model (GTK_TREE_VIEW (tree), model); + + column = (GtkTreeViewColumn*)gtk_builder_get_object (builder, "treeviewcolumn7"); + cell = (GtkCellRenderer*)gtk_builder_get_object (builder, "cellrenderertext6"); + gtk_tree_view_column_set_cell_data_func (column, cell, + format_number, GINT_TO_POINTER (WIDTH_COLUMN), NULL); + + column = (GtkTreeViewColumn*)gtk_builder_get_object (builder, "treeviewcolumn8"); + cell = (GtkCellRenderer*)gtk_builder_get_object (builder, "cellrenderertext7"); + gtk_tree_view_column_set_cell_data_func (column, cell, + format_number, GINT_TO_POINTER (HEIGHT_COLUMN), NULL); + + tree = (GtkWidget*)gtk_builder_get_object (builder, "treeview3"); + + model = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL); + gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (model), + visible_func, NULL, NULL); + gtk_tree_view_set_model (GTK_TREE_VIEW (tree), model); + + g_object_unref (builder); } if (!gtk_widget_get_visible (window)) diff --git a/demos/gtk-demo/filtermodel.ui b/demos/gtk-demo/filtermodel.ui new file mode 100644 index 0000000000..e55b555e54 --- /dev/null +++ b/demos/gtk-demo/filtermodel.ui @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.18.1 --> +<interface> + <requires lib="gtk+" version="3.16"/> + <object class="GtkListStore" id="liststore1"> + <columns> + <!-- column-name width --> + <column type="gint"/> + <!-- column-name height --> + <column type="gint"/> + </columns> + <data> + <row> + <col id="0">10</col> + <col id="1">20</col> + </row> + <row> + <col id="0">5</col> + <col id="1">25</col> + </row> + <row> + <col id="0">15</col> + <col id="1">15</col> + </row> + </data> + </object> + <object class="GtkWindow" id="window1"> + <property name="can_focus">False</property> + <property name="title" translatable="yes">Filter Model</property> + <child> + <object class="GtkGrid" id="grid1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_left">10</property> + <property name="margin_right">10</property> + <property name="margin_top">10</property> + <property name="margin_bottom">10</property> + <property name="row_spacing">10</property> + <property name="column_spacing">10</property> + <property name="column_homogeneous">True</property> + <child> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Original</property> + <property name="xalign">0</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkTreeView" id="treeview1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="model">liststore1</property> + <property name="headers_clickable">False</property> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection1"/> + </child> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn1"> + <property name="title" translatable="yes">Width</property> + <child> + <object class="GtkCellRendererText" id="cellrenderertext1"/> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn2"> + <property name="title" translatable="yes">Height</property> + <child> + <object class="GtkCellRendererText" id="cellrenderertext2"/> + </child> + </object> + </child> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="GtkTreeView" id="treeview2"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="headers_clickable">False</property> + <property name="search_column">0</property> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection3"/> + </child> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn3"> + <property name="title" translatable="yes">Width</property> + <child> + <object class="GtkCellRendererText" id="cellrenderertext3"/> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn4"> + <property name="title" translatable="yes">Height</property> + <child> + <object class="GtkCellRendererText" id="cellrenderertext4"/> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn5"> + <property name="title" translatable="yes">Area</property> + <child> + <object class="GtkCellRendererText" id="cellrenderertext5"/> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn6"> + <property name="title" translatable="yes">Square</property> + <child> + <object class="GtkCellRendererPixbuf" id="cellrendererpixbuf1"> + <property name="icon-name">object-select-symbolic</property> + </object> + </child> + </object> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Computed Columns</property> + <property name="xalign">0</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Filtered</property> + <property name="xalign">0</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">2</property> + </packing> + </child> + <child> + <object class="GtkTreeView" id="treeview3"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="headers_clickable">False</property> + <property name="search_column">0</property> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection5"/> + </child> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn7"> + <property name="title" translatable="yes">Width</property> + <child> + <object class="GtkCellRendererText" id="cellrenderertext6"/> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn8"> + <property name="title" translatable="yes">Height</property> + <child> + <object class="GtkCellRendererText" id="cellrenderertext7"/> + </child> + </object> + </child> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">3</property> + </packing> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + </child> + </object> +</interface> |