Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.common/src/org/eclipse/papyrus/uml/diagram/common/editparts/linkslf/LinksLFConnectionEditPart.java')
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.common/src/org/eclipse/papyrus/uml/diagram/common/editparts/linkslf/LinksLFConnectionEditPart.java113
1 files changed, 113 insertions, 0 deletions
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.common/src/org/eclipse/papyrus/uml/diagram/common/editparts/linkslf/LinksLFConnectionEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.common/src/org/eclipse/papyrus/uml/diagram/common/editparts/linkslf/LinksLFConnectionEditPart.java
new file mode 100644
index 00000000000..3ef32e945f6
--- /dev/null
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.common/src/org/eclipse/papyrus/uml/diagram/common/editparts/linkslf/LinksLFConnectionEditPart.java
@@ -0,0 +1,113 @@
+package org.eclipse.papyrus.uml.diagram.common.editparts.linkslf;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.draw2d.Bendpoint;
+import org.eclipse.draw2d.Connection;
+import org.eclipse.gef.EditPolicy;
+import org.eclipse.gmf.runtime.diagram.ui.util.EditPartUtil;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.PolylineConnectionEx;
+import org.eclipse.gmf.runtime.draw2d.ui.internal.routers.ForestRouter;
+import org.eclipse.gmf.runtime.draw2d.ui.internal.routers.OrthogonalRouter;
+import org.eclipse.gmf.runtime.gef.ui.internal.editpolicies.LineMode;
+import org.eclipse.gmf.runtime.gef.ui.internal.l10n.Cursors;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.RelativeBendpoints;
+import org.eclipse.gmf.runtime.notation.RoutingStyle;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpart.ConnectionEditPart;
+import org.eclipse.papyrus.infra.gmfdiag.common.linklf.AbsoluteBendpointsConvention;
+import org.eclipse.papyrus.infra.gmfdiag.common.linklf.editpolicies.DebugShowConnectionEndPointsAndAnchorsEditPolicy;
+import org.eclipse.papyrus.infra.gmfdiag.common.linklf.editpolicies.LinksLFConnectionBendpointEditPolicy;
+
+
+public abstract class LinksLFConnectionEditPart extends ConnectionEditPart {
+
+ public LinksLFConnectionEditPart(View view) {
+ super(view);
+ }
+
+ @Override
+ protected void createDefaultEditPolicies() {
+ super.createDefaultEditPolicies();
+
+ installEditPolicy(EditPolicy.CONNECTION_ENDPOINTS_ROLE, new DebugShowConnectionEndPointsAndAnchorsEditPolicy());
+ installBendpointEditPolicy();
+ }
+
+ @Override
+ protected void refreshBendpoints() {
+ RelativeBendpoints bendpoints = (RelativeBendpoints)getEdge().getBendpoints();
+ List<?> modelConstraint = bendpoints.getPoints();
+ List<Bendpoint> figureConstraint = new ArrayList<Bendpoint>();
+ for(int i = 0; i < modelConstraint.size(); i++) {
+ org.eclipse.gmf.runtime.notation.datatype.RelativeBendpoint wbp = (org.eclipse.gmf.runtime.notation.datatype.RelativeBendpoint)modelConstraint.get(i);
+ float weight;
+ if(modelConstraint.size() == 1) {
+ weight = 0.5f;
+ } else {
+ weight = i / ((float)modelConstraint.size() - 1);
+ }
+ Bendpoint bp = AbsoluteBendpointsConvention.d2dBendpoint(wbp, getConnectionFigure(), weight);
+ figureConstraint.add(bp);
+ }
+ getConnectionFigure().setRoutingConstraint(figureConstraint);
+ }
+
+ /**
+ * [GMFRT] make protected
+ */
+ protected final void installBendpointEditPolicy() {
+ if(getConnectionFigure().getConnectionRouter() instanceof ForestRouter) {
+ installEditPolicy(EditPolicy.CONNECTION_BENDPOINTS_ROLE, new LinksLFConnectionBendpointEditPolicy(LineMode.ORTHOGONAL_CONSTRAINED));
+ } else if(getConnectionFigure().getConnectionRouter() instanceof OrthogonalRouter) {
+ installEditPolicy(EditPolicy.CONNECTION_BENDPOINTS_ROLE, new LinksLFConnectionBendpointEditPolicy(LineMode.ORTHOGONAL_FREE));
+ } else {
+ installEditPolicy(EditPolicy.CONNECTION_BENDPOINTS_ROLE, new LinksLFConnectionBendpointEditPolicy(LineMode.OBLIQUE));
+ }
+
+ EditPartUtil.synchronizeRunnableToMainThread(this, new Runnable() {
+
+ public void run() {
+ if(getConnectionFigure().getConnectionRouter() instanceof ForestRouter) {
+ getConnectionFigure().setCursor(Cursors.CURSOR_SEG_MOVE);
+ } else if(getConnectionFigure().getConnectionRouter() instanceof OrthogonalRouter) {
+ getConnectionFigure().setCursor(Cursors.CURSOR_SEG_MOVE);
+ } else {
+ getConnectionFigure().setCursor(Cursors.CURSOR_SEG_ADD);
+ }
+ };
+ });
+ }
+
+ protected void refreshRouterChange() {
+ refreshBendpoints();
+ installBendpointEditPolicy();
+ }
+
+ @Override
+ protected void refreshRoutingStyles() {
+ Connection connection = getConnectionFigure();
+ if(!(connection instanceof PolylineConnectionEx))
+ return;
+
+ PolylineConnectionEx poly = (PolylineConnectionEx)connection;
+
+ RoutingStyle style = (RoutingStyle)((View)getModel()).getStyle(NotationPackage.Literals.ROUTING_STYLE);
+ if(style != null) {
+
+ boolean closestDistance = style.isClosestDistance();
+ boolean avoidObstruction = style.isAvoidObstructions();
+
+ poly.setRoutingStyles(closestDistance, avoidObstruction);
+
+ if(avoidObstruction)
+ installEditPolicy(EditPolicy.CONNECTION_BENDPOINTS_ROLE, null);
+ else
+ installBendpointEditPolicy();
+ }
+ }
+
+
+}

Back to the top