diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/GanttPanel.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/GanttPanel.java index 47db7247d..5b8d22871 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/GanttPanel.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/GanttPanel.java @@ -1,6 +1,9 @@ package org.zkoss.ganttz; import org.zkoss.ganttz.util.DependencyRegistry; +import org.zkoss.zk.au.AuRequest; +import org.zkoss.zk.au.Command; +import org.zkoss.zk.au.ComponentCommand; import org.zkoss.zk.ui.ext.AfterCompose; import org.zkoss.zul.impl.XulElement; @@ -16,7 +19,7 @@ public class GanttPanel extends XulElement implements AfterCompose { public GanttPanel(DependencyRegistry dependencyRegistry) { this.dependencyRegistry = dependencyRegistry; - timeTracker = new TimeTracker(); + timeTracker = new TimeTracker(this); appendChild(timeTracker); tasksLists = TaskList.createFor(dependencyRegistry.getTopLevelTasks()); dependencyList = new DependencyList(); @@ -49,4 +52,36 @@ public class GanttPanel extends XulElement implements AfterCompose { return (Planner) getParent(); } + private Command _onincreasecmd = new ComponentCommand("onIncrease", 0) { + + protected void process(AuRequest request) { + String[] requestData = request.getData(); + int offset = Integer.parseInt(requestData[0]); + getTimeTracker().onIncrease(offset); + } + + }; + + private Command _ondecreasecmd = new ComponentCommand("onDecrease", 0) { + + protected void process(AuRequest request) { + String[] requestData = request.getData(); + int offset = Integer.parseInt(requestData[0]); + getTimeTracker().onDecrease(offset); + } + + }; + + public Command getCommand(String cmdId) { + + Command c = null; + + if ("onIncrease".equals(cmdId)) + c = _onincreasecmd; + else if ("onDecrease".equals(cmdId)) + c = _ondecreasecmd; + + return c; + } + } \ No newline at end of file diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TimeTracker.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TimeTracker.java index 271cec79e..d7339bacd 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TimeTracker.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TimeTracker.java @@ -16,6 +16,7 @@ import org.zkoss.ganttz.util.zoom.TimeTrackerState; import org.zkoss.ganttz.util.zoom.ZoomLevel; import org.zkoss.ganttz.util.zoom.ZoomLevelChangedListener; import org.zkoss.ganttz.util.zoom.TimeTrackerState.DetailItem; +import org.zkoss.zk.au.out.AuInvoke; import org.zkoss.zk.ui.HtmlMacroComponent; /** @@ -29,8 +30,6 @@ public class TimeTracker extends HtmlMacroComponent { .year(2012)); } -// private AbstractComponent fakeRow; - private List> zoomListeners = new LinkedList>(); private DatesMapper datesMapper = null; @@ -41,7 +40,14 @@ public class TimeTracker extends HtmlMacroComponent { private ZoomLevel detailLevel; - public TimeTracker() { + private final GanttPanel ganttPanel; + + public GanttPanel getGanttPanel() { + return ganttPanel; + } + + public TimeTracker(GanttPanel ganttPanel) { + this.ganttPanel = ganttPanel; this.detailLevel = ZoomLevel.DETAIL_ONE; } @@ -50,6 +56,11 @@ public class TimeTracker extends HtmlMacroComponent { .add(new WeakReference(listener)); } + public void scrollHorizontalPercentage(int displacement) { + response("scroll_horizontal", new AuInvoke(this.getParent(), + "scroll_horizontal", "" + displacement)); + } + private void fireZoomChanged(ZoomLevel detailLevel) { ListIterator> listIterator = zoomListeners .listIterator(); @@ -98,21 +109,26 @@ public class TimeTracker extends HtmlMacroComponent { return result; } - public void onIncrease() { - changeDetailLevel(getDetailLevel().next()); + public void onIncrease(int offset) { + changeDetailLevel(getDetailLevel().next(), offset + * getDetailLevel().getTimeTrackerState().pixelsPerDay()); } - private void changeDetailLevel(ZoomLevel d) { + public void onDecrease(int offset) { + changeDetailLevel(getDetailLevel().previous(), offset + * getDetailLevel().getTimeTrackerState().pixelsPerDay()); + } + + private void changeDetailLevel(ZoomLevel d, double days) { this.detailLevel = d; datesMapper = null; detailsFirstLevelCached = null; detailsSecondLevelCached = null; recreate(); fireZoomChanged(d); - } - public void onDecrease() { - changeDetailLevel(getDetailLevel().previous()); + scrollHorizontalPercentage((int) Math.floor(days + / d.getTimeTrackerState().pixelsPerDay())); } private ZoomLevel getDetailLevel() { @@ -127,4 +143,4 @@ public class TimeTracker extends HtmlMacroComponent { return datesMapper; } -} +} \ No newline at end of file diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailFiveTimeTrackerState.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailFiveTimeTrackerState.java index e3c06a6c4..dd3e23341 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailFiveTimeTrackerState.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailFiveTimeTrackerState.java @@ -13,6 +13,7 @@ import org.zkoss.ganttz.util.Interval; /** * Zoom level for weeks in the first level and days in the second level * @author Óscar González Fernández + * @author Lorenzo Tilve Álvaro */ public class DetailFiveTimeTrackerState extends TimeTrackerStateUsingJodaTime { @@ -22,6 +23,10 @@ public class DetailFiveTimeTrackerState extends TimeTrackerStateUsingJodaTime { public static final DetailFiveTimeTrackerState INSTANCE = new DetailFiveTimeTrackerState(); + public final double pixelsPerDay() { + return ((double) 1 / SECOND_LEVEL_SIZE); + } + private DetailFiveTimeTrackerState() { } diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailFourTimeTrackerState.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailFourTimeTrackerState.java index d565b635c..c7790bf29 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailFourTimeTrackerState.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailFourTimeTrackerState.java @@ -9,6 +9,7 @@ import org.joda.time.Weeks; /** * Zoom level for months and years and weeks in the second level * @author Óscar González Fernández + * @author Lorenzo Tilve Álvaro */ public class DetailFourTimeTrackerState extends TimeTrackerStateUsingJodaTime { @@ -17,6 +18,10 @@ public class DetailFourTimeTrackerState extends TimeTrackerStateUsingJodaTime { private static final int FIRST_LEVEL_SIZE = 200; private static final int SECOND_LEVEL_SIZE = 50; + public final double pixelsPerDay() { + return ((double) 7 / SECOND_LEVEL_SIZE); + } + @Override protected IDetailItemCreator getDetailItemCreatorFirstLevel() { return new IDetailItemCreator() { diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailOneTimeTrackerState.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailOneTimeTrackerState.java index 4241126e1..c095b4cfb 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailOneTimeTrackerState.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailOneTimeTrackerState.java @@ -9,13 +9,12 @@ import java.util.Collection; import java.util.Vector; import org.joda.time.DateTime; -import org.joda.time.Days; import org.zkoss.ganttz.util.Interval; /** - * + * Zoom level with years in the first level and semesters in the second level * @author Francisco Javier Moran Rúa - * + * @author Lorenzo Tilve Álvaro */ public class DetailOneTimeTrackerState extends TimeTrackerState { @@ -23,6 +22,10 @@ public class DetailOneTimeTrackerState extends TimeTrackerState { private static final int FIRST_LEVEL_ITEM_SIZE = 200; private static final int SECOND_LEVEL_ITEM_SIZE = 100; + public final double pixelsPerDay() { + return ((double) 365 / FIRST_LEVEL_ITEM_SIZE); + } + private DetailOneTimeTrackerState() { }; diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailThreeTimeTrackerState.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailThreeTimeTrackerState.java index a47dfba47..397883aa3 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailThreeTimeTrackerState.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailThreeTimeTrackerState.java @@ -9,6 +9,7 @@ import org.zkoss.util.Locales; /** * Zoom level with semesters in the first level and months in the second level * @author Óscar González Fernández + * @author Lorenzo Tilve Álvaro */ public class DetailThreeTimeTrackerState extends TimeTrackerStateUsingJodaTime { @@ -17,6 +18,10 @@ public class DetailThreeTimeTrackerState extends TimeTrackerStateUsingJodaTime { private static final int FIRST_LEVEL_SIZE = 300; protected static final int SECOND_LEVEL_SIZE = 50; + public final double pixelsPerDay() { + return ((double) 182.5 / FIRST_LEVEL_SIZE); + } + private DetailThreeTimeTrackerState() { } diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailTwoTimeTrackerState.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailTwoTimeTrackerState.java index 4d3695c5a..47c4965c6 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailTwoTimeTrackerState.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailTwoTimeTrackerState.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package org.zkoss.ganttz.util.zoom; import java.util.ArrayList; @@ -15,7 +10,9 @@ import org.joda.time.DateTime; import org.zkoss.ganttz.util.Interval; /** + * Zoom level with years in the first level and quarters in the second level * @author Francisco Javier Moran Rúa + * @author Lorenzo Tilve Álvaro */ public class DetailTwoTimeTrackerState extends TimeTrackerState { @@ -23,6 +20,10 @@ public class DetailTwoTimeTrackerState extends TimeTrackerState { private static final int FIRST_LEVEL_ITEM_SIZE = 400; private static final int SECOND_LEVEL_ITEM_SIZE = 100; + public final double pixelsPerDay() { + return ((double) 365 / FIRST_LEVEL_ITEM_SIZE); + } + public Interval getRealIntervalFor(Interval interval) { int[] pairYears = calculateInitialEndYear(interval.getStart(), interval .getFinish()); diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/TimeTrackerState.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/TimeTrackerState.java index 9097b19c2..9bda1b529 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/TimeTrackerState.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/TimeTrackerState.java @@ -208,4 +208,6 @@ public abstract class TimeTrackerState { public abstract Interval getRealIntervalFor(Interval testInterval); + public abstract double pixelsPerDay(); + } diff --git a/navalplanner-gantt-zk/src/main/resources/web/ganttz/zul/timetracker.zul b/navalplanner-gantt-zk/src/main/resources/web/ganttz/zul/timetracker.zul index f708e1609..a3be72e26 100644 --- a/navalplanner-gantt-zk/src/main/resources/web/ganttz/zul/timetracker.zul +++ b/navalplanner-gantt-zk/src/main/resources/web/ganttz/zul/timetracker.zul @@ -2,17 +2,41 @@
+ + +function getHorizontalScroll() { + return document.getElementById('ganttpanel_scroller_x').scrollLeft; +} + +function onIncrease(id) { + zkau.send( { + uuid : id.id, + cmd : "onIncrease", + data : [ getHorizontalScroll() ] + }); +} + +function onDecrease(id) { + zkau.send( { + uuid : id.id, + cmd : "onDecrease", + data : [ getHorizontalScroll() ] + }); +} + + -