diff --git a/JHotDraw/src/CH/ifa/draw/standard/DeleteCommand.java b/JHotDraw/src/CH/ifa/draw/standard/DeleteCommand.java index 9e987ca609fdf86e74f7eb3c63448e9e35b4b3b1..9e2030ba73b79e7452c880341c653ac21d229d4a 100644 --- a/JHotDraw/src/CH/ifa/draw/standard/DeleteCommand.java +++ b/JHotDraw/src/CH/ifa/draw/standard/DeleteCommand.java @@ -11,7 +11,12 @@ package CH.ifa.draw.standard; -import CH.ifa.draw.framework.*; +import java.util.List; + +import CH.ifa.draw.framework.DrawingEditor; +import CH.ifa.draw.framework.Figure; +import CH.ifa.draw.framework.FigureEnumeration; +import CH.ifa.draw.util.CollectionsFactory; import CH.ifa.draw.util.Undoable; import CH.ifa.draw.util.UndoableAdapter; @@ -34,7 +39,27 @@ public class DeleteCommand extends FigureTransferCommand { public void execute() { super.execute(); setUndoActivity(createUndoActivity()); - getUndoActivity().setAffectedFigures(view().selection()); + /* ricardo_padilha: bugfix for correct delete/undelete behavior + * When enumerating the affected figures we must not forget the dependent + * figures, since they are deleted as well! + */ + FigureEnumeration fe = view().selection(); + List affected = CollectionsFactory.current().createList(); + Figure f; + FigureEnumeration dfe; + while (fe.hasNextFigure()) { + f = fe.nextFigure(); + affected.add(f); + dfe = f.getDependendFigures(); + if (dfe != null) { + while (dfe.hasNextFigure()) { + affected.add(dfe.nextFigure()); + } + } + } + fe = new FigureEnumerator(affected); + getUndoActivity().setAffectedFigures(fe); + /* ricardo_padilha: end of bugfix */ deleteFigures(getUndoActivity().getAffectedFigures()); view().checkDamage(); } diff --git a/jhotdraw6/src/org/jhotdraw/standard/DeleteCommand.java b/jhotdraw6/src/org/jhotdraw/standard/DeleteCommand.java index 9e987ca609fdf86e74f7eb3c63448e9e35b4b3b1..9e2030ba73b79e7452c880341c653ac21d229d4a 100644 --- a/jhotdraw6/src/org/jhotdraw/standard/DeleteCommand.java +++ b/jhotdraw6/src/org/jhotdraw/standard/DeleteCommand.java @@ -11,7 +11,12 @@ package CH.ifa.draw.standard; -import CH.ifa.draw.framework.*; +import java.util.List; + +import CH.ifa.draw.framework.DrawingEditor; +import CH.ifa.draw.framework.Figure; +import CH.ifa.draw.framework.FigureEnumeration; +import CH.ifa.draw.util.CollectionsFactory; import CH.ifa.draw.util.Undoable; import CH.ifa.draw.util.UndoableAdapter; @@ -34,7 +39,27 @@ public class DeleteCommand extends FigureTransferCommand { public void execute() { super.execute(); setUndoActivity(createUndoActivity()); - getUndoActivity().setAffectedFigures(view().selection()); + /* ricardo_padilha: bugfix for correct delete/undelete behavior + * When enumerating the affected figures we must not forget the dependent + * figures, since they are deleted as well! + */ + FigureEnumeration fe = view().selection(); + List affected = CollectionsFactory.current().createList(); + Figure f; + FigureEnumeration dfe; + while (fe.hasNextFigure()) { + f = fe.nextFigure(); + affected.add(f); + dfe = f.getDependendFigures(); + if (dfe != null) { + while (dfe.hasNextFigure()) { + affected.add(dfe.nextFigure()); + } + } + } + fe = new FigureEnumerator(affected); + getUndoActivity().setAffectedFigures(fe); + /* ricardo_padilha: end of bugfix */ deleteFigures(getUndoActivity().getAffectedFigures()); view().checkDamage(); }