/* * AttributableDecorator.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.decorators; import jebl.util.Attributable; import java.awt.*; import java.awt.geom.Point2D; /** * @author Andrew Rambaut * @version $Id$ * * $HeadURL$ * * $LastChangedBy$ * $LastChangedDate$ * $LastChangedRevision$ */ public class AttributableDecorator implements Decorator { // Decorator INTERFACE public Paint getPaint(Paint paint) { if (this.paint == null) return paint; return this.paint; } @Override public boolean allowsGradient() { return true; } public Paint getFillPaint(Paint paint) { if (this.fillPaint == null) return paint; return this.fillPaint; } public Paint getPaint(Paint paint, Point2D point1, Point2D point2) { if (colour1 != null && colour2 != null) { return new GradientPaint(point1, colour1, point2, colour2, false); } else { return paint; } } public Paint getFillPaint(Paint paint, Point2D point1, Point2D point2) { if (fillColour1 != null && fillColour2 != null) { return new GradientPaint(point1, fillColour1, point2, fillColour2, false); } else { return paint; } } public Stroke getStroke(Stroke stroke) { if (this.stroke == null) return stroke; return this.stroke; } public Font getFont(Font font) { if (this.font == null) return font; return this.font; } public boolean isGradient() { return isGradient; } public void setGradient(final boolean gradient) { isGradient = gradient; } @Override public void setItem(Attributable item, Attributable fallbackItem) { setAttributableItem(item != null ? item: fallbackItem); } public void setItem(Object item) { if (item instanceof Attributable) { setAttributableItem((Attributable)item); } } public void setItems(final Object item1, final Object item2) { if (item2 == null) { setItem(item1); return; } if (item1 == null) { setItem(item2); return; } if (item1 instanceof Attributable) { setAttributableItem((Attributable)item1); } if (item2 instanceof Attributable && paintAttributeName != null) { colour2 = getColorAttribute(((Attributable)item2).getAttribute(paintAttributeName)); if (colour2 != null) { fillColour2 = colour2.brighter(); } else { fillColour2 = null; } } } // Public methods public String getFontAttributeName() { return fontAttributeName; } public void setFontAttributeName(String fontAttributeName) { this.fontAttributeName = fontAttributeName; } public String getPaintAttributeName() { return paintAttributeName; } public void setPaintAttributeName(String paintAttributeName) { this.paintAttributeName = paintAttributeName; } public String getStrokeAttributeName() { return strokeAttributeName; } public void setStrokeAttributeName(String strokeAttributeName) { this.strokeAttributeName = strokeAttributeName; } // Private methods private void setAttributableItem(Attributable item) { if (paintAttributeName != null) { colour1 = getColorAttribute(item.getAttribute(paintAttributeName)); if (colour1 != null) { fillColour1 = colour1.brighter(); paint = colour1; fillPaint = fillColour1; // fillPaint = new Color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha() / 2); } else { fillColour1 = null; paint = null; fillPaint = null; } } if (fontAttributeName != null) { font = getFontAttribute(item.getAttribute(fontAttributeName)); } if (strokeAttributeName != null) { stroke = getStrokeAttribute(item.getAttribute(strokeAttributeName)); } } private Color getColorAttribute(Object value) { if (value != null) { if (value instanceof Color) { return (Color)value; } try { return Color.decode(value.toString()); } catch (NumberFormatException nfe) { // } } return null; } private Font getFontAttribute(Object value) { if (value != null) { return Font.decode(value.toString()); } return null; } private Stroke getStrokeAttribute(Object value) { return null; } private String paintAttributeName = null; private String fontAttributeName = null; private String strokeAttributeName = null; private Paint paint = null; private Paint fillPaint = null; private Font font = null; private Stroke stroke = null; private boolean isGradient; private Color colour1 = null; private Color colour2 = null; private Color fillColour1 = null; private Color fillColour2 = null; }