001 // GraphLab Project: http://graphlab.sharif.edu 002 // Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology 003 // Distributed under the terms of the GNU Lesser General Public License (LGPL): http://www.gnu.org/licenses/ 004 005 package graphlab.plugins.main.core.actions; 006 007 import graphlab.graph.event.EdgeEvent; 008 import graphlab.graph.event.GraphEvent; 009 import graphlab.graph.event.VertexEvent; 010 import graphlab.graph.graph.GraphModel; 011 import graphlab.graph.graph.VertexModel; 012 import graphlab.platform.core.BlackBoard; 013 import graphlab.platform.core.Listener; 014 import graphlab.platform.extension.BasicExtension; 015 import graphlab.plugins.main.GraphData; 016 017 import java.awt.event.MouseEvent; 018 019 /** 020 * @author Azin Azadi 021 */ 022 public class MiddleClickAction implements BasicExtension, Listener { 023 BlackBoard b; 024 GraphData gd; 025 026 public MiddleClickAction(BlackBoard b) { 027 this.b = b; 028 gd = new GraphData(b); 029 //listening to G/V/E events 030 b.addListener(VertexEvent.EVENT_KEY, this); 031 b.addListener(EdgeEvent.EVENT_KEY, this); 032 b.addListener(GraphEvent.EVENT_KEY, this); 033 } 034 035 public void keyChanged(String key, Object value) { 036 if (key == VertexEvent.EVENT_KEY) { 037 VertexEvent ve = (VertexEvent) value; 038 if (ve.eventType == VertexEvent.CLICKED && ve.mouseBtn == MouseEvent.BUTTON2) { 039 ve.v.setMark(!ve.v.getMark()); 040 GraphModel g = gd.getGraph(); 041 int di = ve.v.getMark() ? 1 : -1; 042 for (VertexModel v : g.getNeighbors(ve.v)) { 043 v.setColor(v.getColor() + di); 044 } 045 } 046 } 047 if (key == EdgeEvent.EVENT_KEY) { 048 EdgeEvent ee = (EdgeEvent) value; 049 if (ee.eventType == EdgeEvent.CLICKED && ee.mouseBtn == MouseEvent.BUTTON2) { 050 ee.e.setMark(!ee.e.getMark()); 051 } 052 } 053 if (key == GraphEvent.EVENT_KEY) { 054 GraphEvent ge = (GraphEvent) value; 055 GraphModel g = ge.graph; 056 if (ge.eventType == GraphEvent.MOUSE_WHEEL_MOVED) { 057 if (gd.select.isSelectionEmpty()) { 058 if (ge.mouseWheelMoveAmount > 0) 059 g.zoomIn(); 060 else 061 g.zoomOut(); 062 } else { 063 if (ge.mouseWheelMoveAmount > 0) 064 gd.select.expandSelection(); 065 else 066 for (VertexModel v : gd.select.getSelectedVertices()) { 067 v.setColor((v.getColor() + 1) % 20); 068 } 069 } 070 } 071 } 072 } 073 074 }