class VR_TreeViewColumn < Gtk::TreeViewColumn attr_accessor :cols def initialize(model_col, view, *args) super() @view = view self.resizable = true args = args.flatten combo_box_present = false args.each do |type| if type == Gdk::Pixbuf ren = Gtk::CellRendererPixbuf.new self.pack_start( ren, false ) self.add_attribute( ren, :pixbuf, model_col) elsif type == TrueClass ren = VR_CellRendererToggle.new(model_col, @view) self.pack_start( ren, false ) self.add_attribute( ren, :active, model_col) elsif type == Gtk::Adjustment ren = VR_CellRendererSpin.new(model_col, @view) self.pack_start( ren, false ) self.add_attribute( ren, :adjustment, model_col) self.set_cell_data_func(ren) do |col, renderer, model, iter| renderer.text = iter[renderer.model_col].value.to_s end elsif type == VR_Combo combo_box_present = true r = VR_CellRendererCombo.new(model_col, @view) self.pack_start( r, false ) self.set_cell_data_func(r) do |col, ren, model, iter| ren.text = iter[ren.model_col].selected end else # type == String r = VR_CellRendererText.new(model_col, @view) self.pack_start( r, false ) self.add_attribute( r, :text, model_col) end model_col = model_col + 1 end if combo_box_present #when the cursor moves, populate all comboboxes from the model @view.signal_connect("cursor_changed") do |view| iter = @view.selection.selected @view.each_renderer do |r| if r.class == VR_CellRendererCombo puts iter[r.model_col].inspect r.set_model( iter[r.model_col] ) end end end end end end