1
2
3
4
5
6
7
8
9
10
11 package edu.uci.ics.jung.visualization.control;
12
13 import java.awt.Color;
14 import java.awt.Dimension;
15 import java.awt.Graphics;
16 import java.awt.Graphics2D;
17 import java.awt.Shape;
18 import java.awt.geom.AffineTransform;
19
20 import edu.uci.ics.jung.visualization.Layer;
21 import edu.uci.ics.jung.visualization.VisualizationViewer;
22 import edu.uci.ics.jung.visualization.transform.MutableAffineTransformer;
23 import edu.uci.ics.jung.visualization.transform.shape.ShapeTransformer;
24
25
26
27
28
29
30
31
32
33
34
35
36
37 @SuppressWarnings("serial")
38 public class SatelliteVisualizationViewer<V, E>
39 extends VisualizationViewer<V,E> {
40
41
42
43
44 protected VisualizationViewer<V,E> master;
45
46
47
48
49
50 public SatelliteVisualizationViewer(VisualizationViewer<V,E> master,
51 Dimension preferredSize) {
52 super(master.getModel(), preferredSize);
53 this.master = master;
54
55
56 ModalGraphMouse gm = new ModalSatelliteGraphMouse();
57 setGraphMouse(gm);
58
59
60 addPreRenderPaintable(new ViewLens<V,E>(this, master));
61
62
63
64 AffineTransform modelLayoutTransform =
65 new AffineTransform(master.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.LAYOUT).getTransform());
66
67
68
69 getRenderContext().getMultiLayerTransformer().setTransformer(Layer.LAYOUT, new MutableAffineTransformer(modelLayoutTransform));
70
71
72 master.addChangeListener(this);
73
74
75 setPickedVertexState(master.getPickedVertexState());
76 setPickedEdgeState(master.getPickedEdgeState());
77 }
78
79
80
81
82 public VisualizationViewer<V,E> getMaster() {
83 return master;
84 }
85
86
87
88
89
90
91
92
93
94 static class ViewLens<V,E> implements Paintable {
95
96 VisualizationViewer<V,E> master;
97 VisualizationViewer<V,E> vv;
98
99 public ViewLens(VisualizationViewer<V,E> vv, VisualizationViewer<V,E> master) {
100 this.vv = vv;
101 this.master = master;
102 }
103 public void paint(Graphics g) {
104 ShapeTransformer masterViewTransformer =
105 master.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW);
106 ShapeTransformer masterLayoutTransformer = master.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.LAYOUT);
107 ShapeTransformer vvLayoutTransformer = vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.LAYOUT);
108
109 Shape lens = master.getBounds();
110 lens = masterViewTransformer.inverseTransform(lens);
111 lens = masterLayoutTransformer.inverseTransform(lens);
112 lens = vvLayoutTransformer.transform(lens);
113 Graphics2D g2d = (Graphics2D)g;
114 Color old = g.getColor();
115 Color lensColor = master.getBackground();
116 vv.setBackground(lensColor.darker());
117 g.setColor(lensColor);
118 g2d.fill(lens);
119 g.setColor(Color.gray);
120 g2d.draw(lens);
121 g.setColor(old);
122 }
123
124 public boolean useTransform() {
125 return true;
126 }
127 }
128
129 }