package org.eclipse.uml2.diagram.clazz.edit.parts;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.PositionConstants;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gmf.runtime.diagram.ui.figures.IBorderItemLocator;
import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
public class TemplateLocator implements IBorderItemLocator {
private final IFigure myParentFigure;
public TemplateLocator(IFigure parentFigure) {
myParentFigure = parentFigure;
}
public int getCurrentSideOfParent() {
return PositionConstants.NORTH_EAST;
}
public void relocate(IFigure target) {
Rectangle validLocation = getValidLocation(null, target);
target.setLocation(validLocation.getTopLeft());
target.setSize(validLocation.getSize());
}
public Rectangle getValidLocation(Rectangle proposedLocation, IFigure borderItem) {
Rectangle parentBorder = getParentBorderUnsafe();
Dimension validSize = parentBorder.getSize(); //new instance
validSize.scale(0.8, 0.5);
validSize.intersect(borderItem.getPreferredSize());
Rectangle result = new Rectangle(parentBorder.getTopRight(), validSize);
result.translate(-validSize.width / 2, -validSize.height / 2);
return result;
}
public void setConstraint(Rectangle constraint) {
//nothing to do
}
private Rectangle getParentBorderUnsafe() {
return myParentFigure instanceof NodeFigure ? ((NodeFigure) myParentFigure).getHandleBounds() : myParentFigure.getBounds();
}
}