Class: Groonga::DatabaseViewerGtk::TreeView
- Inherits:
-
Gtk::TreeView
- Object
- Gtk::TreeView
- Groonga::DatabaseViewerGtk::TreeView
- Defined in:
- lib/groonga/database-viewer-gtk/window.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) ⇒ TreeView
constructor
A new instance of TreeView.
- #load_record(model, grn_record) ⇒ Object
- #update_model(limit, query = nil) ⇒ Object
Constructor Details
#initialize(grn_table, db_path) ⇒ TreeView
Returns a new instance of TreeView.
164 165 166 167 168 169 170 171 172 173 174 175 176 |
# File 'lib/groonga/database-viewer-gtk/window.rb', line 164 def initialize(grn_table, db_path) super() @grn_table = grn_table @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.
162 163 164 |
# File 'lib/groonga/database-viewer-gtk/window.rb', line 162 def grn_table @grn_table end |
#updated ⇒ Object (readonly)
Returns the value of attribute updated.
161 162 163 |
# File 'lib/groonga/database-viewer-gtk/window.rb', line 161 def updated @updated end |
Instance Method Details
#create_column(name, index) ⇒ Object
189 190 191 192 193 194 195 196 197 198 199 |
# File 'lib/groonga/database-viewer-gtk/window.rb', line 189 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 gtk_column.pack_start(renderer, :expand => false) gtk_column.add_attribute(renderer, :text, index) end |
#create_tree_view ⇒ Object
178 179 180 181 182 183 184 185 186 187 |
# File 'lib/groonga/database-viewer-gtk/window.rb', line 178 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
245 246 247 248 249 250 251 252 253 254 255 256 257 |
# File 'lib/groonga/database-viewer-gtk/window.rb', line 245 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
227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 |
# File 'lib/groonga/database-viewer-gtk/window.rb', line 227 def load_record(model, grn_record) iter = model.append iter.set_value(ID_COLUMN_INDEX, grn_record._id) iter.set_value(KEY_COLUMN_INDEX, grn_record._key) if grn_record.respond_to?(:_key) @grn_table.columns.each_with_index do |grn_column, i| value = grn_record[grn_column.local_name] iter.set_value(i + 2, value.to_s) 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 iter.set_value(2 + i, value) GC.start if i % 100 == 0 end end |
#update_model(limit, query = nil) ⇒ Object
201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 |
# File 'lib/groonga/database-viewer-gtk/window.rb', line 201 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 model = Gtk::ListStore.new(*column_types) self.model = model thread = Thread.new do each_records(limit, query).each do |grn_record| load_record(model, grn_record) end end @threads << thread @updated = true end |