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);
}
}
}