Re: TabPaneSkin modification of styleable property

2014-05-20 Thread Tom Schindl
What if we add a method like:

StyleableObjectProperty#runWithOutOriginTracking(Runnable r)

Tom

On 20.05.14 15:10, David Grieve wrote:
> 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)openTabAnimation).getStyleOrigin();
>>>  TabAnimation prevCloseAnimation =
>>> closeTabAnimation.get();
>>>  StyleOrigin prevCloseOrigin =
>>> ((StyleableProperty)closeTabAnimation).getStyleOrigin();
>>> ((StyleableProperty)openTabAnimation).applyStyle(null,
>>> TabAnimation.NONE);
>>> ((StyleableProperty)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)openTabAnimation).applyStyle(prevOpenOrigin,
>>>
>>> prevOpenAnimation);
>>> ((StyleableProperty)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
> 



Re: TabPaneSkin modification of styleable property

2014-05-20 Thread David Grieve
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)openTabAnimation).getStyleOrigin();
 TabAnimation prevCloseAnimation =
closeTabAnimation.get();
 StyleOrigin prevCloseOrigin =
((StyleableProperty)closeTabAnimation).getStyleOrigin();
((StyleableProperty)openTabAnimation).applyStyle(null,
TabAnimation.NONE);
((StyleableProperty)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)openTabAnimation).applyStyle(prevOpenOrigin,
prevOpenAnimation);
((StyleableProperty)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




Re: TabPaneSkin modification of styleable property

2014-05-20 Thread Tom Schindl
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)openTabAnimation).getStyleOrigin();
> TabAnimation prevCloseAnimation =
> closeTabAnimation.get();
> StyleOrigin prevCloseOrigin =
> ((StyleableProperty)closeTabAnimation).getStyleOrigin();
> ((StyleableProperty)openTabAnimation).applyStyle(null,
> TabAnimation.NONE);
> ((StyleableProperty)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)openTabAnimation).applyStyle(prevOpenOrigin,
> prevOpenAnimation);
> ((StyleableProperty)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
> 



Re: TabPaneSkin modification of styleable property

2014-05-20 Thread David Grieve
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)openTabAnimation).getStyleOrigin();
TabAnimation prevCloseAnimation = 
closeTabAnimation.get();
StyleOrigin prevCloseOrigin = 
((StyleableProperty)closeTabAnimation).getStyleOrigin();
((StyleableProperty)openTabAnimation).applyStyle(null, 
TabAnimation.NONE);
((StyleableProperty)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)openTabAnimation).applyStyle(prevOpenOrigin, 
prevOpenAnimation);
((StyleableProperty)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




TabPaneSkin modification of styleable property

2014-05-20 Thread Tom Schindl
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