View Javadoc
1   /*
2    * Copyright (c) 2005, The JUNG Authors
3    * All rights reserved.
4    *
5    * This software is open-source under the BSD license; see either "license.txt"
6    * or https://github.com/jrtom/jung/blob/master/LICENSE for a description.
7    *
8    * Created on Jul 21, 2005
9    */
10  
11  package edu.uci.ics.jung.visualization.transform;
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.VisualizationViewer;
18  import edu.uci.ics.jung.visualization.control.ModalGraphMouse;
19  import edu.uci.ics.jung.visualization.control.ModalLensGraphMouse;
20  import edu.uci.ics.jung.visualization.picking.LayoutLensShapePickSupport;
21  /**
22   * A class to make it easy to add an 
23   * examining lens to a jung graph application. See HyperbolicTransformerDemo
24   * for an example of how to use it.
25   * 
26   * @author Tom Nelson
27   *
28   *
29   */
30  public class LayoutLensSupport<V,E> extends AbstractLensSupport<V,E> 
31      implements LensSupport {
32  
33  	protected GraphElementAccessor<V,E> pickSupport;
34  	
35      public LayoutLensSupport(VisualizationViewer<V,E> vv) {
36          this(vv, new HyperbolicTransformer(
37          		vv, vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.LAYOUT)),
38               new ModalLensGraphMouse());
39      }
40      
41      /**
42       * Create an instance with the specified parameters.
43       * 
44       * @param vv the visualization viewer used for rendering
45       * @param lensTransformer the lens transformer to use
46       * @param lensGraphMouse the lens input handler
47       */
48      public LayoutLensSupport(VisualizationViewer<V,E> vv, LensTransformer lensTransformer,
49              ModalGraphMouse lensGraphMouse) {
50          super(vv, lensGraphMouse);
51          this.lensTransformer = lensTransformer;
52          this.pickSupport = vv.getPickSupport();
53  
54          Dimension d = vv.getSize();
55          if(d.width <= 0 || d.height <= 0) {
56              d = vv.getPreferredSize();
57          }
58          lensTransformer.setViewRadius(d.width/5);
59     }
60      
61      public void activate() {
62          if(lens == null) {
63              lens = new Lens(lensTransformer);
64          }
65          if(lensControls == null) {
66              lensControls = new LensControls(lensTransformer);
67          }
68          vv.getRenderContext().setPickSupport(new LayoutLensShapePickSupport<V,E>(vv));
69          vv.getRenderContext().getMultiLayerTransformer().setTransformer(Layer.LAYOUT, lensTransformer);
70          vv.prependPreRenderPaintable(lens);
71          vv.addPostRenderPaintable(lensControls);
72          vv.setGraphMouse(lensGraphMouse);
73          vv.setToolTipText(instructions);
74          vv.repaint();
75      }
76      
77      public void deactivate() {
78          if(lensTransformer != null) {
79              vv.removePreRenderPaintable(lens);
80              vv.removePostRenderPaintable(lensControls);
81              vv.getRenderContext().getMultiLayerTransformer().setTransformer(Layer.LAYOUT, lensTransformer.getDelegate());
82          }
83          vv.getRenderContext().setPickSupport(pickSupport);
84          vv.setToolTipText(defaultToolTipText);
85          vv.setGraphMouse(graphMouse);
86          vv.repaint();
87      }
88  }