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