[Gtk-sharp-list] TreeModel for ILists
Christian Hoff
christian_hoff at gmx.net
Tue Aug 11 03:48:11 EDT 2009
Adam Tauno Williams wrote:
> On Mon, 2009-08-10 at 16:25 +0200, Matjaž Mihelič wrote:
>
>> On Mon, 2009-08-10 at 16:13 +0200, Christian Hoff wrote:
>>
>>> Matjaž Mihelič wrote:
>>>> On Mon, 2009-08-10 at 09:33 +0200, Christian Hoff wrote:
>>>>
>>>>> But I still think we should include IList support in Gtk# directly as
>>>>> there are many users who may only want to show a DataView, but do not
>>>>> want to depend on a full databinding project that is not packaged by
>>>>> many Linux distributions.
>>>>>
>>>> yes it is nice addition, as long as we keep it as extension method in
>>>> something like Gtk.Extensions. This way it is easy to include and
>>>> excluded by default
>>>>
>>> I agree, we have to keep that stuff out of Gtk#. It was a bad idea to
>>> implement IList support in the gtk-sharp assembly. Data binding and the
>>> bindings for Gtk+ should be seperated cleanly.
>>>
>>>> and use it like
>>>> myTreeView.SetItems (myListOrDatabase);
>>>>
>
> I personally like how the ListView in Hyena solves this solution [see
> the thread at <http://www.nabble.com/Re%
> 3A-Sorting-and-Filtering-NodeStore-p20548458ef1367.html>] IMO, Banshee
> has created some great, and under appreciated, Gtk# code.
>
You can probably punt all that code when we have IList support in Gtk#
:-) . Just pass your List<Item> to myTreeView.SetItems and use a few
CellDataFuncs for the columns.
I see that you have implemented your own IListModel interface and are
using a custom ListView<> widget to display it. Very interesting is the
way you generate the columns from properties of the Item class:
ColumnController.AddRange (
new Column (String.Empty, new ColumnCellCheckBox ("F", true), 1),
new Column ("Apples", new ColumnCellText ("B", true), 1),
new Column ("Pears", new ColumnCellText ("C", true), 1),
new SortableColumn("How Hot", new ColumnCellRating("G", true),
1, "G", true),
new Column ("Peaches", new ColumnCellText ("D", true), 1),
new SortableColumn ("GUID", new ColumnCellText ("A", true), 1,
"A", true)
);
Where "A", "B", "C", "D", "E", "F" and "G" are properties of the managed
type that is displayed in the list. That way you can get rid of some
ugly CellDataFuncs that get the property value via reflection. But I'm
not sure if we should add a similar mechanism to Gtk# as it will slow
the application down. Something like
(cell as CellRendererText).Text = item.A.ToString ();
in a CellDataFunc should be much faster.
>
>>> I wonder if that can be done without compiling the assembly against .net
>>> 3.5. Apparently it seems to be possible to compile extension methods
>>> with the .net 2.0 profile, but any application wanting to use them will
>>> have to target 3.5, if I'm correct (though it would still be possible to
>>> call them as static methods).
>>>
>
> Is targeting the current .NET rev really a problem? Is anyone, in
> practice, actually sticking to older revs? Especially in regards to
> shipping a new assembly with a new [?] API?
>
My application still targets .net 2.0, for example. It's wide
availability is also an asset and apart from extension methods support
there was no reason to build against the 3.5 profile.
I don't think we would want to generate a 2.0 and 3.5 version of the
databinding assembly as suggested by Matjaẑ. But since we are talking
about a new assembly here it might be fine to make it 3.5-only.
I'm just worried about the Windows build where the user can only put one
csc in the path, but we would need both a 2.0 and a 3.5 compiler :-( .
It's definetly too early to take a 3.5 dependency for all of Gtk#.
Maybe we could write a solution for that assembly in the MSBuild format
and specify that we want to target 3.5. Then the Windows user can put
csc v2 in the path (for the Gtk# core) and building the databinding
stuff via msbuild should invoke the 3.5 compiler.
Since a 2.0 extension methods assembly won't work with 3.5 (according to
Matjaẑ), the other option I see is to implement the whole thing as
static methods and wait until we can take a 3.5 dependency for Gtk# (if
that time will ever come). But I don't think that would be a good choice.
>
>>>> I for one love that very much and would love if some light databinding
>>>> would be deployed with gtk-sharp. as long as it is extension and part of
>>>> another assembly (if it would be in gtk#... then databinding interface
>>>> would have no meaning).
>>>>
>>> Yes, data binding functionality has been neglected for quite some time.
>>> It is a part of a every good UI toolkit. I'm confident that we can add
>>> at least some basic stuff in its seperate assembly.
>>>
>> lol????? Neglected? I wonder what have I been doing for almost 3 years;)
>>
>
> I assume we are talking about <http://gtk-databind.sourceforge.net/> ?
>
Exactly.
More information about the Gtk-sharp-list
mailing list