You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2010/09/29 09:37:26 UTC

svn commit: r1002500 - in /wicket/trunk/wicket: .settings/org.eclipse.jdt.core.prefs src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java

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