diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/util/IMenuItemsRegister.java b/ganttzk/src/main/java/org/zkoss/ganttz/util/IMenuItemsRegister.java new file mode 100644 index 000000000..b3e638f43 --- /dev/null +++ b/ganttzk/src/main/java/org/zkoss/ganttz/util/IMenuItemsRegister.java @@ -0,0 +1,9 @@ +package org.zkoss.ganttz.util; + +import org.zkoss.zk.ui.event.EventListener; + +public interface IMenuItemsRegister { + + public void addMenuItem(String name, EventListener eventListener); + +} diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/util/MenuItemsRegisterLocator.java b/ganttzk/src/main/java/org/zkoss/ganttz/util/MenuItemsRegisterLocator.java new file mode 100644 index 000000000..09d7490cd --- /dev/null +++ b/ganttzk/src/main/java/org/zkoss/ganttz/util/MenuItemsRegisterLocator.java @@ -0,0 +1,32 @@ +package org.zkoss.ganttz.util; + +import org.zkoss.zk.ui.Desktop; +import org.zkoss.zk.ui.Executions; + +public class MenuItemsRegisterLocator { + + private static final String MENU_ATTRIBUTE = MenuItemsRegisterLocator.class + .getSimpleName() + + "_menu"; + + private MenuItemsRegisterLocator() { + } + + public static void store(IMenuItemsRegister register) { + getDesktop().setAttribute(MENU_ATTRIBUTE, register); + } + + private static Desktop getDesktop() { + return Executions.getCurrent().getDesktop(); + } + + public static IMenuItemsRegister retrieve() + throws IllegalStateException { + Object result = getDesktop().getAttribute(MENU_ATTRIBUTE); + if (result == null) + throw new IllegalStateException("no " + + IMenuItemsRegister.class.getSimpleName() + " registered"); + return (IMenuItemsRegister) result; + } + +} diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/CustomMenuController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/CustomMenuController.java index cf298615d..0b5facc48 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/CustomMenuController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/CustomMenuController.java @@ -5,14 +5,20 @@ import static org.navalplanner.web.I18nHelper._; import java.util.ArrayList; import java.util.List; +import org.zkoss.ganttz.util.IMenuItemsRegister; +import org.zkoss.ganttz.util.MenuItemsRegisterLocator; +import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.Executions; +import org.zkoss.zk.ui.event.Events; +import org.zkoss.zul.Button; import org.zkoss.zul.Div; +import org.zkoss.zul.Hbox; /** * Controller for customMenu
* @author Lorenzo Tilve Álvaro */ -public class CustomMenuController extends Div { +public class CustomMenuController extends Div implements IMenuItemsRegister { private List firstLevel; @@ -64,6 +70,7 @@ public class CustomMenuController extends Div { public CustomMenuController() { initializeMenu(); + MenuItemsRegisterLocator.store(this); } public void initializeMenu() { @@ -72,12 +79,6 @@ public class CustomMenuController extends Div { ci = new CustomMenuItem(_("Planification"), "/navalplanner-webapp/planner/main.zul"); - ci.appendChildren(new CustomMenuItem(_("Planification"), - "/navalplanner-webapp/planner/main.zul")); - ci.appendChildren(new CustomMenuItem(_("Company overview"), - "/navalplanner-webapp/planner/main.zul")); - ci.appendChildren(new CustomMenuItem(_("Planifications list"), - "/navalplanner-webapp/planner/main.zul")); l.add(ci); ci = new CustomMenuItem(_("Resources"), @@ -121,6 +122,10 @@ public class CustomMenuController extends Div { this.firstLevel = l; } + private Hbox getRegisteredItemsInsertionPoint() { + return (Hbox) getFellow("registeredItemsInsertionPoint"); + } + public List getCustomMenuItems() { return this.firstLevel; } @@ -136,4 +141,26 @@ public class CustomMenuController extends Div { return this.firstLevel.get(0).getChildren(); } + @Override + public void addMenuItem(String name, + org.zkoss.zk.ui.event.EventListener eventListener) { + Hbox insertionPoint = getRegisteredItemsInsertionPoint(); + Button button = new Button(); + button.setLabel(_(name)); + button.addEventListener(Events.ON_CLICK, eventListener); + insertionPoint.appendChild(button); + insertionPoint.appendChild(separator()); + } + + private Component separator() { + Div div = new Div(); + div.setStyle("width: 14px; background: /" + getContextPath() + + "common/img/sub_separacion.gif"); + return div; + } + + public String getContextPath() { + return Executions.getCurrent().getContextPath(); + } + } diff --git a/navalplanner-webapp/src/main/webapp/common/layout/_customMenu.zul b/navalplanner-webapp/src/main/webapp/common/layout/_customMenu.zul index 1e6fa634a..7d122c3d4 100644 --- a/navalplanner-webapp/src/main/webapp/common/layout/_customMenu.zul +++ b/navalplanner-webapp/src/main/webapp/common/layout/_customMenu.zul @@ -18,11 +18,11 @@ ${i18n:_(each.name)} + background="${menuContainer.contextPath}/common/img/sub_separacion.gif" /> + -