From 33bc83c7946d099dd6184d92cbf64cddaec5a19d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Wed, 2 Sep 2009 20:49:58 +0200 Subject: [PATCH] ItEr24S09CUVistaRecursosTempoPorProxectoItEr23S11: The components are shown and hidden when the tree nodes are expanded and collapsed Alignment is pending --- .../resourceload/ResourceLoadLeftPane.java | 6 +- .../ganttz/resourceload/ResourceLoadList.java | 74 +++++++++++++++++-- .../resourceload/ResourcesLoadPanel.java | 2 +- 3 files changed, 70 insertions(+), 12 deletions(-) diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadLeftPane.java b/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadLeftPane.java index 2d2ce7f3b..d6c3fb085 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadLeftPane.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadLeftPane.java @@ -39,6 +39,7 @@ public class ResourceLoadLeftPane extends HtmlMacroComponent { @Override public void render(Treeitem item, Object data) throws Exception { LoadTimeLine line = (LoadTimeLine) data; + item.setOpen(true); Treerow row = new Treerow(); Treecell cell = new Treecell(); Component component = createComponent(line); @@ -76,12 +77,11 @@ public class ResourceLoadLeftPane extends HtmlMacroComponent { } private void collapse(LoadTimeLine line) { - // TODO do collapse + resourceLoadList.collapse(line); } private void expand(LoadTimeLine line) { - // TODO do expand - + resourceLoadList.expand(line); } 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 214be195f..c6b2ad06e 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadList.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourceLoadList.java @@ -1,14 +1,18 @@ package org.zkoss.ganttz.resourceload; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.zkoss.ganttz.data.resourceload.LoadTimeLine; -import org.zkoss.ganttz.data.resourceload.LoadTimelinesGroup; 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.MutableTreeModel; import org.zkoss.zk.au.out.AuInvoke; +import org.zkoss.zk.ui.Component; import org.zkoss.zul.impl.XulElement; /** @@ -19,18 +23,40 @@ public class ResourceLoadList extends XulElement { private final IZoomLevelChangedListener zoomListener; + private Map fromTimeLineToComponent = new HashMap(); + + private final MutableTreeModel timelinesTree; + public ResourceLoadList(TimeTracker timeTracker, - List groups) { + MutableTreeModel timelinesTree) { + this.timelinesTree = timelinesTree; zoomListener = adjustTimeTrackerSizeListener(); timeTracker.addZoomListener(zoomListener); - for (LoadTimelinesGroup l : groups) { - ArrayList toInsert = new ArrayList(); - toInsert.add(l.getPrincipal()); - toInsert.addAll(l.getChildren()); - insertAsComponents(timeTracker, toInsert); + LoadTimeLine current = timelinesTree.getRoot(); + List toInsert = new ArrayList(); + fill(timelinesTree, current, toInsert); + insertAsComponents(timeTracker, toInsert); + } + + private void fill(MutableTreeModel timelinesTree, + LoadTimeLine current, List result) { + final int length = timelinesTree.getChildCount(current); + for (int i = 0; i < length; i++) { + LoadTimeLine child = timelinesTree.getChild(current, i); + result.add(child); + fill(timelinesTree, child, result); } } + private List getChildrenOf(LoadTimeLine parent) { + List result = new ArrayList(); + final int length = timelinesTree.getChildCount(parent); + for (int i = 0; i < length; i++) { + result.add(timelinesTree.getChild(parent, i)); + } + return result; + } + private IZoomLevelChangedListener adjustTimeTrackerSizeListener() { return new IZoomLevelChangedListener() { @@ -47,7 +73,39 @@ public class ResourceLoadList extends XulElement { private void insertAsComponents(TimeTracker timetracker, List children) { for (LoadTimeLine loadTimeLine : children) { - appendChild(ResourceLoadComponent.create(timetracker, loadTimeLine)); + ResourceLoadComponent component = ResourceLoadComponent.create( + timetracker, loadTimeLine); + appendChild(component); + fromTimeLineToComponent.put(loadTimeLine, component); } } + + public void collapse(LoadTimeLine line) { + for (LoadTimeLine l : getChildrenOf(line)) { + getComponentFor(l).detach(); + } + } + + private ResourceLoadComponent getComponentFor(LoadTimeLine l) { + ResourceLoadComponent resourceLoadComponent = fromTimeLineToComponent + .get(l); + return resourceLoadComponent; + } + + public void expand(LoadTimeLine line) { + ResourceLoadComponent parentComponent = getComponentFor(line); + Component nextSibling = parentComponent.getNextSibling(); + for (LoadTimeLine loadTimeLine : getChildrenReverseOrderFor(line)) { + ResourceLoadComponent child = getComponentFor(loadTimeLine); + insertBefore(child, nextSibling); + nextSibling = child; + } + + } + + private List getChildrenReverseOrderFor(LoadTimeLine line) { + List childrenOf = getChildrenOf(line); + Collections.reverse(childrenOf); + return childrenOf; + } } 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 e551dfa3f..13a1586ee 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java @@ -29,7 +29,7 @@ public class ResourcesLoadPanel extends XulElement implements AfterCompose { this.groups = groups; treeModel = createModelForTree(); timeTrackerComponent = timeTrackerForResourcesLoadPanel(timeTracker); - resourceLoadList = new ResourceLoadList(timeTracker, groups); + resourceLoadList = new ResourceLoadList(timeTracker, treeModel); leftPane = new ResourceLoadLeftPane(treeModel, resourceLoadList); appendChild(timeTrackerComponent); appendChild(leftPane);