---
core-dave/src/org/openstreetmap/josm/data/osm/DataSet.java | 20 +++++++------
1 file changed, 12 insertions(+), 8 deletions(-)
diff -puN src/org/openstreetmap/josm/data/osm/DataSet.java~optimize-selection-code src/org/openstreetmap/josm/data/osm/DataSet.java
|
a
|
b
|
public class DataSet implements Cloneabl
|
| 145 | 145 | } else if (primitive instanceof Relation) { |
| 146 | 146 | relations.remove(primitive); |
| 147 | 147 | } |
| 148 | | selectedPrimitves.remove(primitive); |
| | 148 | selectedPrimitives.remove(primitive); |
| 149 | 149 | } |
| 150 | 150 | |
| 151 | 151 | public Collection<OsmPrimitive> getSelectedNodesAndWays() { |
| 152 | | Collection<OsmPrimitive> sel = getSelected(nodes); |
| 153 | | sel.addAll(getSelected(ways)); |
| | 152 | Collection<OsmPrimitive> sel = new LinkedList<OsmPrimitive>(); |
| | 153 | for (OsmPrimitive osm : selectedPrimitives) { |
| | 154 | if (osm instanceof Way || |
| | 155 | osm instanceof Node) |
| | 156 | sel.add(osm); |
| | 157 | } |
| 154 | 158 | return sel; |
| 155 | 159 | } |
| 156 | 160 | |
| … |
… |
public class DataSet implements Cloneabl
|
| 252 | 256 | } |
| 253 | 257 | |
| 254 | 258 | public void setSelected(Collection<? extends OsmPrimitive> selection) { |
| 255 | | clearSelection(nodes); |
| 256 | | clearSelection(ways); |
| 257 | | clearSelection(relations); |
| 258 | | addSelected(selection); |
| | 259 | selectedPrimitives = new LinkedHashSet<OsmPrimitive>(selection); |
| 259 | 260 | fireSelectionChanged(selection); |
| 260 | 261 | } |
| 261 | 262 | |
| … |
… |
public class DataSet implements Cloneabl
|
| 266 | 267 | } |
| 267 | 268 | List<OsmPrimitive> list = Arrays.asList(osm); |
| 268 | 269 | setSelected(list); |
| 269 | | fireSelectionChanged(Arrays.asList(osm)); |
| | 270 | fireSelectionChanged(list); |
| 270 | 271 | } |
| 271 | 272 | |
| 272 | 273 | /** |
| … |
… |
public class DataSet implements Cloneabl
|
| 312 | 313 | private Collection<OsmPrimitive> getSelected(Collection<? extends OsmPrimitive> list) { |
| 313 | 314 | if (list == null) |
| 314 | 315 | return new LinkedList<OsmPrimitive>(); |
| | 316 | // getSelected() is called with large lists, so |
| | 317 | // creating the return list from the selection |
| | 318 | // should be faster most of the time. |
| 315 | 319 | Collection<OsmPrimitive> sel = new LinkedHashSet<OsmPrimitive>(selectedPrimitives); |
| 316 | 320 | sel.retainAll(list); |
| 317 | 321 | return sel; |