/** * Create an instance with the specified parameters. * * @param vv the visualization viewer used for rendering * @param lensTransformer the lens transformer to use * @param lensGraphMouse the lens input handler */ public LayoutLensSupport( VisualizationViewer<N, E> vv, LensTransformer lensTransformer, ModalGraphMouse lensGraphMouse) { super(vv, lensGraphMouse); this.lensTransformer = lensTransformer; this.pickSupport = vv.getPickSupport(); }
@Override public GUILink getEdge(MouseEvent e) { final VisualizationViewer<GUINode, GUILink> vv = (VisualizationViewer<GUINode, GUILink>) e.getSource(); GraphElementAccessor<GUINode, GUILink> pickSupport = vv.getPickSupport(); if (pickSupport != null) { final Point p = e.getPoint(); return pickSupport.getEdge(vv.getModel().getGraphLayout(), p.getX(), p.getY()); } return null; }
public GUINode getVertex(MouseEvent e) { final VisualizationViewer<GUINode, GUILink> vv = (VisualizationViewer<GUINode, GUILink>) e.getSource(); GraphElementAccessor<GUINode, GUILink> pickSupport = vv.getPickSupport(); if (pickSupport != null) { final Point p = e.getPoint(); final GUINode vertex = pickSupport.getVertex(vv.getModel().getGraphLayout(), p.getX(), p.getY()); if (vertex != null) return vertex; } return null; }
/** * Gets the vertex at a particular point, or null if it does not exist. * * @param point2D * @return */ public Object getVertex(final Point2D point2D) { final GraphElementAccessor<?, ?> pickSupport = _visualizationViewer.getPickSupport(); @SuppressWarnings("rawtypes") final Layout graphLayout = _visualizationViewer.getModel().getGraphLayout(); @SuppressWarnings("unchecked") final Object vertex = pickSupport.getVertex(graphLayout, point2D.getX(), point2D.getY()); return vertex; }
/** * Transform the point to the coordinate system in the * VisualizationViewer, then use either PickSuuport * (if available) or Layout to find a Vertex * @param point * @return */ private V getVertex(Point2D point) { // adjust for scale and offset in the VisualizationViewer Point2D p = point; //vv.getRenderContext().getBasicTransformer().inverseViewTransform(point); GraphElementAccessor<V,E> pickSupport = vv.getPickSupport(); Layout<V,E> layout = vv.getGraphLayout(); V v = null; if(pickSupport != null) { v = pickSupport.getVertex(layout, p.getX(), p.getY()); } return v; } /**
/** * called by the superclass to display tooltips */ public String getToolTipText(MouseEvent event) { Layout<V,E> layout = getGraphLayout(); Point2D p = null; if(vertexToolTipTransformer != null) { p = event.getPoint(); //renderContext.getBasicTransformer().inverseViewTransform(event.getPoint()); V vertex = getPickSupport().getVertex(layout, p.getX(), p.getY()); if(vertex != null) { return vertexToolTipTransformer.apply(vertex); } } if(edgeToolTipTransformer != null) { if(p == null) p = renderContext.getMultiLayerTransformer().inverseTransform(Layer.VIEW, event.getPoint()); E edge = getPickSupport().getEdge(layout, p.getX(), p.getY()); if(edge != null) { return edgeToolTipTransformer.apply(edge); } } if(mouseEventToolTipTransformer != null) { return mouseEventToolTipTransformer.apply(event); } return super.getToolTipText(event); }
/** * Transform the point to the coordinate system in the VisualizationViewer, then use either * PickSuuport (if available) or Layout to find a Node * * @param point * @return */ private N getNode(Point2D point) { // adjust for scale and offset in the VisualizationViewer Point2D p = point; //vv.getRenderContext().getBasicTransformer().inverseViewTransform(point); NetworkElementAccessor<N, E> pickSupport = vv.getPickSupport(); LayoutModel<N> layoutModel = vv.getModel().getLayoutModel(); // Layout<N> layout = vv.getGraphLayout(); N v = null; if (pickSupport != null) { v = pickSupport.getNode(layoutModel, p.getX(), p.getY()); } return v; } /** @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent) */
/** * Handle mouse moved to set the cursor to hand when over an agent (vertex) * or message (edge). */ public void mouseMoved(MouseEvent e) { Point2D p = e.getPoint();// vv.getRenderContext().getBasicTransformer().inverseViewTransform(e.getPoint()); GraphElementAccessor pickSupport = canvas.vv.getPickSupport(); if (pickSupport != null) { AgentGroup v = (AgentGroup)pickSupport.getVertex(canvas.vv.getGraphLayout(), p.getX(), p.getY()); MessageGroup ml = (MessageGroup)pickSupport.getEdge(canvas.vv.getGraphLayout(), p.getX(), p.getY()); if (v == null && ml == null) { canvas.vv.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } else { canvas.vv.setCursor(cursor); } } }
/** * Implementation of the AbstractPopupGraphMousePlugin method. This is where * the work gets done. You shouldn't have to modify unless you really want * to... * * @param e */ @SuppressWarnings("unchecked") protected void handlePopup(MouseEvent e) { VisualizationViewer<V, E> vv = (VisualizationViewer<V, E>) e.getSource(); Point p = e.getPoint(); GraphElementAccessor<V, E> pickSupport = vv.getPickSupport(); if (pickSupport != null) { final V v = pickSupport.getVertex(vv.getGraphLayout(), p.getX(), p.getY()); if (v != null) { // System.out.println("Vertex " + v + " was right clicked"); updateVertexMenu(v, vv, p); vertexPopup.show(vv, e.getX(), e.getY()); } else { final E edge = pickSupport.getEdge(vv.getGraphLayout(), p.getX(), p.getY()); if (edge != null) { // System.out.println("Edge " + edge + " was right // clicked"); updateEdgeMenu(edge, vv, p); edgePopup.show(vv, e.getX(), e.getY()); } } } }
/** * If startVertex is non-null, and the mouse is released over an * existing vertex, create an undirected edge from startVertex to * the vertex under the mouse pointer. If shift was also pressed, * create a directed edge instead. */ @SuppressWarnings("unchecked") public void mouseReleased(MouseEvent e) { if(checkModifiers(e)) { final VisualizationViewer<V,E> vv = (VisualizationViewer<V,E>)e.getSource(); final Point2D p = e.getPoint(); Layout<V,E> layout = vv.getGraphLayout(); if(createMode == Creating.EDGE) { GraphElementAccessor<V,E> pickSupport = vv.getPickSupport(); V vertex = null; if(pickSupport != null) { vertex = pickSupport.getVertex(layout, p.getX(), p.getY()); } edgeSupport.endEdgeCreate(vv, vertex); } else if(createMode == Creating.VERTEX){ vertexSupport.endVertexCreate(vv, e.getPoint()); } } createMode = Creating.UNDETERMINED; }
/** called by the superclass to display tooltips */ public String getToolTipText(MouseEvent event) { LayoutModel<N> layoutModel = getModel().getLayoutModel(); Point2D p = null; if (nodeToolTipFunction != null) { p = getTransformSupport().inverseTransform(this, event.getPoint()); N node = getPickSupport().getNode(layoutModel, p.getX(), p.getY()); if (node != null) { return nodeToolTipFunction.apply(node); } } if (edgeToolTipFunction != null) { if (p == null) { p = renderContext.getMultiLayerTransformer().inverseTransform(Layer.VIEW, event.getPoint()); } E edge = getPickSupport().getEdge(layoutModel, p.getX(), p.getY()); if (edge != null) { return edgeToolTipFunction.apply(edge); } } if (mouseEventToolTipFunction != null) { return mouseEventToolTipFunction.apply(event); } return super.getToolTipText(event); }
/** * If the mouse is pressed in an empty area, create a new node there. If the mouse is pressed on * an existing node, prepare to create an edge from that node to another */ @SuppressWarnings("unchecked") public void mousePressed(MouseEvent e) { if (checkModifiers(e)) { final VisualizationViewer<N, E> vv = (VisualizationViewer<N, E>) e.getSource(); // vv.getNodeSpatial().setActive(true); final LayoutModel<N> layoutModel = vv.getModel().getLayoutModel(); final Point2D p = e.getPoint(); NetworkElementAccessor<N, E> pickSupport = vv.getPickSupport(); if (pickSupport != null) { final N node = pickSupport.getNode(layoutModel, p.getX(), p.getY()); if (node != null) { // get ready to make an edge this.createMode = Creating.EDGE; edgeSupport.startEdgeCreate(vv, node, e.getPoint()); } else { // make a new node this.createMode = Creating.NODE; nodeSupport.startNodeCreate(vv, e.getPoint()); } } } }
/** * If the event occurs on a Vertex, pick that single Vertex * @param e the event */ @SuppressWarnings("unchecked") public void mousePressed(MouseEvent e) { if (e.getModifiers() == modifiers) { VisualizationViewer<V,E> vv = (VisualizationViewer<V,E>) e.getSource(); GraphElementAccessor<V, E> pickSupport = vv.getPickSupport(); PickedState<V> pickedVertexState = vv.getPickedVertexState(); Layout<V,E> layout = vv.getGraphLayout(); if (pickSupport != null && pickedVertexState != null) { // p is the screen point for the mouse event Point2D p = e.getPoint(); vertex = pickSupport.getVertex(layout, p.getX(), p.getY()); if (vertex != null) { if (pickedVertexState.isPicked(vertex) == false) { pickedVertexState.clear(); pickedVertexState.pick(vertex, true); } } } e.consume(); } }
@Override public void mouseClicked(MouseEvent me) { super.mouseClicked(me); // hide possible popups cleanPopups(); // prevent popup from showing when right click currentNode = null; // mouse move where Point2D p = me.getPoint(); // is pick support available GraphElementAccessor<ONDEXConcept, ONDEXRelation> pickSupport = vv.getPickSupport(); // layout important to find node or edge Layout<ONDEXConcept, ONDEXRelation> layout = vv.getGraphLayout(); if (pickSupport != null) { // first check if its a node ONDEXConcept n = pickSupport.getVertex(layout, p.getX(), p.getY()); ONDEXRelation e = pickSupport.getEdge(layout, p.getX(), p.getY()); if (n != null) { firePickingEvent(new ActionEvent(n, 0, "putative node pick")); } else if (e != null) { firePickingEvent(new ActionEvent(e, 1, "putative edge pick")); } } }
/** * If the event occurs on a Node, pick that single Node * * @param e the event */ @SuppressWarnings("unchecked") public void mousePressed(MouseEvent e) { if (e.getModifiers() == modifiers) { VisualizationViewer<N, E> vv = (VisualizationViewer<N, E>) e.getSource(); LayoutModel<N> layoutModel = vv.getModel().getLayoutModel(); NetworkElementAccessor<N, E> pickSupport = vv.getPickSupport(); PickedState<N> pickedNodeState = vv.getPickedNodeState(); if (pickSupport != null && pickedNodeState != null) { // p is the screen point for the mouse event Point2D p = e.getPoint(); node = pickSupport.getNode(layoutModel, p.getX(), p.getY()); if (node != null) { if (pickedNodeState.isPicked(node) == false) { pickedNodeState.clear(); pickedNodeState.pick(node, true); } } } e.consume(); } }
/** * Create an instance with the specified parameters. * * @param vv the visualization viewer used for rendering * @param lensTransformer the lens transformer to use * @param lensGraphMouse the lens input handler */ public LayoutLensSupport(VisualizationViewer<V,E> vv, LensTransformer lensTransformer, ModalGraphMouse lensGraphMouse) { super(vv, lensGraphMouse); this.lensTransformer = lensTransformer; this.pickSupport = vv.getPickSupport(); Dimension d = vv.getSize(); if(d.width <= 0 || d.height <= 0) { d = vv.getPreferredSize(); } lensTransformer.setViewRadius(d.width/5); }
/** * @param vv the VisualizationViewer to work on */ public PerspectiveLayoutTransformSupport(VisualizationViewer<V,E> vv) { super(vv); this.perspectiveTransformer = new PerspectiveShapeTransformer(new PerspectiveTransform(), vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.LAYOUT)); this.pickSupport = vv.getPickSupport(); }
/** * pick the vertices inside the rectangle created from points 'down' and 'out' (two diagonally * opposed corners of the rectangle) * * @param vv the viewer containing the layout and picked state * @param down one corner of the rectangle * @param out the other corner of the rectangle * @param clear whether to reset existing picked state */ protected void pickContainedVertices(VisualizationViewer<V,E> vv, Point2D down, Point2D out, boolean clear) { Layout<V,E> layout = vv.getGraphLayout(); PickedState<V> pickedVertexState = vv.getPickedVertexState(); Rectangle2D pickRectangle = new Rectangle2D.Double(); pickRectangle.setFrameFromDiagonal(down,out); if(pickedVertexState != null) { if(clear) { pickedVertexState.clear(); } GraphElementAccessor<V,E> pickSupport = vv.getPickSupport(); Collection<V> picked = pickSupport.getVertices(layout, pickRectangle); for(V v : picked) { pickedVertexState.pick(v, true); } } }
@Override public void mousePressed(MouseEvent e) { if (e.isShiftDown()) { super.mousePressed(e); return; } if (e.getSource() instanceof VisualizationViewer<?, ?>) { Layout<ONDEXConcept, ONDEXRelation> layout = viewer.getVisualizationViewer().getGraphLayout(); if (super.mode == Mode.TRANSFORMING || super.mode == Mode.ANNOTATING) { super.mousePressed(e); return; } restoreMode = true; Point2D p = e.getPoint(); // is pick support available GraphElementAccessor<ONDEXConcept, ONDEXRelation> pickSupport = viewer.getVisualizationViewer().getPickSupport(); if (pickSupport != null && (pickSupport.getEdge(layout, p.getX(), p.getY()) == null && pickSupport.getVertex(layout, p.getX(), p.getY()) == null)) { viewer.getVisualizationViewer().getPickedVertexState().clear(); viewer.getVisualizationViewer().getPickedEdgeState().clear(); ((ModalGraphMouse) viewer.getVisualizationViewer().getGraphMouse()).setMode(Mode.TRANSFORMING); } } super.mousePressed(e); }
/** * pick the nodes inside the rectangle created from points 'down' and 'out' (two diagonally * opposed corners of the rectangle) * * @param vv the viewer containing the layout and picked state * @param pickTarget - the shape to pick nodes in (layout coordinate system) * @param clear whether to reset existing picked state */ protected void pickContainedNodes(VisualizationViewer<N, E> vv, Shape pickTarget, boolean clear) { PickedState<N> pickedNodeState = vv.getPickedNodeState(); if (pickedNodeState != null) { if (clear) { pickedNodeState.clear(); } NetworkElementAccessor<N, E> pickSupport = vv.getPickSupport(); LayoutModel<N> layoutModel = vv.getModel().getLayoutModel(); Collection<N> picked = pickSupport.getNodes(layoutModel, pickTarget); for (N v : picked) { pickedNodeState.pick(v, true); } } }