/*
Copyright 2003-2012 Dmitry Barashev, GanttProject Team
This file is part of GanttProject, an opensource project management tool.
GanttProject is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
GanttProject is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GanttProject. If not, see <http://www.gnu.org/licenses/>.
*/
package net.sourceforge.ganttproject.chart;
import java.util.Date;
import biz.ganttproject.core.time.TimeDuration;
import biz.ganttproject.core.time.TimeUnit;
import net.sourceforge.ganttproject.Mediator;
import net.sourceforge.ganttproject.gui.UIFacade;
import net.sourceforge.ganttproject.gui.scrolling.ScrollingListener;
import net.sourceforge.ganttproject.gui.zoom.ZoomEvent;
import net.sourceforge.ganttproject.gui.zoom.ZoomListener;
import net.sourceforge.ganttproject.gui.zoom.ZoomManager;
import net.sourceforge.ganttproject.gui.zoom.ZoomManager.ZoomState;
/**
* @author bard
*/
public class ChartViewState implements ScrollingListener, ZoomListener {
private ZoomState myCurrentZoomState;
private UIFacade myUIFacade;
private final TimelineChart myChart;
private int myOffsetPixels;
public ChartViewState(TimelineChart chart, UIFacade uiFacade) {
myChart = chart;
myUIFacade = uiFacade;
}
@Override
public void scrollBy(TimeDuration duration) {
myChart.scrollBy(duration);
myOffsetPixels = 0;
myChart.setStartOffset(myOffsetPixels);
}
@Override
public void scrollBy(int pixels) {
myOffsetPixels += pixels;
myChart.setStartOffset(myOffsetPixels);
}
@Override
public void scrollTo(Date date) {
myChart.setStartDate(date);
}
@Override
public void zoomChanged(ZoomEvent e) {
myCurrentZoomState = e.getNewZoomState();
Date date;
if (myUIFacade.getViewIndex() == UIFacade.GANTT_INDEX) {
Date d = Mediator.getTaskSelectionManager().getEarliestStart();
date = d == null ? myChart.getStartDate() : d;
} else {
date = myChart.getStartDate();
}
myChart.setTopUnit(getTopTimeUnit());
myChart.setBottomUnit(getBottomTimeUnit());
myChart.setBottomUnitWidth(getBottomUnitWidth());
myChart.setStartDate(date == null ? new Date() : date);
}
public int getBottomUnitWidth() {
return getCurrentZoomState().getBottomUnitWidth();
}
public TimeUnit getTopTimeUnit() {
return getCurrentZoomState().getTimeUnitPair().getTopTimeUnit();
}
public TimeUnit getBottomTimeUnit() {
return getCurrentZoomState().getTimeUnitPair().getBottomTimeUnit();
}
public ZoomManager.ZoomState getCurrentZoomState() {
return myCurrentZoomState;
}
}