/* * Painter.java * * Copyright (C) 2006-2014 Andrew Rambaut * * 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 2 * 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 figtree.treeviewer.painters; import figtree.treeviewer.TreePane; import java.awt.*; import java.awt.geom.Rectangle2D; /** * A painter draws a particular decoration onto the tree within a * rectangle. * * @author Andrew Rambaut * @version $Id$ * * $HeadURL$ * * $LastChangedBy$ * $LastChangedDate$ * $LastChangedRevision$ */ public interface Painter<T> { public enum Orientation { TOP, LEFT, BOTTOM, RIGHT } public enum Justification { FLUSH, LEFT, RIGHT, CENTER } /** * Called when the painter is installed in a TreePane. Gives the * painter a handle on the TreePane so that it get additional * information. * @param treePane */ void setTreePane(TreePane treePane); /** * If this is false then the painter should not be displayed. * @return is visible? */ boolean isVisible(); /** * Called to calibrate the painters for a given graphics context. This should * work out the preferred width and height (perhaps for the current font). * @param g2 * @param item */ Rectangle2D calibrate(Graphics2D g2, T item); /** * Called to actually paint into the current graphics context. The painter should * respect the bounds. * @param g2 * @param item * @param justification * @param bounds */ void paint(Graphics2D g2, T item, Justification justification, Rectangle2D bounds); double getPreferredWidth(); double getPreferredHeight(); double getHeightBound(); void addPainterListener(PainterListener listener); void removePainterListener(PainterListener listener); }