Author: knopp
Date: Sat Apr 19 16:47:24 2008
New Revision: 649864

URL: http://svn.apache.org/viewvc?rev=649864&view=rev
Log:
allow to implement custom behavior on getParentNode

Modified:
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java

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=649864&r1=649863&r2=649864&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
 Sat Apr 19 16:47:24 2008
@@ -156,7 +156,7 @@
                 */
                public TreeItem getParentItem()
                {
-                       return 
(TreeItem)nodeToItemMap.get(((TreeNode)getModelObject()).getParent());
+                       return 
(TreeItem)nodeToItemMap.get(getParentNode((TreeNode)getModelObject()));
                }
 
                /**
@@ -778,6 +778,12 @@
                if (isNodeVisible(parent) && isNodeExpanded(parent))
                {
                        TreeItem parentItem = 
(TreeItem)nodeToItemMap.get(parent);
+                       
+                       if (parentItem.getChildren().isEmpty()) 
+                       {
+                               invalidateNode(parent, true);
+                       }
+                       
                        for (int i = 0; i < e.getChildren().length; ++i)
                        {
                                TreeNode node = (TreeNode)e.getChildren()[i];
@@ -805,7 +811,7 @@
 
                if (isNodeVisible(parent) && isNodeExpanded(parent))
                {
-
+                       boolean nonEmpty = !parentItem.getChildren().isEmpty();
                        for (int i = 0; i < e.getChildren().length; ++i)
                        {
                                TreeNode node = (TreeNode)e.getChildren()[i];
@@ -832,6 +838,10 @@
                                        removeItem(item);
                                }
                        }
+                       if (nonEmpty && parentItem.getChildren().isEmpty())
+                       {
+                               invalidateNode(parent, true);
+                       }
                }
        }
 
@@ -1333,7 +1343,7 @@
         */
        private final boolean isNodeVisible(TreeNode node)
        {
-               while (node.getParent() != null)
+               while (getParentNode(node) != null)
                {
                        if (isNodeExpanded(node.getParent()) == false)
                        {
@@ -1342,6 +1352,16 @@
                        node = node.getParent();
                }
                return true;
+       }
+       
+       /**
+        * Returns parent node of given node.
+        * @param node
+        * @return
+        */
+       protected TreeNode getParentNode(TreeNode node)
+       {
+               return node.getParent();
        }
 
        /**


Reply via email to