All Downloads are FREE. Search and download functionalities are using the official Maven repository.

edu.uci.ics.jung.visualization.control.ModalLensGraphMouse Maven / Gradle / Ivy

/*
 * Copyright (c) 2005, The JUNG Authors
 * All rights reserved.
 *
 * This software is open-source under the BSD license; see either "license.txt"
 * or https://github.com/jrtom/jung/blob/master/LICENSE for a description.
 *
 * Created on Aug 26, 2005
 */

package edu.uci.ics.jung.visualization.control;

import java.awt.Component;
import java.awt.Cursor;
import java.awt.event.InputEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

/**
 * an implementation of the AbstractModalGraphMouse that includes plugins for manipulating a view
 * that is using a LensTransformer.
 *
 * @author Tom Nelson
 */
public class ModalLensGraphMouse extends AbstractModalGraphMouse implements ModalGraphMouse {

  /** not included in the base class */
  protected LensMagnificationGraphMousePlugin magnificationPlugin;

  public ModalLensGraphMouse() {
    this(1.1f, 1 / 1.1f);
  }

  public ModalLensGraphMouse(float in, float out) {
    this(in, out, new LensMagnificationGraphMousePlugin());
  }

  public ModalLensGraphMouse(LensMagnificationGraphMousePlugin magnificationPlugin) {
    this(1.1f, 1 / 1.1f, magnificationPlugin);
  }

  public ModalLensGraphMouse(
      float in, float out, LensMagnificationGraphMousePlugin magnificationPlugin) {
    super(in, out);
    this.in = in;
    this.out = out;
    this.magnificationPlugin = magnificationPlugin;
    loadPlugins();
    setModeKeyListener(new ModeKeyAdapter(this));
  }

  protected void loadPlugins() {
    pickingPlugin = new LensPickingGraphMousePlugin<>();
    //    animatedPickingPlugin = new AnimatedPickingGraphMousePlugin<>();
    translatingPlugin = new LensTranslatingGraphMousePlugin(InputEvent.BUTTON1_MASK);
    scalingPlugin = new ScalingGraphMousePlugin(new CrossoverScalingControl(), 0, in, out);
    rotatingPlugin = new RotatingGraphMousePlugin();
    shearingPlugin = new ShearingGraphMousePlugin();

    add(magnificationPlugin);
    add(scalingPlugin);

    setMode(Mode.TRANSFORMING);
  }

  public static class ModeKeyAdapter extends KeyAdapter {
    private char t = 't';
    private char p = 'p';
    protected ModalGraphMouse graphMouse;

    public ModeKeyAdapter(ModalGraphMouse graphMouse) {
      this.graphMouse = graphMouse;
    }

    public ModeKeyAdapter(char t, char p, ModalGraphMouse graphMouse) {
      this.t = t;
      this.p = p;
      this.graphMouse = graphMouse;
    }

    public void keyTyped(KeyEvent event) {
      char keyChar = event.getKeyChar();
      if (keyChar == t) {
        ((Component) event.getSource())
            .setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
        graphMouse.setMode(Mode.TRANSFORMING);
      } else if (keyChar == p) {
        ((Component) event.getSource()).setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        graphMouse.setMode(Mode.PICKING);
      }
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy