Hi Bryan,
I'm sypathetic to the idea of having a lightweight "CollectionGrid" that
works and plays well with AttributeEditors and Collections -- this may
end up being the right thing to do.
I'm not sure that subclassing CollectionCanvas helps much though, for
some of the reasons Alec mentions below. A few thoughts:
* Hit testing in a grid should probably be pretty different than in the
canvas. In a grid, you can calculate which cell you'll land on, where
the canvas is designed to be pretty flexible -- its "cells" know their
location.
* The grid's mechanism for accessing Items in the Collection may end up
being fairly different, and it is very important to get this right to be
able to handle very large collections in the grid. A grid can make
grid-specific assumptions about which items are on screen.
A thumbnail canvas was indeed the next suggested use of the
CollectionCanvas, we'd hoped to try it out at the end of 0.5. :( We've
been talking about doing a parcel sprint, perhaps this could be one of
the activities.
At any rate, I wouldn't block on reuse of CollectionCanvas for exploring
a lighter-weight Chandler-needs grid. If it turns out to be helpful,
though, even better.
Cheers,
Katie
Alec Flett wrote:
As the current maintainer of CollectionCanvas, my mind has already
started trying to map out how we'd do this. For those of you unfamiliar,
CollectionCanvas is actually the base class, underneath CalendarCanvas,
that does some of the GUI work that's not calendar-specific. It leaves
any view-specific behavior to the base class.
And so be honest, I'm really on the fence on this one.
On one hand, I think we would gain a tremendous amount of flexibility
here, and I think we could get some good performance out of a
lightweight grid-like implementation. There is only one toplevel widget,
the canvas itself, so that view/exposure management is cheap as is the
use of system drawing resources.
On the other hand, I think CollectionCanvas is still fairly primitive..
and while its use has been proven with CalendarCanvas, its never had a
second use. It has never dealt with any kind of ordering, its main loop
expects to be calling Draw() on a list of "canvas items", and it leaves
actual geometry/layout issues to the base class. This is not to say it
couldn't improve though.
I'd say right now, the next logical use of CollectionCanvas would be
some sort of thumbnail canvas for photos or something... so a grid? Maybe!
To give everyone an idea, CollectionCanvas manages the following for the
calendar:
1) drag and drop, including drag-within-the-canvas and
drag-outside-the-canvas
2) mouse event handling, mostliy for hit and resizing (including the
actual drag)
3) selection management, including multiple selection and such
4) painting and paint events management
5) a few platform-specific issues with focus and such
All of this is obviously necessary for grid, but a few basic things we'd
need to worry about
1) sorting
2) more complex hit-testing - i.e. to allow clicking specific regions
within an "item"
3) finer grained drawing - i.e. per-row drawing/exposure/etc...
Alec
Bryan Stearns wrote:
I've been kicking this idea around in my head, and looking at the 0.7
summary-table spec has prompted me to send it to the list...
We've currently got a summary Table implementation based on wx's Grid
mechanism; it provides a framework for presenting a list of items in
rows & columns, with scrolling support, hit testing, etc. It also
comes with some architectural structure (most in my face, the
editor/renderer mechanism) that constrains our implementation a
little; our thinking occasionally stumbles over UI issues like
sections, etc, that don't naturally fall out of using the wx Grid.
In thinking about future needs for the table, it occurred to me that
we've already got the CollectionCanvas that knows how to present items
of varying geometry on a variably-sized canvas with scrolling,
dragging, and hit-testing. It seems like it'd give us more flexibility
in evolving the summary view in the future. (As a bonus, it already
uses David's header widget.)
So: should we think about building the 0.7 summary table on top of
CollectionCanvas instead of the Grid?
...Bryan
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Open Source Applications Foundation "Dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/dev
------------------------------------------------------------------------
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Open Source Applications Foundation "Dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/dev
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Open Source Applications Foundation "Dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/dev