blob: 876c2d575cfc88f1dae98b950eb4260117e510f8 [file] [log] [blame]
package org.eclipse.gmf.tooling.runtime.linklf.labels;
import org.eclipse.draw2d.Connection;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.PointList;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.editparts.AbstractConnectionEditPart;
import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
import org.eclipse.gef.editpolicies.ResizableEditPolicy;
import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.LabelEditPart;
import org.eclipse.gmf.runtime.draw2d.ui.geometry.PointListUtilities;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
/**
* Extends default GMF Runtime {@link LabelEditPart} with custom
* {@link LinkLFLabelOffsetConvention}
* <p/>
*
* @since 3.3
*/
public class LinkLFLabelEditPart extends LabelEditPart {
public LinkLFLabelEditPart(View view) {
super(view);
}
@Override
public Point getReferencePoint() {
if (getParent() instanceof AbstractConnectionEditPart) {
int percents = LinkLFLabelOffsetConvention
.getPercentageOffsetAmongTheLineForAlignment(getKeyPoint());
return calculateRefPoint2(percents);
}
return getParent().getFigure().getBounds().getTopLeft();
}
@Override
public AbstractGraphicalEditPart getParent() {
return (AbstractGraphicalEditPart) super.getParent();
}
/**
* [GMFRT] make protected
* <p/>
* Calculates a point located at a percentage of the connection
*
* @param percent
* @return the point
* @deprecated copy pasted from super class where it is private
*/
@Deprecated
protected final Point calculateRefPoint2(int percent) {
if (getParent() instanceof AbstractConnectionEditPart) {
PointList ptList = ((Connection) ((ConnectionEditPart) getParent())
.getFigure()).getPoints();
Point refPoint = PointListUtilities.calculatePointRelativeToLine(
ptList, 0, percent, true);
return refPoint;
} else if (getParent() instanceof GraphicalEditPart) {
return ((AbstractGraphicalEditPart) getParent()).getFigure()
.getBounds().getTopLeft();
}
return null;
}
public void refreshBounds() {
if (isResizable()) {
handleResizableRefreshBounds();
} else {
handleNonResizableRefreshBounds();
}
}
/**
* [GMFRT] make protected
* <p/>
* check if the edit part had a resizable edit policy installed or not
*
* @return true is resizable edit policy is installed otherwise false
* @deprecated copy pasted from super class where it is private
*/
@Deprecated
protected boolean isResizable() {
EditPolicy editPolicy = getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
return editPolicy instanceof ResizableEditPolicy;
}
/**
* [GMFRT] make protected, then override
* <p/>
* handles non resizable label refresh bounds
*
* @deprecated copy pasted AND MODIFIED from super class where it is
* private: {@link LinkLFLabelLocator}
*/
@Deprecated
protected void handleNonResizableRefreshBounds() {
int dx = ((Integer) getStructuralFeatureValue(NotationPackage.eINSTANCE
.getLocation_X())).intValue();
int dy = ((Integer) getStructuralFeatureValue(NotationPackage.eINSTANCE
.getLocation_Y())).intValue();
Point offset = new Point(dx, dy);
if (getParent() instanceof AbstractConnectionEditPart) {
((AbstractGraphicalEditPart) getParent()).setLayoutConstraint(
this,
getFigure(),
new LinkLFLabelLocator(
((AbstractConnectionEditPart) getParent())
.getConnectionFigure(), offset,
getKeyPoint()));
} else {
getFigure().getParent().setConstraint(
getFigure(),
new LinkLFLabelLocator(getFigure().getParent(), offset,
getKeyPoint()));
}
}
/**
* [GMFRT] make protected, then override
* <p/>
* handles resizable lable refresh bounds
*
* @deprecated copy pasted AND MODIFIED from super class where it is
* private: {@link LinkLFResizableLabelLocator}
*/
@Deprecated
protected void handleResizableRefreshBounds() {
int dx = ((Integer) getStructuralFeatureValue(NotationPackage.eINSTANCE
.getLocation_X())).intValue();
int dy = ((Integer) getStructuralFeatureValue(NotationPackage.eINSTANCE
.getLocation_Y())).intValue();
int width = ((Integer) getStructuralFeatureValue(NotationPackage.eINSTANCE
.getSize_Width())).intValue();
int height = ((Integer) getStructuralFeatureValue(NotationPackage.eINSTANCE
.getSize_Height())).intValue();
Rectangle rectangle = new Rectangle(dx, dy, width, height);
if (getParent() instanceof AbstractConnectionEditPart) {
((AbstractGraphicalEditPart) getParent()).setLayoutConstraint(
this,
getFigure(),
new LinkLFResizableLabelLocator(
((AbstractConnectionEditPart) getParent())
.getConnectionFigure(), rectangle,
getKeyPoint()));
} else {
getFigure().getParent().setConstraint(
getFigure(),
new LinkLFResizableLabelLocator(getFigure().getParent(),
rectangle, getKeyPoint()));
}
}
}