Module: GtkApp::ViewHelpers

Included in:
View
Defined in:
lib/gtk_app/view_helpers.rb

Instance Method Summary collapse

Instance Method Details

#build_listview(widget_name, columns, options = {}, &block) ⇒ Object

:yields: index, header, column, renderer



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
# File 'lib/gtk_app/view_helpers.rb', line 4

def build_listview(widget_name, columns, options={}, &block) # :yields: index, header, column, renderer
  list = self.send(:"#{widget_name}")
  list.model = Gtk::ListStore.new(*columns.values)
  columns.each_with_index do |keyval, index|
    header, data_type = keyval
    renderer, attrs = case data_type
    when String, Integer
      [Gtk::CellRendererText.new, :text => index]
    when TrueClass
      toggle = Gtk::CellRendererToggle.new
      toggle.signal_connect('toggled') do |widget, path|
        iter = list.model.get_iter(path)
        iter[index] = !iter[index]
      end
      [toggle, :active => index]
    when Gtk::ListStore
      _renderer = Gtk::CellRendererCombo.new
      model = Gtk::ListStore.new(String)
      _renderer.signal_connect("edited") do |cell, path, text|
        model.get_iter(path)[index] = text
      end
      [_renderer, :text_column => 0, :model => model, :text => index, 
        :editable => index]
    else
      raise("GtkApp::View##{__method__} does not know how to handle " + 
        "'#{data_type}' data types.")
    end

    column = Gtk::TreeViewColumn.new("#{header}".titleize, renderer, attrs)
    column.visible = false if index == 0
    yield(index, header, column, renderer) if block_given?

    if options.key?(:formatter) && options[:formatter].is_a?(Proc)
      column.set_cell_data_func(renderer, &options[:formatter])
    end

    list.append_column(column)
  end
end

#desensitize(*widgets) ⇒ Object

Set *widgets sensitive property to false

Example

@view.desensitize(:txtFoo, :cmbBar)



54
55
56
# File 'lib/gtk_app/view_helpers.rb', line 54

def desensitize(*widgets)
  widgets.each { |w| self["#{w}"].sensitive = false }
end

#sensitize(*widgets) ⇒ Object

Set *widgets sensitive property to true

Example

@view.sensitize(:txtFoo, :cmbBar)



47
48
49
# File 'lib/gtk_app/view_helpers.rb', line 47

def sensitize(*widgets)
  widgets.each { |w| self["#{w}"].sensitive = true }
end