TabPaneSkin modification of styleable property

David Grieve david.grieve at oracle.com
Tue May 20 13:10:17 UTC 2014


What I meant was that I don't like that you have to be aware from 
library code that calling setXXX(value) screws up CSS so you have to use 
applyStyle(null, value). I wish there was some way of knowing that the 
setXXX is happening inside library code so this kind of usage wasn't an 
issue.

It would be best to have a bug to track this.

On 5/20/14, 8:45 AM, Tom Schindl wrote:
> Would it be better to simply use a boolean flag instead of modifing the
> property, something along:
>
> try {
>    disableAnimation = true;
>    // ...
> } finally {
>    disableAnimation = false;
> }
>
> Tom
>
> On 20.05.14 14:26, David Grieve wrote:
>> Good find. The code needs to save off the StyleOrigin and use applyStyle
>> instead of set. I don't like that you have to deal with this level of
>> detail, but I haven't figured out any way around it yet. I'm open to ideas.
>>
>>                      // save and set tab animation to none - as it is not
>> a good idea
>>                      // to animate on the same data for open and close.
>>                      TabAnimation prevOpenAnimation =
>> openTabAnimation.get();
>>                      StyleOrigin prevOpenOrigin =
>> ((StyleableProperty<TabAnimation>)openTabAnimation).getStyleOrigin();
>>                      TabAnimation prevCloseAnimation =
>> closeTabAnimation.get();
>>                      StyleOrigin prevCloseOrigin =
>> ((StyleableProperty<TabAnimation>)closeTabAnimation).getStyleOrigin();
>> ((StyleableProperty<TabAnimation>)openTabAnimation).applyStyle(null,
>> TabAnimation.NONE);
>> ((StyleableProperty<TabAnimation>)closeTabAnimation).applyStyle(null,
>> TabAnimation.NONE);
>>                      for (int i = c.getFrom(); i < c.getTo(); i++) {
>>                          permutatedTabs.add(tabs.get(i));
>>                      }
>>
>>                      removeTabs(permutatedTabs);
>>                      addTabs(permutatedTabs, c.getFrom());
>> ((StyleableProperty<TabAnimation>)openTabAnimation).applyStyle(prevOpenOrigin,
>> prevOpenAnimation);
>> ((StyleableProperty<TabAnimation>)closeTabAnimation).applyStyle(prevCloseOrigin,
>> prevCloseAnimation);
>> getSkinnable().getSelectionModel().select(selTab);
>>
>>
>>
>> On 5/20/14, 7:26 AM, Tom Schindl wrote:
>>> Hi,
>>>
>>> This question is mostly for David but others might be able to support my
>>> feeling that TabPaneSkin works against the CSS-Engine inside its
>>> initializeTabListener-method where it does something like this:
>>>
>>>>                       // save and set tab animation to none - as it is
>>>> not a good idea
>>>>                       // to animate on the same data for open and close.
>>>>                       TabAnimation prevOpenAnimation =
>>>> openTabAnimation.get();
>>>>                       TabAnimation prevCloseAnimation =
>>>> closeTabAnimation.get();
>>>>                       openTabAnimation.set(TabAnimation.NONE);
>>>>                       closeTabAnimation.set(TabAnimation.NONE);
>>>>                       for (int i = c.getFrom(); i < c.getTo(); i++) {
>>>>                           permutatedTabs.add(tabs.get(i));
>>>>                       }
>>>>
>>>>                       removeTabs(permutatedTabs);
>>>>                       addTabs(permutatedTabs, c.getFrom());
>>>>                       openTabAnimation.set(prevOpenAnimation);
>>>>                       closeTabAnimation.set(prevCloseAnimation);
>>> if I now appropriately understand the working of the CSS-Engine it will
>>> never set a value from CSS afterwards because the property origin is set
>>> to user.
>>>
>>> Minor detail - the code of remembering and restoring the state should
>>> most likely be wrapped in a try-finally statement.
>>>
>>> Tom



More information about the openjfx-dev mailing list