Index: /trunk/src/org/openstreetmap/josm/gui/HelpAwareOptionPane.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/HelpAwareOptionPane.java	(revision 6050)
+++ /trunk/src/org/openstreetmap/josm/gui/HelpAwareOptionPane.java	(revision 6051)
@@ -11,4 +11,6 @@
 import java.awt.event.WindowEvent;
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
 import java.util.List;
 
@@ -21,4 +23,6 @@
 import javax.swing.JOptionPane;
 import javax.swing.KeyStroke;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
 
 import org.openstreetmap.josm.gui.help.HelpBrowser;
@@ -37,5 +41,7 @@
         public final String tooltipText;
         public final String helpTopic;
-        public final boolean enabled;
+        private boolean enabled;
+        
+        private final Collection<ChangeListener> listeners = new HashSet<ChangeListener>();
        
         /**
@@ -64,5 +70,33 @@
             this.tooltipText = tooltipText;
             this.helpTopic = helpTopic;
-            this.enabled = enabled;
+            setEnabled(enabled);
+        }
+        
+        /**
+         * Determines if this button spec is enabled
+         * @return {@code true} if this button spec is enabled, {@code false} otherwise
+         * @since 6051
+         */
+        public final boolean isEnabled() {
+            return enabled;
+        }
+        
+        /**
+         * Enables or disables this button spec, depending on the value of the parameter {@code b}.
+         * @param enabled if {@code true}, this button spec is enabled; otherwise this button spec is disabled
+         * @since 6051
+         */
+        public final void setEnabled(boolean enabled) {
+            if (this.enabled != enabled) {
+                this.enabled = enabled;
+                ChangeEvent event = new ChangeEvent(this);
+                for (ChangeListener listener : listeners) {
+                    listener.stateChanged(event);
+                }
+            }
+        }
+        
+        private final boolean addChangeListener(ChangeListener listener) {
+            return listener != null ? listeners.add(listener) : false;
         }
     }
@@ -102,6 +136,6 @@
             buttons.add(b);
         } else {
-            for (ButtonSpec spec: options) {
-                JButton b = new JButton(spec.text);
+            for (final ButtonSpec spec: options) {
+                final JButton b = new JButton(spec.text);
                 b.setIcon(spec.icon);
                 b.setToolTipText(spec.tooltipText == null? "" : spec.tooltipText);
@@ -110,5 +144,10 @@
                 }
                 b.setFocusable(true);
-                b.setEnabled(spec.enabled);
+                b.setEnabled(spec.isEnabled());
+                spec.addChangeListener(new ChangeListener() {
+                    @Override public void stateChanged(ChangeEvent e) {
+                        b.setEnabled(spec.isEnabled());
+                    }
+                });
                 buttons.add(b);
             }
