Food for thought: something that might be nice to have could be a separate model that tells the VirtualFlows what the row heights are. In FlexGanttFX the height of each row is explicitly controlled by a heightProperty() of a “row" class and not by calculation. E.g. VirtualFlow.setHeightProvider(...) or (to support vertical and horizontal flows) VirtualFlow.setSizeProvider(…). This could then be used to pre-populate the size cache. If your application stays the in the range of hundreds of rows this could work pretty fast.
> On 28 Oct 2022, at 14:43, Dirk Lemmermann <[email protected]> wrote: > > Looks like I missed this last replay from Johan. In my last email I was > referring to a work-around where one VirtualFlow gets repositioned via > scrollTo() method calls in response to changes in the other VirtualFlow. Not > only are the rows alignments way off but updates are lagging behind. > > But let’s leave that behind for now and let’s try to find an existing > property that would make our use-case work again. > > For the “FlexGanttFX” use-case where I need to syncronize the scrolling of a > TreeTableView and a ListView I would love to be able to simply bind the > “position” properties of those two controls with each other. That feels very > intuitive to me. If both controls have the same number of rows and each row’s > height matches the row’s height in the other control then this should work, > but currently it does not. > > The “position” property gets updated by the VirtualFlow. When the flow sets > this property to a certain value then I would hope setting the same value > from outside would place the virtual flow at the exact same position. > Basically I am hoping that this is a bijective mapping but it is not …. > unless … the user scrolled all the way down in both views. Then it becomes a > bijective mapping. So I guess after having made all rows visible the > calculations are based on hard facts (as in “actual row height”) and not on > estimates. > > To summarise the requirement: there should be a way to bind a property of > VirtualFlow so that two instances with the same content can be scrolled in > sync (content = same rows with same heights resulting in same total virtual > height). > > Dirk > >> On 15 Sep 2022, at 21:20, Johan Vos <[email protected] >> <mailto:[email protected]>> wrote: >> >> >> >> On Wed, Sep 14, 2022 at 12:19 PM Dirk Lemmermann <[email protected] >> <mailto:[email protected]>> wrote: >>> Hi, >>> >>> >>> FlexGanttFX used to make this work via bidirectional bindings of the >>> properties of the vertical scrollbars of both VirtualFlows. With the latest >>> fixes to the VirtualFlow the assumption that two identically populated >>> VirtualFlows would provide identical values to the ScrollBar properties is >>> no longer true. The attempt to bind the “position” property also failed and >>> a work-around that Johan provided also has not been successful, yet (a >>> customer of mine is still evaluating it). >> >> I don't know what work-around you refer to, but I often point to public >> methods in VirtualFlow that, when properly combined, allow many usecases. I >> sometimes see code where the information about the positioning of elements >> in the VirtualFlow is obtained via the position of the scrollbar thumb, >> which seems a really odd way to get this info (and especially unreliable as >> the relation with the real positioning of cells is unspecified). There are >> other methods on VirtualFlow that imho are better suited for getting/setting >> information. >> What I want to avoid is that we have 2 API's that almost achieve the same. >> Hence, before considering a new method or property, I think we should make >> sure that there is currently no existing (documented) way to achieve it. I >> am pretty sure there are cases that can not be solved with the existing set >> of API's, and those cases are exactly what I'm looking for. >> >> - Johan >> >> >
