File: filtermodel.rb

package info (click to toggle)
ruby-gnome2 3.1.0-1%2Bdeb9u1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 16,072 kB
  • ctags: 17,433
  • sloc: ansic: 93,621; ruby: 62,273; xml: 335; sh: 246; makefile: 25
file content (123 lines) | stat: -rw-r--r-- 3,785 bytes parent folder | download | duplicates (5)
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