From 5172b541045cc400049125769d6c5c096aad530c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Wed, 3 Jun 2009 17:25:35 +0200 Subject: [PATCH] ItEr11S13ProbasModuloRecursos: A zk component cannot be dinamically inserted after a native one, so adding a workaround. --- .../org/zkoss/ganttz/util/MenuBuilder.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/MenuBuilder.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/MenuBuilder.java index 462dfa3c5..5536f927d 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/MenuBuilder.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/MenuBuilder.java @@ -3,9 +3,11 @@ package org.zkoss.ganttz.util; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.List; import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.HtmlNativeComponent; import org.zkoss.zk.ui.Page; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; @@ -101,7 +103,7 @@ public class MenuBuilder { }); result.appendChild(menuItem); } - root.appendChild(result); + insertInRootComponent(result); if (setContext) { for (T element : elements) { element.setContext(result); @@ -109,4 +111,23 @@ public class MenuBuilder { } return result; } + + private void insertInRootComponent(Menupopup result) { + ArrayList children = new ArrayList(root + .getChildren()); + Collections.reverse(children); + // the Menupopup cannot be inserted after a HtmlNativeComponent, so we + // try to avoid it + if (children.isEmpty()) { + root.appendChild(result); + } + for (Component child : children) { + if (!(child instanceof HtmlNativeComponent)) { + root.insertBefore(result, child); + return; + } + } + throw new RuntimeException("all children of " + root + + " are html native"); + } }