[Gtk-sharp-list] Re: Improving Gtk#

Miguel de Icaza miguel@ximian.com
Sun, 01 May 2005 13:15:06 -0400


Hello,

> Some things I find annoying  :
> - It seems we had to use ListStore for TreeView.Model, and it seems
> ListStore is a simple another list object... There is always many
> lists types in System.Collections, why should we use another lis type
> for treeview for instance ? An IList would be better, no ?

Actually the ListStore is not a simple list object, it is a fairly
elaborate "storage" for treemodels that happens to be flat.

The list/tree widget in Gtk# is actually always a tree.  But depending
on the model implementation it can behave as either a tree or a list.
ListStore is what makes the TreeView behave like a list of elements.

But I see what you want: you want to reuse the same IList API there.
Do you have a sample program that you could share with us that you would
like transformed into an IList-based sample?  That would help us.

> - I find some things very weird. To get the entry selected in a
> TreeView, it seems we have to write an overcomplicated-for-the-job
> code :
> TreeIter iter;
> TreeModel model;
> TreeSelection sel = myTreeView.Selection;
> if(sel.GetSelected(out model, out iter)) {
>     int thing = (int)model.GetValue( iter, 5 );
> 
> And so on.
> 
> A simple thing like that could not be possible ? :
> int thing = (int) myTreeView.EntrySelected(5);
> 
> or, even better, a thing like that :
> MyObject my = (MyObject) myTreeView.EntrySelected();

This sounds like a useful addition, we could file a feature request, but
but there are two problems with your example:

	* What happens if there is nothing selected?  Should
	  we throw an exception?  I think that would be a bad idea.

	* What happens if you have multiple-selection enabled?

Perhaps the solution would be to have a method like this:

class TreeView {

	// Return an array of objects for each row.
	object [] GetSelected () {...}

	// Return the array of objects for a specific column
	object [] GetSelected (int column) { }
}

Miguel