Search in sources :

Example 11 with Bend

use of org.cytoscape.view.presentation.property.values.Bend in project cytoscape-impl by cytoscape.

the class DEdgeDetails method getBend.

/**
 * Returns current Edge Bend value.
 *
 * @param edge
 * @return edge Bend
 */
synchronized Bend getBend(final CyEdge edge, boolean forceCreate) {
    // Check bypass
    final DEdgeView dev = dGraphView.getDEdgeView(edge);
    if (dev.isValueLocked(EDGE_BEND))
        return dev.getVisualProperty(EDGE_BEND);
    Bend bend = m_edgeBends.get(edge);
    if (bend == null && forceCreate) {
        bend = new BendImpl();
        m_edgeBends.put(edge, bend);
    }
    if (bend == null)
        return m_edgeBendDefault == null ? EdgeBendVisualProperty.DEFAULT_EDGE_BEND : m_edgeBendDefault;
    if (bend == EdgeBendVisualProperty.DEFAULT_EDGE_BEND && m_edgeBendDefault != null)
        return m_edgeBendDefault;
    return bend;
}
Also used : Bend(org.cytoscape.view.presentation.property.values.Bend)

Example 12 with Bend

use of org.cytoscape.view.presentation.property.values.Bend in project cytoscape-impl by cytoscape.

the class InnerCanvas method handleArrowKeys.

/**
 * Arrow key handler.
 * They are used to pan and mode nodes/edge bend handles.
 * @param k key event
 */
private void handleArrowKeys(KeyEvent k) {
    final int code = k.getKeyCode();
    double move = 1.0;
    // Adjust increment if Shift key is pressed
    if (k.isShiftDown())
        move = 15.0;
    // Pan if CTR is pressed.
    if (isControlOrMetaDown(k)) {
        // Pan
        if (code == KeyEvent.VK_UP) {
            pan(0, move);
        } else if (code == KeyEvent.VK_DOWN) {
            pan(0, -move);
        } else if (code == KeyEvent.VK_LEFT) {
            pan(-move, 0);
        } else if (code == KeyEvent.VK_RIGHT) {
            pan(move, 0);
        }
        return;
    }
    if (m_view.m_nodeSelection) {
        // move nodes
        final long[] selectedNodes = m_view.getSelectedNodeIndices();
        for (int i = 0; i < selectedNodes.length; i++) {
            DNodeView nv = ((DNodeView) m_view.getDNodeView(selectedNodes[i]));
            double xPos = nv.getXPosition();
            double yPos = nv.getYPosition();
            if (code == KeyEvent.VK_UP) {
                yPos -= move;
            } else if (code == KeyEvent.VK_DOWN) {
                yPos += move;
            } else if (code == KeyEvent.VK_LEFT) {
                xPos -= move;
            } else if (code == KeyEvent.VK_RIGHT) {
                xPos += move;
            }
            nv.setOffset(xPos, yPos);
        }
        // move edge anchors
        LongEnumerator anchorsToMove = m_view.m_selectedAnchors.searchRange(Integer.MIN_VALUE, Integer.MAX_VALUE, false);
        while (anchorsToMove.numRemaining() > 0) {
            final long edgeAndAnchor = anchorsToMove.nextLong();
            final long edge = edgeAndAnchor >>> 6;
            final int anchorInx = (int) (edgeAndAnchor & 0x000000000000003f);
            final DEdgeView ev = (DEdgeView) m_view.getDEdgeView(edge);
            if (!ev.isValueLocked(BasicVisualLexicon.EDGE_BEND)) {
                Bend defaultBend = ev.getDefaultValue(BasicVisualLexicon.EDGE_BEND);
                if (ev.getVisualProperty(BasicVisualLexicon.EDGE_BEND) == defaultBend) {
                    ev.setLockedValue(BasicVisualLexicon.EDGE_BEND, new BendImpl((BendImpl) defaultBend));
                } else {
                    ev.setLockedValue(BasicVisualLexicon.EDGE_BEND, new BendImpl((BendImpl) ev.getBend()));
                }
            }
            final Bend bend = ev.getVisualProperty(BasicVisualLexicon.EDGE_BEND);
            final Handle handle = bend.getAllHandles().get(anchorInx);
            final Point2D newPoint = handle.calculateHandleLocation(m_view.getViewModel(), ev);
            m_floatBuff1[0] = (float) newPoint.getX();
            m_floatBuff1[1] = (float) newPoint.getY();
            if (code == KeyEvent.VK_UP) {
                ev.moveHandleInternal(anchorInx, m_floatBuff1[0], m_floatBuff1[1] - move);
            } else if (code == KeyEvent.VK_DOWN) {
                ev.moveHandleInternal(anchorInx, m_floatBuff1[0], m_floatBuff1[1] + move);
            } else if (code == KeyEvent.VK_LEFT) {
                ev.moveHandleInternal(anchorInx, m_floatBuff1[0] - move, m_floatBuff1[1]);
            } else if (code == KeyEvent.VK_RIGHT) {
                ev.moveHandleInternal(anchorInx, m_floatBuff1[0] + move, m_floatBuff1[1]);
            }
        }
        repaint();
    }
}
Also used : LongEnumerator(org.cytoscape.util.intr.LongEnumerator) Point2D(java.awt.geom.Point2D) Bend(org.cytoscape.view.presentation.property.values.Bend) Point(java.awt.Point) Handle(org.cytoscape.view.presentation.property.values.Handle)

Example 13 with Bend

use of org.cytoscape.view.presentation.property.values.Bend in project cytoscape-impl by cytoscape.

the class DEdgeView method moveHandleInternal.

protected final void moveHandleInternal(final int inx, double x, double y) {
    final Bend bend = graphView.m_edgeDetails.getBend(model);
    final HandleImpl handle = (HandleImpl) bend.getAllHandles().get(inx);
    handle.defineHandle(graphView.getViewModel(), this, x, y);
    if (graphView.m_spacialA.delete((model.getSUID() << 6) | inx))
        graphView.m_spacialA.insert((model.getSUID() << 6) | inx, (float) (x - (graphView.getAnchorSize() / 2.0d)), (float) (y - (graphView.getAnchorSize() / 2.0d)), (float) (x + (graphView.getAnchorSize() / 2.0d)), (float) (y + (graphView.getAnchorSize() / 2.0d)), 0.0);
}
Also used : Bend(org.cytoscape.view.presentation.property.values.Bend)

Example 14 with Bend

use of org.cytoscape.view.presentation.property.values.Bend in project cytoscape-impl by cytoscape.

the class DEdgeView method getAnchor.

/**
 * Actual method to be used in the Graph Renderer.
 */
@Override
public void getAnchor(int anchorIndex, float[] anchorArr, int offset) {
    final Bend bend;
    if (isValueLocked(DVisualLexicon.EDGE_BEND))
        bend = this.getVisualProperty(DVisualLexicon.EDGE_BEND);
    else
        bend = graphView.m_edgeDetails.getBend(model);
    final Handle handle;
    if (graphView.m_edgeDetails.getLineCurved(model) == EdgeView.CURVED_LINES)
        handle = bend.getAllHandles().get(anchorIndex);
    else
        handle = bend.getAllHandles().get(anchorIndex / 2);
    final Point2D newPoint = handle.calculateHandleLocation(graphView.getViewModel(), this);
    anchorArr[offset] = (float) newPoint.getX();
    anchorArr[offset + 1] = (float) newPoint.getY();
}
Also used : Point2D(java.awt.geom.Point2D) Bend(org.cytoscape.view.presentation.property.values.Bend) Handle(org.cytoscape.view.presentation.property.values.Handle)

Example 15 with Bend

use of org.cytoscape.view.presentation.property.values.Bend in project cytoscape-impl by cytoscape.

the class DEdgeView method addHandleInternal.

/**
 * Insert a new handle to bend object.
 *
 * @param insertInx
 * @param handleLocation
 */
private void addHandleInternal(final int insertInx, final Point2D handleLocation) {
    synchronized (graphView.m_lock) {
        final Bend bend = graphView.m_edgeDetails.getBend(model);
        final Handle handle = handleFacgtory.createHandle(graphView, this, handleLocation.getX(), handleLocation.getY());
        bend.insertHandleAt(insertInx, handle);
        if (selected) {
            for (int j = bend.getAllHandles().size() - 1; j > insertInx; j--) {
                graphView.m_spacialA.exists((model.getSUID() << 6) | (j - 1), graphView.m_extentsBuff, 0);
                graphView.m_spacialA.delete((model.getSUID() << 6) | (j - 1));
                graphView.m_spacialA.insert((model.getSUID() << 6) | j, graphView.m_extentsBuff[0], graphView.m_extentsBuff[1], graphView.m_extentsBuff[2], graphView.m_extentsBuff[3], 0.0);
                if (graphView.m_selectedAnchors.delete((model.getSUID() << 6) | (j - 1)))
                    graphView.m_selectedAnchors.insert((model.getSUID() << 6) | j);
            }
            graphView.m_spacialA.insert((model.getSUID() << 6) | insertInx, (float) (handleLocation.getX() - (graphView.getAnchorSize() / 2.0d)), (float) (handleLocation.getY() - (graphView.getAnchorSize() / 2.0d)), (float) (handleLocation.getX() + (graphView.getAnchorSize() / 2.0d)), (float) (handleLocation.getY() + (graphView.getAnchorSize() / 2.0d)), 0.0);
        }
        graphView.setContentChanged();
    }
}
Also used : Bend(org.cytoscape.view.presentation.property.values.Bend) Paint(java.awt.Paint) Handle(org.cytoscape.view.presentation.property.values.Handle)

Aggregations

Bend (org.cytoscape.view.presentation.property.values.Bend)19 Handle (org.cytoscape.view.presentation.property.values.Handle)8 Paint (java.awt.Paint)5 Point2D (java.awt.geom.Point2D)5 Point (java.awt.Point)3 CyEdge (org.cytoscape.model.CyEdge)3 Font (java.awt.Font)2 Icon (javax.swing.Icon)2 DArrowShape (org.cytoscape.ding.DArrowShape)2 ViewChangeEdit (org.cytoscape.ding.ViewChangeEdit)2 CyNode (org.cytoscape.model.CyNode)2 LongEnumerator (org.cytoscape.util.intr.LongEnumerator)2 ArrowShape (org.cytoscape.view.presentation.property.values.ArrowShape)2 LineType (org.cytoscape.view.presentation.property.values.LineType)2 Color (java.awt.Color)1 Stroke (java.awt.Stroke)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 LinkedList (java.util.LinkedList)1 JLabel (javax.swing.JLabel)1