def selected_rows()
      rows = []
      selection.each do |model, path, iter|
        rows << vr_row(iter) 
      end
      rows
    end
def selected_rows()
      rows = []
      selection.each do |model, path, iter|
        rows << vr_row(iter) 
      end
      rows
    end
def col_attr(*args)
      cols = args.select { |arg| !arg.is_a? Hash }
      return unless hash = args.detect { |arg| arg.is_a? Hash }
      cols = @column_keys if cols.empty?
      cols.each do |c|
        hash.each_pair do | key, val |
          if column(c).respond_to?(key.to_s + "=")
            column(c).send(key.to_s + '=', val)
          elsif renderer(c).respond_to?(key.to_s + "=")
             renderer(c).send(key.to_s + '=', val)
          end
        end
      end
    end

  Returns an array of rows that are selected in the VR::TreeView or VR::ListView.
  If nothing is selected, it returns an empty array.  If you've configured your
  listview to accept multiple selections, it will return all of them.  In single
  selection mode, it will return an array with one row.  These rows are
  able to respond to column IDs.  They are the same types of rows as returned by
  VR::ViewCommon#vr_row.