// 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 General Public License (GPL): http://www.gnu.org/licenses/ package graphtea.plugins.main.core.actions.vertex; import graphtea.graph.atributeset.GraphAttrSet; import graphtea.graph.event.GraphEvent; import graphtea.graph.graph.*; import graphtea.platform.core.AbstractAction; import graphtea.platform.core.BlackBoard; import graphtea.platform.core.Listener; import graphtea.plugins.main.select.ClearSelection; import graphtea.plugins.main.select.Select; import java.awt.*; import java.awt.event.MouseEvent; /** * Adds a vertex to the graph: listens for "graph select point" & ... * * @author azin azadi */ public class AddVertex extends AbstractAction { public final static String DISABLE = "AddVertex.Disable"; public AddVertex(BlackBoard bb) { super(bb); listen4Event(GraphEvent.EVENT_KEY); blackboard.addListener(DISABLE, new Listener() { public void performJob(String name) { disable = blackboard.getData(DISABLE); if (disable) disable(); else enable(); } public void keyChanged(String key, Object value) { disable = blackboard.getData(DISABLE); if (disable) disable(); else enable(); } public boolean isEnable() { return true; } }); } protected SubGraph sd; boolean disable = false; public void track(){} public void performAction(String key, Object value) { sd = Select.getSelection(blackboard); GraphModel g = blackboard.getData(GraphAttrSet.name); Boolean aBoolean = blackboard.getData(ClearSelection.lastTimeGraphWasClear); if (aBoolean == null) return; boolean b = aBoolean; if (b && (sd == null || (sd.vertices.size() == 0 && sd.edges.size() == 0))) { GraphEvent gpd = blackboard.getData(GraphEvent.EVENT_KEY); if (gpd.eventType != GraphEvent.CLICKED || gpd.mouseBtn != MouseEvent.BUTTON1) { return; } GraphModel graph = gpd.graph; doJob(graph, gpd.mousePos); super.track(); } blackboard.setData(ClearSelection.lastTimeGraphWasClear, true); } /** * adds a vertex to the given location of graph * * @return the added vertex */ public static Vertex doJob(GraphModel g, int x, int y) { Vertex v = new Vertex(); Point p = v.getCenter(); v.setLocation(new GPoint(x - p.x, y - p.y)); g.insertVertex(v); return v; } /** * adds a vertex to the given location of graph * * @return the added vertex */ public static Vertex doJob(GraphModel g, GPoint position) { Vertex v = new Vertex(); v.setLocation(position); g.insertVertex(v); return v; } /** * adds a vertex to a random position of the graph * return the added vertex */ public static Vertex addVertexToRandomPosition(GraphModel g) { GRect b = g.getZoomedBounds(); return doJob(g, (int) (b.getWidth() * Math.random()), (int) (b.getHeight() * Math.random())); } }