Class/Module Index [+]

Quicksearch

Demo::TreeStore

Constants

TOPLEVEL

tree data

TreeItem

TreeItem structure

Public Class Methods

new() click to toggle source
# File gtk2/sample/gtk-demo/tree_store.rb, line 137
def initialize
  # create window, etc
  super('Card planning sheet')

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

  vbox.pack_start(Gtk::Label.new("Jonathan's Holiday Card Planning Sheet"),
                  false, false, 0)

  sw = Gtk::ScrolledWindow.new(nil, nil)
  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_MULTIPLE

  add_columns(treeview)

  sw.add(treeview)

  # expand all rows after the treeview widget has been realized
  treeview.signal_connect('realize') do
    treeview.expand_all
  end
  set_default_size(650, 400)
end

Public Instance Methods

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

  # column for holiday names
  renderer = Gtk::CellRendererText.new
  renderer.xalign = 0.0

  col_offset = treeview.insert_column(-1, 'Holiday',
                                      renderer,
                                      'text' => HOLIDAY_NAME_COLUMN)
  column = treeview.get_column(col_offset - 1)
  column.clickable = true

  [
    ['Alex',  true ],
    ['Havoc', false],
    ['Tim',   true ],
    ['Owen',  false],
    ['Dave',  false],
  ].each_with_index do |args, i|
    person, european = *args
    renderer = Gtk::CellRendererToggle.new
    renderer.xalign = 0.0
    eval(%[def renderer.column; #{ALEX_COLUMN + i}; end])

    renderer.signal_connect('toggled') do |cell, path|
      item_toggled(cell, path, model)
    end

    attributes =  {
      'active' => (ALEX_COLUMN + i),
      'visible' => VISIBLE_COLUMN,
    }
    if european
      attributes['activatable'] = WORLD_COLUMN
    end
    col_offset = treeview.insert_column(-1, person, renderer, attributes)

    column = treeview.get_column(col_offset - 1)
    column.sizing = Gtk::TreeViewColumn::FIXED
    column.fixed_width = 50
    column.clickable = true
  end
end
create_model() click to toggle source
# File gtk2/sample/gtk-demo/tree_store.rb, line 173
def create_model
  # create tree store
  model = Gtk::TreeStore.new(String,
                             TrueClass,
                             TrueClass,
                             TrueClass,
                             TrueClass,
                             TrueClass,
                             TrueClass,
                             TrueClass)

  # add data to the tree store
  TOPLEVEL.each do |month_name, holidays|
    iter = model.append(nil)

    iter[HOLIDAY_NAME_COLUMN] = month_name
    (ALEX_COLUMN..DAVE_COLUMN).each do |index|
      iter[index] = false
    end

    # add children
    holidays.each do |holiday|
      child_iter = model.append(iter)
      child_iter[HOLIDAY_NAME_COLUMN] = holiday.label[0]
      %(alex havoc tim owen dave).each_with_index do |person, i|
        child_iter[ALEX_COLUMN + i] = holiday[person]
      end
      child_iter[VISIBLE_COLUMN] = true
      child_iter[WORLD_COLUMN] = holiday.world_holiday
    end

  end

  return model
end
item_toggled(cell, path_str, model) click to toggle source
# File gtk2/sample/gtk-demo/tree_store.rb, line 254
def item_toggled (cell, path_str, model)
  path = Gtk::TreePath.new(path_str)

  column = cell.column

  # get toggled iter
  iter = model.get_iter(path)
  toggle_item = iter[column]

  # do something with the value
  toggle_item ^= 1

  # set new value
  iter[column] = toggle_item
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.