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