blob: 6491e8b7007fac3df870f77ba8b56a8200cb0900 [file] [log] [blame]
//------------------------------------------------------------------------------
// 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;
}