From 869fb93445858597c2f4ea1f3338769cdd81f0ec Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Mon, 19 Apr 2010 10:59:39 +0200 Subject: [PATCH] ItEr55S10CUVistaRecursosTempoPorProxectoItEr54S12: add new links to resource allocation from the resource load screen. --- .../resourceload/ResourceLoadComponent.java | 85 ++++++++++++++++++- .../ganttz/resourceload/ResourceLoadList.java | 9 ++ .../resourceload/ResourcesLoadPanel.java | 2 + 3 files changed, 95 insertions(+), 1 deletion(-) diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java b/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java index 29da10831..c6cd842c8 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadComponent.java @@ -21,8 +21,12 @@ package org.zkoss.ganttz.resourceload; +import static org.zkoss.ganttz.i18n.I18nHelper._; + import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.joda.time.LocalDate; import org.zkoss.ganttz.IDatesMapper; @@ -31,7 +35,14 @@ import org.zkoss.ganttz.data.resourceload.LoadTimeLine; import org.zkoss.ganttz.timetracker.TimeTracker; import org.zkoss.ganttz.timetracker.zoom.IZoomLevelChangedListener; import org.zkoss.ganttz.timetracker.zoom.ZoomLevel; +import org.zkoss.ganttz.util.MenuBuilder; +import org.zkoss.ganttz.util.WeakReferencedListeners; +import org.zkoss.ganttz.util.MenuBuilder.ItemAction; +import org.zkoss.ganttz.util.WeakReferencedListeners.IListenerNotification; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zul.Div; +import org.zkoss.zul.Menupopup; import org.zkoss.zul.impl.XulElement; /** @@ -48,6 +59,8 @@ public class ResourceLoadComponent extends XulElement { private final LoadTimeLine loadLine; private final TimeTracker timeTracker; private transient IZoomLevelChangedListener zoomChangedListener; + private WeakReferencedListeners scheduleListeners = WeakReferencedListeners + .create(); private ResourceLoadComponent(final TimeTracker timeTracker, final LoadTimeLine loadLine) { @@ -66,11 +79,81 @@ public class ResourceLoadComponent extends XulElement { this.timeTracker.addZoomListener(zoomChangedListener); } - private void createChildren(LoadTimeLine loadLine, IDatesMapper mapper) { + private void createChildren(final LoadTimeLine loadLine, IDatesMapper mapper) { List
divs = createDivsForPeriods(mapper, loadLine.getLoadPeriods()); for (Div div : divs) { appendChild(div); } + + if (loadLine.getRole().isVisibleScheduled()) { + for (Div div : divs) { + addDoubleClickAction(div, loadLine); + addContextMenu(divs, div, loadLine); + } + } + } + + private void addDoubleClickAction(final Div div, final LoadTimeLine loadLine) { + div.addEventListener("onDoubleClick", new EventListener() { + @Override + public void onEvent(Event event) throws Exception { + schedule(loadLine); + } + }); + } + + private void addContextMenu(final List
divs, final Div div, + final LoadTimeLine loadLine) { + div.addEventListener("onRightClick", new EventListener() { + @Override + public void onEvent(Event event) throws Exception { + try { + getContextMenuFor(divs, div, loadLine).open(div); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + + public void schedule(final LoadTimeLine taskLine) { + + scheduleListeners + .fireEvent(new IListenerNotification() { + @Override + public void doNotify(ISeeScheduledOfListener listener) { + listener.seeScheduleOf(taskLine); + } + }); + } + + public void addSeeScheduledOfListener( + ISeeScheduledOfListener seeScheduledOfListener) { + scheduleListeners.addListener(seeScheduledOfListener); + } + + private Map contextMenus = new HashMap(); + + private Menupopup getContextMenuFor(final List
divs, final Div div, + final LoadTimeLine loadLine) { + if (contextMenus.get(div) == null) { + + MenuBuilder
menuBuilder = MenuBuilder.on(getPage(), divs); + menuBuilder.item(_("See resource allocation"), + "/common/img/ico_allocation.png", new ItemAction
() { + + @Override + public void onEvent(Div choosen, Event event) { + schedule(loadLine); + } + }); + + Menupopup result = menuBuilder.createWithoutSettingContext(); + contextMenus.put(div, result); + return result; + + } + return contextMenus.get(div); } public String getResourceLoadName() { diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadList.java b/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadList.java index e88e9771c..34ba35504 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadList.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadList.java @@ -25,6 +25,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import org.zkoss.ganttz.data.resourceload.LoadTimeLine; import org.zkoss.ganttz.timetracker.TimeTracker; @@ -130,4 +131,12 @@ public class ResourceLoadList extends HtmlMacroComponent implements public void afterCompose() { super.afterCompose(); } + + public void addSeeScheduledOfListener( + ISeeScheduledOfListener seeScheduledOfListener) { + for (Entry entry : fromTimeLineToComponent + .entrySet()) { + entry.getValue().addSeeScheduledOfListener(seeScheduledOfListener); + } + } } diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java b/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java index 885b6d3f2..2d92695a1 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java @@ -297,5 +297,7 @@ public class ResourcesLoadPanel extends HtmlMacroComponent { public void addSeeScheduledOfListener( ISeeScheduledOfListener seeScheduledOfListener) { leftPane.addSeeScheduledOfListener(seeScheduledOfListener); + resourceLoadList.addSeeScheduledOfListener(seeScheduledOfListener); } + } \ No newline at end of file