[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

GTK TreeView

Patrick Plattes

11/26/2006 1:16:00 PM

Hello ML :-),

i've started to write a small GUI with GTK. A lot of thinks work fine,
but I have one problem: I want to have a list - like the email list at
the usual mail client. Tutorials told me, that I have to use TreeView.

I created an instance of ListStore and added a row. I see the row, and
I'm able to click on the row (the row change the color) but i don't see
any text in the cells. Does anyone have an idea how to fix it?

Thanks and bye,
Patrick


here is my code:

list_store = Gtk::ListStore.new(String, String, String)
iter = list_store.append

iter[0] = "First"
iter[1] = "Second"
iter[2] = "Third"

view = Gtk::TreeView.new(list_store)
renderer = Gtk::CellRendererText.new

column = Gtk::TreeViewColumn.new("Foo", renderer)
column.resizable = true
view.append_column(column)

column = Gtk::TreeViewColumn.new("Bar", renderer)
column.resizable = true
view.append_column(column)

column = Gtk::TreeViewColumn.new("Mix", renderer)
column.resizable = true
view.append_column(column)

vbox.pack_start(view)

view.show_all

2 Answers

Olivier

11/26/2006 2:35:00 PM

0

> I created an instance of ListStore and added a row. I see the row, and
> I'm able to click on the row (the row change the color) but i don't see
> any text in the cells. Does anyone have an idea how to fix it?

Try to replace these lines :
> column = Gtk::TreeViewColumn.new("Foo", renderer)
> column = Gtk::TreeViewColumn.new("Bar", renderer)
> column = Gtk::TreeViewColumn.new("Mix", renderer)

by these :
column = Gtk::TreeViewColumn.new("Foo", renderer, :text => 0)
column = Gtk::TreeViewColumn.new("Bar", renderer, :text => 1)
column = Gtk::TreeViewColumn.new("Mix", renderer, :text => 2)

This is the easy way to affect the content of a column to the data stored in
the model. The last argument of the TreeViewColumn constructor is a hash of
attributes which define a mapping between the data in the model, and what
will appear in the TreeView (those attributes can be reaffected later with
#add_attribute or #set_attributes)

In your case, you created this model :
> iter[0] = "First"
> iter[1] = "Second"
> iter[2] = "Third"

The attribute {:text => 0} means "I want to map directly the content of
iter[0] to the rendered text of the "Foo" column".

Another way to do this is by using the #set_cell_data_func method, which let
you define the rendering of the cell from the given block (using
CellRenderer#text=, for example)

Patrick Plattes

11/27/2006 10:08:00 PM

0

Hello,

thanks for reply. Your code works fine. I'm also able so sort the
columns :-).

Thanks,
Patrick