/*
* APointPainter.java of project jchart2d, adapter class
* that implements the optional methods of the interface
* IPointPainter with "no operations".
* Copyright (c) 2006 - 2011 Achim Westermann, created on 03.09.2006 20:27:06.
*
* This library 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 2.1 of the License, or (at your option) any later version.
*
* This library 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 this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA*
* If you modify or optimize the code in a useful way please let me know.
* Achim.Westermann@gmx.de
*
*/
package info.monitorenter.gui.chart.pointpainters;
import info.monitorenter.gui.chart.IPointPainter;
import info.monitorenter.gui.chart.IPointPainterConfigurableUI;
import info.monitorenter.gui.util.ColorMutable;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Stroke;
/**
* Adapter class that implements optional methods of
* <code>{@link IPointPainter}</code> as "no operation".
* <p>
*
* @param <T>
* needed for generic comparable<T>.
*
* @author Achim Westermann
*
* @version $Revision: 1.13 $
*
* @since 3.0.0
*/
public abstract class APointPainter<T extends IPointPainterConfigurableUI<T>> implements
IPointPainterConfigurableUI<T> {
/** Generated <code>serialVersionUID</code>. **/
private static final long serialVersionUID = -8279972259015294590L;
/** Color used for paint operations. */
private final ColorMutable m_color = new ColorMutable();
/** Color used for fill operations. */
private final ColorMutable m_colorFill = new ColorMutable();
/** Stroke used for paint operations. */
private Stroke m_stroke = null;
/**
* Default constructor (sets the consumed by paint flag to false).
* <p>
*/
public APointPainter() {
// nop
}
/**
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
public final int compareTo(final T arg0) {
return this.hashCode() - arg0.hashCode();
}
/**
* @see info.monitorenter.gui.chart.IPointPainter#endPaintIteration(java.awt.Graphics)
*/
public void endPaintIteration(final Graphics g2d) {
// nop
}
/**
* Caution: <code>{@link ClassCastException}</code> thrown if wrong type
* given.
* <p>
*
* @see java.lang.Object#equals(java.lang.Object)
*/
// @SuppressWarnings("unchecked")
// @Override
// public final boolean equals(Object arg0) {
// boolean result = false;
// if (arg0.getClass() == this.getClass()) {
// result = this.compareTo((T) arg0) == 0;
// }
// return result;
// }
/**
*
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(final Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (this.getClass() != obj.getClass()) {
return false;
}
final APointPainter< ? > other = (APointPainter< ? >) obj;
if (this.m_color == null) {
if (other.m_color != null) {
return false;
}
} else if (!this.m_color.equals(other.m_color)) {
return false;
}
if (this.m_colorFill == null) {
if (other.m_colorFill != null) {
return false;
}
} else if (!this.m_colorFill.equals(other.m_colorFill)) {
return false;
}
if (this.m_stroke == null) {
if (other.m_stroke != null) {
return false;
}
} else if (!this.m_stroke.equals(other.m_stroke)) {
return false;
}
return true;
}
/**
* @see info.monitorenter.gui.chart.IPointPainterConfigurableUI#getColor()
*/
public Color getColor() {
return this.m_color.getColor();
}
/**
* @see info.monitorenter.gui.chart.IPointPainterConfigurableUI#getColorFill()
*/
public Color getColorFill() {
return this.m_colorFill.getColor();
}
/**
* @see info.monitorenter.gui.chart.IPointPainterConfigurableUI#getStroke()
*/
public Stroke getStroke() {
return this.m_stroke;
}
/**
* @see info.monitorenter.gui.chart.IPointPainterConfigurableUI#getTransparency()
*/
public int getTransparency() {
return this.m_color.getAlpha();
}
/**
* @see info.monitorenter.gui.chart.IPointPainterConfigurableUI#getTransparencyFill()
*/
public int getTransparencyFill() {
return this.m_colorFill.getAlpha();
}
/**
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((this.m_color == null) ? 0 : this.m_color.hashCode());
result = prime * result + ((this.m_colorFill == null) ? 0 : this.m_colorFill.hashCode());
result = prime * result + ((this.m_stroke == null) ? 0 : this.m_stroke.hashCode());
return result;
}
/**
* Installs the color to the graphics context if and only if a color has been
* set.
* <p>
*
* @see #setColor(Color)
*
* @param g
* the graphics context to use.
*
* @return the previous color of the graphics context or <code>null</code> if
* no action was taken.
*/
protected Color installColor(final Graphics g) {
return this.m_color.applyColorIfChange(g);
}
/**
* Installs the fill color to the graphics context if and only if a fill color
* has been set.
* <p>
*
* @see #setColorFill(Color)
*
* @param g
* the graphics context to use.
*
* @return the previous color of the graphics context or <code>null</code> if
* no action was taken.
*/
protected Color installColorFill(final Graphics g) {
return this.m_colorFill.applyColorUnconditionally(g);
}
/**
* Installs the stroke to the graphics context if and only if a stroke has
* been set.
* <p>
*
* @see #setStroke(Stroke)
*
* @param g
* the graphics context to use.
*
* @return the previous stroke of the graphics context or <code>null</code> if
* no action was taken.
*/
protected Stroke installStroke(final Graphics g) {
Stroke result = null;
if (this.m_stroke != null) {
if (g instanceof Graphics2D) {
final Graphics2D g2d = (Graphics2D) g;
result = g2d.getStroke();
g2d.setStroke(this.m_stroke);
} else {
System.out.println("Cannot use stroke as given graphic context is of wrong type: "
+ g.getClass().getName());
}
}
return result;
}
/**
* @see info.monitorenter.gui.chart.IPointPainterConfigurableUI#setColor(java.awt.Color)
*/
public Color setColor(final Color color) {
final Color result = this.m_color.setColor(color);
return result;
}
/**
* @see info.monitorenter.gui.chart.IPointPainterConfigurableUI#setColorFill(java.awt.Color)
*/
public Color setColorFill(final Color fillColor) {
return this.m_colorFill.setColor(fillColor);
}
/**
* @see info.monitorenter.gui.chart.IPointPainterConfigurableUI#setStroke(java.awt.Stroke)
*/
public Stroke setStroke(final Stroke stroke) {
final Stroke result = this.m_stroke;
this.m_stroke = stroke;
return result;
}
/**
* @see info.monitorenter.gui.chart.IPointPainterConfigurableUI#setTransparency(int)
*/
public int setTransparency(final int transparency0to255) {
return this.m_color.setAlpha(transparency0to255);
}
/**
* @see info.monitorenter.gui.chart.IPointPainterConfigurableUI#setTransparencyFill(int)
*/
public int setTransparencyFill(final int transparency0to255) {
return this.m_colorFill.setAlpha(transparency0to255);
}
/**
* @see info.monitorenter.gui.chart.IPointPainter#startPaintIteration(java.awt.Graphics)
*/
public void startPaintIteration(final Graphics g2d) {
// nop
}
}