Ignore:
Timestamp:
2013-08-22T00:33:32+02:00 (11 years ago)
Author:
Don-vip
Message:

fix #8987 - immutable coordinates (patch by shinigami)

Location:
trunk/src/org/openstreetmap/josm/command
Files:
3 edited

Legend:

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

    r6162 r6173  
    1616
    1717import org.openstreetmap.josm.Main;
     18import org.openstreetmap.josm.data.coor.EastNorth;
     19import org.openstreetmap.josm.data.coor.LatLon;
    1820import org.openstreetmap.josm.data.osm.Node;
    1921import org.openstreetmap.josm.data.osm.OsmPrimitive;
     
    5153        public void visit(Relation e) {
    5254            orig.put(e, e.save());
     55        }
     56    }
     57
     58    /**
     59     * Small helper for holding the interesting part of the old data state of the objects.
     60     */
     61    public static class OldNodeState {
     62
     63        final LatLon latlon;
     64        final EastNorth eastNorth; // cached EastNorth to be used for applying exact displacement
     65        final boolean modified;
     66
     67        /**
     68         * Constructs a new {@code OldNodeState} for the given node.
     69         * @param node The node whose state has to be remembered
     70         */
     71        public OldNodeState(Node node){
     72            latlon = node.getCoor();
     73            eastNorth = node.getEastNorth();
     74            modified = node.isModified();
    5375        }
    5476    }
  • trunk/src/org/openstreetmap/josm/command/MoveCommand.java

    r6069 r6173  
    99import java.util.LinkedList;
    1010import java.util.List;
     11
    1112import javax.swing.Icon;
    1213
     
    4849
    4950    /**
    50      * Small helper for holding the interesting part of the old data state of the
    51      * objects.
    52      */
    53     public static class OldState {
    54         LatLon latlon;
    55         EastNorth en; // cached EastNorth to be used for applying exact displacenment
    56         boolean modified;
    57     }
    58 
    59     /**
    6051     * List of all old states of the objects.
    6152     */
    62     private List<OldState> oldState = new LinkedList<OldState>();
     53    private List<OldNodeState> oldState = new LinkedList<OldNodeState>();
    6354
    6455    public MoveCommand(OsmPrimitive osm, double x, double y) {
     
    8576        this.nodes = AllNodesVisitor.getAllNodes(objects);
    8677        for (Node n : this.nodes) {
    87             OldState os = new OldState();
    88             os.latlon = new LatLon(n.getCoor());
    89             os.en = n.getEastNorth();
    90             os.modified = n.isModified();
    91             oldState.add(os);
    92         }
    93     }
    94 
    95      public MoveCommand(Collection<OsmPrimitive> objects, EastNorth start, EastNorth end) {
    96          this(objects, end.getX()-start.getX(), end.getY()-start.getY());
    97          startEN =  start;
    98      }
    99 
    100      public MoveCommand(OsmPrimitive p, EastNorth start, EastNorth end) {
    101          this(Collections.singleton(p), end.getX()-start.getX(), end.getY()-start.getY());
    102          startEN =  start;
    103      }
     78            oldState.add(new OldNodeState(n));
     79        }
     80    }
     81
     82    public MoveCommand(Collection<OsmPrimitive> objects, EastNorth start, EastNorth end) {
     83        this(objects, end.getX()-start.getX(), end.getY()-start.getY());
     84        startEN =  start;
     85    }
     86
     87    public MoveCommand(OsmPrimitive p, EastNorth start, EastNorth end) {
     88        this(Collections.singleton(p), end.getX()-start.getX(), end.getY()-start.getY());
     89        startEN =  start;
     90    }
    10491
    10592    /**
     
    135122    }
    136123
    137      /**
     124    /**
    138125     * Changes base point of movement
    139126     * @param newDraggedStartPoint - new starting point after movement (where user clicks to start new drag)
     
    141128    public void changeStartPoint(EastNorth newDraggedStartPoint) {
    142129        startEN = new EastNorth(newDraggedStartPoint.getX()-x, newDraggedStartPoint.getY()-y);
    143      }
     130    }
    144131
    145132    /**
     
    161148
    162149    private void updateCoordinates() {
    163         Iterator<OldState> it = oldState.iterator();
    164         for (Node n : nodes) {
    165             OldState os = it.next();
    166             n.setEastNorth(os.en.add(x, y));
     150        Iterator<OldNodeState> it = oldState.iterator();
     151        for (Node n : nodes) {
     152            OldNodeState os = it.next();
     153            n.setEastNorth(os.eastNorth.add(x, y));
    167154        }
    168155    }
     
    183170
    184171    @Override public void undoCommand() {
    185         Iterator<OldState> it = oldState.iterator();
    186         for (Node n : nodes) {
    187             OldState os = it.next();
     172        Iterator<OldNodeState> it = oldState.iterator();
     173        for (Node n : nodes) {
     174            OldNodeState os = it.next();
    188175            n.setCoor(os.latlon);
    189176            n.setModified(os.modified);
  • trunk/src/org/openstreetmap/josm/command/TransformNodesCommand.java

    r4918 r6173  
    1212
    1313import org.openstreetmap.josm.data.coor.EastNorth;
    14 import org.openstreetmap.josm.data.coor.LatLon;
    1514import org.openstreetmap.josm.data.osm.Node;
    1615import org.openstreetmap.josm.data.osm.OsmPrimitive;
     
    3029    protected Collection<Node> nodes = new LinkedList<Node>();
    3130
    32     /**
    33      * Small helper for holding the interesting part of the old data state of the
    34      * nodes.
    35      */
    36     public static class OldState {
    37         LatLon latlon;
    38         EastNorth eastNorth;
    39         boolean modified;
    40     }
    4131
    4232    /**
    4333     * List of all old states of the nodes.
    4434     */
    45     protected Map<Node, OldState> oldStates = new HashMap<Node, OldState>();
     35    protected Map<Node, OldNodeState> oldStates = new HashMap<Node, OldNodeState>();
    4636
    4737    /**
     
    5040    protected void storeOldState() {
    5141        for (Node n : this.nodes) {
    52             OldState os = new OldState();
    53             os.latlon = new LatLon(n.getCoor());
    54             os.eastNorth = n.getEastNorth();
    55             os.modified = n.isModified();
    56             oldStates.put(n, os);
     42            oldStates.put(n, new OldNodeState(n));
    5743        }
    5844    }
     
    10793    public void undoCommand() {
    10894        for (Node n : nodes) {
    109             OldState os = oldStates.get(n);
     95            OldNodeState os = oldStates.get(n);
    11096            n.setCoor(os.latlon);
    11197            n.setModified(os.modified);
Note: See TracChangeset for help on using the changeset viewer.