For me, I'd like to simply change the Look and Feel and have the same
data presented differently (perhaps related to space restrictions,
orientation, user preferences). Currently, this can be achieved by
changing the Control, or maybe only change the Skin, depending on how
radical the transformation is. I'd like that to be the same thing for
all these cases and have the same general API (show item X, get
position, set position, go to first item, go to last item).
If Skins aren't intended for that (despite being able to change the
complete appearance and even change all the navigation handling), then
fine -- we'll need to do it with Controls, and have "similar" controls
all implement the same interface.
ListView looked to me like a very close match, that just needs a small
push to get what I want (re-implementing all the "virtual" cell logic is
not something I want to do for every "skin"). It could be shown as
pages easily (with a nice pager in the top right corner something).
This does not affect the API. I can still call "show item X", or ask
for it to give me an object that represents the current position (making
it possible to restore it there later). I don't need to know it is page
based, or even know the page number -- just like I don't need to know
there are scrollbars or what the current scroll position is. What I do
need however is a way to restore the control to the exact same state it
was in before (the same amount of pixels scrolled, the same item at the
top, the same item at the bottom).
--John
On 21/03/2015 20:32, Scott Palmer wrote:
My point is that there are many ways to display the same data set, but they shouldn't all be
crammed into a single control type. Particularly one that changes radically based on the skin just
because the data model can be represented by the same data structure. For a ListView it could
still fit if it was a list that "scrolled" a page at a time, perhaps that was a bad
example. I would still expect the control to be a Node and to have direct access via the control to
the current "scroll" position. I would not expect a ListView to have a page-based API,
nor would I expect to get access to such an API by accessing the Skin. The skin is an
implementation detail that should remain distinct from how my program interacts with the control.
Scott
On Mar 21, 2015, at 2:53 PM, Tom Eugelink<t...@tbee.org> wrote:
A page based view can perfectly be a list view; I would have no problem having
a paging skin or a scrollbar skin for ListView.
On 21-3-2015 19:46, Scott Palmer wrote:
But that's not right. A *List* is 'a container for an unbounded list of
items". A ListView is a specific type of control that gives you a view to that
list *in a specific way*. It has properties in addition to the list itself. It
*should* have a scroll position because that is a property of that kind of control -
even though the skin will implement it. These controls are visible elements and must
expose properties that will ultimately be implemented in the skin. They must be
Nodes. Otherwise they will be far too cumbersome to use.
You may not need to expose where the scroll bars are, or get access to arrow
buttons, etc., but you should have access to what items are visible, what the
scroll position is, etc. you should be able to change the scroll position
programmatically without knowing the skin.
A page based view is a different kind of control. It can still use a List
model, but flipping to a page system from a scrollable list is not something I
would expect when changing the look and feel. I might expect to have the view
change from pixel-based scrolling to line based scrolling, or have up/down
arrows at one end of the scroll bar instead of each end.
Scott
On Sat, Mar 21, 2015 at 12:01 PM, John Hendrikx<hj...@xs4all.nl> wrote:
As someone that has been tempted to write a new Control that replaces ListView
atleast half a dozen times now because of restrictions or idioms that don't
match my needs, I'd disagree. A ListView doesn't need to scroll at all. An
application that isn't mouse or touchscreen controlled (keyboard or remote
controlled for example) has zero need for scrollbars except maybe as
information to show the relative size of the view.
A List of items could be paged only, or they could flip. I'd like to be able to
take a List, and wrap it in a ScrollBarView... or in a PagerView, FlipOverView or
CoverFlowView (with 30 new properties to set things like reflections, 3d
parameters, distance between items, etc). It is possible to do this with Skins,
but it feels like a hack rather than simply a different Look&Feel in the end.
After all, a ListView is a container for an unbounded list of items. I can think of half a
dozen ways of how that can be shown to the user, and the current ListView is just one way to do
it. The promise of Skins here is that I could just change the look& feel, but unfortunately
way too many details of the "default" look& feel leak through in the Control itself
--John.