/*
GanttProject is an opensource project management tool. License: GPL3
Copyright (C) 2011 Dmitry Barashev
This program 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.
This program 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 this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package net.sourceforge.ganttproject.chart.export;
import java.awt.Dimension;
import biz.ganttproject.core.chart.grid.OffsetBuilder;
import biz.ganttproject.core.chart.grid.OffsetList;
import net.sourceforge.ganttproject.GPTreeTableBase;
import net.sourceforge.ganttproject.GanttExportSettings;
import net.sourceforge.ganttproject.chart.ChartModelBase;
public class ChartImageBuilder {
private final ChartModelBase myChartModel;
private final GanttExportSettings mySettings;
private final GPTreeTableBase myTreeTable;
private final ChartDimensions myDimensions;
public ChartImageBuilder(GanttExportSettings settings, ChartModelBase chartModel, GPTreeTableBase treeTable) {
myChartModel = chartModel;
mySettings = settings;
myTreeTable = treeTable;
myDimensions = new ChartDimensions(settings, treeTable);
}
public void buildImage(ChartImageVisitor visitor) {
if (mySettings.getZoomLevel() != null) {
myChartModel.setBottomTimeUnit(mySettings.getZoomLevel().getTimeUnitPair().getBottomTimeUnit());
myChartModel.setTopTimeUnit(mySettings.getZoomLevel().getTimeUnitPair().getTopTimeUnit());
myChartModel.setBottomUnitWidth(mySettings.getZoomLevel().getBottomUnitWidth());
}
OffsetBuilder.Factory factory = myChartModel.createOffsetBuilderFactory()
.withViewportStartDate(mySettings.getStartDate())
.withStartDate(myChartModel.getBottomUnit().jumpLeft(mySettings.getStartDate()))
.withEndDate(mySettings.getEndDate())
.withEndOffset(mySettings.getWidth() < 0 ? Integer.MAX_VALUE : mySettings.getWidth());
OffsetBuilder offsetBuilder = factory.build();
OffsetList bottomOffsets = new OffsetList();
offsetBuilder.constructOffsets(null, bottomOffsets);
myDimensions.setChartWidth(bottomOffsets.getEndPx());
myChartModel.setStartDate(mySettings.getStartDate());
myChartModel.setBounds(new Dimension(myDimensions.getChartWidth(), myDimensions.getChartHeight()));
myChartModel.setHeaderHeight(myDimensions.getLogoHeight() + myDimensions.getTableHeaderHeight() - 1);
myChartModel.setVisibleTasks(mySettings.getVisibleTasks());
visitor.acceptLogo(myDimensions, mySettings.getLogo());
visitor.acceptTable(myDimensions, myTreeTable.getTable().getTableHeader(), myTreeTable.getTable());
visitor.acceptChart(myDimensions, myChartModel);
}
}