/* * JasperReports - Free Java Reporting Library. * Copyright (C) 2001 - 2009 Jaspersoft Corporation. All rights reserved. * http://www.jaspersoft.com * * Unless you have purchased a commercial license agreement from Jaspersoft, * the following license terms apply: * * This program is part of JasperReports. * * JasperReports is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * JasperReports 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with JasperReports. If not, see <http://www.gnu.org/licenses/>. */ package net.sf.jasperreports.charts.design; import java.awt.Color; import java.util.ArrayList; import java.util.Collection; import net.sf.jasperreports.charts.JRDataRange; import net.sf.jasperreports.charts.JRValueDisplay; import net.sf.jasperreports.charts.base.JRBaseMeterPlot; import net.sf.jasperreports.charts.base.JRBaseValueDisplay; import net.sf.jasperreports.charts.type.MeterShapeEnum; import net.sf.jasperreports.charts.util.JRMeterInterval; import net.sf.jasperreports.engine.JRChart; import net.sf.jasperreports.engine.JRChartPlot; import net.sf.jasperreports.engine.JRConstants; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRFont; import net.sf.jasperreports.engine.base.JRBaseFont; /** * A meter plot that displays a single value against a range of values. The * range can be further subdivided into multiple color coded regions. * * @author Barry Klawans (bklawans@users.sourceforge.net) * @version $Id: JRDesignMeterPlot.java 3676 2010-04-02 09:35:07Z shertage $ */ public class JRDesignMeterPlot extends JRBaseMeterPlot { /** * */ private static final long serialVersionUID = JRConstants.SERIAL_VERSION_UID; public static final String PROPERTY_DATA_RANGE = "dataRange"; public static final String PROPERTY_METER_ANGLE = "meterAngle"; public static final String PROPERTY_METER_BACKGROUND_COLOR = "meterBackgroundColor"; public static final String PROPERTY_NEEDLE_COLOR = "needleColor"; public static final String PROPERTY_SHAPE = "shape"; public static final String PROPERTY_TICK_COLOR = "tickColor"; public static final String PROPERTY_TICK_INTERVAL = "tickInterval"; public static final String PROPERTY_UNITS = "units"; public static final String PROPERTY_VALUE_DISPLAY = "valueDisplay"; public static final String PROPERTY_INTERVALS = "intervals"; public static final String PROPERTY_TICK_LABEL_FONT = "tickLabelFont"; /** * Construct a new meter plot by copying an existing one. * * @param meterPlot the plot to copy */ public JRDesignMeterPlot(JRChartPlot meterPlot, JRChart chart) { super(meterPlot, chart); } /** * Sets the range of values that the meter can display. Before changing * this for an existing meter you should clear any existing intervals to * ensure that you don't end up with intervals that are outside of the new * range. * * @param dataRange the range of values that the meter can display */ public void setDataRange(JRDataRange dataRange) throws JRException { Object old = this.dataRange; this.dataRange = dataRange; getEventSupport().firePropertyChange(PROPERTY_DATA_RANGE, old, this.dataRange); } /** * Sets the value display formatting options. * * @param valueDisplay how to show the textual representation of the value */ public void setValueDisplay(JRValueDisplay valueDisplay) { Object old = this.valueDisplay; this.valueDisplay = new JRBaseValueDisplay(valueDisplay, getChart()); getEventSupport().firePropertyChange(PROPERTY_VALUE_DISPLAY, old, this.valueDisplay); } /** * @deprecated Replaced by {@link #setShape(MeterShapeEnum)} */ public void setShape(byte shape) throws JRException { setShape(MeterShapeEnum.getByValue(shape)); } /** * @deprecated Replaced by {@link #setShape(MeterShapeEnum)} */ public void setShape(Byte shape) throws JRException { setShape(MeterShapeEnum.getByValue(shape)); } /** * Sets the shape of the meter. Must be one of * <code>MeterShapeEnum.CHORD</code>, <code>MeterShapeEnum.CIRCLE</code>, * <code>MeterShapeEnum.PIE</code> or <code>MeterShapeEnum.DIAL</code>. * * @param shape the shape of the meter * @throws JRException invalid shape was specified */ public void setShape(MeterShapeEnum shape) throws JRException { if (shape != null && (shape.getValue() < 0 || shape.getValue() > MeterShapeEnum.DIAL.getValue())) { throw new JRException("Unknown shape for MeterPlot"); } MeterShapeEnum old = this.shapeValue; this.shapeValue = shape; getEventSupport().firePropertyChange(PROPERTY_SHAPE, old, this.shapeValue); } /** * Adds an interval to the meter. An interval is used to indicate a * section of the meter. * * @param interval the interval to add to the meter */ public void addInterval(JRMeterInterval interval) { intervals.add(interval); getEventSupport().fireCollectionElementAddedEvent(PROPERTY_INTERVALS, interval, intervals.size() - 1); } /** * Removes all the intervals for the meter. */ public void clearIntervals() { setIntervals(null); } /** * Sets the meter intervals. * * @param intervals the list of meter intervals ({@link JRMeterInterval} instances) * @see #addInterval(JRMeterInterval) */ public void setIntervals(Collection intervals) { Object old = new ArrayList(this.intervals); this.intervals.clear(); if (intervals != null) { this.intervals.addAll(intervals); } getEventSupport().firePropertyChange(PROPERTY_INTERVALS, old, this.intervals); } /** * @deprecated Replaced by {@link #setMeterAngle(Integer)} */ public void setMeterAngle(int meterAngle) { setMeterAngle(Integer.valueOf(meterAngle)); } /** * Sets the size of the meter face in degrees. * * @param meterAngle the size of the meter in degrees */ public void setMeterAngle(Integer meterAngle) { Integer old = this.meterAngleInteger; this.meterAngleInteger = meterAngle; getEventSupport().firePropertyChange(PROPERTY_METER_ANGLE, old, this.meterAngleInteger); } /** * Sets the units string to use. This string is appended to the value * when it is displayed. * * @param units the units string to use */ public void setUnits(String units) { Object old = this.units; this.units = units; getEventSupport().firePropertyChange(PROPERTY_UNITS, old, this.units); } /** * @deprecated Replaced by {@link #setTickInterval(Double)} */ public void setTickInterval(double tickInterval) { setTickInterval(new Double(tickInterval)); } /** * Sets the space between tick marks on the face of the meter. The * spacing is relative to the range of the meter. If the meter is * displaying the range 100 to 200 and the tick interval is 20, four * tick marks will be shown, one each at 120, 140, 160 and 180. * * @param tickInterval the space between tick marks on the meter */ public void setTickInterval(Double tickInterval) { Double old = this.tickIntervalDouble; this.tickIntervalDouble = tickInterval; getEventSupport().firePropertyChange(PROPERTY_TICK_INTERVAL, old, this.tickIntervalDouble); } /** * Sets the color to use for the meter face. * * @param meterBackgroundColor the color to use for the meter face */ public void setMeterBackgroundColor(Color meterBackgroundColor) { Object old = this.meterBackgroundColor; this.meterBackgroundColor = meterBackgroundColor; getEventSupport().firePropertyChange(PROPERTY_METER_BACKGROUND_COLOR, old, this.meterBackgroundColor); } /** * Sets the color to use for the meter pointer. * * @param needleColor the color to use for the meter pointer */ public void setNeedleColor(Color needleColor) { Object old = this.needleColor; this.needleColor = needleColor; getEventSupport().firePropertyChange(PROPERTY_NEEDLE_COLOR, old, this.needleColor); } /** * Sets the color to use when drawing tick marks on the meter. * * @param tickColor the color to use when drawing tick marks */ public void setTickColor(Color tickColor) { Object old = this.tickColor; this.tickColor = tickColor; getEventSupport().firePropertyChange(PROPERTY_TICK_COLOR, old, this.tickColor); } /** * Sets the font to use when displaying the tick label. * * @param tickLabelFont the font to use when displaying the tick label */ public void setTickLabelFont(JRFont tickLabelFont) { Object old = this.tickLabelFont; this.tickLabelFont = new JRBaseFont(getChart(), tickLabelFont); getEventSupport().firePropertyChange(PROPERTY_TICK_LABEL_FONT, old, this.tickLabelFont); } }