Class: Groonga::DatabaseViewerGtk::Table
- Inherits:
-
Gtk::TreeView
- Object
- Gtk::TreeView
- Groonga::DatabaseViewerGtk::Table
- Defined in:
- lib/groonga/database-viewer-gtk/table.rb
Constant Summary collapse
- ID_COLUMN_INDEX =
0- KEY_COLUMN_INDEX =
1
Instance Attribute Summary collapse
-
#grn_table ⇒ Object
readonly
Returns the value of attribute grn_table.
-
#updated ⇒ Object
readonly
Returns the value of attribute updated.
Instance Method Summary collapse
- #create_column(name, index) ⇒ Object
- #create_tree_view ⇒ Object
- #each_records(limit, query = nil) ⇒ Object
-
#initialize(grn_table, db_path, options = {}) ⇒ Table
constructor
A new instance of Table.
- #load_record(model, grn_record) ⇒ Object
- #selected_iter ⇒ Object
- #selected_text ⇒ Object
- #update_model(limit, query = nil) ⇒ Object
Constructor Details
#initialize(grn_table, db_path, options = {}) ⇒ Table
Returns a new instance of Table.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/groonga/database-viewer-gtk/table.rb', line 31 def initialize(grn_table, db_path, ={}) super() @grn_table = grn_table @tooltip_column_index = @grn_table.columns.size + 2 @wrap_width = [: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 |
Instance Attribute Details
#grn_table ⇒ Object (readonly)
Returns the value of attribute grn_table.
29 30 31 |
# File 'lib/groonga/database-viewer-gtk/table.rb', line 29 def grn_table @grn_table end |
#updated ⇒ Object (readonly)
Returns the value of attribute updated.
28 29 30 |
# File 'lib/groonga/database-viewer-gtk/table.rb', line 28 def updated @updated end |
Instance Method Details
#create_column(name, index) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 |
# 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 ⇒ Object
57 58 59 60 61 62 63 64 65 66 |
# 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) ⇒ Object
135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/groonga/database-viewer-gtk/table.rb', line 135 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) ⇒ Object
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# 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) iter.set_value(KEY_COLUMN_INDEX, grn_record._key) tooltips["_key"] = grn_record._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 ⇒ Object
53 54 55 |
# File 'lib/groonga/database-viewer-gtk/table.rb', line 53 def selected_iter selection.selected end |
#selected_text ⇒ Object
47 48 49 50 51 |
# 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) ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# 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 |