⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 edgecreatormanipulator.java

📁 JPowerGraph is a Java library for creating directed graphs for SWT. It supports graph movement, sele
💻 JAVA
字号:
package net.sourceforge.jpowergraph.manipulator.edgecreator;

import java.awt.geom.Line2D;

import net.sourceforge.jpowergraph.Node;
import net.sourceforge.jpowergraph.lens.CursorLens;
import net.sourceforge.jpowergraph.manipulator.AbstractManipulator;
import net.sourceforge.jpowergraph.painters.ShapeNodePainter;

import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Point;

/**
 * A manipulator enabling the dragging of the graph
 */
public class EdgeCreatorManipulator extends AbstractManipulator {
    
    public static final String NAME="EdgeCreatorManipulator";

    protected Node m_draggedNode;

    private Line2D draggingLine;
    
    private CursorLens cursorLens;
    private EdgeCreatorListener edgeCreatorListener;

    private boolean disposed = false;

    public EdgeCreatorManipulator(CursorLens theCursorLens, EdgeCreatorListener theEdgeCreatorListener) {
        this.cursorLens = theCursorLens;
        this.edgeCreatorListener = theEdgeCreatorListener;
    }
    
    public String getName() {
        return NAME;
    }
    
    public boolean isDragging() {
        return m_draggedNode!=null;
    }
    
    public Node getDraggedNode() {
        return m_draggedNode;
    }
    
    public void mouseDown(MouseEvent e) {
        if (m_graphPane.isEnabled() && cursorLens.isCreateEdge() && e.button == 1) {
            Point point = new Point(e.x, e.y);
            m_draggedNode=m_graphPane.getNodeAtPoint(point);
            if (m_draggedNode == null || !edgeCreatorListener.canCreateEdgeFrom(m_draggedNode)) {
                m_draggedNode = null;
                cursorLens.setCursor(CursorLens.stop);
            }
            else{
                cursorLens.setCursor(null);
            }
        }
    }
    public void mouseUp(MouseEvent e) {
        if (m_draggedNode!=null) {
            Node overChild = m_graphPane.getNodeAtPoint(new Point(e.x, e.y));
            boolean canLinkHere = edgeCreatorListener.canCreateEdge(m_draggedNode, overChild);
            if (canLinkHere){
                edgeCreatorListener.createEdge(m_draggedNode, overChild);
            }
        }
        m_draggedNode = null;
        draggingLine = null;
        cursorLens.setCursor(null);
        m_graphPane.redraw();
    }
    public void mouseMove(MouseEvent e) {
        if (m_draggedNode!=null) {
            autoscroll(e);
            Node overChild = m_graphPane.getNodeAtPoint(new Point(e.x, e.y));
            boolean canLinkHere = edgeCreatorListener.canCreateEdge(m_draggedNode, overChild);
            if (!canLinkHere && overChild != null){
                m_graphPane.setCursor(CursorLens.stop);
            }
            else{
                cursorLens.setCursor(null);
            }
            
            Point nodeScreenPoint=m_graphPane.getScreenPointForNode(m_draggedNode);
            draggingLine = new Line2D.Double(nodeScreenPoint.x, nodeScreenPoint.y, e.x, e.y);
            m_graphPane.redraw();
        }
        else{
            draggingLine = null;
        }
    }

    public void paint(GC g) {
        if (draggingLine != null){
            g.setForeground(((ShapeNodePainter) m_graphPane.getPainterForNode(m_draggedNode)).getBorderColor());
            g.drawLine((int) draggingLine.getX1(), (int) draggingLine.getY1(), (int) draggingLine.getX2(), (int) draggingLine.getY2());
        }
    }
    
    public void dispose(){
        disposed  = true;
    }
    
    public boolean isDisposed(){
        return disposed ;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -