class Demo::EditableCells
Constants
- Item
- NUM_COLUMNS
Public Class Methods
new()
click to toggle source
Calls superclass method
Demo::BasicWindow::new
# 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