use of org.gephi.tools.spi.NodeClickEventListener in project gephi by gephi.
the class ShortestPath method getListeners.
@Override
public ToolEventListener[] getListeners() {
listeners = new ToolEventListener[2];
listeners[0] = new NodeClickEventListener() {
@Override
public void clickNodes(Node[] nodes) {
Node n = nodes[0];
if (sourceNode == null) {
sourceNode = n;
shortestPathPanel.setResult("");
shortestPathPanel.setStatus(NbBundle.getMessage(ShortestPath.class, "ShortestPath.status2"));
} else if (n != sourceNode) {
color = shortestPathPanel.getColor();
Node targetNode = n;
GraphController gc = Lookup.getDefault().lookup(GraphController.class);
GraphModel gm = gc.getGraphModel();
AbstractShortestPathAlgorithm algorithm;
if (gm.isDirected()) {
algorithm = new BellmanFordShortestPathAlgorithm(gm.getDirectedGraphVisible(), sourceNode);
} else {
algorithm = new DijkstraShortestPathAlgorithm(gm.getGraphVisible(), sourceNode);
}
algorithm.compute();
double distance;
if ((distance = algorithm.getDistances().get(targetNode)) != Double.POSITIVE_INFINITY) {
targetNode.setColor(color);
VizController.getInstance().selectNode(targetNode);
Edge predecessorEdge = algorithm.getPredecessorIncoming(targetNode);
Node predecessor = algorithm.getPredecessor(targetNode);
while (predecessorEdge != null && predecessor != sourceNode) {
predecessorEdge.setColor(color);
VizController.getInstance().selectEdge(predecessorEdge);
predecessor.setColor(color);
VizController.getInstance().selectNode(predecessor);
predecessorEdge = algorithm.getPredecessorIncoming(predecessor);
predecessor = algorithm.getPredecessor(predecessor);
}
predecessorEdge.setColor(color);
VizController.getInstance().selectEdge(predecessorEdge);
sourceNode.setColor(color);
VizController.getInstance().selectNode(sourceNode);
shortestPathPanel.setResult(NbBundle.getMessage(ShortestPath.class, "ShortestPath.result", distance));
} else {
// No path
shortestPathPanel.setResult(NbBundle.getMessage(ShortestPath.class, "ShortestPath.noresult"));
}
sourceNode = null;
shortestPathPanel.setStatus(NbBundle.getMessage(ShortestPath.class, "ShortestPath.status1"));
}
}
};
listeners[1] = new MouseClickEventListener() {
@Override
public void mouseClick(int[] positionViewport, float[] position3d) {
if (sourceNode != null) {
// Cancel
shortestPathPanel.setStatus(NbBundle.getMessage(ShortestPath.class, "ShortestPath.status1"));
sourceNode = null;
} else {
VizController.getInstance().resetSelection();
}
}
};
return listeners;
}
use of org.gephi.tools.spi.NodeClickEventListener in project gephi by gephi.
the class EdgePencil method getListeners.
@Override
public ToolEventListener[] getListeners() {
listeners = new ToolEventListener[2];
listeners[0] = new NodeClickEventListener() {
@Override
public void clickNodes(Node[] nodes) {
Node n = nodes[0];
if (sourceNode == null) {
sourceNode = n;
edgePencilPanel.setStatus(NbBundle.getMessage(EdgePencil.class, "EdgePencil.status2"));
} else {
color = edgePencilPanel.getColor();
weight = edgePencilPanel.getWeight();
boolean directed = edgePencilPanel.isDirected;
Edge edge = Lookup.getDefault().lookup(GraphElementsController.class).createEdge(sourceNode, n, directed);
edge.setColor(color);
sourceNode = null;
edgePencilPanel.setStatus(NbBundle.getMessage(EdgePencil.class, "EdgePencil.status1"));
}
}
};
listeners[1] = new MouseClickEventListener() {
@Override
public void mouseClick(int[] positionViewport, float[] position3d) {
if (sourceNode != null) {
// Cancel
edgePencilPanel.setStatus(NbBundle.getMessage(EdgePencil.class, "EdgePencil.status1"));
sourceNode = null;
}
}
};
return listeners;
}
use of org.gephi.tools.spi.NodeClickEventListener in project gephi-plugins-bootcamp by gephi.
the class AddNodesTool method getListeners.
@Override
public ToolEventListener[] getListeners() {
return new ToolEventListener[] { new MouseClickEventListener() {
@Override
public void mouseClick(int[] positionViewport, float[] position3d) {
// Get current graph
GraphController gc = Lookup.getDefault().lookup(GraphController.class);
Graph graph = gc.getGraphModel().getGraph();
GraphFactory factory = gc.getGraphModel().factory();
// Add node
Node node = factory.newNode();
node.setX(position3d[0]);
node.setY(position3d[1]);
node.setSize(10f);
graph.addNode(node);
}
}, new NodeClickEventListener() {
@Override
public void clickNodes(Node[] nodes) {
// Get mouse position
float[] position3d = VizController.getInstance().getGraphIO().getMousePosition3d();
// Get current graph
GraphController gc = Lookup.getDefault().lookup(GraphController.class);
Graph graph = gc.getGraphModel().getGraph();
GraphFactory factory = gc.getGraphModel().factory();
// Add node
Node node = factory.newNode();
node.setX(position3d[0]);
node.setY(position3d[1]);
node.setSize(10f);
graph.addNode(node);
// Add edges with the clicked nodes
for (Node n : nodes) {
Edge edge = factory.newEdge(node, n);
graph.addEdge(edge);
}
}
} };
}
use of org.gephi.tools.spi.NodeClickEventListener in project gephi by gephi.
the class DesktopToolController method select.
@Override
public void select(Tool tool) {
unselect();
if (tool == null) {
return;
}
// Connect events
ArrayList<ToolEventHandler> handlers = new ArrayList<>();
for (ToolEventListener toolListener : tool.getListeners()) {
if (toolListener instanceof NodeClickEventListener) {
NodeClickEventHandler h = new NodeClickEventHandler(toolListener);
h.select();
handlers.add(h);
} else if (toolListener instanceof NodePressingEventListener) {
NodePressingEventHandler h = new NodePressingEventHandler(toolListener);
h.select();
handlers.add(h);
} else if (toolListener instanceof MouseClickEventListener) {
MouseClickEventHandler h = new MouseClickEventHandler(toolListener);
h.select();
handlers.add(h);
} else if (toolListener instanceof NodePressAndDraggingEventListener) {
NodePressAndDraggingEventHandler h = new NodePressAndDraggingEventHandler(toolListener);
h.select();
handlers.add(h);
} else {
throw new RuntimeException("The ToolEventListener " + toolListener.getClass().getSimpleName() + " cannot be recognized");
}
}
currentHandlers = handlers.toArray(new ToolEventHandler[0]);
switch(tool.getSelectionType()) {
case NONE:
VizController.getInstance().getSelectionManager().disableSelection();
break;
case SELECTION:
VizController.getInstance().getSelectionManager().blockSelection(true);
VizController.getInstance().getSelectionManager().setDraggingEnable(false);
break;
case SELECTION_AND_DRAGGING:
VizController.getInstance().getSelectionManager().blockSelection(true);
VizController.getInstance().getSelectionManager().setDraggingEnable(true);
break;
}
currentTool = tool;
currentTool.select();
}
use of org.gephi.tools.spi.NodeClickEventListener in project gephi by gephi.
the class HeatMap method getListeners.
@Override
public ToolEventListener[] getListeners() {
listeners = new ToolEventListener[1];
listeners[0] = new NodeClickEventListener() {
@Override
public void clickNodes(Node[] nodes) {
try {
Node n = nodes[0];
Color[] colors;
float[] positions;
if (heatMapPanel.isUsePalette()) {
colors = heatMapPanel.getSelectedPalette().getColors();
positions = heatMapPanel.getSelectedPalette().getPositions();
dontPaintUnreachable = true;
} else {
gradientColors = colors = heatMapPanel.getGradientColors();
gradientPositions = positions = heatMapPanel.getGradientPositions();
dontPaintUnreachable = heatMapPanel.isDontPaintUnreachable();
}
GraphController gc = Lookup.getDefault().lookup(GraphController.class);
AbstractShortestPathAlgorithm algorithm;
if (gc.getGraphModel().isDirected()) {
DirectedGraph graph = gc.getGraphModel().getDirectedGraphVisible();
algorithm = new BellmanFordShortestPathAlgorithm(graph, n);
algorithm.compute();
} else {
Graph graph = gc.getGraphModel().getGraphVisible();
algorithm = new DijkstraShortestPathAlgorithm(graph, n);
algorithm.compute();
}
// Color
LinearGradient linearGradient = new LinearGradient(colors, positions);
// Algorithm
double maxDistance = algorithm.getMaxDistance();
if (!dontPaintUnreachable) {
// +1 to have the maxdistance nodes a ratio<1
maxDistance++;
}
if (maxDistance > 0) {
for (Entry<Node, Double> entry : algorithm.getDistances().entrySet()) {
Node node = entry.getKey();
if (!Double.isInfinite(entry.getValue())) {
float ratio = (float) (entry.getValue() / maxDistance);
Color c = linearGradient.getValue(ratio);
node.setColor(c);
} else if (!dontPaintUnreachable) {
Color c = colors[colors.length - 1];
node.setColor(c);
}
}
}
Color c = colors[0];
n.setColor(c);
heatMapPanel.setStatus(NbBundle.getMessage(HeatMap.class, "HeatMap.status.maxdistance") + new DecimalFormat("#.##").format(algorithm.getMaxDistance()));
} catch (Exception e) {
Logger.getLogger("").log(Level.SEVERE, "", e);
}
}
};
return listeners;
}
Aggregations