/* * Copyright (c) 2005, the JUNG Project and the Regents of the University of * California All rights reserved. * * This software is open-source under the BSD license; see either "license.txt" * or http://jung.sourceforge.net/license.txt for a description. * * Created on Jul 21, 2005 */ package edu.uci.ics.jung.visualization.transform; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Paint; import java.awt.geom.RectangularShape; import edu.uci.ics.jung.visualization.VisualizationViewer; import edu.uci.ics.jung.visualization.VisualizationServer.Paintable; import edu.uci.ics.jung.visualization.control.ModalGraphMouse; /** * A class to make it easy to add an * examining lens to a jung graph application. See HyperbolicTransformerDemo, * ViewLensSupport and LayoutLensSupport * for examples of how to use it. * * @author Tom Nelson * * */ public abstract class AbstractLensSupport<V,E> implements LensSupport { protected VisualizationViewer<V,E> vv; protected VisualizationViewer.GraphMouse graphMouse; protected LensTransformer lensTransformer; protected ModalGraphMouse lensGraphMouse; protected Lens lens; protected LensControls lensControls; protected String defaultToolTipText; protected static final String instructions = "<html><center>Mouse-Drag the Lens center to move it<p>"+ "Mouse-Drag the Lens edge to resize it<p>"+ "Ctrl+MouseWheel to change magnification</center></html>"; /** * create the base class, setting common members and creating * a custom GraphMouse * @param vv the VisualizationViewer to work on */ public AbstractLensSupport(VisualizationViewer<V,E> vv, ModalGraphMouse lensGraphMouse) { this.vv = vv; this.graphMouse = vv.getGraphMouse(); this.defaultToolTipText = vv.getToolTipText(); this.lensGraphMouse = lensGraphMouse; } public void activate(boolean state) { if(state) activate(); else deactivate(); } public LensTransformer getLensTransformer() { return lensTransformer; } /** * @return Returns the hyperbolicGraphMouse. */ public ModalGraphMouse getGraphMouse() { return lensGraphMouse; } /** * the background for the hyperbolic projection * @author Tom Nelson * * */ public static class Lens implements Paintable { LensTransformer lensTransformer; RectangularShape lensShape; Paint paint = Color.decode("0xdddddd"); public Lens(LensTransformer lensTransformer) { this.lensTransformer = lensTransformer; this.lensShape = lensTransformer.getLensShape(); } /** * @return the paint */ public Paint getPaint() { return paint; } /** * @param paint the paint to set */ public void setPaint(Paint paint) { this.paint = paint; } /** * @return Returns the hyperbolicTransformer. */ public void paint(Graphics g) { Graphics2D g2d = (Graphics2D)g; g2d.setPaint(paint); g2d.fill(lensShape); } public boolean useTransform() { return true; } } /** * the background for the hyperbolic projection * @author Tom Nelson * * */ public static class LensControls implements Paintable { LensTransformer lensTransformer; RectangularShape lensShape; Paint paint = Color.gray; public LensControls(LensTransformer lensTransformer) { this.lensTransformer = lensTransformer; this.lensShape = lensTransformer.getLensShape(); } /** * @return the paint */ public Paint getPaint() { return paint; } /** * @param paint the paint to set */ public void setPaint(Paint paint) { this.paint = paint; } /** * @return Returns the hyperbolicTransformer. */ public void paint(Graphics g) { Graphics2D g2d = (Graphics2D)g; g2d.setPaint(paint); g2d.draw(lensShape); int centerX = (int)Math.round(lensShape.getCenterX()); int centerY = (int)Math.round(lensShape.getCenterY()); g.drawOval(centerX-10, centerY-10, 20, 20); } public boolean useTransform() { return true; } } /** * @return the lens */ public Lens getLens() { return lens; } /** * @param lens the lens to set */ public void setLens(Lens lens) { this.lens = lens; } /** * @return the lensControls */ public LensControls getLensControls() { return lensControls; } /** * @param lensControls the lensControls to set */ public void setLensControls(LensControls lensControls) { this.lensControls = lensControls; } }