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 @@
+ background="${menuContainer.contextPath}/common/img/sub_separacion.gif" />
+
-