View Javadoc
1   /*
2    * Tethys: GUI Utilities
3    * Copyright 2012-2026. Tony Washer
4    *
5    * Licensed under the Apache License, Version 2.0 (the "License"); you may not
6    * use this file except in compliance with the License.  You may obtain a copy
7    * of the License at
8    *
9    *   http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
14   * License for the specific language governing permissions and limitations under
15   * the License.
16   */
17  package io.github.tonywasher.joceanus.tethys.javafx.button;
18  
19  import io.github.tonywasher.joceanus.oceanus.event.OceanusEventRegistrar;
20  import javafx.geometry.Side;
21  import io.github.tonywasher.joceanus.tethys.api.base.TethysUIEvent;
22  import io.github.tonywasher.joceanus.tethys.api.base.TethysUIIconId;
23  import io.github.tonywasher.joceanus.tethys.core.button.TethysUICoreScrollButtonManager;
24  import io.github.tonywasher.joceanus.tethys.core.factory.TethysUICoreFactory;
25  import io.github.tonywasher.joceanus.tethys.javafx.base.TethysUIFXNode;
26  import io.github.tonywasher.joceanus.tethys.javafx.base.TethysUIFXUtils;
27  import io.github.tonywasher.joceanus.tethys.javafx.menu.TethysUIFXScrollMenu;
28  
29  /**
30   * JavaFX Button which provides a PopUpMenu selection.
31   *
32   * @param <T> the object type
33   */
34  public final class TethysUIFXScrollButtonManager<T>
35          extends TethysUICoreScrollButtonManager<T> {
36      /**
37       * Constructor.
38       *
39       * @param pFactory the GUI factory
40       * @param pClazz   the value class
41       */
42      TethysUIFXScrollButtonManager(final TethysUICoreFactory<?> pFactory,
43                                    final Class<T> pClazz) {
44          /* Initialise the underlying class */
45          super(pFactory, pClazz);
46      }
47  
48      @Override
49      public TethysUIFXNode getNode() {
50          return (TethysUIFXNode) super.getNode();
51      }
52  
53      @Override
54      public void setVisible(final boolean pVisible) {
55          getNode().setManaged(pVisible);
56          getNode().setVisible(pVisible);
57      }
58  
59      @Override
60      protected void registerListeners() {
61          /* Set context menu listener */
62          final OceanusEventRegistrar<TethysUIEvent> myRegistrar = getMenu().getEventRegistrar();
63          myRegistrar.addEventListener(TethysUIEvent.NEWVALUE, e -> handleMenuClosed());
64          myRegistrar.addEventListener(TethysUIEvent.WINDOWCLOSED, e -> handleMenuClosed());
65      }
66  
67      @Override
68      public TethysUIFXScrollMenu<T> getMenu() {
69          return (TethysUIFXScrollMenu<T>) super.getMenu();
70      }
71  
72      @Override
73      protected void showMenu() {
74          getMenu().showMenuAtPosition(getNode().getNode(), Side.BOTTOM);
75      }
76  
77      @Override
78      public void setIcon(final TethysUIIconId pId,
79                          final int pSize) {
80          getButton().setIcon(TethysUIFXUtils.getIconAtSize(pId, pSize));
81          getButton().setIconSize(pSize);
82      }
83  
84      @Override
85      public void setPreferredWidth(final Integer pWidth) {
86          getNode().setPreferredWidth(pWidth);
87      }
88  
89      @Override
90      public void setPreferredHeight(final Integer pHeight) {
91          getNode().setPreferredHeight(pHeight);
92      }
93  
94      @Override
95      public void setBorderPadding(final Integer pPadding) {
96          super.setBorderPadding(pPadding);
97          getNode().createWrapperPane(getBorderTitle(), getBorderPadding());
98      }
99  
100     @Override
101     public void setBorderTitle(final String pTitle) {
102         super.setBorderTitle(pTitle);
103         getNode().createWrapperPane(getBorderTitle(), getBorderPadding());
104     }
105 }