---
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; |