Re: TabPaneSkin modification of styleable property
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
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
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
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
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