edu.uci.ics.jung.visualization.BasicTransformer Maven / Gradle / Ivy
package edu.uci.ics.jung.visualization;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import edu.uci.ics.jung.visualization.transform.MutableAffineTransformer;
import edu.uci.ics.jung.visualization.transform.MutableTransformer;
import edu.uci.ics.jung.visualization.transform.shape.ShapeTransformer;
import edu.uci.ics.jung.visualization.util.ChangeEventSupport;
import edu.uci.ics.jung.visualization.util.DefaultChangeEventSupport;
/**
* A basic implementation of the MultiLayerTransformer interface that
* provides two Layers: VIEW and LAYOUT. It also provides ChangeEventSupport
* @author Tom Nelson - [email protected]
*
*/
public class BasicTransformer implements MultiLayerTransformer,
ShapeTransformer, ChangeListener, ChangeEventSupport {
protected ChangeEventSupport changeSupport =
new DefaultChangeEventSupport(this);
protected MutableTransformer viewTransformer =
new MutableAffineTransformer(new AffineTransform());
protected MutableTransformer layoutTransformer =
new MutableAffineTransformer(new AffineTransform());
/**
* Creates an instance and notifies the view and layout transformers to listen to
* changes published by this instance.
*/
public BasicTransformer() {
super();
viewTransformer.addChangeListener(this);
layoutTransformer.addChangeListener(this);
}
/**
* @see edu.uci.ics.jung.visualization.MultiLayerTransformer#setViewTransformer(edu.uci.ics.jung.visualization.transform.MutableTransformer)
*/
protected void setViewTransformer(MutableTransformer transformer) {
this.viewTransformer.removeChangeListener(this);
this.viewTransformer = transformer;
this.viewTransformer.addChangeListener(this);
}
/* (non-Javadoc)
* @see edu.uci.ics.jung.visualization.MultiLayerTransformer#setLayoutTransformer(edu.uci.ics.jung.visualization.transform.MutableTransformer)
*/
protected void setLayoutTransformer(MutableTransformer transformer) {
this.layoutTransformer.removeChangeListener(this);
this.layoutTransformer = transformer;
this.layoutTransformer.addChangeListener(this);
}
/* (non-Javadoc)
* @see edu.uci.ics.jung.visualization.MultiLayerTransformer#getLayoutTransformer()
*/
protected MutableTransformer getLayoutTransformer() {
return layoutTransformer;
}
/* (non-Javadoc)
* @see edu.uci.ics.jung.visualization.MultiLayerTransformer#getViewTransformer()
*/
protected MutableTransformer getViewTransformer() {
return viewTransformer;
}
/* (non-Javadoc)
* @see edu.uci.ics.jung.visualization.MultiLayerTransformer#inverseTransform(java.awt.geom.Point2D)
*/
public Point2D inverseTransform(Point2D p) {
return inverseLayoutTransform(inverseViewTransform(p));
}
/* (non-Javadoc)
* @see edu.uci.ics.jung.visualization.MultiLayerTransformer#inverseViewTransform(java.awt.geom.Point2D)
*/
protected Point2D inverseViewTransform(Point2D p) {
return viewTransformer.inverseTransform(p);
}
/* (non-Javadoc)
* @see edu.uci.ics.jung.visualization.MultiLayerTransformer#inverseLayoutTransform(java.awt.geom.Point2D)
*/
protected Point2D inverseLayoutTransform(Point2D p) {
return layoutTransformer.inverseTransform(p);
}
/* (non-Javadoc)
* @see edu.uci.ics.jung.visualization.MultiLayerTransformer#transform(java.awt.geom.Point2D)
*/
public Point2D transform(Point2D p) {
return viewTransform(layoutTransform(p));
}
/* (non-Javadoc)
* @see edu.uci.ics.jung.visualization.MultiLayerTransformer#viewTransform(java.awt.geom.Point2D)
*/
protected Point2D viewTransform(Point2D p) {
return viewTransformer.transform(p);
}
/* (non-Javadoc)
* @see edu.uci.ics.jung.visualization.MultiLayerTransformer#layoutTransform(java.awt.geom.Point2D)
*/
protected Point2D layoutTransform(Point2D p) {
return layoutTransformer.transform(p);
}
/* (non-Javadoc)
* @see edu.uci.ics.jung.visualization.MultiLayerTransformer#inverseTransform(java.awt.Shape)
*/
public Shape inverseTransform(Shape shape) {
return inverseLayoutTransform(inverseViewTransform(shape));
}
/* (non-Javadoc)
* @see edu.uci.ics.jung.visualization.MultiLayerTransformer#inverseViewTransform(java.awt.Shape)
*/
protected Shape inverseViewTransform(Shape shape) {
return viewTransformer.inverseTransform(shape);
}
/* (non-Javadoc)
* @see edu.uci.ics.jung.visualization.MultiLayerTransformer#inverseLayoutTransform(java.awt.Shape)
*/
protected Shape inverseLayoutTransform(Shape shape) {
return layoutTransformer.inverseTransform(shape);
}
/* (non-Javadoc)
* @see edu.uci.ics.jung.visualization.MultiLayerTransformer#transform(java.awt.Shape)
*/
public Shape transform(Shape shape) {
return viewTransform(layoutTransform(shape));
}
/* (non-Javadoc)
* @see edu.uci.ics.jung.visualization.MultiLayerTransformer#viewTransform(java.awt.Shape)
*/
protected Shape viewTransform(Shape shape) {
return viewTransformer.transform(shape);
}
/* (non-Javadoc)
* @see edu.uci.ics.jung.visualization.MultiLayerTransformer#layoutTransform(java.awt.Shape)
*/
protected Shape layoutTransform(Shape shape) {
return layoutTransformer.transform(shape);
}
/* (non-Javadoc)
* @see edu.uci.ics.jung.visualization.MultiLayerTransformer#setToIdentity()
*/
public void setToIdentity() {
layoutTransformer.setToIdentity();
viewTransformer.setToIdentity();
}
/* (non-Javadoc)
*/
public void addChangeListener(ChangeListener l) {
changeSupport.addChangeListener(l);
}
/* (non-Javadoc)
*/
public void removeChangeListener(ChangeListener l) {
changeSupport.removeChangeListener(l);
}
/* (non-Javadoc)
*/
public ChangeListener[] getChangeListeners() {
return changeSupport.getChangeListeners();
}
/* (non-Javadoc)
*/
public void fireStateChanged() {
changeSupport.fireStateChanged();
}
/* (non-Javadoc)
*/
public void stateChanged(ChangeEvent e) {
fireStateChanged();
}
public MutableTransformer getTransformer(Layer layer) {
if(layer == Layer.LAYOUT) return layoutTransformer;
if(layer == Layer.VIEW) return viewTransformer;
return null;
}
public Point2D inverseTransform(Layer layer, Point2D p) {
if(layer == Layer.LAYOUT) return inverseLayoutTransform(p);
if(layer == Layer.VIEW) return inverseViewTransform(p);
return null;
}
public void setTransformer(Layer layer, MutableTransformer transformer) {
if(layer == Layer.LAYOUT) setLayoutTransformer(transformer);
if(layer == Layer.VIEW) setViewTransformer(transformer);
}
public Point2D transform(Layer layer, Point2D p) {
if(layer == Layer.LAYOUT) return layoutTransform(p);
if(layer == Layer.VIEW) return viewTransform(p);
return null;
}
public Shape transform(Layer layer, Shape shape) {
if(layer == Layer.LAYOUT) return layoutTransform(shape);
if(layer == Layer.VIEW) return viewTransform(shape);
return null;
}
public Shape inverseTransform(Layer layer, Shape shape) {
if(layer == Layer.LAYOUT) return inverseLayoutTransform(shape);
if(layer == Layer.VIEW) return inverseViewTransform(shape);
return null;
}
}