From 18c2f122114d48ec854c27bef002b64e2e3ea182 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Wed, 15 Jun 2011 18:05:16 +0200 Subject: [PATCH] Fix error when changing zoom * adjust_height is removed from TaskList because the equivalent functionality is called from GanttPanel. * GanttPanel.js receives the new methods for tracking the scroll. This should be simpler. It should be rewritten in the future. --- .../java/org/zkoss/ganttz/GanttPanel.java | 1 + .../main/java/org/zkoss/ganttz/TaskList.java | 6 -- .../resources/web/js/ganttz/GanttPanel.js | 57 ++++++++++++++++++- 3 files changed, 55 insertions(+), 9 deletions(-) diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/GanttPanel.java b/ganttzk/src/main/java/org/zkoss/ganttz/GanttPanel.java index 2531894e7..d6534bec1 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/GanttPanel.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/GanttPanel.java @@ -87,6 +87,7 @@ public class GanttPanel extends XulElement implements AfterCompose { moveCurrentPositionScroll(); } + // FIXME: this is quite awful, it should be simple @Override protected void moveCurrentPositionScroll() { // get the previous data. diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/TaskList.java b/ganttzk/src/main/java/org/zkoss/ganttz/TaskList.java index fee048b38..81fdef61c 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/TaskList.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/TaskList.java @@ -49,7 +49,6 @@ import org.zkoss.ganttz.timetracker.zoom.ZoomLevel; import org.zkoss.ganttz.util.Interval; import org.zkoss.ganttz.util.MenuBuilder; import org.zkoss.ganttz.util.MenuBuilder.ItemAction; -import org.zkoss.zk.au.out.AuInvoke; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.ext.AfterCompose; @@ -285,7 +284,6 @@ public class TaskList extends XulElement implements AfterCompose { for (TaskComponent taskComponent : getTaskComponents()) { taskComponent.zoomChanged(); } - adjustZoomColumnsHeight(); adjustZoomPositionScroll(); } }; @@ -334,10 +332,6 @@ public class TaskList extends XulElement implements AfterCompose { return (GanttPanel) getParent(); } - public void adjustZoomColumnsHeight() { - response("adjust_height", new AuInvoke(TaskList.this, "adjust_height")); - } - private void adjustZoomPositionScroll() { getTimeTrackerComponent().movePositionScroll(); } diff --git a/ganttzk/src/main/resources/web/js/ganttz/GanttPanel.js b/ganttzk/src/main/resources/web/js/ganttz/GanttPanel.js index 0942a3379..d6bb0c956 100644 --- a/ganttzk/src/main/resources/web/js/ganttz/GanttPanel.js +++ b/ganttzk/src/main/resources/web/js/ganttz/GanttPanel.js @@ -5,6 +5,7 @@ ganttz.GanttPanel = zk.$extends(zk.Widget,{ xMouse : null, yMouse : null }, + scrollDay: 0, $init : function(){ this.$supers('$init', arguments); this.$class.setInstance(this); @@ -61,9 +62,59 @@ ganttz.GanttPanel = zk.$extends(zk.Widget,{ reScrollX : function(px){ jq('#ganttpanel_inner_scroller_x').width(px); }, - scroll_horizontal : function(value){ - jq('#ganttpanel_scroller_x').scrollLeft(value); + /** + * Scrolls horizontally the ganttpanel when the zoom has resized the component + * width. + */ + scroll_horizontal: function(daysDisplacement) { + scrollDay = daysDisplacement; + }, + + // FIXME: this is quite awful, it should be simple + update_day_scroll: function(previousPixelPerDay) { + this._fromPixelToDay(previousPixelPerDay); + }, + move_scroll: function(diffDays, pixelPerDay) { + this._fromDayToPixel(diffDays,pixelPerDay); + }, + _fromPixelToDay: function(previousPixelPerDay) { + var div1 = document.getElementById ("ganttpanel").parentNode; + var div2 = div1.parentNode; + var div3 = div2.parentNode; + + var maxHPosition = div3.scrollWidth - div3.clientWidth; + if( maxHPosition > 0 ){ + var proportion = div3.scrollWidth / maxHPosition; + var positionInScroll = div3.scrollLeft; + var positionInPx = positionInScroll * proportion; + if(positionInPx > 0){ + var position = positionInPx / previousPixelPerDay; + var day = position; + this.scrollDay = position; + } + } + }, + _fromDayToPixel: function(diffDays,pixelPerDay) { + var div1 = document.getElementById ("ganttpanel").parentNode; + var div2 = div1.parentNode; + var div3 = div2.parentNode; + + var day = this.scrollDay; + day += parseInt(diffDays); + var newPosInPx = parseInt(day * pixelPerDay); + var maxHPosition = div3.scrollWidth - div3.clientWidth; + var newProportion = div3.scrollWidth / maxHPosition; + if( newProportion > 0){ + var newPosInScroll = newPosInPx / newProportion; + if(newPosInScroll < 0){ + newPosInScroll = 0; + } + div1.scrollLeft = newPosInScroll; + div2.scrollLeft = newPosInScroll; + div3.scrollLeft = newPosInScroll; + } } + },{ getInstance : function(){ return this._instance; @@ -71,4 +122,4 @@ ganttz.GanttPanel = zk.$extends(zk.Widget,{ setInstance : function(instance){ this._instance = instance; } -}); \ No newline at end of file +});