Coverage Report - edu.uci.ics.jung.visualization.jai.HyperbolicImageLensSupport
 
Classes in this File Line Coverage Branch Coverage Complexity
HyperbolicImageLensSupport
0%
0/44
0%
0/4
1.5
 
 1  
 /*
 2  
  * Copyright (c) 2005, the JUNG Project and the Regents of the University of
 3  
  * California All rights reserved.
 4  
  *
 5  
  * This software is open-source under the BSD license; see either "license.txt"
 6  
  * or http://jung.sourceforge.net/license.txt for a description.
 7  
  *
 8  
  * Created on Jul 21, 2005
 9  
  */
 10  
 
 11  
 package edu.uci.ics.jung.visualization.jai;
 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  
 import edu.uci.ics.jung.visualization.transform.shape.GraphicsDecorator;
 28  
 import edu.uci.ics.jung.visualization.transform.shape.HyperbolicShapeTransformer;
 29  
 import edu.uci.ics.jung.visualization.transform.shape.TransformingFlatnessGraphics;
 30  
 /**
 31  
  * A class to make it easy to add a Hyperbolic projection
 32  
  * examining lens to a jung graph application. See HyperbolicTransforerDemo
 33  
  * for an example of how to use it.
 34  
  * 
 35  
  * @author Tom Nelson
 36  
  *
 37  
  *
 38  
  */
 39  
 public class HyperbolicImageLensSupport<V,E> extends AbstractLensSupport<V,E> {
 40  
     
 41  
     protected RenderContext<V,E> renderContext;
 42  
     protected GraphicsDecorator lensGraphicsDecorator;
 43  
     protected GraphicsDecorator savedGraphicsDecorator;
 44  
     protected Renderer<V,E> renderer;
 45  
     protected Renderer<V,E> transformingRenderer;
 46  
     protected GraphElementAccessor<V,E> pickSupport;
 47  
     protected Renderer.Edge<V,E> savedEdgeRenderer;
 48  
     protected Renderer.Edge<V,E> reshapingEdgeRenderer;
 49  
 
 50  
     static final String instructions = 
 51  
         "<html><center>Mouse-Drag the Lens center to move it<p>"+
 52  
         "Mouse-Drag the Lens edge to resize it<p>"+
 53  
         "Ctrl+MouseWheel to change magnification</center></html>";
 54  
     
 55  
     public HyperbolicImageLensSupport(VisualizationViewer<V,E> vv) {
 56  0
         this(vv, new HyperbolicShapeTransformer(vv),
 57  
                 new ModalLensGraphMouse());
 58  0
     }
 59  
     /**
 60  
      * create the base class, setting common members and creating
 61  
      * a custom GraphMouse
 62  
      * @param vv the VisualizationViewer to work on
 63  
      */
 64  
     public HyperbolicImageLensSupport(VisualizationViewer<V,E> vv, LensTransformer lensTransformer,
 65  
             ModalGraphMouse lensGraphMouse) {
 66  0
         super(vv, lensGraphMouse);
 67  0
         this.renderContext = vv.getRenderContext();
 68  0
         this.pickSupport = renderContext.getPickSupport();
 69  0
         this.renderer = vv.getRenderer();
 70  0
         this.transformingRenderer = new BasicRenderer<V,E>();
 71  0
         this.transformingRenderer.setVertexRenderer(new TransformingImageVertexIconRenderer<V,E>());
 72  
         
 73  0
         this.savedGraphicsDecorator = renderContext.getGraphicsContext();
 74  0
         this.lensTransformer = lensTransformer;
 75  0
         this.savedEdgeRenderer = vv.getRenderer().getEdgeRenderer();
 76  0
         this.reshapingEdgeRenderer = new ReshapingEdgeRenderer<V,E>();
 77  0
         this.reshapingEdgeRenderer.setEdgeArrowRenderingSupport(savedEdgeRenderer.getEdgeArrowRenderingSupport());
 78  
 
 79  0
         Dimension d = vv.getSize();
 80  
 //        if(d.width == 0 || d.height == 0) {
 81  
 //            d = vv.getPreferredSize();
 82  
 //        }
 83  0
         lensTransformer.setViewRadius(d.width/5);
 84  0
         this.lensGraphicsDecorator = new TransformingFlatnessGraphics(lensTransformer);
 85  
 
 86  0
     }
 87  
     
 88  
     public void activate() {
 89  0
             lensTransformer.setDelegate(vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW));
 90  0
         if(lens == null) {
 91  0
             lens = new Lens(lensTransformer);
 92  
         }
 93  0
         if(lensControls == null) {
 94  0
             lensControls = new LensControls(lensTransformer);
 95  
         }
 96  0
         renderContext.setPickSupport(new ViewLensShapePickSupport<V,E>(vv));
 97  0
         lensTransformer.setDelegate(vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW));
 98  0
         vv.getRenderContext().getMultiLayerTransformer().setTransformer(Layer.VIEW, lensTransformer);
 99  0
         this.renderContext.setGraphicsContext(lensGraphicsDecorator);
 100  0
         vv.setRenderer(transformingRenderer);
 101  0
         vv.getRenderer().setEdgeRenderer(reshapingEdgeRenderer);
 102  0
         vv.addPreRenderPaintable(lens);
 103  0
         vv.addPostRenderPaintable(lensControls);
 104  0
         vv.setGraphMouse(lensGraphMouse);
 105  0
         vv.setToolTipText(instructions);
 106  0
         vv.repaint();
 107  0
     }
 108  
     
 109  
     public void deactivate() {
 110  0
             renderContext.setPickSupport(pickSupport);
 111  0
             vv.getRenderContext().getMultiLayerTransformer().setTransformer(Layer.VIEW, lensTransformer.getDelegate());
 112  0
         vv.removePreRenderPaintable(lens);
 113  0
         vv.removePostRenderPaintable(lensControls);
 114  0
         this.renderContext.setGraphicsContext(savedGraphicsDecorator);
 115  0
         vv.setRenderer(renderer);
 116  0
         vv.setToolTipText(defaultToolTipText);
 117  0
         vv.setGraphMouse(graphMouse);
 118  0
         vv.repaint();
 119  0
     }
 120  
 }