Forum: Ruby-Gnome 2 Implementing a ListStore

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Ba479af4eac156bce6c989584dc723d2?d=identicon&s=25 Andrea Forni (gendag)
on 2007-02-12 18:39
(Received via mailing list)
I need to display a list of articles taken from a database.
The list is large (more than 300 articles and the number will grow up)
and
I use ActiveRecord to dialog with the DB.

My problem is that saving each article in the ListStore is a bit slow
and
taking inspiration from the article
http://www.kdedevelopers.org/node/2670 I
thought
I could write my own ListStore that internally use the articels list get
from
ActiveRecord.

The problem is that I don't know which methods I have to re-define to
make
my
StoreList work. Which interface I have to implement?
Here there is an example:

####################################################################

require 'gtk2'

class MyListStore < Gtk::ListStore
  def initialize(model)
    @model = model
    super(String)
  end

  # these are the method that I didn'r re-define
  exclude = %w{object_id __send__ __id__}

  # In this way I re-define all the methods
  # and each method raise a NotImplementedError,
  # in this way I thought to know which method
  # the View uses to get the data from the store,
  # but no exception is thrown and In the wiew
  # no row is shown
  instance_methods(true).each do |method|
    a << method
    if(exclude.find(){|el| el == method}.nil?)
      str =  %{
        def #{method}()
          raise NotImplementedError.new('#{method}')
        end}
      module_eval(str)
    end
  end
end

# The controller set up the connection with the DB
controller = Controller::Controller.new(File::dirname(__FILE__))

@window = Gtk::Window.new(Gtk::Window::TOPLEVEL)
@window.set_default_size(900, 400)
@window.set_border_width(10)
@window.signal_connect('delete_event') {Gtk.main_quit}

articles = Article.find(:all)
table_store = MyListStore.new(articles)
table_view = Gtk::TreeView.new(table_store)


renderer = Gtk::CellRendererText.new
renderer.xalign = 0.5
renderer.yalign = 0.5
col = Gtk::TreeViewColumn.new('Barcode', renderer, :text => 0)
col.alignment = 0.5
table_view.append_column(col)
@window.add(table_view)
@window.show_all
Gtk.main
####################################################################

The table view is displaied but no rows is present. I've redefined all
the
methods
of MyListStore to throw an exception, in this way I whought to know
which
methods
the View uses to get the data from the Store, but no exception was
thrown.

Thank you,

Gendag
This topic is locked and can not be replied to.