/* * #%L * gitools-core * %% * Copyright (C) 2013 Universitat Pompeu Fabra - Biomedical Genomics group * %% * 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, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ package org.gitools.ui.app.heatmap.drawer; import org.gitools.heatmap.Heatmap; import org.gitools.ui.app.heatmap.drawer.header.HeatmapHeaderDrawer; import org.gitools.ui.app.heatmap.drawer.header.HeatmapHeaderIntersectionDrawer; import org.gitools.ui.core.HeatmapPosition; import java.awt.*; import java.awt.geom.AffineTransform; public class HeatmapDrawer extends AbstractHeatmapDrawer { private final HeatmapLayerBodyDrawer body; private final HeatmapHeaderDrawer rowsHeader; private final HeatmapHeaderDrawer colsHeader; private final HeatmapHeaderIntersectionDrawer headerIntersection; public HeatmapDrawer(Heatmap heatmap) { super(heatmap); body = new HeatmapLayerBodyDrawer(heatmap); rowsHeader = new HeatmapHeaderDrawer(heatmap, heatmap.getRows()); colsHeader = new HeatmapHeaderDrawer(heatmap, heatmap.getColumns()); headerIntersection = new HeatmapHeaderIntersectionDrawer(heatmap, colsHeader, rowsHeader); } @Override public void draw(Graphics2D g, Rectangle box, Rectangle clip) { Dimension bodySize = body.getSize(); Dimension rowsSize = rowsHeader.getSize(); Dimension columnsSize = colsHeader.getSize(); Rectangle columnsBounds = new Rectangle(0, 0, columnsSize.width, columnsSize.height); Rectangle bodyBounds = new Rectangle(0, columnsSize.height, bodySize.width, bodySize.height + columnsSize.height); Rectangle rowsBounds = new Rectangle(bodySize.width, columnsSize.height, rowsSize.width, rowsSize.height); Rectangle headerIntersectionBounds = new Rectangle(bodySize.width, 0, rowsSize.width, columnsSize.height); AffineTransform at = new AffineTransform(); // Clear background if (!isPictureMode()) { g.setColor(Color.WHITE); g.fillRect(clip.x, clip.y, clip.width, clip.height); } body.draw(g, bodyBounds, bodyBounds); at.setToIdentity(); g.setTransform(at); colsHeader.draw(g, columnsBounds, columnsBounds); at.setToIdentity(); g.setTransform(at); rowsHeader.draw(g, rowsBounds, rowsBounds); at.setToIdentity(); g.setTransform(at); headerIntersection.draw(g, headerIntersectionBounds, headerIntersectionBounds); } @Override public Dimension getSize() { Dimension bodySize = body.getSize(); Dimension rowsSize = rowsHeader.getSize(); Dimension columnsSize = colsHeader.getSize(); return new Dimension(bodySize.width + rowsSize.width, bodySize.height + columnsSize.height); } @Override public HeatmapPosition getPosition(Point p) { throw new UnsupportedOperationException("Not supported yet."); } @Override public Point getPoint(HeatmapPosition p) { throw new UnsupportedOperationException("Not supported yet."); } @Override public void setPictureMode(boolean pictureMode) { super.setPictureMode(pictureMode); body.setPictureMode(pictureMode); rowsHeader.setPictureMode(pictureMode); colsHeader.setPictureMode(pictureMode); } }