Author: ivaynberg
Date: Wed May 4 08:04:41 2011
New Revision: 1099359
URL: http://svn.apache.org/viewvc?rev=1099359&view=rev
Log:
remove nodes from selection when their parents are removed
Issue: WICKET-3328
Modified:
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java
Modified:
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java
URL:
http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java?rev=1099359&r1=1099358&r2=1099359&view=diff
==============================================================================
---
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java
(original)
+++
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java
Wed May 4 08:04:41 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.IRequestTarget;
@@ -853,7 +854,7 @@ public abstract class AbstractTree exten
// its current children is in the event's list of
children
boolean wasLeaf = true;
int nodeChildCount = getChildCount(parentNode);
- for (int i = 0; wasLeaf && i < nodeChildCount; i++)
+ for (int i = 0; wasLeaf && i < nodeChildCount; i++)
{
wasLeaf =
eventChildren.contains(getChildAt(parentNode, i));
}
@@ -918,6 +919,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))
@@ -936,13 +956,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);
}
}
}