edu.uci.ics.jung.visualization.control.DefaultModalGraphMouse Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jung-visualization Show documentation
Show all versions of jung-visualization Show documentation
Core visualization support for the JUNG project
The newest version!
/*
* 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);
}
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy