class VR_ListView < Gtk::TreeView def initialize(*args) super() model_col = 0 self.model = Gtk::ListStore.new(*args.flatten) args.each do |arg| col = VR_TreeViewColumn.new(model_col, self, arg) model_col = model_col + (arg.class == Array ? arg.size : 1) self.append_column(col) end self.headers_visible = false end def []( row ) model.get_iter(Gtk::TreePath.new("#{row}")) end def []( row, col ) model.get_iter(Gtk::TreePath.new("#{row}"))[col] end def each_iter self.model.each { |mod, pth, itr| yield itr } end def add_row(*args) child = model.append (0..args.size-1).each { |i| child[i] = args[i] } return child end def set_visible( visible, *args ) args.each { |i| col(i).visible = visible } end def set_col_sortable(col, model_col, order = Gtk::SORT_ASCENDING) return unless c = col(col) c.sort_indicator = true c.sort_column_id = model_col c.sort_order = order end def set_titles(*args) (0..args.size-1).each { |i| set_col_title(i, args[i]) } end def set_col_title( i, title ) return if self.columns[i] == nil columns[i].title = title self.headers_visible = true end def set_radio( is_radio, *ren_idx ) ren_idx.each do |i| r = renderer(i) next if r.class != VR_CellRendererToggle r.radio = is_radio end end def set_digits(digits, *ren_idx ) ren_idx.each do |i| next unless r = renderer(i) r.digits = digits end end def set_edit_save( is_editable, *ren_idx ) ren_idx.each do |i| next unless r = renderer(i) r.set_edit_save(is_editable) end end def col(i) if i.class == String columns.detect { |col| col.title == i } else columns[i] end end def set_alignment(align, *ren_idx) ren_idx.each do |i| r = renderer(i) r.xalign = align #Pango::ALIGN_XXXX is No Good! end end def set_width(w, *cols) cols.each do |col| next unless c = col(col) c.sizing = Gtk::TreeViewColumn::FIXED c.fixed_width = w end end def each_renderer self.columns.each do |c| c.cell_renderers.each do |r| yield r end end end def renderer(i) each_renderer do |r| next unless defined? r.model_col return r if r.model_col == i end return false end end