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


Reply via email to