edu.uci.ics.jung.visualization.control.DefaultModalGraphMouse 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 Mar 8, 2005
*
*/
package edu.uci.ics.jung.visualization.control;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.ItemSelectable;
import java.awt.event.InputEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
/**
* DefaultModalGraphMouse is a PluggableGraphMouse class that pre-installs a large collection of
* plugins for picking and transforming the graph. Additionally, it carries the notion of a Mode:
* Picking or Translating. Switching between modes allows for a more natural choice of mouse
* modifiers to be used for the various plugins. The default modifiers are intended to mimick those
* of mainstream software applications in order to be intuitive to users.
*
* To change between modes, two different controls are offered, a combo box and a menu system.
* These controls are lazily created in their respective 'getter' methods so they don't impact code
* that does not intend to use them. The menu control can be placed in an unused corner of the
* GraphZoomScrollPane, which is a common location for mouse mode selection menus in mainstream
* applications.
*
* @author Tom Nelson
*/
public class DefaultModalGraphMouse extends AbstractModalGraphMouse
implements ModalGraphMouse, ItemSelectable {
/** create an instance with default values */
public DefaultModalGraphMouse() {
this(1.1f, 1 / 1.1f);
}
/**
* create an instance with passed values
*
* @param in override value for scale in
* @param out override value for scale out
*/
public DefaultModalGraphMouse(float in, float out) {
super(in, out);
loadPlugins();
setModeKeyListener(new ModeKeyAdapter(this));
}
/** create the plugins, and load the plugins for TRANSFORMING mode */
@Override
protected void loadPlugins() {
pickingPlugin = new PickingGraphMousePlugin();
animatedPickingPlugin = new AnimatedPickingGraphMousePlugin();
translatingPlugin = new TranslatingGraphMousePlugin(InputEvent.BUTTON1_MASK);
scalingPlugin = new ScalingGraphMousePlugin(new CrossoverScalingControl(), 0, in, out);
rotatingPlugin = new RotatingGraphMousePlugin();
shearingPlugin = new ShearingGraphMousePlugin();
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;
}
@Override
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);
}
}
}
}