// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea // Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com // Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology // Distributed under the terms of the GNU Lesser General Public License (LGPL): http://www.gnu.org/licenses/ package graphtea.plugins.main.core.actions; import graphtea.graph.event.EdgeEvent; import graphtea.graph.event.GraphEvent; import graphtea.graph.event.VertexEvent; import graphtea.graph.graph.GraphModel; import graphtea.graph.graph.Vertex; import graphtea.platform.core.BlackBoard; import graphtea.platform.core.Listener; import graphtea.platform.extension.BasicExtension; import graphtea.plugins.main.GraphData; import java.awt.event.MouseEvent; /** * @author Azin Azadi */ public class MiddleClickAction implements BasicExtension, Listener { BlackBoard b; GraphData gd; public MiddleClickAction(BlackBoard b) { this.b = b; gd = new GraphData(b); //listening to G/V/E events b.addListener(VertexEvent.EVENT_KEY, this); b.addListener(EdgeEvent.EVENT_KEY, this); b.addListener(GraphEvent.EVENT_KEY, this); } public void keyChanged(String key, Object value) { if (key == VertexEvent.EVENT_KEY) { VertexEvent ve = (VertexEvent) value; if (ve.eventType == VertexEvent.CLICKED && ve.mouseBtn == MouseEvent.BUTTON2) { ve.v.setMark(!ve.v.getMark()); GraphModel g = gd.getGraph(); int di = ve.v.getMark() ? 1 : -1; for (Vertex v : g.getNeighbors(ve.v)) { v.setColor(v.getColor() + di); } } } if (key == EdgeEvent.EVENT_KEY) { EdgeEvent ee = (EdgeEvent) value; if (ee.eventType == EdgeEvent.CLICKED && ee.mouseBtn == MouseEvent.BUTTON2) { ee.e.setMark(!ee.e.getMark()); } } if (key == GraphEvent.EVENT_KEY) { GraphEvent ge = (GraphEvent) value; GraphModel g = ge.graph; if (ge.eventType == GraphEvent.MOUSE_WHEEL_MOVED) { if (gd.select.isSelectionEmpty()) { if (ge.mouseWheelMoveAmount > 0) g.zoomIn(); else g.zoomOut(); } else { if (ge.mouseWheelMoveAmount > 0) gd.select.expandSelection(); else for (Vertex v : gd.select.getSelectedVertices()) { v.setColor((v.getColor() + 1) % 20); } } } } } }