Ticket #20166: OSM-FlatLaf-plugin-HideableTabbedPane.diff

File OSM-FlatLaf-plugin-HideableTabbedPane.diff, 3.1 KB (added by DevCharly, 5 years ago)
  • src/org/openstreetmap/josm/plugins/flatlaf/JosmFlatTabbedPaneUI.java

     
     1// License: GPL. For details, see LICENSE file.
     2package org.openstreetmap.josm.plugins.flatlaf;
     3
     4import java.beans.PropertyChangeEvent;
     5import java.beans.PropertyChangeListener;
     6
     7import javax.swing.JComponent;
     8import javax.swing.plaf.ComponentUI;
     9
     10import org.openstreetmap.josm.gui.widgets.HideableTabbedPane;
     11import com.formdev.flatlaf.ui.FlatTabbedPaneUI;
     12
     13/**
     14 * Special JOSM UI delegate for JTabbedPane that supports hiding tab area for {@link HideableTabbedPane}.
     15 */
     16public class JosmFlatTabbedPaneUI extends FlatTabbedPaneUI {
     17    public static ComponentUI createUI(JComponent c) {
     18        return (c instanceof HideableTabbedPane)
     19            ? new JosmFlatTabbedPaneUI()
     20            : FlatTabbedPaneUI.createUI(c);
     21    }
     22
     23    @Override
     24    public void uninstallUI(JComponent c) {
     25        super.uninstallUI(c);
     26
     27        // HideableTabbedPane replaces FlatTabbedPaneUI with its own implementation
     28        // based on BasicTabbedPaneUI. This listener detects this, sets a FlatLaf client
     29        // property to enabed tab area hiding, and then resets the UI delegate to FlatTabbedPaneUI.
     30        PropertyChangeListener l = new PropertyChangeListener() {
     31            @Override
     32            public void propertyChange(PropertyChangeEvent e) {
     33                c.removePropertyChangeListener("UI", this);
     34
     35                if (e.getOldValue() instanceof FlatTabbedPaneUI &&
     36                    e.getNewValue() != null &&
     37                    e.getNewValue().getClass().getName().startsWith(HideableTabbedPane.class.getName()+'$'))
     38                {
     39                    c.putClientProperty("JTabbedPane.hideTabAreaWithOneTab", true);
     40
     41                    // reset to FlatTabbedPaneUI
     42                    c.updateUI();
     43                }
     44            }
     45        };
     46        c.addPropertyChangeListener("UI", l);
     47    }
     48}
  • src/org/openstreetmap/josm/plugins/flatlaf/FlatLaf.properties

     
     1#
     2# License: GPL. For details, see LICENSE file.
     3#
     4
     5TabbedPaneUI=org.openstreetmap.josm.plugins.flatlaf.JosmFlatTabbedPaneUI
  • ivy.xml

     
    11<ivy-module version="2.0">
    22  <info organisation="org.openstreetmap.josm.plugins" module="flatlaf"/>
    33  <dependencies>
    4     <dependency conf="default->default" org="com.formdev" name="flatlaf" rev="0.44"/>
     4    <dependency conf="default->default" org="com.formdev" name="flatlaf" rev="0.45"/>
    55  </dependencies>
    66</ivy-module>