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 protected void setViewTransformer(MutableTransformer Function) {
45 this.viewTransformer.removeChangeListener(this);
46 this.viewTransformer = Function;
47 this.viewTransformer.addChangeListener(this);
48 }
49
50 protected void setLayoutTransformer(MutableTransformer Function) {
51 this.layoutTransformer.removeChangeListener(this);
52 this.layoutTransformer = Function;
53 this.layoutTransformer.addChangeListener(this);
54 }
55
56
57 protected MutableTransformer getLayoutTransformer() {
58 return layoutTransformer;
59 }
60
61 protected MutableTransformer getViewTransformer() {
62 return viewTransformer;
63 }
64
65 public Point2D inverseTransform(Point2D p) {
66 return inverseLayoutTransform(inverseViewTransform(p));
67 }
68
69 protected Point2D inverseViewTransform(Point2D p) {
70 return viewTransformer.inverseTransform(p);
71 }
72
73 protected Point2D inverseLayoutTransform(Point2D p) {
74 return layoutTransformer.inverseTransform(p);
75 }
76
77 public Point2D transform(Point2D p) {
78 return viewTransform(layoutTransform(p));
79 }
80
81 protected Point2D viewTransform(Point2D p) {
82 return viewTransformer.transform(p);
83 }
84
85 protected Point2D layoutTransform(Point2D p) {
86 return layoutTransformer.transform(p);
87 }
88
89 public Shape inverseTransform(Shape shape) {
90 return inverseLayoutTransform(inverseViewTransform(shape));
91 }
92
93 protected Shape inverseViewTransform(Shape shape) {
94 return viewTransformer.inverseTransform(shape);
95 }
96
97 protected Shape inverseLayoutTransform(Shape shape) {
98 return layoutTransformer.inverseTransform(shape);
99 }
100
101 public Shape transform(Shape shape) {
102 return viewTransform(layoutTransform(shape));
103 }
104
105 protected Shape viewTransform(Shape shape) {
106 return viewTransformer.transform(shape);
107 }
108
109 protected Shape layoutTransform(Shape shape) {
110 return layoutTransformer.transform(shape);
111 }
112
113 public void setToIdentity() {
114 layoutTransformer.setToIdentity();
115 viewTransformer.setToIdentity();
116 }
117
118 public void addChangeListener(ChangeListener l) {
119 changeSupport.addChangeListener(l);
120 }
121
122 public void removeChangeListener(ChangeListener l) {
123 changeSupport.removeChangeListener(l);
124 }
125
126 public ChangeListener[] getChangeListeners() {
127 return changeSupport.getChangeListeners();
128 }
129
130 public void fireStateChanged() {
131 changeSupport.fireStateChanged();
132 }
133
134 public void stateChanged(ChangeEvent e) {
135 fireStateChanged();
136 }
137
138 public MutableTransformer getTransformer(Layer layer) {
139 if(layer == Layer.LAYOUT) return layoutTransformer;
140 if(layer == Layer.VIEW) return viewTransformer;
141 return null;
142 }
143
144 public Point2D inverseTransform(Layer layer, Point2D p) {
145 if(layer == Layer.LAYOUT) return inverseLayoutTransform(p);
146 if(layer == Layer.VIEW) return inverseViewTransform(p);
147 return null;
148 }
149
150 public void setTransformer(Layer layer, MutableTransformer Function) {
151 if(layer == Layer.LAYOUT) setLayoutTransformer(Function);
152 if(layer == Layer.VIEW) setViewTransformer(Function);
153
154 }
155
156 public Point2D transform(Layer layer, Point2D p) {
157 if(layer == Layer.LAYOUT) return layoutTransform(p);
158 if(layer == Layer.VIEW) return viewTransform(p);
159 return null;
160 }
161
162 public Shape transform(Layer layer, Shape shape) {
163 if(layer == Layer.LAYOUT) return layoutTransform(shape);
164 if(layer == Layer.VIEW) return viewTransform(shape);
165 return null;
166 }
167
168 public Shape inverseTransform(Layer layer, Shape shape) {
169 if(layer == Layer.LAYOUT) return inverseLayoutTransform(shape);
170 if(layer == Layer.VIEW) return inverseViewTransform(shape);
171 return null;
172 }
173 }