Class: Gtk::TreeView

Inherits:
Object
  • Object
show all
Defined in:
lib/extensions/gtk/widgets/gtk_treeview.rb

Instance Method Summary collapse

Instance Method Details

#bind(options) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
# File 'lib/extensions/gtk/widgets/gtk_treeview.rb', line 17

def bind(options)
  if options[:property].to_sym == :elements
    options[:force] = true
    columns = normalize_column_bindings(options[:columns])
    @paths  = get_paths(columns)
    columns.each do |column|
      create_column(column)
    end
  end
  super(options)
end

#create_column(column_definition) ⇒ Object



6
7
8
9
10
11
12
13
14
15
# File 'lib/extensions/gtk/widgets/gtk_treeview.rb', line 6

def create_column(column_definition)
  renderer   = Gtk::CellRendererText.new
  title      = column_definition.keys.first
  attributes = {}
  column_definition.values.first.each do |binding|
    attributes[binding["property"]] = @paths[binding["path"]]
  end
  column     = Gtk::TreeViewColumn.new(title, renderer, attributes)
  self.append_column column
end

#elements=(enumerable) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/extensions/gtk/widgets/gtk_treeview.rb', line 29

def elements=(enumerable)
  types = [::Object]
  @paths.length.times do
    types << String #TODO: allow for different types
  end
  list_store = Gtk::ListStore.new(*types)
  enumerable.each do |item|
    iterator = list_store.append
    iterator[0] = item
    @paths.each do |key, index|
      iterator[index] = item.send(key).to_s
    end
  end
  self.model = list_store
end