_intersectedFigures.setGeometry(_rubberBand);
HashSet freshFigures = new HashSet();
for (Iterator i = _intersectedFigures.figures(); i.hasNext();) {
Figure f = (Figure) i.next();
if (f instanceof FigureDecorator) {
f = ((FigureDecorator) f).getDecoratedFigure();
}
if (f.hit(_rubberBand)) {
freshFigures.add(f);
} else {
_holdovers.add(f);
}
}
for (Iterator i = ((HashSet) _holdovers.clone()).iterator(); i
.hasNext();) {
Figure f = (Figure) i.next();
if (f.hit(_rubberBand)) {
freshFigures.add(f);
_holdovers.remove(f);
}
}
// stale = current-fresh;
HashSet staleFigures = (HashSet) _currentFigures.clone();
staleFigures.removeAll(freshFigures);
// current = fresh-current
HashSet temp = (HashSet) freshFigures.clone();
freshFigures.removeAll(_currentFigures);
_currentFigures = temp;
// If in selection mode, add and remove figures
if (_isSelecting) {
// Add figures to the selection
Iterator i = freshFigures.iterator();
while (i.hasNext()) {
Figure f = (Figure) i.next();
Interactor r = f.getInteractor();
if ((r != null) && r instanceof SelectionInteractor) {
SelectionInteractor interactor = (SelectionInteractor) r;
if (_selectionModels.contains(interactor
.getSelectionModel())) {
expandSelection((SelectionInteractor) r, f);
}
}
}
// Remove figures from the selection
i = staleFigures.iterator();
while (i.hasNext()) {
Figure f = (Figure) i.next();
Interactor r = f.getInteractor();
if ((r != null) && r instanceof SelectionInteractor) {
SelectionInteractor interactor = (SelectionInteractor) r;
if (_selectionModels.contains(interactor
.getSelectionModel())) {
contractSelection((SelectionInteractor) r, f);
}
}
}
} else {
// Toggle figures into and out of the selection
Iterator i = new CompoundIterator(freshFigures.iterator(),
staleFigures.iterator());
while (i.hasNext()) {
Figure f = (Figure) i.next();
Interactor r = f.getInteractor();
if ((r != null) && r instanceof SelectionInteractor) {
SelectionInteractor interactor = (SelectionInteractor) r;
if (_selectionModels.contains(interactor