| //------------------------------------------------------------------------------ |
| // Copyright (c) 2005, 2007 IBM Corporation and others. |
| // All rights reserved. This program and the accompanying materials |
| // are made available under the terms of the Eclipse Public License v1.0 |
| // which accompanies this distribution, and is available at |
| // http://www.eclipse.org/legal/epl-v10.html |
| // |
| // Contributors: |
| // IBM Corporation - initial implementation |
| //------------------------------------------------------------------------------ |
| /** |
| * |
| */ |
| package org.eclipse.epf.diagramming.base.parts; |
| |
| import org.eclipse.draw2d.ConnectionAnchor; |
| import org.eclipse.draw2d.geometry.Point; |
| import org.eclipse.draw2d.geometry.Rectangle; |
| import org.eclipse.epf.diagram.model.Link; |
| import org.eclipse.epf.diagramming.base.figures.DecisionNodeFigure; |
| import org.eclipse.epf.diagramming.base.figures.RelativeXYAnchor; |
| import org.eclipse.gef.ConnectionEditPart; |
| import org.eclipse.gef.Request; |
| import org.eclipse.gef.requests.CreateConnectionRequest; |
| import org.eclipse.gef.requests.LocationRequest; |
| import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart; |
| import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure; |
| import org.eclipse.gmf.runtime.notation.View; |
| |
| /** |
| * @author Shashidhar Kannoori |
| * |
| */ |
| public class DiamondNodeEditPart extends ShapeNodeEditPart { |
| |
| /** |
| * @param view |
| */ |
| public DiamondNodeEditPart(View view) { |
| super(view); |
| // TODO Auto-generated constructor stub |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart#createNodeFigure() |
| */ |
| protected NodeFigure createNodeFigure() { |
| return null; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * @see org.eclipse.epf.authoring.gef.edit.NodeEditPart#getSourceConnectionAnchor(org.eclipse.gef.ConnectionEditPart) |
| * @custom |
| */ |
| public ConnectionAnchor getSourceConnectionAnchor( |
| ConnectionEditPart connection) { |
| boolean isRelative = false; |
| Point sourceEndPoint; |
| if (recentSourceEndPoint == null) { |
| // get source end point from the model |
| Link link = (Link) connection.getModel(); |
| sourceEndPoint = link.getSourceEndPoint(); |
| isRelative = true; |
| } else { |
| sourceEndPoint = recentSourceEndPoint; |
| } |
| if (sourceEndPoint != null) { |
| return new RelativeXYAnchor(getFigure(), sourceEndPoint, isRelative); |
| } |
| return super.getSourceConnectionAnchor(connection); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * @see org.eclipse.epf.authoring.gef.edit.NodeEditPart#getSourceConnectionAnchor(org.eclipse.gef.Request) |
| * @custom |
| */ |
| public ConnectionAnchor getSourceConnectionAnchor(Request request) { |
| Point p = null; |
| if (request instanceof CreateConnectionRequest) { |
| CreateConnectionRequest req = (CreateConnectionRequest) request; |
| p = req.getLocation(); |
| } else if (request instanceof LocationRequest) { |
| p = ((LocationRequest) request).getLocation(); |
| } |
| if (p != null) { |
| recentSourceEndPoint = getLocation(p); |
| return new RelativeXYAnchor(getFigure(), recentSourceEndPoint, true); |
| } |
| return super.getSourceConnectionAnchor(request); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * @see org.eclipse.epf.authoring.gef.edit.NodeEditPart#getTargetConnectionAnchor(org.eclipse.gef.ConnectionEditPart) |
| * @custom |
| */ |
| public ConnectionAnchor getTargetConnectionAnchor( |
| ConnectionEditPart connection) { |
| boolean isRelative = false; |
| Point targetEndPoint; |
| if (recentTargetEndPoint == null) { |
| // get target end point from model |
| Link link = (Link) connection.getModel(); |
| targetEndPoint = link.getTargetEndPoint(); |
| isRelative = true; |
| } else { |
| targetEndPoint = recentTargetEndPoint; |
| } |
| if (targetEndPoint != null) { |
| return new RelativeXYAnchor(getFigure(), targetEndPoint, isRelative); |
| } |
| |
| return super.getTargetConnectionAnchor(connection); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * @see org.eclipse.epf.authoring.gef.edit.NodeEditPart#getTargetConnectionAnchor(org.eclipse.gef.Request) |
| * @custom |
| */ |
| public ConnectionAnchor getTargetConnectionAnchor(Request request) { |
| Point p = null; |
| if (request instanceof CreateConnectionRequest) { |
| CreateConnectionRequest req = (CreateConnectionRequest) request; |
| p = req.getLocation(); |
| } else if (request instanceof LocationRequest) { |
| p = ((LocationRequest) request).getLocation(); |
| } |
| if (p != null) { |
| recentTargetEndPoint = getLocation(p); |
| return new RelativeXYAnchor(getFigure(), recentTargetEndPoint, true); |
| } |
| |
| return super.getTargetConnectionAnchor(request); |
| } |
| |
| /** |
| * @see org.eclipse.epf.authoring.gef.util.ConnectionAnchorLocator#getLocation(Point) |
| * @custom |
| * |
| */ |
| public Point getLocation(Point reference) { |
| DecisionNodeFigure f = ((DecisionNodeFigure) getFigure()); |
| |
| // translate points to absolute |
| Point[] points = new Point[f.getPoints().size()]; |
| for (int i = f.getPoints().size() - 1; i > -1; i--) { |
| Point p = f.getPoints().getPoint(i); |
| f.translateToAbsolute(p); |
| points[i] = p; |
| } |
| |
| Point p = org.eclipse.epf.diagramming.base.util.AnchorUtil.getClosestPoint(points, reference); |
| if (p != null) { |
| Rectangle r = f.getBounds().getCopy(); |
| f.translateToAbsolute(r); |
| p.performTranslate(-r.x, -r.y); |
| } |
| return p; |
| } |
| |
| /* |
| * @custom |
| */ |
| private Point recentSourceEndPoint; |
| |
| /* |
| * @custom |
| */ |
| private Point recentTargetEndPoint; |
| |
| } |