Changeset 23943 in osm


Ignore:
Timestamp:
2010-10-31T01:03:00+02:00 (14 years ago)
Author:
oliverw
Message:
  • Bugfix: Action states were not updated on selection change.
  • Trigger selection state on container changes.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/AbstractAddressEditAction.java

    r23933 r23943  
    1818import org.openstreetmap.josm.actions.JosmAction;
    1919import org.openstreetmap.josm.plugins.fixAddresses.AddressEditContainer;
     20import org.openstreetmap.josm.plugins.fixAddresses.IAddressEditContainerListener;
     21import org.openstreetmap.josm.plugins.fixAddresses.INodeEntity;
    2022
    2123/**
     
    2628 * container or on selection items.
    2729 * Most actions will work in both cases, so it is recommended to have one single method which
    28  * accepts a list of addresses or streets and executes the tasks to be done by this action.
     30 * accepts a list of addresses or streets and executes the tasks to be done by this action.
     31 * 
    2932 * @author Oliver Wieland <oliver.wieland@online.de>
    30  *
    3133 */
    3234
    3335@SuppressWarnings("serial")
    34 public abstract class AbstractAddressEditAction extends JosmAction {
     36public abstract class AbstractAddressEditAction extends JosmAction implements IAddressEditContainerListener {   
    3537        private AddressEditSelectionEvent event;
    3638        protected AddressEditContainer container;
     
    5456       
    5557        /**
     58         * Gets the current address container.
    5659         * @return the container
    5760         */
     
    6467         */
    6568        public void setContainer(AddressEditContainer container) {
     69                if (container != null) { // remove old listener first
     70                        container.removeChangedListener(this);
     71                }
    6672                this.container = container;
    6773                updateEnabledState();
     74                if (container != null) {
     75                        container.addChangedListener(this);
     76                }
    6877        }
    6978
     
    8089        protected void setEvent(AddressEditSelectionEvent event) {
    8190                this.event = event;
     91                updateEnabledState();
     92        }
     93       
     94        /* (non-Javadoc)
     95         * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
     96         */
     97        @Override
     98        public void actionPerformed(ActionEvent arg0) {
     99                if (event != null) { // use the event acquired previously.
     100                        addressEditActionPerformed(event);     
     101                        event = null; // consume event
     102                } else {
     103                        if (container != null) {
     104                                addressEditActionPerformed(container);
     105                        } else { // call super class hook
     106                                actionPerformed(arg0);
     107                        }
     108                }
    82109        }
    83110
     
    106133       
    107134        /**
    108          * Updates 'enabled' state depending on the given address container object.
    109          * @param container The address container (maybe null).
     135         * Updates 'enabled' state depending on the current selection.
     136         * @param container The selection event.
    110137         * @return
    111138         */
    112139        protected abstract void updateEnabledState(AddressEditSelectionEvent event);
    113 
    114         /* (non-Javadoc)
    115          * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
    116          */
    117         @Override
    118         public void actionPerformed(ActionEvent arg0) {
    119                 if (event != null) { // use the event acquired previously.
    120                         addressEditActionPerformed(event);     
    121                         event = null; // consume event
    122                 } else {
    123                         if (container != null) {
    124                                 addressEditActionPerformed(container);
    125                         } else { // call super class hook
    126                                 actionPerformed(arg0);
    127                         }
    128                 }
    129         }
    130        
    131140
    132141        /**
     
    143152       
    144153       
     154        /* (non-Javadoc)
     155         * @see org.openstreetmap.josm.plugins.fixAddresses.IAddressEditContainerListener#containerChanged(org.openstreetmap.josm.plugins.fixAddresses.AddressEditContainer)
     156         */
     157        @Override
     158        public void containerChanged(AddressEditContainer container) {
     159                updateEnabledState();
     160        }
    145161
     162        /* (non-Javadoc)
     163         * @see org.openstreetmap.josm.plugins.fixAddresses.IAddressEditContainerListener#entityChanged(org.openstreetmap.josm.plugins.fixAddresses.INodeEntity)
     164         */
     165        @Override
     166        public void entityChanged(INodeEntity node) {
     167                updateEnabledState();           
     168        }
    146169}
Note: See TracChangeset for help on using the changeset viewer.