Ticket #3781: fix-multipolygon-selection.patch

File fix-multipolygon-selection.patch, 4.1 KB (added by hansendc, 17 years ago)
  • (a) core/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java~fix-multipolygon-selection vs. (b) core-dave/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java

    
    ---
    
     core-dave/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java |   29 ++++------
     1 file changed, 12 insertions(+), 17 deletions(-)
    
    diff -puN src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java~fix-multipolygon-selection src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
    a b public class MapPaintVisitor extends Sim  
    390390        displaySegments();
    391391    }
    392392
    393     public Collection<Way> joinWays(Collection<Way> join, OsmPrimitive errs)
     393    public Way joinWays(Collection<Way> join, OsmPrimitive errs)
    394394    {
    395         Collection<Way> res = new LinkedList<Way>();
     395        Way res = null;
    396396        Object[] joinArray = join.toArray();
    397397        int left = join.size();
    398398        while(left != 0)
    public class MapPaintVisitor extends Sim  
    479479            {
    480480                w = new Way(w);
    481481                w.setNodes(n);
    482                 if (selected) {
    483                     data.addSelected(Collections.singleton(w),false /* don't notify listeners */);
    484                 } else {
    485                     data.clearSelection(w);
    486                 }
     482                // Do not mess with the DataSet's contents here.
    487483            }
    488484            if(!w.isClosed())
    489485            {
    public class MapPaintVisitor extends Sim  
    493489                            w.getDisplayName(DefaultNameFormatter.getInstance())), true);
    494490                }
    495491            }
    496             res.add(w);
     492            res = w;
    497493        } /* while(left != 0) */
    498494
    499495        return res;
    public class MapPaintVisitor extends Sim  
    911907        {
    912908            Boolean zoomok = isZoomOk(wayStyle);
    913909            Boolean visible = false;
     910            Boolean outerSelected = false;
    914911            Collection<Way> join = new LinkedList<Way>();
    915912
    916913            drawn = true;
    917914            for (Way w : outer)
    918915            {
     916                if (data.isSelected(w))
     917                    outerSelected = true;
    919918                if(w.isClosed()) {
    920919                    outerclosed.add(w);
    921920                } else {
    public class MapPaintVisitor extends Sim  
    924923            }
    925924            if(join.size() != 0)
    926925            {
    927                 for(Way w : joinWays(join, incomplete ? null : r)) {
    928                     outerclosed.add(w);
    929                 }
     926                outerclosed.add(joinWays(join, incomplete ? null : r));
    930927            }
    931928
    932929            join.clear();
    public class MapPaintVisitor extends Sim  
    940937            }
    941938            if(join.size() != 0)
    942939            {
    943                 for(Way w : joinWays(join, incomplete ? null : r)) {
    944                     innerclosed.add(w);
    945                 }
     940                innerclosed.add(joinWays(join, incomplete ? null : r));
    946941            }
    947942
    948943            if(outerclosed.size() == 0)
    public class MapPaintVisitor extends Sim  
    10611056                    Polygon p = pd.get();
    10621057                    if(isPolygonVisible(p))
    10631058                    {
    1064                         drawAreaPolygon(p, (data.isSelected(pd.way) || data.isSelected(r)) ? selectedColor
    1065                                 : areaStyle.color);
     1059                        boolean selected = (data.isSelected(pd.way) || data.isSelected(r) || outerSelected);
     1060                        drawAreaPolygon(p, selected ? selectedColor : areaStyle.color);
    10661061                        visible = true;
    10671062                    }
    10681063                }
    public class MapPaintVisitor extends Sim  
    11301125                        r.putError(tr("Style for outer way ''{0}'' mismatches.",
    11311126                                wOuter.getDisplayName(DefaultNameFormatter.getInstance())), true);
    11321127                    }
    1133                     if(data.isSelected(r))
     1128                    if(data.isSelected(r) || outerSelected)
    11341129                    {
    11351130                        drawSelectedMember(wOuter, outerStyle, false, false);
    11361131                    }