You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by kn...@apache.org on 2007/06/12 23:43:35 UTC

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

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