class MittensUi::TableView
Public Class Methods
new(options={})
click to toggle source
Calls superclass method
MittensUi::Core::new
# File lib/mittens_ui/table_view.rb, line 6 def initialize(options={}) headers = options[:headers] || [] data = options[:data] || [] unless is_data_valid?(headers, data) exit 1 end init_column_headers(headers) init_list_store @scrolled_window = Gtk::ScrolledWindow.new calc_min_height = (data.size ** 2 ) * 10 @scrolled_window.min_content_height = calc_min_height @tree_view = Gtk::TreeView.new(@list_store) @tree_view.selection.set_mode(:single) @columns.each { |col| @tree_view.append_column(col) } init_sortable_columns init_data_rows(data) @scrolled_window.add(@tree_view) super(@tree_view, options) end
Public Instance Methods
add(data, direction=:append)
click to toggle source
# File lib/mittens_ui/table_view.rb, line 36 def add(data, direction=:append) return if data.size.zero? case direction when :append iter = @list_store.append when :prepend iter = @list_store.prepend else iter = @list_store.append end data.each_with_index do |item, idx| iter[idx] = item end end
clear()
click to toggle source
# File lib/mittens_ui/table_view.rb, line 53 def clear @list_store.clear end
remove_selected()
click to toggle source
# File lib/mittens_ui/table_view.rb, line 69 def remove_selected iter = @tree_view.selection.selected values = [] if iter.nil? return values end @list_store.n_columns.times do |x| values << @list_store.get_value(iter, x) end @list_store.remove(iter) return values end
render()
click to toggle source
# File lib/mittens_ui/table_view.rb, line 57 def render $vertical_box.pack_start(@scrolled_window) return self end
row_clicked() { |values| ... }
click to toggle source
# File lib/mittens_ui/table_view.rb, line 87 def row_clicked @tree_view.signal_connect("row-activated") do |tv, path, column| row = tv.selection.selected values = [] @list_store.n_columns.times { |x| values << row.get_value(x) if row } yield(values) end end
row_count()
click to toggle source
# File lib/mittens_ui/table_view.rb, line 62 def row_count count = 0 @list_store.each { |item| count += 1 } return count end
Private Instance Methods
init_column_headers(headers_list)
click to toggle source
# File lib/mittens_ui/table_view.rb, line 167 def init_column_headers(headers_list) renderer = Gtk::CellRendererText.new @columns = [] headers_list.each_with_index do |h, i| next unless h.class == String @columns << Gtk::TreeViewColumn.new(h, renderer, text: i) end end
init_data_rows(data)
click to toggle source
# File lib/mittens_ui/table_view.rb, line 158 def init_data_rows(data) data.each_with_index do |items_arr| iter = @list_store.append items_arr.each_with_index do |item, idx| iter[idx] = item end end end
init_list_store()
click to toggle source
# File lib/mittens_ui/table_view.rb, line 152 def init_list_store types = [] @columns.size.times { types << String } @list_store = Gtk::ListStore.new(*types) end
init_sortable_columns()
click to toggle source
# File lib/mittens_ui/table_view.rb, line 141 def init_sortable_columns @columns.each_with_index do |col, idx| col.sort_indicator = true col.sort_column_id = idx col.signal_connect('clicked') do |w| w.sort_order = w.sort_order == :ascending ? :descending : :ascending end end end
is_data_valid?(headers, data)
click to toggle source
# File lib/mittens_ui/table_view.rb, line 101 def is_data_valid?(headers, data) column_size = headers.size data_is_array = data.class == Array headers_is_array = headers.class == Array valid = true unless data_is_array puts "=====[MittensUi: Critical Error]=====" puts "Incoming data must be an Array of Arrays: data = [ [el..], [el...] ]" valid = false return valid end unless headers_is_array puts "=====[MittensUi: Critical Error]=====" puts "Incoming data must be an Array of Arrays: data = [ [el..], [el...] ]" valid = false return valid end data.each_with_index do |row, idx| # Row data must be an Array. # The size of the Row Array must match the size of the Header columns. valid = (row.class == Array && column_size == row.size) ? true : false unless valid puts puts "=====[MittensUi: Critical Error]=====" puts "The length of your data(Row) must match the length of the headers." puts "Failed at Row: #{idx}" puts "Row Length: #{row.size} elements" puts "Header Length #{column_size} elements" puts return valid end end end