Author: knopp
Date: Tue Jun 12 14:43:27 2007
New Revision: 546639

URL: http://svn.apache.org/viewvc?view=rev&rev=546639
Log:
Fix for header contribution of TreeItems

Modified:
    
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java

Modified: 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java
URL: 
http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java?view=diff&rev=546639&r1=546638&r2=546639
==============================================================================
--- 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java
 (original)
+++ 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java
 Tue Jun 12 14:43:27 2007
@@ -36,6 +36,7 @@
 import org.apache.wicket.behavior.HeaderContributor;
 import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.internal.HtmlHeaderContainer;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.markup.html.resources.JavascriptResourceReference;
 import org.apache.wicket.model.IDetachable;
@@ -176,7 +177,7 @@
                {
                        return getFlag(FLAG_RENDER_CHILDREN);
                }
-
+               
                /**
                 * @see 
org.apache.wicket.MarkupContainer#onRender(org.apache.wicket.markup.MarkupStream)
                 */
@@ -207,30 +208,70 @@
                                        {
                                                public void visitItem(TreeItem 
item)
                                                {
-                                                       try 
-                                                       {
-                                                               
item.beforeRender();
-                                                               // rewind 
markupStream
-                                                               
markupStream.setCurrentIndex(index);
-                                                               // render child
-                                                               
item.onRender(markupStream);
-                                                       } 
-                                                       finally 
-                                                       {
-                                                               
item.afterRender();
-                                                       }
-                                               }
+                                                       // rewind markupStream
+                                                       
markupStream.setCurrentIndex(index);
+                                                       // render child
+                                                       
item.onRender(markupStream);
+                                               }                               
                        
                                        });
-                                       // children are rendered, clear the flag
-                                       setRenderChildren(false);
+                                       // 
                                }
                        }
                }
+               
+               public void renderHead(final HtmlHeaderContainer container)
+               {
+                       super.renderHead(container);
+                       
+                       if (isRenderChildren())
+                       {
+                               // visit every child
+                               visitItemChildren(this, new IItemCallback()
+                               {
+                                       public void visitItem(TreeItem item)
+                                       {
+                                               // write header contributions 
from the children of item
+                                               item.visitChildren(new 
Component.IVisitor()
+                                               {
+                                                       public Object 
component(Component component)
+                                                       {
+                                                               if 
(component.isVisible())
+                                                               {
+                                                                       
component.renderHead(container);
+                                                                       return 
CONTINUE_TRAVERSAL;
+                                                               }
+                                                               else
+                                                               {
+                                                                       return 
CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER;
+                                                               }
+                                                       }
+                                               });
+                                       }
+                               });
+                       }
+               }
 
                protected final void setRenderChildren(boolean value)
                {
                        setFlag(FLAG_RENDER_CHILDREN, value);
                }
+               
+               protected void onAttach()
+               {
+                       super.onAttach();
+                       
+                       if (isRenderChildren())
+                       {
+                               // visit every child
+                               visitItemChildren(this, new IItemCallback()
+                               {
+                                       public void visitItem(TreeItem item)
+                                       {
+                                               item.attach();
+                                       }
+                               });
+                       }
+               }
 
                protected void onDetach()
                {
@@ -240,12 +281,55 @@
                        {
                                ((IDetachable)object).detach();
                        }
+                       
+                       if (isRenderChildren())
+                       {
+                               // visit every child
+                               visitItemChildren(this, new IItemCallback()
+                               {
+                                       public void visitItem(TreeItem item)
+                                       {
+                                               item.detach();
+                                       }
+                               });
+                       }
+                       
+                       //children are rendered, clear the flag
+                       setRenderChildren(false);
                }
                
                protected void onBeforeRender()
                {
                        AbstractTree.this.onBeforeRender();
                        super.onBeforeRender();
+                       
+                       if (isRenderChildren())
+                       {
+                               // visit every child
+                               visitItemChildren(this, new IItemCallback()
+                               {
+                                       public void visitItem(TreeItem item)
+                                       {
+                                               item.beforeRender();
+                                       }
+                               });
+                       }
+               }
+               
+               protected void onAfterRender()
+               {
+                       super.onAfterRender();
+                       if (isRenderChildren())
+                       {
+                               // visit every child
+                               visitItemChildren(this, new IItemCallback()
+                               {
+                                       public void visitItem(TreeItem item)
+                                       {
+                                               item.afterRender();
+                                       }
+                               });
+                       }
                }
        }
 


Reply via email to