edu.uci.ics.jung.visualization.control.LabelEditingGraphMousePlugin.java Source code

Java tutorial

Introduction

Here is the source code for edu.uci.ics.jung.visualization.control.LabelEditingGraphMousePlugin.java

Source

/*
 * 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.Cursor;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Point2D;
import java.util.Map;

import javax.swing.JOptionPane;

import org.apache.commons.collections15.Transformer;
import org.apache.commons.collections15.functors.MapTransformer;

import edu.uci.ics.jung.algorithms.layout.GraphElementAccessor;
import edu.uci.ics.jung.algorithms.layout.Layout;
import edu.uci.ics.jung.visualization.Layer;
import edu.uci.ics.jung.visualization.VisualizationViewer;

/** 
 * 
 * 
 * @author Tom Nelson
 */
public class LabelEditingGraphMousePlugin<V, E> extends AbstractGraphMousePlugin implements MouseListener {

    /**
     * the picked Vertex, if any
     */
    protected V vertex;

    /**
     * the picked Edge, if any
     */
    protected E edge;

    /**
    * create an instance with default settings
    */
    public LabelEditingGraphMousePlugin() {
        this(InputEvent.BUTTON1_MASK);
    }

    /**
     * create an instance with overides
     * @param selectionModifiers for primary selection
     * @param addToSelectionModifiers for additional selection
     */
    public LabelEditingGraphMousePlugin(int selectionModifiers) {
        super(selectionModifiers);
        this.cursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
    }

    /**
     * For primary modifiers (default, MouseButton1):
     * pick a single Vertex or Edge that
      * is under the mouse pointer. If no Vertex or edge is under
      * the pointer, unselect all picked Vertices and edges, and
      * set up to draw a rectangle for multiple selection
      * of contained Vertices.
      * For additional selection (default Shift+MouseButton1):
      * Add to the selection, a single Vertex or Edge that is
      * under the mouse pointer. If a previously picked Vertex
      * or Edge is under the pointer, it is un-picked.
      * If no vertex or Edge is under the pointer, set up
      * to draw a multiple selection rectangle (as above)
      * but do not unpick previously picked elements.
     * 
     * @param e the event
     */
    @SuppressWarnings("unchecked")
    public void mouseClicked(MouseEvent e) {
        if (e.getModifiers() == modifiers && e.getClickCount() == 2) {
            VisualizationViewer<V, E> vv = (VisualizationViewer) e.getSource();
            GraphElementAccessor<V, E> pickSupport = vv.getPickSupport();
            if (pickSupport != null) {
                Transformer<V, String> vs = vv.getRenderContext().getVertexLabelTransformer();
                if (vs instanceof MapTransformer) {
                    Map<V, String> map = ((MapTransformer) vs).getMap();
                    Layout<V, E> layout = vv.getGraphLayout();
                    // p is the screen point for the mouse event
                    Point2D p = e.getPoint();

                    V vertex = pickSupport.getVertex(layout, p.getX(), p.getY());
                    if (vertex != null) {
                        String newLabel = vs.transform(vertex);
                        newLabel = JOptionPane.showInputDialog("New Vertex Label for " + vertex);
                        if (newLabel != null) {
                            map.put(vertex, newLabel);
                            vv.repaint();
                        }
                        return;
                    }
                }
                Transformer<E, String> es = vv.getRenderContext().getEdgeLabelTransformer();
                if (es instanceof MapTransformer) {
                    Map<E, String> map = ((MapTransformer) es).getMap();
                    Layout<V, E> layout = vv.getGraphLayout();
                    // p is the screen point for the mouse event
                    Point2D p = e.getPoint();
                    // take away the view transform
                    Point2D ip = vv.getRenderContext().getMultiLayerTransformer().inverseTransform(Layer.VIEW, p);
                    E edge = pickSupport.getEdge(layout, ip.getX(), ip.getY());
                    if (edge != null) {
                        String newLabel = JOptionPane.showInputDialog("New Edge Label for " + edge);
                        if (newLabel != null) {
                            map.put(edge, newLabel);
                            vv.repaint();
                        }
                        return;
                    }
                }
            }
            e.consume();
        }
    }

    /**
    * If the mouse is dragging a rectangle, pick the
    * Vertices contained in that rectangle
    * 
    * clean up settings from mousePressed
    */
    @SuppressWarnings("unchecked")
    public void mouseReleased(MouseEvent e) {
    }

    /**
    * If the mouse is over a picked vertex, drag all picked
    * vertices with the mouse.
    * If the mouse is not over a Vertex, draw the rectangle
    * to select multiple Vertices
    * 
    */

    public void mousePressed(MouseEvent e) {
    }

    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub

    }

}