Author: ivaynberg Date: Wed Sep 29 07:37:26 2010 New Revision: 1002500 URL: http://svn.apache.org/viewvc?rev=1002500&view=rev Log:
Issue: WICKET-3072 Modified: wicket/trunk/wicket/.settings/org.eclipse.jdt.core.prefs wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java Modified: wicket/trunk/wicket/.settings/org.eclipse.jdt.core.prefs URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/.settings/org.eclipse.jdt.core.prefs?rev=1002500&r1=1002499&r2=1002500&view=diff ============================================================================== --- wicket/trunk/wicket/.settings/org.eclipse.jdt.core.prefs (original) +++ wicket/trunk/wicket/.settings/org.eclipse.jdt.core.prefs Wed Sep 29 07:37:26 2010 @@ -1,4 +1,4 @@ -#Wed Sep 10 11:28:56 PDT 2008 +#Wed Sep 29 00:31:48 PDT 2010 eclipse.preferences.version=1 instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true org.eclipse.jdt.core.builder.cleanOutputFolder=clean @@ -9,9 +9,9 @@ org.eclipse.jdt.core.circularClasspath=e org.eclipse.jdt.core.classpath.exclusionPatterns=enabled org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.compliance=1.6 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -88,7 +88,7 @@ org.eclipse.jdt.core.compiler.problem.un org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.5 +org.eclipse.jdt.core.compiler.source=1.6 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java?rev=1002500&r1=1002499&r2=1002500&view=diff ============================================================================== --- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java (original) +++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java Wed Sep 29 07:37:26 2010 @@ -58,7 +58,7 @@ import org.apache.wicket.util.visit.IVis * This class encapsulates the logic for displaying and (partial) updating the tree. Actual * presentation is out of scope of this class. User should derive they own tree (if needed) from * {...@link BaseTree} (recommended). - * + * * @author Matej Knopp */ public abstract class AbstractTree extends Panel @@ -81,7 +81,7 @@ public abstract class AbstractTree exten { /** * Visits the tree item. - * + * * @param item * the item to visit */ @@ -116,7 +116,7 @@ public abstract class AbstractTree exten /** * Construct. - * + * * @param id * The component id * @param node @@ -177,7 +177,7 @@ public abstract class AbstractTree exten /** * Sets the children. - * + * * @param children * The children */ @@ -188,7 +188,7 @@ public abstract class AbstractTree exten /** * Whether to render children. - * + * * @return whether to render children */ protected final boolean isRenderChildren() @@ -241,7 +241,7 @@ public abstract class AbstractTree exten } /** - * + * * @return model object */ public Object getModelObject() @@ -366,7 +366,7 @@ public abstract class AbstractTree exten /** * Construct. - * + * * @param id * The component id */ @@ -467,7 +467,7 @@ public abstract class AbstractTree exten /** * Tree constructor - * + * * @param id * The component id */ @@ -479,7 +479,7 @@ public abstract class AbstractTree exten /** * Tree constructor - * + * * @param id * The component id * @param model @@ -504,7 +504,7 @@ public abstract class AbstractTree exten } /** - * + * * @return model */ @SuppressWarnings("unchecked") @@ -522,7 +522,7 @@ public abstract class AbstractTree exten } /** - * + * * @param model * @return this */ @@ -533,7 +533,7 @@ public abstract class AbstractTree exten } /** - * + * * @param model * @return this */ @@ -545,7 +545,7 @@ public abstract class AbstractTree exten /** * Returns the TreeState of this tree. - * + * * @return Tree state instance */ public ITreeState getTreeState() @@ -704,7 +704,7 @@ public abstract class AbstractTree exten /** * Determines whether the TreeNode needs to be rebuilt if it is selected or deselected - * + * * @return true if the node should be rebuilt after (de)selection, false otherwise */ protected boolean isForceRebuildOnSelectionChange() @@ -714,7 +714,7 @@ public abstract class AbstractTree exten /** * Sets whether the root of the tree should be visible. - * + * * @param rootLess * whether the root should be visible */ @@ -772,10 +772,10 @@ public abstract class AbstractTree exten /** * Marks the last but one visible child node of the given item as dirty, if give child is the * last item of parent. - * + * * We need this to refresh the previous visible item in case the inserted / deleted item was * last. The reason is that the line shape of previous item changes from L to |- . - * + * * @param parent * @param child */ @@ -878,54 +878,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); - } - }); + markTheLastButOneChildDirty(parentItem, itemToDelete); - parentItem.getChildren().remove(item); - - removeItem(item); - - getTreeState().selectNode(item.getModelObject(), false); + // 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); - } } }