View Javadoc
1   package edu.uci.ics.jung.visualization;
2   
3   import java.awt.Shape;
4   import java.awt.geom.AffineTransform;
5   import java.awt.geom.Point2D;
6   
7   import javax.swing.event.ChangeEvent;
8   import javax.swing.event.ChangeListener;
9   
10  import edu.uci.ics.jung.visualization.transform.MutableAffineTransformer;
11  import edu.uci.ics.jung.visualization.transform.MutableTransformer;
12  import edu.uci.ics.jung.visualization.transform.shape.ShapeTransformer;
13  import edu.uci.ics.jung.visualization.util.ChangeEventSupport;
14  import edu.uci.ics.jung.visualization.util.DefaultChangeEventSupport;
15  
16  /**
17   * A basic implementation of the MultiLayerTransformer interface that 
18   * provides two Layers: VIEW and LAYOUT. It also provides ChangeEventSupport
19   * @author Tom Nelson - tomnelson@dev.java.net
20   *
21   */
22  public class BasicTransformer implements MultiLayerTransformer, 
23  	ShapeTransformer, ChangeListener, ChangeEventSupport  {
24  
25      protected ChangeEventSupport changeSupport =
26          new DefaultChangeEventSupport(this);
27  
28      protected MutableTransformer viewTransformer = 
29          new MutableAffineTransformer(new AffineTransform());
30      
31      protected MutableTransformer layoutTransformer =
32          new MutableAffineTransformer(new AffineTransform());
33  
34      /**
35       * Creates an instance and notifies the view and layout transformers to listen to
36       * changes published by this instance.
37       */
38      public BasicTransformer() {
39  		super();
40  		viewTransformer.addChangeListener(this);
41  		layoutTransformer.addChangeListener(this);
42  	}
43  
44      /**
45  	 * @see edu.uci.ics.jung.visualization.MultiLayerTransformer#setViewTransformer(edu.uci.ics.jung.visualization.transform.MutableTransformer)
46  	 */
47      protected void setViewTransformer(MutableTransformer transformer) {
48          this.viewTransformer.removeChangeListener(this);
49          this.viewTransformer = transformer;
50          this.viewTransformer.addChangeListener(this);
51      }
52  
53      /* (non-Javadoc)
54  	 * @see edu.uci.ics.jung.visualization.MultiLayerTransformer#setLayoutTransformer(edu.uci.ics.jung.visualization.transform.MutableTransformer)
55  	 */
56      protected void setLayoutTransformer(MutableTransformer transformer) {
57          this.layoutTransformer.removeChangeListener(this);
58          this.layoutTransformer = transformer;
59          this.layoutTransformer.addChangeListener(this);
60      }
61  
62  
63  	/* (non-Javadoc)
64  	 * @see edu.uci.ics.jung.visualization.MultiLayerTransformer#getLayoutTransformer()
65  	 */
66  	protected MutableTransformer getLayoutTransformer() {
67  		return layoutTransformer;
68  	}
69  
70  	/* (non-Javadoc)
71  	 * @see edu.uci.ics.jung.visualization.MultiLayerTransformer#getViewTransformer()
72  	 */
73  	protected MutableTransformer getViewTransformer() {
74  		return viewTransformer;
75  	}
76  
77  	/* (non-Javadoc)
78  	 * @see edu.uci.ics.jung.visualization.MultiLayerTransformer#inverseTransform(java.awt.geom.Point2D)
79  	 */
80  	public Point2D inverseTransform(Point2D p) {
81  	    return inverseLayoutTransform(inverseViewTransform(p));
82  	}
83  	
84  	/* (non-Javadoc)
85  	 * @see edu.uci.ics.jung.visualization.MultiLayerTransformer#inverseViewTransform(java.awt.geom.Point2D)
86  	 */
87  	protected Point2D inverseViewTransform(Point2D p) {
88  	    return viewTransformer.inverseTransform(p);
89  	}
90  
91      /* (non-Javadoc)
92  	 * @see edu.uci.ics.jung.visualization.MultiLayerTransformer#inverseLayoutTransform(java.awt.geom.Point2D)
93  	 */
94      protected Point2D inverseLayoutTransform(Point2D p) {
95          return layoutTransformer.inverseTransform(p);
96      }
97  
98  	/* (non-Javadoc)
99  	 * @see edu.uci.ics.jung.visualization.MultiLayerTransformer#transform(java.awt.geom.Point2D)
100 	 */
101 	public Point2D transform(Point2D p) {
102 	    return viewTransform(layoutTransform(p));
103 	}
104     
105     /* (non-Javadoc)
106 	 * @see edu.uci.ics.jung.visualization.MultiLayerTransformer#viewTransform(java.awt.geom.Point2D)
107 	 */
108     protected Point2D viewTransform(Point2D p) {
109         return viewTransformer.transform(p);
110     }
111     
112     /* (non-Javadoc)
113 	 * @see edu.uci.ics.jung.visualization.MultiLayerTransformer#layoutTransform(java.awt.geom.Point2D)
114 	 */
115     protected Point2D layoutTransform(Point2D p) {
116         return layoutTransformer.transform(p);
117     }
118     
119 	/* (non-Javadoc)
120 	 * @see edu.uci.ics.jung.visualization.MultiLayerTransformer#inverseTransform(java.awt.Shape)
121 	 */
122 	public Shape inverseTransform(Shape shape) {
123 	    return inverseLayoutTransform(inverseViewTransform(shape));
124 	}
125 	
126 	/* (non-Javadoc)
127 	 * @see edu.uci.ics.jung.visualization.MultiLayerTransformer#inverseViewTransform(java.awt.Shape)
128 	 */
129 	protected Shape inverseViewTransform(Shape shape) {
130 	    return viewTransformer.inverseTransform(shape);
131 	}
132 
133     /* (non-Javadoc)
134 	 * @see edu.uci.ics.jung.visualization.MultiLayerTransformer#inverseLayoutTransform(java.awt.Shape)
135 	 */
136     protected Shape inverseLayoutTransform(Shape shape) {
137         return layoutTransformer.inverseTransform(shape);
138     }
139 
140 	/* (non-Javadoc)
141 	 * @see edu.uci.ics.jung.visualization.MultiLayerTransformer#transform(java.awt.Shape)
142 	 */
143 	public Shape transform(Shape shape) {
144 	    return viewTransform(layoutTransform(shape));
145 	}
146     
147     /* (non-Javadoc)
148 	 * @see edu.uci.ics.jung.visualization.MultiLayerTransformer#viewTransform(java.awt.Shape)
149 	 */
150     protected Shape viewTransform(Shape shape) {
151         return viewTransformer.transform(shape);
152     }
153     
154     /* (non-Javadoc)
155 	 * @see edu.uci.ics.jung.visualization.MultiLayerTransformer#layoutTransform(java.awt.Shape)
156 	 */
157     protected Shape layoutTransform(Shape shape) {
158         return layoutTransformer.transform(shape);
159     }
160     
161     /* (non-Javadoc)
162 	 * @see edu.uci.ics.jung.visualization.MultiLayerTransformer#setToIdentity()
163 	 */
164     public void setToIdentity() {
165     	layoutTransformer.setToIdentity();
166     	viewTransformer.setToIdentity();
167     }
168     
169     /* (non-Javadoc)
170      */
171     public void addChangeListener(ChangeListener l) {
172         changeSupport.addChangeListener(l);
173     }
174     
175     /* (non-Javadoc)
176      */
177     public void removeChangeListener(ChangeListener l) {
178         changeSupport.removeChangeListener(l);
179     }
180     
181     /* (non-Javadoc)
182      */
183     public ChangeListener[] getChangeListeners() {
184         return changeSupport.getChangeListeners();
185     }
186 
187     /* (non-Javadoc)
188      */
189     public void fireStateChanged() {
190         changeSupport.fireStateChanged();
191     }   
192     
193 	/* (non-Javadoc)
194      */
195 	public void stateChanged(ChangeEvent e) {
196 	    fireStateChanged();
197 	}
198 
199 	public MutableTransformer getTransformer(Layer layer) {
200 		if(layer == Layer.LAYOUT) return layoutTransformer;
201 		if(layer == Layer.VIEW) return viewTransformer;
202 		return null;
203 	}
204 
205 	public Point2D inverseTransform(Layer layer, Point2D p) {
206 		if(layer == Layer.LAYOUT) return inverseLayoutTransform(p);
207 		if(layer == Layer.VIEW) return inverseViewTransform(p);
208 		return null;
209 	}
210 
211 	public void setTransformer(Layer layer, MutableTransformer transformer) {
212 		if(layer == Layer.LAYOUT) setLayoutTransformer(transformer);
213 		if(layer == Layer.VIEW) setViewTransformer(transformer);
214 		
215 	}
216 
217 	public Point2D transform(Layer layer, Point2D p) {
218 		if(layer == Layer.LAYOUT) return layoutTransform(p);
219 		if(layer == Layer.VIEW) return viewTransform(p);
220 		return null;
221 	}
222 
223 	public Shape transform(Layer layer, Shape shape) {
224 		if(layer == Layer.LAYOUT) return layoutTransform(shape);
225 		if(layer == Layer.VIEW) return viewTransform(shape);
226 		return null;
227 	}
228 	
229 	public Shape inverseTransform(Layer layer, Shape shape) {
230 		if(layer == Layer.LAYOUT) return inverseLayoutTransform(shape);
231 		if(layer == Layer.VIEW) return inverseViewTransform(shape);
232 		return null;
233 	}
234 
235 }