Changeset 6051 in josm for trunk


Ignore:
Timestamp:
2013-07-06T16:07:02+02:00 (6 years ago)
Author:
Don-vip
Message:

Allow buttons of HelpAwareOptionPane to be dynamically enabled/disabled

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/HelpAwareOptionPane.java

    r6040 r6051  
    1111import java.awt.event.WindowEvent;
    1212import java.util.ArrayList;
     13import java.util.Collection;
     14import java.util.HashSet;
    1315import java.util.List;
    1416
     
    2123import javax.swing.JOptionPane;
    2224import javax.swing.KeyStroke;
     25import javax.swing.event.ChangeEvent;
     26import javax.swing.event.ChangeListener;
    2327
    2428import org.openstreetmap.josm.gui.help.HelpBrowser;
     
    3741        public final String tooltipText;
    3842        public final String helpTopic;
    39         public final boolean enabled;
     43        private boolean enabled;
     44       
     45        private final Collection<ChangeListener> listeners = new HashSet<ChangeListener>();
    4046       
    4147        /**
     
    6470            this.tooltipText = tooltipText;
    6571            this.helpTopic = helpTopic;
    66             this.enabled = enabled;
     72            setEnabled(enabled);
     73        }
     74       
     75        /**
     76         * Determines if this button spec is enabled
     77         * @return {@code true} if this button spec is enabled, {@code false} otherwise
     78         * @since 6051
     79         */
     80        public final boolean isEnabled() {
     81            return enabled;
     82        }
     83       
     84        /**
     85         * Enables or disables this button spec, depending on the value of the parameter {@code b}.
     86         * @param enabled if {@code true}, this button spec is enabled; otherwise this button spec is disabled
     87         * @since 6051
     88         */
     89        public final void setEnabled(boolean enabled) {
     90            if (this.enabled != enabled) {
     91                this.enabled = enabled;
     92                ChangeEvent event = new ChangeEvent(this);
     93                for (ChangeListener listener : listeners) {
     94                    listener.stateChanged(event);
     95                }
     96            }
     97        }
     98       
     99        private final boolean addChangeListener(ChangeListener listener) {
     100            return listener != null ? listeners.add(listener) : false;
    67101        }
    68102    }
     
    102136            buttons.add(b);
    103137        } else {
    104             for (ButtonSpec spec: options) {
    105                 JButton b = new JButton(spec.text);
     138            for (final ButtonSpec spec: options) {
     139                final JButton b = new JButton(spec.text);
    106140                b.setIcon(spec.icon);
    107141                b.setToolTipText(spec.tooltipText == null? "" : spec.tooltipText);
     
    110144                }
    111145                b.setFocusable(true);
    112                 b.setEnabled(spec.enabled);
     146                b.setEnabled(spec.isEnabled());
     147                spec.addChangeListener(new ChangeListener() {
     148                    @Override public void stateChanged(ChangeEvent e) {
     149                        b.setEnabled(spec.isEnabled());
     150                    }
     151                });
    113152                buttons.add(b);
    114153            }
Note: See TracChangeset for help on using the changeset viewer.