1
2
3
4
5
6
7
8
9
10 package edu.uci.ics.jung.visualization;
11
12 import java.awt.Dimension;
13 import java.awt.event.KeyListener;
14 import java.awt.event.MouseAdapter;
15 import java.awt.event.MouseEvent;
16 import java.awt.event.MouseListener;
17 import java.awt.event.MouseMotionListener;
18 import java.awt.event.MouseWheelListener;
19 import java.awt.geom.Point2D;
20
21 import javax.swing.ToolTipManager;
22
23 import com.google.common.base.Function;
24
25 import edu.uci.ics.jung.algorithms.layout.Layout;
26 import edu.uci.ics.jung.visualization.control.GraphMouseListener;
27 import edu.uci.ics.jung.visualization.control.MouseListenerTranslator;
28
29
30
31
32
33
34
35
36 @SuppressWarnings("serial")
37 public class VisualizationViewer<V,E> extends BasicVisualizationServer<V,E> {
38
39 protected Function<? super V,String> vertexToolTipTransformer;
40 protected Function<? super E,String> edgeToolTipTransformer;
41 protected Function<MouseEvent,String> mouseEventToolTipTransformer;
42
43
44
45
46
47 protected GraphMouse graphMouse;
48
49 protected MouseListener requestFocusListener = new MouseAdapter() {
50 public void mouseClicked(MouseEvent e) {
51 requestFocusInWindow();
52 }
53 };
54
55
56 public VisualizationViewer(Layout<V,E> layout) {
57 this(new DefaultVisualizationModel<V,E>(layout));
58 }
59
60 public VisualizationViewer(Layout<V,E> layout, Dimension preferredSize) {
61 this(new DefaultVisualizationModel<V,E>(layout, preferredSize), preferredSize);
62 }
63
64 public VisualizationViewer(VisualizationModel<V,E> model) {
65 this(model, new Dimension(600,600));
66 }
67
68 public VisualizationViewer(VisualizationModel<V,E> model,
69 Dimension preferredSize) {
70 super(model, preferredSize);
71 setFocusable(true);
72 addMouseListener(requestFocusListener);
73 }
74
75
76
77
78
79
80
81 public void setGraphMouse(GraphMouse graphMouse) {
82 this.graphMouse = graphMouse;
83 MouseListener[] ml = getMouseListeners();
84 for(int i=0; i<ml.length; i++) {
85 if(ml[i] instanceof GraphMouse) {
86 removeMouseListener(ml[i]);
87 }
88 }
89 MouseMotionListener[] mml = getMouseMotionListeners();
90 for(int i=0; i<mml.length; i++) {
91 if(mml[i] instanceof GraphMouse) {
92 removeMouseMotionListener(mml[i]);
93 }
94 }
95 MouseWheelListener[] mwl = getMouseWheelListeners();
96 for(int i=0; i<mwl.length; i++) {
97 if(mwl[i] instanceof GraphMouse) {
98 removeMouseWheelListener(mwl[i]);
99 }
100 }
101 addMouseListener(graphMouse);
102 addMouseMotionListener(graphMouse);
103 addMouseWheelListener(graphMouse);
104 }
105
106
107
108
109 public GraphMouse getGraphMouse() {
110 return graphMouse;
111 }
112
113
114
115
116
117
118 public void addGraphMouseListener( GraphMouseListener<V> gel ) {
119 addMouseListener( new MouseListenerTranslator<V,E>( gel, this ));
120 }
121
122
123
124
125
126 @Override
127 public synchronized void addKeyListener(KeyListener l) {
128 super.addKeyListener(l);
129 }
130
131
132
133
134 public void setEdgeToolTipTransformer(
135 Function<? super E, String> edgeToolTipTransformer) {
136 this.edgeToolTipTransformer = edgeToolTipTransformer;
137 ToolTipManager.sharedInstance().registerComponent(this);
138 }
139
140
141
142
143 public void setMouseEventToolTipTransformer(
144 Function<MouseEvent, String> mouseEventToolTipTransformer) {
145 this.mouseEventToolTipTransformer = mouseEventToolTipTransformer;
146 ToolTipManager.sharedInstance().registerComponent(this);
147 }
148
149
150
151
152 public void setVertexToolTipTransformer(
153 Function<? super V, String> vertexToolTipTransformer) {
154 this.vertexToolTipTransformer = vertexToolTipTransformer;
155 ToolTipManager.sharedInstance().registerComponent(this);
156 }
157
158
159
160
161 public String getToolTipText(MouseEvent event) {
162 Layout<V,E> layout = getGraphLayout();
163 Point2D p = null;
164 if(vertexToolTipTransformer != null) {
165 p = event.getPoint();
166
167 V vertex = getPickSupport().getVertex(layout, p.getX(), p.getY());
168 if(vertex != null) {
169 return vertexToolTipTransformer.apply(vertex);
170 }
171 }
172 if(edgeToolTipTransformer != null) {
173 if(p == null) p = renderContext.getMultiLayerTransformer().inverseTransform(Layer.VIEW, event.getPoint());
174 E edge = getPickSupport().getEdge(layout, p.getX(), p.getY());
175 if(edge != null) {
176 return edgeToolTipTransformer.apply(edge);
177 }
178 }
179 if(mouseEventToolTipTransformer != null) {
180 return mouseEventToolTipTransformer.apply(event);
181 }
182 return super.getToolTipText(event);
183 }
184
185
186
187
188
189 public interface GraphMouse extends MouseListener, MouseMotionListener, MouseWheelListener {}
190
191 }