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
18
19
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
36
37
38 public BasicTransformer() {
39 super();
40 viewTransformer.addChangeListener(this);
41 layoutTransformer.addChangeListener(this);
42 }
43
44
45
46
47 protected void setViewTransformer(MutableTransformer transformer) {
48 this.viewTransformer.removeChangeListener(this);
49 this.viewTransformer = transformer;
50 this.viewTransformer.addChangeListener(this);
51 }
52
53
54
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
64
65
66 protected MutableTransformer getLayoutTransformer() {
67 return layoutTransformer;
68 }
69
70
71
72
73 protected MutableTransformer getViewTransformer() {
74 return viewTransformer;
75 }
76
77
78
79
80 public Point2D inverseTransform(Point2D p) {
81 return inverseLayoutTransform(inverseViewTransform(p));
82 }
83
84
85
86
87 protected Point2D inverseViewTransform(Point2D p) {
88 return viewTransformer.inverseTransform(p);
89 }
90
91
92
93
94 protected Point2D inverseLayoutTransform(Point2D p) {
95 return layoutTransformer.inverseTransform(p);
96 }
97
98
99
100
101 public Point2D transform(Point2D p) {
102 return viewTransform(layoutTransform(p));
103 }
104
105
106
107
108 protected Point2D viewTransform(Point2D p) {
109 return viewTransformer.transform(p);
110 }
111
112
113
114
115 protected Point2D layoutTransform(Point2D p) {
116 return layoutTransformer.transform(p);
117 }
118
119
120
121
122 public Shape inverseTransform(Shape shape) {
123 return inverseLayoutTransform(inverseViewTransform(shape));
124 }
125
126
127
128
129 protected Shape inverseViewTransform(Shape shape) {
130 return viewTransformer.inverseTransform(shape);
131 }
132
133
134
135
136 protected Shape inverseLayoutTransform(Shape shape) {
137 return layoutTransformer.inverseTransform(shape);
138 }
139
140
141
142
143 public Shape transform(Shape shape) {
144 return viewTransform(layoutTransform(shape));
145 }
146
147
148
149
150 protected Shape viewTransform(Shape shape) {
151 return viewTransformer.transform(shape);
152 }
153
154
155
156
157 protected Shape layoutTransform(Shape shape) {
158 return layoutTransformer.transform(shape);
159 }
160
161
162
163
164 public void setToIdentity() {
165 layoutTransformer.setToIdentity();
166 viewTransformer.setToIdentity();
167 }
168
169
170
171 public void addChangeListener(ChangeListener l) {
172 changeSupport.addChangeListener(l);
173 }
174
175
176
177 public void removeChangeListener(ChangeListener l) {
178 changeSupport.removeChangeListener(l);
179 }
180
181
182
183 public ChangeListener[] getChangeListeners() {
184 return changeSupport.getChangeListeners();
185 }
186
187
188
189 public void fireStateChanged() {
190 changeSupport.fireStateChanged();
191 }
192
193
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 }