/** * * The MIT License * * Copyright (c) 2011 the original author or authors. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ package com.googlecode.charts4j; import static com.googlecode.charts4j.collect.Preconditions.checkArgument; import static com.googlecode.charts4j.collect.Preconditions.checkNotNull; import com.googlecode.charts4j.parameters.FillType; import com.googlecode.charts4j.parameters.SolidFillType; /** * Abstract type for all charts that support legend positions. (MapChart, * GoogleOMeter and PieChart do not support legend positions.) * * @author Julien Chastang (julien.c.chastang at gmail dot com) * */ public abstract class AbstractGraphChart extends AbstractGChart implements GraphChart, TitledChart { /** Chart title. */ private ChartTitle chartTitle; /** Chart area fill. */ private Fill areaFill; /** The legend position which may be top, bottom, right, or left. **/ private LegendPosition legendPosition; /** The legend margins. */ private LegendMargins legendMargins; /** * Abstract graph chart constructor. */ AbstractGraphChart() { super(); } /** * {@inheritDoc} */ public final void setTitle(final String title) { checkNotNull(title, "Title cannot be null."); this.chartTitle = new ChartTitle(title); } /** * {@inheritDoc} */ public final void setTitle(final String title, final Color color, final int fontSize) { checkArgument(fontSize > 0, "font size must be > 0: %s", fontSize); checkNotNull(title, "Title cannot be null."); checkNotNull(color, "Color cannot be null."); this.chartTitle = new ChartTitle(title, color, fontSize); } /** * {@inheritDoc} */ public final void setLegendPosition(final LegendPosition legendPosition) { checkNotNull(legendPosition, "Legend position cannot be null."); this.legendPosition = legendPosition; } /** * {@inheritDoc} */ public void setLegendMargins(final int legendWidth, final int legendHeight) { this.legendMargins = new LegendMargins(legendWidth, legendHeight); } /** * {@inheritDoc} */ public final void setAreaFill(final Fill fill) { areaFill = fill.klone(); } /** * {@inheritDoc} */ @Override protected void prepareData() { super.prepareData(); if (areaFill instanceof SolidFill) { final SolidFill solid = (SolidFill) areaFill; parameterManager.addSolidFill(SolidFillType.CHART_AREA, solid.getColor()); } else if (areaFill instanceof LinearGradientFill) { final LinearGradientFill lg = (LinearGradientFill) areaFill; parameterManager.addLinearGradientFill(FillType.CHART_AREA, lg.getAngle(), lg.getColorsAndOffsets()); } else if (areaFill instanceof LinearStripesFill) { final LinearStripesFill ls = (LinearStripesFill) areaFill; parameterManager.addLinearStripeFill(FillType.CHART_AREA, ls.getAngle(), ls.getColorsAndWidths()); } if (chartTitle != null) { parameterManager.setChartTitleParameter(chartTitle.getTitle()); } if (chartTitle != null && chartTitle.getColor() != null) { parameterManager.setChartTitleColorAndSizeParameter(chartTitle.getColor(), chartTitle.getFontSize()); } if (legendPosition != null) { parameterManager.setLegendPositionParameter(legendPosition); } if (legendMargins != null) { parameterManager.setLegendMargins(legendMargins.width, legendMargins.height); } } /** * Private class to encapsulate legend margins. */ private static class LegendMargins { /** The legend height. */ private final int height; /** The legend width. */ private final int width; /** * Instantiates a new legend margins. * * @param height * the legend height * @param width * the legend width */ private LegendMargins(final int height, final int width) { super(); this.height = height; this.width = width; } } }