📄 edgecreatormanipulator.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 + -