2828 * commit 72c1c21a76ba752439c877aba599b0b5f8bf9332 (tag: 25+20), and modified on:
2929 * June 18, 2025; June 20, 2025; June 21, 2025; June 22, 2025; June 23, 2025; June 24, 2025;
3030 * June 25, 2025; June 26, 2025; July 05, 2025; July 09, 2025; July 11, 2025; July 14, 2025;
31- * July 18, 2025; August 12, 2025; August 20, 2025; August 31, 2025.
31+ * July 18, 2025; August 12, 2025; August 20, 2025; August 31, 2025; October 22, 2025 .
3232 */
3333
3434package com .techsenger .tabpanepro .core .skin ;
6262import javafx .beans .property .ReadOnlyBooleanWrapper ;
6363import javafx .beans .property .ReadOnlyDoubleProperty ;
6464import javafx .beans .property .ReadOnlyDoubleWrapper ;
65+ import javafx .beans .property .ReadOnlyObjectProperty ;
66+ import javafx .beans .property .ReadOnlyObjectWrapper ;
6567import javafx .beans .property .SimpleBooleanProperty ;
6668import javafx .beans .property .SimpleDoubleProperty ;
6769import javafx .beans .property .SimpleObjectProperty ;
@@ -143,7 +145,7 @@ private enum TabAnimation {
143145 // In future we could add FADE, ...
144146 }
145147
146- private enum TabAnimationState {
148+ public enum TabAnimationState {
147149 SHOWING , HIDING , NONE ;
148150 }
149151
@@ -539,14 +541,14 @@ private void removeTabs(List<? extends Tab> removedList) {
539541 removeTabContent (tab );
540542
541543 EventHandler <ActionEvent > cleanup = ae -> {
542- tabRegion .animationState = TabAnimationState .NONE ;
544+ tabRegion .setAnimationState ( TabAnimationState .NONE ) ;
543545
544546 tabHeaderArea .removeTab (tab );
545547 tabHeaderArea .requestLayout ();
546548 };
547549
548550 if (Platform .isFxApplicationThread () && (closeTabAnimation .get () == TabAnimation .GROW )) {
549- tabRegion .animationState = TabAnimationState .HIDING ;
551+ tabRegion .setAnimationState ( TabAnimationState .HIDING ) ;
550552 Timeline closedTabTimeline = tabRegion .currentAnimation =
551553 createTimeline (tabRegion , Duration .millis (ANIMATION_SPEED ), 0.0F , cleanup );
552554 closedTabTimeline .play ();
@@ -577,7 +579,7 @@ private void addTabs(List<? extends Tab> addedList, int from) {
577579 List <Node > headers = new ArrayList <>(tabHeaderArea .headersRegion .getChildren ());
578580 for (Node n : headers ) {
579581 TabHeaderSkin header = (TabHeaderSkin ) n ;
580- if (header .animationState == TabAnimationState .HIDING ) {
582+ if (header .getAnimationState () == TabAnimationState .HIDING ) {
581583 stopCurrentAnimation (header .tab );
582584 }
583585 }
@@ -592,11 +594,11 @@ private void addTabs(List<? extends Tab> addedList, int from) {
592594 final TabHeaderSkin tabRegion = tabHeaderArea .getTabHeaderSkin (tab );
593595 if (tabRegion != null ) {
594596 if (Platform .isFxApplicationThread () && (openTabAnimation .get () == TabAnimation .GROW )) {
595- tabRegion .animationState = TabAnimationState .SHOWING ;
597+ tabRegion .setAnimationState ( TabAnimationState .SHOWING ) ;
596598 tabRegion .animationTransition .setValue (0.0 );
597599 tabRegion .setVisible (true );
598600 tabRegion .currentAnimation = createTimeline (tabRegion , Duration .millis (ANIMATION_SPEED ), 1.0 , event -> {
599- tabRegion .animationState = TabAnimationState .NONE ;
601+ tabRegion .setAnimationState ( TabAnimationState .NONE ) ;
600602 tabRegion .setVisible (true );
601603 tabRegion .inner .requestLayout ();
602604 });
@@ -2852,7 +2854,7 @@ public void handle(MouseEvent me) {
28522854 labelHeight = maxHeight ;
28532855 }
28542856
2855- if (animationState != TabAnimationState .NONE ) {
2857+ if (getAnimationState () != TabAnimationState .NONE ) {
28562858// if (prefWidth.getValue() < labelAreaWidth) {
28572859// labelAreaWidth = prefWidth.getValue();
28582860// }
@@ -3069,7 +3071,8 @@ private void dispose() {
30693071 setOnMousePressed (null );
30703072 }
30713073
3072- private TabAnimationState animationState = TabAnimationState .NONE ;
3074+ private ReadOnlyObjectWrapper <TabAnimationState > animationState =
3075+ new ReadOnlyObjectWrapper (TabAnimationState .NONE );
30733076 private Timeline currentAnimation ;
30743077
30753078 @ Override protected double computePrefWidth (double height ) {
@@ -3308,6 +3311,19 @@ public TabHeaderContext getContext() {
33083311 private TabPanePro getSkinnable () {
33093312 return context .getSkinnable ();
33103313 }
3314+
3315+ public TabAnimationState getAnimationState () {
3316+ return animationState .get ();
3317+ }
3318+
3319+ public ReadOnlyObjectProperty <TabAnimationState > animationStateProperty () {
3320+ return animationState .getReadOnlyProperty ();
3321+ }
3322+
3323+ private void setAnimationState (TabAnimationState state ) {
3324+ animationState .set (state );
3325+ }
3326+
33113327 } /* End TabHeaderSkin */
33123328
33133329 private static final PseudoClass SELECTED_PSEUDOCLASS_STATE =
0 commit comments