From a74d81f5f478749812fbd50359369b3f349140cd Mon Sep 17 00:00:00 2001 From: ricardo_padilha <ricardo_padilha@fc158eef-6c16-0410-b9c5-873085b46621> Date: Mon, 14 Jul 2003 17:42:12 +0000 Subject: [PATCH] bugfix for correct delete/undelete behavior When enumerating the affected figures, we must not forget the dependent figures, since they are deleted as well! --- .../CH/ifa/draw/standard/DeleteCommand.java | 29 +++++++++++++++++-- .../org/jhotdraw/standard/DeleteCommand.java | 29 +++++++++++++++++-- 2 files changed, 54 insertions(+), 4 deletions(-) diff --git a/JHotDraw/src/CH/ifa/draw/standard/DeleteCommand.java b/JHotDraw/src/CH/ifa/draw/standard/DeleteCommand.java index 9e987ca60..9e2030ba7 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 9e987ca60..9e2030ba7 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(); } -- GitLab