1
2
3
4
5
6
7
8
9
10
11 package edu.uci.ics.jung.visualization.transform.shape;
12
13 import java.awt.Dimension;
14
15 import edu.uci.ics.jung.algorithms.layout.GraphElementAccessor;
16 import edu.uci.ics.jung.visualization.Layer;
17 import edu.uci.ics.jung.visualization.RenderContext;
18 import edu.uci.ics.jung.visualization.VisualizationViewer;
19 import edu.uci.ics.jung.visualization.control.ModalGraphMouse;
20 import edu.uci.ics.jung.visualization.control.ModalLensGraphMouse;
21 import edu.uci.ics.jung.visualization.picking.ViewLensShapePickSupport;
22 import edu.uci.ics.jung.visualization.renderers.BasicRenderer;
23 import edu.uci.ics.jung.visualization.renderers.Renderer;
24 import edu.uci.ics.jung.visualization.renderers.ReshapingEdgeRenderer;
25 import edu.uci.ics.jung.visualization.transform.AbstractLensSupport;
26 import edu.uci.ics.jung.visualization.transform.LensTransformer;
27
28
29
30
31
32
33 public class MagnifyImageLensSupport<V,E> extends AbstractLensSupport<V,E> {
34
35 protected RenderContext<V,E> renderContext;
36 protected GraphicsDecorator lensGraphicsDecorator;
37 protected GraphicsDecorator savedGraphicsDecorator;
38 protected Renderer<V,E> renderer;
39 protected Renderer<V,E> transformingRenderer;
40 protected GraphElementAccessor<V,E> pickSupport;
41 protected Renderer.Edge<V,E> savedEdgeRenderer;
42 protected Renderer.Edge<V,E> reshapingEdgeRenderer;
43
44 static final String instructions =
45 "<html><center>Mouse-Drag the Lens center to move it<p>"+
46 "Mouse-Drag the Lens edge to resize it<p>"+
47 "Ctrl+MouseWheel to change magnification</center></html>";
48
49 public MagnifyImageLensSupport(VisualizationViewer<V,E> vv) {
50 this(vv, new MagnifyShapeTransformer(vv),
51 new ModalLensGraphMouse());
52 }
53
54 public MagnifyImageLensSupport(VisualizationViewer<V,E> vv, LensTransformer lensTransformer,
55 ModalGraphMouse lensGraphMouse) {
56 super(vv, lensGraphMouse);
57 this.renderContext = vv.getRenderContext();
58 this.pickSupport = renderContext.getPickSupport();
59 this.renderer = vv.getRenderer();
60 this.transformingRenderer = new BasicRenderer<V,E>();
61 this.savedGraphicsDecorator = renderContext.getGraphicsContext();
62 this.lensTransformer = lensTransformer;
63 this.savedEdgeRenderer = vv.getRenderer().getEdgeRenderer();
64 this.reshapingEdgeRenderer = new ReshapingEdgeRenderer<V,E>();
65 this.reshapingEdgeRenderer.setEdgeArrowRenderingSupport(savedEdgeRenderer.getEdgeArrowRenderingSupport());
66
67 Dimension d = vv.getSize();
68 if(d.width == 0 || d.height == 0) {
69 d = vv.getPreferredSize();
70 }
71 lensTransformer.setViewRadius(d.width/5);
72 this.lensGraphicsDecorator = new MagnifyIconGraphics(lensTransformer);
73 }
74
75 public void activate() {
76 lensTransformer.setDelegate(vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW));
77 if(lens == null) {
78 lens = new Lens(lensTransformer);
79 }
80 if(lensControls == null) {
81 lensControls = new LensControls(lensTransformer);
82 }
83 renderContext.setPickSupport(new ViewLensShapePickSupport<V,E>(vv));
84 lensTransformer.setDelegate(vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW));
85 vv.getRenderContext().getMultiLayerTransformer().setTransformer(Layer.VIEW, lensTransformer);
86 this.renderContext.setGraphicsContext(lensGraphicsDecorator);
87 vv.getRenderer().setEdgeRenderer(reshapingEdgeRenderer);
88 vv.addPreRenderPaintable(lens);
89 vv.addPostRenderPaintable(lensControls);
90 vv.setGraphMouse(lensGraphMouse);
91 vv.setToolTipText(instructions);
92 vv.repaint();
93 }
94
95 public void deactivate() {
96 renderContext.setPickSupport(pickSupport);
97 vv.getRenderContext().getMultiLayerTransformer().setTransformer(Layer.VIEW, lensTransformer.getDelegate());
98 vv.removePreRenderPaintable(lens);
99 vv.removePostRenderPaintable(lensControls);
100 this.renderContext.setGraphicsContext(savedGraphicsDecorator);
101 vv.getRenderer().setEdgeRenderer(savedEdgeRenderer);
102 vv.setToolTipText(defaultToolTipText);
103 vv.setGraphMouse(graphMouse);
104 vv.repaint();
105 }
106 }