Class/Module Index [+]

Quicksearch

Demo::EditableCells

Constants

Item
NUM_COLUMNS

Public Class Methods

new() click to toggle source
# File gtk2/sample/gtk-demo/editable_cells.rb, line 19
def initialize
  super('Shopping list')
  self.border_width = 5

  vbox = Gtk::VBox.new(false, 5)
  add(vbox)

  vbox.pack_start(Gtk::Label.new('Shopping list (you can edit the cells!)'),
                  false, false, 0)

  sw = Gtk::ScrolledWindow.new
  sw.shadow_type = Gtk::SHADOW_ETCHED_IN
  sw.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC)
  vbox.pack_start(sw, true, true, 0)

  # create model
  model = create_model

  # create tree view
  treeview = Gtk::TreeView.new(model)
  treeview.rules_hint = true
  treeview.selection.mode = Gtk::SELECTION_SINGLE

  add_columns(treeview)

  sw.add(treeview)

  # some buttons
  hbox = Gtk::HBox.new(true, 4)
  vbox.pack_start(hbox, false, false, 0)

  button = Gtk::Button.new('Add item')
  button.signal_connect('clicked') do
    add_item(model)
  end
  hbox.pack_start(button, true, true, 0)

  button = Gtk::Button.new('Remove item')
  button.signal_connect('clicked') do
    remove_item(treeview)
  end
  hbox.pack_start(button, true, true, 0)

  set_default_size(320, 200)
end

Public Instance Methods

add_columns(treeview) click to toggle source
# File gtk2/sample/gtk-demo/editable_cells.rb, line 102
def add_columns(treeview)
  model = treeview.model

  # number column
  renderer = Gtk::CellRendererText.new
  renderer.signal_connect('edited') do |*args|
    cell_edited(*args.push(model))
  end
  treeview.insert_column(-1, 'Number', renderer,
                         {
                           :text => COLUMN_NUMBER,
                           :editable => COLUMN_EDITABLE,
                         })
  def renderer.column
    COLUMN_NUMBER
  end

  # product column
  renderer = Gtk::CellRendererText.new
  renderer.signal_connect('edited') do |*args|
    cell_edited(*args.push(model))
  end
  def renderer.column
    COLUMN_PRODUCT
  end
  treeview.insert_column(-1, 'Product', renderer,
                         {
                           :text => COLUMN_PRODUCT,
                           :editable => COLUMN_EDITABLE,
                         })
end
add_item(model) click to toggle source
# File gtk2/sample/gtk-demo/editable_cells.rb, line 152
def add_item(model)
  foo = Item.new(0, 'Description here', true)
  @articles.concat([foo])

  iter = model.append
  foo.each_with_index do |value, index|
    iter.set_value(index, value)
  end
end
add_items() click to toggle source
# File gtk2/sample/gtk-demo/editable_cells.rb, line 85
def add_items
  item = Item.new(3, 'bottles of coke', true)
  @articles.push(item)

  item = Item.new(5, 'packages of noodles', true)
  @articles.push(item)

  item = Item.new(2, 'packages of chocolate chip cookies', true)
  @articles.push(item)

  item = Item.new(1, 'can vanilla ice cream', true)
  @articles.push(item)

  item = Item.new(6, 'eggs', true)
  @articles.push(item)
end
cell_edited(cell, path_string, new_text, model) click to toggle source
# File gtk2/sample/gtk-demo/editable_cells.rb, line 134
def cell_edited(cell, path_string, new_text, model)
  path = Gtk::TreePath.new(path_string)

  column = cell.column

  iter = model.get_iter(path)
  case column
  when COLUMN_NUMBER
    i = iter.path.indices[0]
    @articles[i].number = new_text.to_i
    iter.set_value(column, @articles[i].number)
  when COLUMN_PRODUCT
    i = iter.path.indices[0]
    @articles[i].product = new_text
    iter.set_value(column, @articles[i].product)
  end
end
create_model() click to toggle source
# File gtk2/sample/gtk-demo/editable_cells.rb, line 65
def create_model
  # create array
  @articles = []

  add_items

  # create list store
  model = Gtk::ListStore.new(Integer, String, TrueClass)

  # add items
  @articles.each do |article|
    iter = model.append

    article.each_with_index do |value, index|
      iter.set_value(index, value)
    end
  end
  return model
end
remove_item(treeview) click to toggle source
# File gtk2/sample/gtk-demo/editable_cells.rb, line 162
def remove_item(treeview)
  model = treeview.model
  selection = treeview.selection

  if iter = selection.selected
    @articles.delete_at(iter.path.indices[0])
    model.remove(iter)
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.