/**
*
*/
package agg.gui.editor;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.Vector;
import javax.swing.SwingUtilities;
import agg.editor.impl.EdArc;
import agg.editor.impl.EdGraphObject;
import agg.editor.impl.EdNode;
import agg.gui.AGGAppl;
/**
* @author olga
*
*/
public class GraphCanvasMouseMotionAdapter implements MouseMotionListener {
private GraphCanvas canvas;
public GraphCanvasMouseMotionAdapter(final GraphCanvas graphcanvas) {
this.canvas = graphcanvas;
this.canvas.addMouseMotionListener(this);
}
public void mouseMoved(MouseEvent e) {
if (this.canvas.getGraphics() == null
|| this.canvas.getGraph() == null
|| this.canvas.getGraph().getTypeSet() == null
|| this.canvas.getGraph().getTypeSet().isEmpty()) {
return;
}
if (this.canvas.isScrolling()) {
final Point p = this.canvas.getPickedPoint();
this.canvas.scrollGraph(p.x, p.y, e.getX(), e.getY());
this.canvas.setPickedPoint(e.getX(), e.getY());
return;
}
final EdGraphObject go = this.canvas.getPickedObject(e.getX(), e.getY(),
this.canvas.getGraphics().getFontMetrics());
if (go != null) {
this.canvas.setToolTipText(null);
if (go.isArc() && go.isVisible() && this.canvas.isEdgeAnchorVisible()
&& !((EdArc) go).getBasisArc().isInheritance() ) {
this.canvas.repaint();
go.getArc().showMoveAnchor(this.canvas.getGraphics());
}
if (this.canvas.getGraph().isTypeGraph()) {
final String comment = go.getType().getBasisType().getTextualComment();
if (!comment.equals(""))
this.canvas.setToolTipText(" " + comment + " ");
}
else if (go.getType().isIconable()) {
String attrText = getAttrText(go);
if (!"".equals(attrText)) {
this.canvas.setToolTipText(attrText);
}
}
}
}
public void mouseDragged(MouseEvent e) {
if (this.canvas.getGraphics() == null
|| this.canvas.getGraph() == null) {
return;
}
if (this.canvas.isLeftAndRightPressed()) {
if (this.canvas.getPickedObject() != null) {
this.canvas.draggingOfObject(e);
}
else if (this.canvas.getGraph().isEditable()) {
this.canvas.resizeSelectBox(e.getX(), e.getY());
}
return;
}
if (this.canvas.isScrolling()) {
this.canvas.setScrollingByDragging(true);
final Point p = this.canvas.getPickedPoint();
this.canvas.scrollGraph(p.x, p.y, e.getX(), e.getY());
this.canvas.setPickedPoint(e.getX(), e.getY());
return;
}
if (SwingUtilities.isLeftMouseButton(e)) {
if (this.canvas.getEditMode() == EditorConstants.DRAW) {
if (this.canvas.canCreateNode()) {
// reset this.canvas.canCreateNode to be false
this.canvas.canCreateNodeOfType(null, null, null);
}
if (this.canvas.getGraph().isEditable()) {
if (this.canvas.isSelectBoxOpen())
this.canvas.resizeSelectBox(e.getX(), e.getY());
AGGAppl.getInstance().getGraGraEditor().resetSelectEditMode();
}
}
else if (this.canvas.getEditMode() == EditorConstants.ARC
&& this.canvas.isMagicEdgeSupportEnabled()
&& (e.getX() > 0) && (e.getY() > 0)) {
final Point p = this.canvas.getPickedPoint();
final Point dist = new Point(Math.abs(e.getX() - p.x), Math.abs(e.getY() - p.y));
if (!this.canvas.isMagicArc() && (dist.x > 2 || dist.y > 2)) {
this.canvas.startMagicArc(e.getX(), e.getY());
this.canvas.setMagicArc(true);
} else if (this.canvas.isMagicArc()) {
this.canvas.drawMagicArc((EdNode) this.canvas.getSourceObject(), e.getX(), e.getY());
}
}
else if (this.canvas.getPickedObject() != null) {
this.canvas.draggingOfObject(e);
}
else {
this.canvas.resizeSelectBox(e.getX(), e.getY());
}
}
else if (SwingUtilities.isMiddleMouseButton(e)) {
if (this.canvas.getPickedObject() != null) {
this.canvas.draggingOfObject(e);
}
else {
this.canvas.resizeSelectBox(e.getX(), e.getY());
}
}
}
private String getAttrText(final EdGraphObject go) {
String attrText = "";
final Vector<Vector<String>> attrs = go.getAttributes();
for (int i=0; i<attrs.size(); i++) {
Vector<String> attr = attrs.get(i);
for (int j=1; j<attr.size(); j++) {
attrText = attrText.concat(attr.get(j));
if (j==1)
attrText = attrText.concat("=");
}
if (!"".equals(attrText) && (i<attrs.size()-1)) {
attrText = attrText.concat("<br>");
}
}
if (!"".equals(attrText)) {
attrText = "<html><body>".concat(attrText);
attrText = attrText.concat("</body></html>");
}
return attrText;
}
}