Changeset 1503 in josm


Ignore:
Timestamp:
Mar 18, 2009 5:56:07 PM (4 years ago)
Author:
stoecker
Message:

fixed #2313. draw mode start wrong when last node was double clicked

Location:
trunk/src/org/openstreetmap/josm
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java

    r1459 r1503  
    325325                // have to switch modes) 
    326326                Main.ds.setSelected(n); 
     327                selection = Main.ds.getSelected(); 
    327328                return; 
    328329            } 
     
    396397        boolean wayIsFinishedTemp = wayIsFinished; 
    397398        wayIsFinished = false; 
    398         if (selection.size() > 0 && !wayIsFinishedTemp) { 
     399        if (selection.size() > 0) { 
    399400            Node selectedNode = null; 
    400401            Way selectedWay = null; 
     
    425426                return; 
    426427            } 
    427  
    428             if(isSelfContainedWay(selectedWay, n0, n)) 
    429                 return; 
    430  
    431             // User clicked last node again, finish way 
    432             if(n0 == n) { 
    433                 finishDrawing(); 
    434                 return; 
    435             } 
    436  
    437             // Ok we know now that we'll insert a line segment, but will it connect to an 
    438             // existing way or make a new way of its own? The "alt" modifier means that the 
    439             // user wants a new way. 
    440             Way way = alt ? null : (selectedWay != null) ? selectedWay : getWayForNode(n0); 
    441  
    442             // Don't allow creation of self-overlapping ways 
    443             if(way != null) { 
    444                 int nodeCount=0; 
    445                 for (Node p : way.nodes) 
    446                     if(p.equals(n0)) nodeCount++; 
    447                 if(nodeCount > 1) way = null; 
    448             } 
    449  
    450             if (way == null) { 
    451                 way = new Way(); 
    452                 way.addNode(n0); 
    453                 cmds.add(new AddCommand(way)); 
    454             } else { 
    455                 int i; 
    456                 if ((i = replacedWays.indexOf(way)) != -1) { 
    457                     way = reuseWays.get(i); 
     428            if(!wayIsFinishedTemp) 
     429            { 
     430                if(isSelfContainedWay(selectedWay, n0, n)) 
     431                    return; 
     432 
     433                // User clicked last node again, finish way 
     434                if(n0 == n) { 
     435                    finishDrawing(); 
     436                    return; 
     437                } 
     438 
     439                // Ok we know now that we'll insert a line segment, but will it connect to an 
     440                // existing way or make a new way of its own? The "alt" modifier means that the 
     441                // user wants a new way. 
     442                Way way = alt ? null : (selectedWay != null) ? selectedWay : getWayForNode(n0); 
     443 
     444                // Don't allow creation of self-overlapping ways 
     445                if(way != null) { 
     446                    int nodeCount=0; 
     447                    for (Node p : way.nodes) 
     448                        if(p.equals(n0)) nodeCount++; 
     449                    if(nodeCount > 1) way = null; 
     450                } 
     451 
     452                if (way == null) { 
     453                    way = new Way(); 
     454                    way.addNode(n0); 
     455                    cmds.add(new AddCommand(way)); 
    458456                } else { 
    459                     Way wnew = new Way(way); 
    460                     cmds.add(new ChangeCommand(way, wnew)); 
    461                     way = wnew; 
     457                    int i; 
     458                    if ((i = replacedWays.indexOf(way)) != -1) { 
     459                        way = reuseWays.get(i); 
     460                    } else { 
     461                        Way wnew = new Way(way); 
     462                        cmds.add(new ChangeCommand(way, wnew)); 
     463                        way = wnew; 
     464                    } 
    462465                } 
    463             } 
    464  
    465             // Connected to a node that's already in the way 
    466             if(way.nodes.contains(n)) { 
    467                 wayIsFinished = true; 
    468                 selection.clear(); 
    469             } 
    470  
    471             // Add new node to way 
    472             if (way.nodes.get(way.nodes.size() - 1) == n0) 
    473                 way.addNode(n); 
    474             else 
    475                 way.addNode(0, n); 
    476  
    477             extendedWay = true; 
    478             Main.ds.setSelected(way); 
     466 
     467                // Connected to a node that's already in the way 
     468                if(way.nodes.contains(n)) { 
     469                    wayIsFinished = true; 
     470                    selection.clear(); 
     471                } 
     472 
     473                // Add new node to way 
     474                if (way.nodes.get(way.nodes.size() - 1) == n0) 
     475                    way.addNode(n); 
     476                else 
     477                    way.addNode(0, n); 
     478 
     479                extendedWay = true; 
     480                Main.ds.setSelected(way); 
     481            } 
    479482        } 
    480483 
  • trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java

    r1497 r1503  
    165165            } 
    166166            // when multiple nodes on one point, prefer new or selected nodes 
    167             else if(dist == minDistanceSq && ((n.id == 0 && n.selected) 
     167            else if(dist == minDistanceSq && minPrimitive != null 
     168            && ((n.id == 0 && n.selected) 
    168169            || (!minPrimitive.selected && (n.selected || n.id == 0)))) 
    169170                minPrimitive = n; 
Note: See TracChangeset for help on using the changeset viewer.