class Groonga::DatabaseViewerGtk::Table
Constants
- ID_COLUMN_INDEX
- KEY_COLUMN_INDEX
Attributes
grn_table[R]
updated[R]
Public Class Methods
new(grn_table, db_path, options={})
click to toggle source
Calls superclass method
# File lib/groonga/database-viewer-gtk/table.rb, line 31 def initialize(grn_table, db_path, options={}) super() @grn_table = grn_table @tooltip_column_index = @grn_table.columns.size + 2 @wrap_width = options[:wrap_width] @db_path = db_path @updated = false @threads = [] signal_connect("destroy") do @threads.each do |thread| thread.kill end end create_tree_view end
Public Instance Methods
create_column(name, index)
click to toggle source
# File lib/groonga/database-viewer-gtk/table.rb, line 68 def create_column(name, index) gtk_column = Gtk::TreeViewColumn.new gtk_column.title = name.gsub(/_/, "__") gtk_column.resizable = true gtk_column.set_sort_column_id(index) append_column(gtk_column) renderer = Gtk::CellRendererText.new renderer.wrap_width = @wrap_width if @wrap_width gtk_column.pack_start(renderer, :expand => false) gtk_column.add_attribute(renderer, :text, index) end
create_tree_view()
click to toggle source
# File lib/groonga/database-viewer-gtk/table.rb, line 57 def create_tree_view self.rules_hint = true create_column("_id", ID_COLUMN_INDEX) create_column("_key", KEY_COLUMN_INDEX) @grn_table.columns.each_with_index do |grn_column, i| create_column(grn_column.local_name, i + 2) end end
each_records(limit, query=nil) { |grn_record| ... }
click to toggle source
# File lib/groonga/database-viewer-gtk/table.rb, line 136 def each_records(limit, query=nil) grn_records = Groonga[@grn_table.name] if query grn_records = grn_records.select(query) end if block_given? grn_records.take(limit).each do |grn_record| yield(grn_record) end else grn_records.take(limit) end end
load_record(model, grn_record)
click to toggle source
# File lib/groonga/database-viewer-gtk/table.rb, line 109 def load_record(model, grn_record) tooltips = {} iter = model.append iter.set_value(ID_COLUMN_INDEX, grn_record._id) tooltips["_id"] = grn_record._id if grn_record.respond_to?(:_key) key = grn_record._key.to_s iter.set_value(KEY_COLUMN_INDEX, key) tooltips["_key"] = key end @grn_table.columns.each_with_index do |grn_column, i| value = nil if grn_column.index? ids = grn_column.search(grn_record._id).records.collect {|record| record._id} value = "#{ids.size}, #{ids.to_s}" else value = grn_record[grn_column.local_name].to_s end tooltips[grn_column.local_name] = value iter.set_value(2 + i, value) GC.start if i % 100 == 0 end tooltip_json = tooltips.to_json escaped_tooltip_json = CGI.escapeHTML(tooltip_json) iter.set_value(@tooltip_column_index, escaped_tooltip_json) end
selected_iter()
click to toggle source
# File lib/groonga/database-viewer-gtk/table.rb, line 53 def selected_iter selection.selected end
selected_text()
click to toggle source
# File lib/groonga/database-viewer-gtk/table.rb, line 47 def selected_text return nil unless selected_iter escaped_text = selected_iter.get_value(@tooltip_column_index) CGI.unescapeHTML(escaped_text) end
update_model(limit, query=nil)
click to toggle source
# File lib/groonga/database-viewer-gtk/table.rb, line 81 def update_model(limit, query=nil) @threads.reject! do |thread| thread.kill true end column_types = @grn_table.columns.collect do |column| # TODO String end column_types.unshift(String) # _key column_types.unshift(Integer) # _id column_types.push(String) # TOOLTIP model = Gtk::ListStore.new(*column_types) self.model = model self.tooltip_column = @tooltip_column_index thread = ::Thread.new do each_records(limit, query).each do |grn_record| load_record(model, grn_record) end end @threads << thread @updated = true end