Changeset 2629 in josm for trunk/src/org/openstreetmap


Ignore:
Timestamp:
2009-12-13T19:31:06+01:00 (14 years ago)
Author:
bastiK
Message:

geoimage: usability - allow clicking on the image symbols only when in select mode

  • introduces MapModeChangeListener
Location:
trunk/src/org/openstreetmap/josm/gui
Files:
2 edited

Legend:

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

    r2613 r2629  
    99import java.awt.event.MouseWheelListener;
    1010import java.util.ArrayList;
     11import java.util.Collection;
    1112import java.util.List;
     13import java.util.concurrent.CopyOnWriteArrayList;
    1214
    1315import javax.swing.AbstractButton;
     
    216218
    217219    /**
    218      * 
     220     *
    219221     */
    220222    public void tearDownDialogsPane() {
     
    257259     * @param mapMode   The new mode to set.
    258260     */
    259     public void selectMapMode(MapMode mapMode) {
    260         if (mapMode == this.mapMode)
     261    public void selectMapMode(MapMode newMapMode) {
     262        MapMode oldMapMode = this.mapMode;
     263        if (newMapMode == oldMapMode)
    261264            return;
    262         if (this.mapMode != null) {
    263             this.mapMode.exitMode();
    264         }
    265         this.mapMode = mapMode;
    266         mapMode.enterMode();
     265        if (oldMapMode != null) {
     266            oldMapMode.exitMode();
     267        }
     268        this.mapMode = newMapMode;
     269        newMapMode.enterMode();
     270        fireMapModeChanged(oldMapMode, newMapMode);
    267271    }
    268272
     
    319323        return dialogsPanel.getWidth();
    320324    }
     325
     326    /**
     327     * Interface to notify listeners of the change of the mapMode.
     328     */
     329    public interface MapModeChangeListener {
     330        void mapModeChange(MapMode oldMapMode, MapMode newMapMode);
     331    }
     332
     333    /**
     334     * the mapMode listeners
     335     */
     336    private static final Collection<MapModeChangeListener> mapModeChangeListeners = new CopyOnWriteArrayList<MapModeChangeListener>();
     337     /**
     338     * Adds a mapMode change listener
     339     *
     340     * @param listener the listener. Ignored if null or already registered.
     341     */
     342    public static void addMapModeChangeListener(MapModeChangeListener listener) {
     343        if (listener != null && ! mapModeChangeListeners.contains(listener)) {
     344            mapModeChangeListeners.add(listener);
     345        }
     346    }
     347    /**
     348     * Removes a mapMode change listener
     349     *
     350     * @param listener the listener. Ignored if null or already registered.
     351     */
     352    public static void removeMapModeChangeListener(MapModeChangeListener listener) {
     353        if (listener != null && mapModeChangeListeners.contains(listener)) {
     354            mapModeChangeListeners.remove(listener);
     355        }
     356    }
     357
     358    protected static void fireMapModeChanged(MapMode oldMapMode, MapMode newMapMode) {
     359        for (MapModeChangeListener l : mapModeChangeListeners) {
     360            l.mapModeChange(oldMapMode, newMapMode);
     361        }
     362    }
    321363}
  • trunk/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java

    r2627 r2629  
    4646import org.openstreetmap.josm.Main;
    4747import org.openstreetmap.josm.actions.RenameLayerAction;
     48import org.openstreetmap.josm.actions.mapmode.MapMode;
    4849import org.openstreetmap.josm.data.Bounds;
    4950import org.openstreetmap.josm.data.coor.CachedLatLon;
     
    5152import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
    5253import org.openstreetmap.josm.gui.ExtendedDialog;
     54import org.openstreetmap.josm.gui.MapFrame;
     55import org.openstreetmap.josm.gui.MapFrame.MapModeChangeListener;
    5356import org.openstreetmap.josm.gui.MapView;
    5457import org.openstreetmap.josm.gui.PleaseWaitRunnable;
     
    646649
    647650    private MouseAdapter mouseAdapter = null;
     651    private MapModeChangeListener mapModeListener = null;
    648652
    649653    private void hook_up_mouse_events() {
     
    689693            }
    690694        };
    691         Main.map.mapView.addMouseListener(mouseAdapter);
     695
     696        mapModeListener = new MapModeChangeListener() {
     697            public void mapModeChange(MapMode oldMapMode, MapMode newMapMode) {
     698                if (newMapMode instanceof org.openstreetmap.josm.actions.mapmode.SelectAction) {
     699                    Main.map.mapView.addMouseListener(mouseAdapter);
     700                } else {
     701                    Main.map.mapView.removeMouseListener(mouseAdapter);
     702                }
     703            }
     704        };
     705
     706        Main.map.addMapModeChangeListener(mapModeListener);
     707        mapModeListener.mapModeChange(null, Main.map.mapMode);
     708
    692709        MapView.addLayerChangeListener(new LayerChangeListener() {
    693710            public void activeLayerChange(Layer oldLayer, Layer newLayer) {
    694                 if (newLayer == GeoImageLayer.this && currentPhoto >= 0) {
    695                     Main.main.map.repaint();
    696                     ImageViewerDialog.showImage(GeoImageLayer.this, data.get(currentPhoto));
     711                if (newLayer == GeoImageLayer.this) {
     712                    // only in select mode it is possible to click the images
     713                    Main.map.selectSelectTool(false);
    697714                }
    698715            }
     
    707724                    }
    708725                    Main.map.mapView.removeMouseListener(mouseAdapter);
     726                    Main.map.removeMapModeChangeListener(mapModeListener);
    709727                    currentPhoto = -1;
    710728                    data.clear();
Note: See TracChangeset for help on using the changeset viewer.