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
>> 
>> 
> 

Reply via email to