41a42,42 > * It is only one listener but this one can be a (chained) MultiCastFigureChangeListener 47a49,53 > /** > * The dependend figures which have been added to this container. > */ > private List myDependendFigures; > 55a62,63 > myDependendFigures = CollectionsFactory.current().createList(); > } 55,55c61,61 < protected AbstractFigure() { } --- > protected AbstractFigure() { 113a122,122 > return FigureEnumerator.getEmptyEnumeration(); 114,114d121 < return new SingleFigureEnumerator(this); 205,205c213,213 < public void addFigureChangeListener(FigureChangeListener l) { --- > public synchronized void addFigureChangeListener(FigureChangeListener l) { 212,212c220,220 < public void removeFigureChangeListener(FigureChangeListener l) { --- > public synchronized void removeFigureChangeListener(FigureChangeListener l) { 219,219c227,227 < public FigureChangeListener listener() { --- > public synchronized FigureChangeListener listener() { 260a269,269 > // call invalidate before the change occurs to invalidate the old display area 387,387c396,396 < clone = (Object) reader.readObject(); --- > clone = reader.readObject(); 422a432,477 > > public void visit(FigureVisitor visitor) { > // remember original listener as listeners might be changed by a visitor > // (e.g. by calling addToContainer() or removeFromContainer()) > FigureChangeListener originalListener = listener(); > FigureEnumeration fe = getDependendFigures(); > > visitor.visitFigure(this); > > FigureEnumeration visitFigures = figures(); > while (visitFigures.hasNextFigure()) { > visitFigures.nextFigure().visit(visitor); > } > > HandleEnumeration visitHandles = handles(); > while (visitHandles.hasNextHandle()) { > visitor.visitHandle(visitHandles.nextHandle()); > } > /* > originalListener = listener(); > if (originalListener != null) { > visitor.visitFigureChangeListener(originalListener); > } > */ > > while (fe.hasNextFigure()) { > fe.nextFigure().visit(visitor); > // or visitor.visitDependendFigure(fe.nextFigure()); > } > } > > public synchronized FigureEnumeration getDependendFigures() { > return new FigureEnumerator(myDependendFigures); > } > > public synchronized void addDependendFigure(Figure newDependendFigure) { > myDependendFigures.add(newDependendFigure); > } > > public synchronized void removeDependendFigure(Figure oldDependendFigure) { > myDependendFigures.remove(oldDependendFigure); > } > > public TextHolder getTextHolder() { > return null; > }