You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2011/05/04 10:07:07 UTC

svn commit: r1099361 - /wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java

Author: ivaynberg
Date: Wed May  4 08:07:06 2011
New Revision: 1099361

URL: http://svn.apache.org/viewvc?rev=1099361&view=rev
Log:
remove nodes from selection when their parent is removed
Issue: WICKET-3328

Modified:
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java?rev=1099361&r1=1099360&r2=1099361&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java Wed May  4 08:07:06 2011
@@ -29,6 +29,7 @@ import java.util.Set;
 import javax.swing.event.TreeModelEvent;
 import javax.swing.event.TreeModelListener;
 import javax.swing.tree.TreeModel;
+import javax.swing.tree.TreeNode;
 
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
@@ -905,6 +906,25 @@ public abstract class AbstractTree exten
 		Object parentNode = removalEvent.getTreePath().getLastPathComponent();
 		TreeItem parentItem = nodeToItemMap.get(parentNode);
 
+		// unselect all removed items
+		List<Object> selection = new ArrayList<Object>(getTreeState().getSelectedNodes());
+		List<Object> removed = Arrays.asList(removalEvent.getChildren());
+		for (Object selectedNode : selection)
+		{
+			Object cursor = selectedNode;
+			while (cursor != null)
+			{
+				if (removed.contains(cursor))
+				{
+					getTreeState().selectNode(selectedNode, false);
+				}
+				if (cursor instanceof TreeNode)
+				{
+					cursor = ((TreeNode)cursor).getParent();
+				}
+			}
+		}
+
 		if (parentItem != null && isNodeVisible(parentNode))
 		{
 			if (isNodeExpanded(parentNode))
@@ -923,13 +943,11 @@ public abstract class AbstractTree exten
 							public void visitItem(TreeItem item)
 							{
 								removeItem(item);
-								getTreeState().selectNode(item.getModelObject(), false);
 							}
 						});
 
 						parentItem.getChildren().remove(itemToDelete);
 						removeItem(itemToDelete);
-						getTreeState().selectNode(itemToDelete.getModelObject(), false);
 					}
 				}
 			}