Changeset 304 in josm for src/org


Ignore:
Timestamp:
2007-08-10T21:12:53+02:00 (18 years ago)
Author:
imi
Message:
  • fixed a bug that nodes were not created when no data layer was loaded
  • deprecated Main.map.mapView.addLayerChangeListener.
Location:
src/org/openstreetmap/josm
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • src/org/openstreetmap/josm/command/AddCommand.java

    r301 r304  
    1616import org.openstreetmap.josm.data.osm.visitor.DeleteVisitor;
    1717import org.openstreetmap.josm.data.osm.visitor.NameVisitor;
     18import org.openstreetmap.josm.gui.layer.Layer;
     19import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    1820
    1921/**
     
    3739        public AddCommand(OsmPrimitive osm) {
    3840                this.osm = osm;
    39                 this.ds = Main.ds;
     41                this.ds = Main.main.editLayer().data;
    4042        }
    4143
     
    5254        }
    5355
     56        // faster implementation
     57        @Override public boolean invalidBecauselayerRemoved(Layer oldLayer) {
     58            return oldLayer instanceof OsmDataLayer && ((OsmDataLayer)oldLayer).data == ds;
     59    }
     60
    5461        @Override public MutableTreeNode description() {
    5562                NameVisitor v = new NameVisitor();
  • src/org/openstreetmap/josm/command/Command.java

    r298 r304  
    1 // License: GPL. Copyright 2007 by Immanuel Scholz and others
     1//License: GPL. Copyright 2007 by Immanuel Scholz and others
    22package org.openstreetmap.josm.command;
    33
     
    1515import org.openstreetmap.josm.data.osm.Way;
    1616import org.openstreetmap.josm.data.osm.visitor.Visitor;
     17import org.openstreetmap.josm.gui.layer.Layer;
     18import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    1719
    1820
     
    3133        private static final class CloneVisitor implements Visitor {
    3234                public Map<OsmPrimitive, OsmPrimitive> orig = new HashMap<OsmPrimitive, OsmPrimitive>();
    33                
     35
    3436                public void visit(Node n) {
    3537                        orig.put(n, new Node(n));
    36             }
     38                }
    3739                public void visit(Segment s) {
    3840                        orig.put(s, new Segment(s));
    39             }
     41                }
    4042                public void visit(Way w) {
    4143                        orig.put(w, new Way(w));
    42             }
     44                }
    4345        }
    44        
     46
    4547        private CloneVisitor orig;
    46        
     48
    4749        /**
    4850         * Executes the command on the dataset. This implementation will remember all
     
    6971        }
    7072
     73
     74        /**
     75         * Called, when a layer has been removed to have the command remove itself from
     76         * any buffer if it is not longer applicable to the dataset (e.g. it was part of
     77         * the removed layer)
     78         */
     79        public boolean invalidBecauselayerRemoved(Layer oldLayer) {
     80                if (!(oldLayer instanceof OsmDataLayer))
     81                        return false;
     82                HashSet<OsmPrimitive> modified = new HashSet<OsmPrimitive>();
     83                fillModifiedData(modified, modified, modified);
     84                if (modified.isEmpty())
     85                        return false;
     86
     87                HashSet<OsmPrimitive> all = new HashSet<OsmPrimitive>(((OsmDataLayer)oldLayer).data.allPrimitives());
     88                for (OsmPrimitive osm : all)
     89                        if (all.contains(osm))
     90                                return true;
     91
     92                return false;
     93        }
     94
    7195        /**
    7296         * Fill in the changed data this command operates on.
  • src/org/openstreetmap/josm/data/UndoRedoHandler.java

    r301 r304  
    1 // License: GPL. Copyright 2007 by Immanuel Scholz and others
     1//License: GPL. Copyright 2007 by Immanuel Scholz and others
    22package org.openstreetmap.josm.data;
    33
     4import java.util.Iterator;
    45import java.util.LinkedList;
    56import java.util.Stack;
     
    78import org.openstreetmap.josm.Main;
    89import org.openstreetmap.josm.command.Command;
     10import org.openstreetmap.josm.gui.layer.Layer;
    911import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     12import org.openstreetmap.josm.gui.layer.Layer.LayerChangeListener;
    1013import org.openstreetmap.josm.gui.layer.OsmDataLayer.CommandQueueListener;
    1114
    12 public class UndoRedoHandler {
     15public class UndoRedoHandler implements LayerChangeListener {
    1316
    1417        /**
     
    2225
    2326        public final LinkedList<CommandQueueListener> listenerCommands = new LinkedList<CommandQueueListener>();
     27
     28
     29        public UndoRedoHandler() {
     30                Layer.listeners.add(this);
     31        }
    2432
    2533
     
    3745                fireCommandsChanged();
    3846        }
    39        
     47
    4048        /**
    4149         * Undoes the last added command.
     
    8189                commands.clear();
    8290                fireCommandsChanged();
    83     }
     91        }
     92
     93        public void layerRemoved(Layer oldLayer) {
     94                boolean changed = false;
     95                for (Iterator<Command> it = commands.iterator(); it.hasNext();) {
     96                        if (it.next().invalidBecauselayerRemoved(oldLayer)) {
     97                                it.remove();
     98                                changed = true;
     99                        }
     100                }
     101                for (Iterator<Command> it = redoCommands.iterator(); it.hasNext();) {
     102                        if (it.next().invalidBecauselayerRemoved(oldLayer)) {
     103                                it.remove();
     104                                changed = true;
     105                        }
     106                }
     107                if (changed)
     108                        fireCommandsChanged();
     109        }
     110
     111        public void layerAdded(Layer newLayer) {}
     112        public void activeLayerChange(Layer oldLayer, Layer newLayer) {}
    84113}
  • src/org/openstreetmap/josm/gui/MapView.java

    r298 r304  
    4848         * Interface to notify listeners of the change of the active layer.
    4949         * @author imi
    50          */
    51         public interface LayerChangeListener {
     50         * @deprecated Use Layer.LayerChangeListener instead
     51         */
     52        @Deprecated public interface LayerChangeListener {
    5253                void activeLayerChange(Layer oldLayer, Layer newLayer);
    5354                void layerAdded(Layer newLayer);
     
    6970        /**
    7071         * The listener of the active layer changes.
    71          */
    72         private Collection<LayerChangeListener> listeners = new LinkedList<LayerChangeListener>();
     72         * @deprecated Use Layer.listener instead.
     73         */
     74        @Deprecated private Collection<LayerChangeListener> listeners = new LinkedList<LayerChangeListener>();
    7375
    7476        public MapView() {
     
    115117                layers.add(layers.size(), layer);
    116118
     119                // TODO: Deprecated
    117120                for (LayerChangeListener l : listeners)
     121                        l.layerAdded(layer);
     122                for (Layer.LayerChangeListener l : Layer.listeners)
    118123                        l.layerAdded(layer);
    119124
     
    128133         */
    129134        public void removeLayer(Layer layer) {
    130                 if (layers.remove(layer))
     135                if (layers.remove(layer)) {
     136                        // TODO: Deprecated
    131137                        for (LayerChangeListener l : listeners)
    132138                                l.layerRemoved(layer);
     139                        for (Layer.LayerChangeListener l : Layer.listeners)
     140                                l.layerRemoved(layer);
     141                }
    133142                if (layer == editLayer) {
    134143                        editLayer = null;
     
    227236         * Add a listener for changes of active layer.
    228237         * @param listener The listener that get added.
    229          */
    230         public void addLayerChangeListener(LayerChangeListener listener) {
     238         * @deprecated Use Layer.listener.add instead.
     239         */
     240        @Deprecated public void addLayerChangeListener(LayerChangeListener listener) {
    231241                if (listener != null)
    232242                        listeners.add(listener);
     
    236246         * Remove the listener.
    237247         * @param listener The listener that get removed from the list.
    238          */
    239         public void removeLayerChangeListener(LayerChangeListener listener) {
     248         * @deprecated Use Layer.listener.remove instead
     249         */
     250        @Deprecated public void removeLayerChangeListener(LayerChangeListener listener) {
    240251                listeners.remove(listener);
    241252        }
     
    261272                Layer old = activeLayer;
    262273                activeLayer = layer;
    263                 if (old != layer)
     274                if (old != layer) {
     275                        // TODO: Deprecated
    264276                        for (LayerChangeListener l : listeners)
    265277                                l.activeLayerChange(old, layer);
     278                        for (Layer.LayerChangeListener l : Layer.listeners)
     279                                l.activeLayerChange(old, layer);
     280                }
    266281                repaint();
    267282        }
  • src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java

    r298 r304  
    3333import org.openstreetmap.josm.gui.MapFrame;
    3434import org.openstreetmap.josm.gui.MapView;
    35 import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
    3635import org.openstreetmap.josm.gui.layer.Layer;
    3736import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     37import org.openstreetmap.josm.gui.layer.Layer.LayerChangeListener;
    3838import org.openstreetmap.josm.tools.DontShowAgainInfo;
    3939import org.openstreetmap.josm.tools.ImageProvider;
     
    180180                        }
    181181                });
    182                 mapView.addLayerChangeListener(this);
     182                Layer.listeners.add(this);
    183183
    184184                instance.addMouseListener(new MouseAdapter(){
     
    283283        public void layerRemoved(Layer oldLayer) {
    284284                model.removeElement(oldLayer);
     285                if (model.isEmpty()) {
     286                        Layer.listeners.remove(this);
     287                        return;
     288                }
    285289                if (instance.getSelectedIndex() == -1)
    286290                        instance.setSelectedIndex(0);
     
    296300                updateButtonEnabled();
    297301        }
    298 
    299         public void layerMoved(Layer layer, int newPosition) {}
    300302}
  • src/org/openstreetmap/josm/gui/layer/GeoImageLayer.java

    r298 r304  
    5656import org.openstreetmap.josm.gui.MapView;
    5757import org.openstreetmap.josm.gui.PleaseWaitRunnable;
    58 import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
    5958import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
    6059import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
     
    224223                };
    225224                Main.map.mapView.addMouseListener(mouseAdapter);
    226                 Main.map.mapView.addLayerChangeListener(new LayerChangeListener(){
     225                Layer.listeners.add(new LayerChangeListener(){
    227226                        public void activeLayerChange(Layer oldLayer, Layer newLayer) {}
    228227                        public void layerAdded(Layer newLayer) {}
  • src/org/openstreetmap/josm/gui/layer/Layer.java

    r298 r304  
    55import java.awt.Graphics;
    66import java.io.File;
     7import java.util.Collection;
     8import java.util.concurrent.CopyOnWriteArrayList;
    79
    810import javax.swing.Icon;
     
    2830 */
    2931abstract public class Layer implements Destroyable {
     32
     33        /**
     34         * Interface to notify listeners of the change of the active layer.
     35         * @author imi
     36         */
     37        public interface LayerChangeListener {
     38                void activeLayerChange(Layer oldLayer, Layer newLayer);
     39                void layerAdded(Layer newLayer);
     40                void layerRemoved(Layer oldLayer);
     41        }
     42
     43        /**
     44         * The listener of the active layer changes. You may register/deregister yourself
     45         * while an LayerChangeListener - action is executed.
     46         */
     47        public static final Collection<LayerChangeListener> listeners = new CopyOnWriteArrayList<LayerChangeListener>();
    3048
    3149        /**
  • src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java

    r298 r304  
    2727import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
    2828import org.openstreetmap.josm.gui.MapView;
    29 import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
    3029import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
    3130import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
     
    8180                                                }
    8281                                                Main.map.mapView.repaint();
    83                                         }
    84                                 });
    85 
    86                                 Main.map.mapView.addLayerChangeListener(new LayerChangeListener(){
    87                                         public void activeLayerChange(Layer oldLayer, Layer newLayer) {}
    88                                         public void layerAdded(Layer newLayer) {}
    89                                         public void layerRemoved(Layer oldLayer) {
    90                                                 Main.pref.listener.remove(MarkerLayer.this);
    9182                                        }
    9283                                });
  • src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java

    r301 r304  
    270270                                        for (Item i : data) {
    271271                                                if (i.focus) {
    272                                                         System.out.println(i.requestFocusInWindow());
     272                                                        i.requestFocusInWindow();
    273273                                                        return;
    274274                                                }
Note: See TracChangeset for help on using the changeset viewer.