/* * 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 Mar 8, 2005 * */ package edu.uci.ics.jung.visualization.control; import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import edu.uci.ics.jung.visualization.Layer; import edu.uci.ics.jung.visualization.VisualizationViewer; import edu.uci.ics.jung.visualization.transform.LensTransformer; import edu.uci.ics.jung.visualization.transform.MutableTransformer; /** * HyperbolicMagnificationGraphMousePlugin changes the magnification * within the Hyperbolic projection of the HyperbolicTransformer. * * @author Tom Nelson */ public class LensMagnificationGraphMousePlugin extends AbstractGraphMousePlugin implements MouseWheelListener { protected float floor = 1.0f; protected float ceiling = 5.0f; protected float delta = .2f; /** * create an instance with default zoom in/out values */ public LensMagnificationGraphMousePlugin() { this(MouseEvent.CTRL_MASK); } /** * create an instance with passed modifiers * @param modifiers */ public LensMagnificationGraphMousePlugin(float floor, float ceiling, float delta) { this(MouseEvent.CTRL_MASK, floor, ceiling, delta); } public LensMagnificationGraphMousePlugin(int modifiers) { this(modifiers, 1.0f, 4.0f, .2f); } public LensMagnificationGraphMousePlugin(int modifiers, float floor, float ceiling, float delta) { super(modifiers); this.floor = floor; this.ceiling = ceiling; this.delta = delta; } /** * override to check equality with a mask */ public boolean checkModifiers(MouseEvent e) { return (e.getModifiers() & modifiers) != 0; } private void changeMagnification(MutableTransformer transformer, float delta) { if(transformer instanceof LensTransformer) { LensTransformer ht = (LensTransformer)transformer; float magnification = ht.getMagnification() + delta; magnification = Math.max(floor, magnification); magnification = Math.min(magnification, ceiling); ht.setMagnification(magnification); } } /** * zoom the display in or out, depending on the direction of the * mouse wheel motion. */ public void mouseWheelMoved(MouseWheelEvent e) { boolean accepted = checkModifiers(e); float delta = this.delta; if(accepted == true) { VisualizationViewer vv = (VisualizationViewer)e.getSource(); MutableTransformer modelTransformer = vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.LAYOUT); MutableTransformer viewTransformer = vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW); int amount = e.getWheelRotation(); if(amount < 0) { delta = -delta; } changeMagnification(modelTransformer, delta); changeMagnification(viewTransformer, delta); vv.repaint(); e.consume(); } } }