[Gtk-sharp-list] Gtk#DataBindings v2.0 rc1 released
Christian Hoff
christian_hoff at gmx.net
Sat Jul 25 04:25:04 EDT 2009
Hey Matjaz,
first I want to apologize for the tone of my initial e-mail. Sorry, I
really didn't mean to offend you in any way.
Some comments below.
Matjaž Mihelič wrote:
>> Christian has been writing an IListStore for his project and has
>> approached me about possibly adding it to gtk-sharp. One option I'm
>> considering is adding an IList property to TreeViews which would utilize an internal treemodel implementation such as christian's to easily add
>> data to a view.
>>
>
> yeah, I never said I'd mind that. I just think that TreeView which
> exposes 3 different ways to introduce list would be confusing
> Model+gtk-sharpDataSource+assemblyDataSource
>
I agree. However, the alternative would be to expose the IList model. We
decided not to follow that approach since it would make the API less
user-friendly. Instead of constructing a TreeView directly with the
IList as argument, the user would have to create the model and an
adapter for the model:
new TreeView (new TreeModelAdapter (new IListStore (my_list))); uggh.
> and lol, that would make my DataBindings (and others) really confusing.
> Current TreeView already has Model and all external databinding
> implementations are using at least DataSource property. I use
> (DataSource and ItemsDataSource) for widgets with lists. DataSource for
> storing results like for example data of the current selection and
> ItemsDataSource as source from which items are taken.
>
Maybe we could work together and implement something like an "IList"
property for IList and other tree-model-based widgets which can not only
deal with ILists, but also with enums and all other types you support in
Gtk# DataBindings. The method could be declared as "virtual" and you can
provide your own implementation in your TreeView. It could be something
like:
public override IList {
get { [....] }
set {
base.IList = list;
// Do your stuff here, add columns to the tree view, ...
}
}
That way we the light-weight models could reside in Gtk#.
> Meaning gtk-sharp would hit their users just to introduce this semi
> capability. I doubt this is your wish. If you introduce DataSource into
> treeview this will be exact result.
You're right that this approach is cannot replace a full-fledged
databinding library. Nevertheless, I think a model for ILists would be a
benefit for the community.
Maybe we can split devide the people needing IList support into 3 groups:
Developer A only wants to display IList data, such as an array, in a
TreeView. He will be great if there's a need TreeModel ctor taking an
IList. Maybe he needs to know which items have been selected, but not
much more.
B wants to display a DataViewto the user and allow him to edit the data.
He will probably use Gtk# DataBindings and the TreeView it provides. He
will be happy that he does not need to write any additional code with
everything (auto-generated columns, sorting) being implemented.
C would need the user to edit the data as well. But he wants to have
more control over the view. That's why he decides not to use Gtk#
databindings, but instead writes his own TreeView subclass perfectly
uited to his needs.
> I for example don't even care if you
> introduce this as long as there is clean TreeView accessible for
> inheriting or inherited class is used for this. This way simple
> databinding and real databinding can coexist without single problem. You
> could do this in either way of these:
> - Make BaseTreeView (pure gtk TreeView) for people like me and then you
> can do with TreeView anything you like. As long as this is not
> introduced as backport (backport would break api)
>
I don't think something like BaseTreeView would really be necessary. It
is something I would like to avoid.
> - Leave TreeView as it is in gtk and provide some ModelTreeView (or
> whatever) and do databinding functionality there, this would pose no
> problem even in backport
>
No, this "ModeltreeView" would have nearly the same functionality as
TreeView. We do not intend to create a 2nd GridView/DataGrid, just a
minimal solution that can be extended by
- the application developer (type A,C);
- Maybe Gtk# DataBindings (as suggested in the comment about the IList
property above)
And BTW, we have decided against backporting that functionality to 2.12.
It will most likely be released with Gtk# 3.
> - move databinding in some other assembly like everyone else (which
> would probably be best). Usually people tend to use the first solution
> they find and it would be shame that semi solution would eat other
> solutions just by having the advantage of being preinstalled. think of
> IE and windows.
>
As Mike said, we don't intend to provide a data binding API in Gtk#. The
only thing we consider is implementing IList functionality as that would
help users who don't need a full data binding solution (type A) or who
want to write their own stuff (type C).
>
>> We could also choose to expose a public TreeModel implementation in
>> gtk-dotnet.dll or an external library such as Stephane's gtk-sharp-beans project, perhaps, if he'd be willing to accept it.
>>
>
> Much better solution as many people are counting on gtk-sharp API
> stability. I know I am.
>
The IList API is not buggy and its trivial as well. I don't think that
we should put this into a 3rd party assembly as the current approach is
lightweight, minimal and will help a lot of people.
>
>> Maybe the best way to get an IList into TreeView is to simply implement the interface on ListStore itself, though.
>>
I doubt this will be useful. The ListStore approach is much more limited
as it won't work if the list is created by a method outside of your
application. Besides, it would require me to rewrite the whole code for
a feature that nobody will use.
>>> Same bad choice as it was when you corrected EmitRowsReordered api
>>> correction in 2.12.9 without providing empty method as Obsolete for
>>> compatibility reasons. That way compilation and execution suddenly
>>> became broken.
>
> lol, it only was usable with Zero, where it exposed ** list completely
> changed **. And all my applications broke because of that after update.
> even few users of my lib also complained about the same problem.
>
I didn't think know that the old method would work in any case. The zero
thing isn't documented anywhere.
>>
>>
>
> It would be nicer if you'd provide something like
>
> [Obsolete ("Wrong implementation")]
> oldResult NameOfTheBrokenMethod (... old parameters ...)
> {
> Console.WriteLine ("Fix this for this and that reason");
> }
>
We certainly would have done that if we knew that the old signature was
usable in that case.
Christian
More information about the Gtk-sharp-list
mailing list