Author: ivaynberg
Date: Wed Sep 29 07:26:40 2010
New Revision: 1002498

URL: http://svn.apache.org/viewvc?rev=1002498&view=rev
Log:

Issue: WICKET-3072

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=1002498&r1=1002497&r2=1002498&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 Sep 29 07:26:40 2010
@@ -896,54 +896,51 @@ public abstract class AbstractTree exten
        /**
         * @see 
javax.swing.event.TreeModelListener#treeNodesRemoved(javax.swing.event.TreeModelEvent)
         */
-       public final void treeNodesRemoved(TreeModelEvent e)
+       public final void treeNodesRemoved(TreeModelEvent removalEvent)
        {
                if (dirtyAll)
                {
                        return;
                }
 
-               // get the parent node of inserted nodes
-               Object parent = e.getTreePath().getLastPathComponent();
-               TreeItem parentItem = nodeToItemMap.get(parent);
+               // get the parent node of deleted nodes
+               TreeNode parentNode = 
(TreeNode)removalEvent.getTreePath().getLastPathComponent();
+               TreeItem parentItem = nodeToItemMap.get(parentNode);
 
-               if (parentItem != null && isNodeVisible(parent) && 
isNodeExpanded(parent))
+               if (parentItem != null && isNodeVisible(parentNode)) 
                {
-                       boolean nonEmpty = parentItem.getChildren() != null &&
-                               !parentItem.getChildren().isEmpty();
-                       for (int i = 0; i < e.getChildren().length; ++i)
+                       if (parentNode.getChildCount() == 0)
                        {
-                               Object node = e.getChildren()[i];
+                               // rebuild parent's icon to show it no longer 
has children
+                               invalidateNode(parentNode, true);
+                       }
 
-                               TreeItem item = nodeToItemMap.get(node);
-                               if (item != null)
+                       if (isNodeExpanded(parentNode))
+                       {
+                               // deleted nodes were visible; we need to 
delete their TreeItems
+                               for (Object deletedNode : 
removalEvent.getChildren()) 
                                {
-                                       markTheLastButOneChildDirty(parentItem, 
item);
-
-                                       // go though item children and remove 
every one of them
-                                       visitItemChildren(item, new 
IItemCallback()
+                                       TreeItem itemToDelete = 
nodeToItemMap.get(deletedNode);
+                                       if (itemToDelete != null)
                                        {
-                                               public void visitItem(TreeItem 
item)
-                                               {
-                                                       removeItem(item);
-
-                                                       // deselect the node
-                                                       
getTreeState().selectNode(item.getModelObject(), false);
-                                               }
-                                       });
-
-                                       parentItem.getChildren().remove(item);
-
-                                       removeItem(item);
-
-                                       
getTreeState().selectNode(item.getModelObject(), false);
+                                               
markTheLastButOneChildDirty(parentItem, itemToDelete);
 
+                                               // remove all the deleted 
item's children
+                                               visitItemChildren(itemToDelete, 
new IItemCallback() 
+                                               {
+                                                       public void 
visitItem(TreeItem item)
+                                                       {
+                                                               
removeItem(item);
+                                                               
getTreeState().selectNode(item.getModelObject(), false);
+                                                       }
+                                               });
+
+                                               
parentItem.getChildren().remove(itemToDelete);
+                                               removeItem(itemToDelete);
+                                               
getTreeState().selectNode(itemToDelete.getModelObject(), false);
+                                       }
                                }
                        }
-                       if (nonEmpty && parentItem.getChildren().isEmpty())
-                       {
-                               invalidateNode(parent, true);
-                       }
                }
        }
 


Reply via email to