001 /* ===========================================================
002 * JFreeChart : a free chart library for the Java(tm) platform
003 * ===========================================================
004 *
005 * (C) Copyright 2000-2007, by Object Refinery Limited and Contributors.
006 *
007 * Project Info: http://www.jfree.org/jfreechart/index.html
008 *
009 * This library is free software; you can redistribute it and/or modify it
010 * under the terms of the GNU Lesser General Public License as published by
011 * the Free Software Foundation; either version 2.1 of the License, or
012 * (at your option) any later version.
013 *
014 * This library is distributed in the hope that it will be useful, but
015 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
016 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
017 * License for more details.
018 *
019 * You should have received a copy of the GNU Lesser General Public
020 * License along with this library; if not, write to the Free Software
021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
022 * USA.
023 *
024 * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
025 * in the United States and other countries.]
026 *
027 * -------------------
028 * IntervalMarker.java
029 * -------------------
030 * (C) Copyright 2002-2007, by Object Refinery Limited.
031 *
032 * Original Author: David Gilbert (for Object Refinery Limited);
033 * Contributor(s): -;
034 *
035 * Changes
036 * -------
037 * 20-Aug-2002 : Added stroke to constructor in Marker class (DG);
038 * 02-Oct-2002 : Fixed errors reported by Checkstyle (DG);
039 * 26-Mar-2003 : Implemented Serializable (DG);
040 * ------------- JFREECHART 1.0.x ---------------------------------------------
041 * 05-Sep-2006 : Added MarkerChangeEvent notification (DG);
042 * 18-Dec-2007 : Added new constructor (DG);
043 *
044 */
045
046 package org.jfree.chart.plot;
047
048 import java.awt.BasicStroke;
049 import java.awt.Color;
050 import java.awt.Paint;
051 import java.awt.Stroke;
052 import java.io.Serializable;
053
054 import org.jfree.chart.event.MarkerChangeEvent;
055 import org.jfree.ui.GradientPaintTransformer;
056 import org.jfree.ui.LengthAdjustmentType;
057 import org.jfree.util.ObjectUtilities;
058
059 /**
060 * Represents an interval to be highlighted in some way.
061 */
062 public class IntervalMarker extends Marker implements Cloneable, Serializable {
063
064 /** For serialization. */
065 private static final long serialVersionUID = -1762344775267627916L;
066
067 /** The start value. */
068 private double startValue;
069
070 /** The end value. */
071 private double endValue;
072
073 /** The gradient paint transformer (optional). */
074 private GradientPaintTransformer gradientPaintTransformer;
075
076 /**
077 * Constructs an interval marker.
078 *
079 * @param start the start of the interval.
080 * @param end the end of the interval.
081 */
082 public IntervalMarker(double start, double end) {
083 this(start, end, Color.gray, new BasicStroke(0.5f), Color.gray,
084 new BasicStroke(0.5f), 0.8f);
085 }
086
087 /**
088 * Creates a new interval marker with the specified range and fill paint.
089 * The outline paint and stroke default to <code>null</code>.
090 *
091 * @param start the lower bound of the interval.
092 * @param end the upper bound of the interval.
093 * @param paint the fill paint (<code>null</code> not permitted).
094 *
095 * @since 1.0.9
096 */
097 public IntervalMarker(double start, double end, Paint paint) {
098 this(start, end, paint, new BasicStroke(0.5f), null, null, 0.8f);
099 }
100
101 /**
102 * Constructs an interval marker.
103 *
104 * @param start the start of the interval.
105 * @param end the end of the interval.
106 * @param paint the paint (<code>null</code> not permitted).
107 * @param stroke the stroke (<code>null</code> not permitted).
108 * @param outlinePaint the outline paint.
109 * @param outlineStroke the outline stroke.
110 * @param alpha the alpha transparency.
111 */
112 public IntervalMarker(double start, double end,
113 Paint paint, Stroke stroke,
114 Paint outlinePaint, Stroke outlineStroke,
115 float alpha) {
116
117 super(paint, stroke, outlinePaint, outlineStroke, alpha);
118 this.startValue = start;
119 this.endValue = end;
120 this.gradientPaintTransformer = null;
121 setLabelOffsetType(LengthAdjustmentType.CONTRACT);
122
123 }
124
125 /**
126 * Returns the start value for the interval.
127 *
128 * @return The start value.
129 */
130 public double getStartValue() {
131 return this.startValue;
132 }
133
134 /**
135 * Sets the start value for the marker and sends a
136 * {@link MarkerChangeEvent} to all registered listeners.
137 *
138 * @param value the value.
139 *
140 * @since 1.0.3
141 */
142 public void setStartValue(double value) {
143 this.startValue = value;
144 notifyListeners(new MarkerChangeEvent(this));
145 }
146
147 /**
148 * Returns the end value for the interval.
149 *
150 * @return The end value.
151 */
152 public double getEndValue() {
153 return this.endValue;
154 }
155
156 /**
157 * Sets the end value for the marker and sends a
158 * {@link MarkerChangeEvent} to all registered listeners.
159 *
160 * @param value the value.
161 *
162 * @since 1.0.3
163 */
164 public void setEndValue(double value) {
165 this.endValue = value;
166 notifyListeners(new MarkerChangeEvent(this));
167 }
168
169 /**
170 * Returns the gradient paint transformer.
171 *
172 * @return The gradient paint transformer (possibly <code>null</code>).
173 */
174 public GradientPaintTransformer getGradientPaintTransformer() {
175 return this.gradientPaintTransformer;
176 }
177
178 /**
179 * Sets the gradient paint transformer and sends a
180 * {@link MarkerChangeEvent} to all registered listeners.
181 *
182 * @param transformer the transformer (<code>null</code> permitted).
183 */
184 public void setGradientPaintTransformer(
185 GradientPaintTransformer transformer) {
186 this.gradientPaintTransformer = transformer;
187 notifyListeners(new MarkerChangeEvent(this));
188 }
189
190 /**
191 * Tests the marker for equality with an arbitrary object.
192 *
193 * @param obj the object (<code>null</code> permitted).
194 *
195 * @return A boolean.
196 */
197 public boolean equals(Object obj) {
198 if (obj == this) {
199 return true;
200 }
201 if (!(obj instanceof IntervalMarker)) {
202 return false;
203 }
204 if (!super.equals(obj)) {
205 return false;
206 }
207 IntervalMarker that = (IntervalMarker) obj;
208 if (this.startValue != that.startValue) {
209 return false;
210 }
211 if (this.endValue != that.endValue) {
212 return false;
213 }
214 if (!ObjectUtilities.equal(this.gradientPaintTransformer,
215 that.gradientPaintTransformer)) {
216 return false;
217 }
218 return true;
219 }
220
221 /**
222 * Returns a clone of the marker.
223 *
224 * @return A clone.
225 *
226 * @throws CloneNotSupportedException Not thrown by this class, but the
227 * exception is declared for the use of subclasses.
228 */
229 public Object clone() throws CloneNotSupportedException {
230 return super.clone();
231 }
232
233 }