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