1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
# Copyright (c) 2016 Ruby-GNOME2 Project Team
# This program is licenced under the same licence as Ruby-GNOME2.
#
=begin
= Tree View/Filter 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.
=end
class FiltermodelDemo
WIDTH_COLUMN = 0
HEIGHT_COLUMN = 1
AREA_COLUMN = 2
SQUARE_COLUMN = 3
def initialize(main_window)
initialize_builder
@window = @builder["window1"]
@window.screen = main_window.screen
set_treeview_column_data_from_int_to_string("treeviewcolumn1",
"cellrenderertext1",
WIDTH_COLUMN)
set_treeview_column_data_from_int_to_string("treeviewcolumn2",
"cellrenderertext2",
HEIGHT_COLUMN)
set_treeview_column_data_from_int_to_string("treeviewcolumn3",
"cellrenderertext3",
WIDTH_COLUMN)
set_treeview_column_data_from_int_to_string("treeviewcolumn4",
"cellrenderertext4",
HEIGHT_COLUMN)
set_treeview_column_data_from_int_to_string("treeviewcolumn5",
"cellrenderertext5",
AREA_COLUMN)
column = @builder["treeviewcolumn6"]
cell = @builder["cellrendererpixbuf1"]
column.add_attribute(cell, "visible", SQUARE_COLUMN)
@store = @builder["liststore1"]
initialize_tree_model_filter_computed
set_treeview_column_data_from_int_to_string("treeviewcolumn7",
"cellrenderertext6",
WIDTH_COLUMN)
set_treeview_column_data_from_int_to_string("treeviewcolumn8",
"cellrenderertext7",
HEIGHT_COLUMN)
initialize_tree_model_filter_selected
end
def run
if !@window.visible?
@window.show_all
else
@window.destroy
end
@window
end
private
def initialize_builder
@builder = Gtk::Builder.new(:resource => "/filtermodel/filtermodel.ui")
@builder.connect_signals {}
end
def set_treeview_column_data_from_int_to_string(column_name, cell_name, col_index)
column = @builder[column_name]
cell = @builder[cell_name]
column.set_cell_data_func(cell) do |_col, current_cell, _current_model, current_iter|
num = current_iter[col_index]
current_cell.text = num.to_s
end
end
def initialize_tree_model_filter_computed
tree = @builder["treeview2"]
types = [Integer, Integer, Integer, TrueClass]
model = @store.create_filter
model.set_modify_func(*types) do |filter_model, filter_iter, filter_column|
value = nil
child_iter = filter_model.convert_iter_to_child_iter(filter_iter)
width = child_iter[WIDTH_COLUMN]
height = child_iter[HEIGHT_COLUMN]
case filter_column
when WIDTH_COLUMN
value = width
when HEIGHT_COLUMN
value = height
when AREA_COLUMN
value = width * height
when SQUARE_COLUMN
value = (width == height)
end
value
end
tree.model = model
end
def initialize_tree_model_filter_selected
tree = @builder["treeview3"]
model = @store.create_filter
model.set_visible_func do |_current_model, current_iter|
current_iter[WIDTH_COLUMN] < 10
end
tree.model = model
end
end
|