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


Reply via email to