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

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); } } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy