
org.eclipse.draw2d.ConnectionLocator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of draw2d Show documentation
Show all versions of draw2d Show documentation
Eclipse GEF Draw2D Library
The newest version!
/*******************************************************************************
* Copyright (c) 2000, 2010 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 API and implementation
*******************************************************************************/
package org.eclipse.draw2d;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.PointList;
/**
* Repositions a {@link Figure} attached to a {@link Connection} when the
* Connection is moved. Provides for alignment at the start (source), middle, or
* end (target) of the Connection.
*/
public class ConnectionLocator extends AbstractLocator {
/** @deprecated Use {@link #SOURCE} */
public static final int START = 2;
/** The start (or source) of the Connection */
public static final int SOURCE = 2;
/** @deprecated Use {@link #TARGET} */
public static final int END = 3;
/** The end (or target) of the Connection */
public static final int TARGET = 3;
/**
* @deprecated Use {@link #MIDDLE} instead, since the location is not the
* midpoint of a line-segment, but the middle of a polyline.
*/
public static final int MIDPOINT = 4;
/** The middle of the Connection */
public static final int MIDDLE = 4;
private Connection connection;
private int alignment;
/**
* Constructs a ConnectionLocator with the passed connection and
* {@link #MIDDLE} alignment.
*
* @param connection
* The Connection
* @since 2.0
*/
public ConnectionLocator(Connection connection) {
this(connection, MIDDLE);
}
/**
* Constructs a ConnectionLocator with the passed Connection and alignment.
* Valid values for the alignment are integer constants {@link #SOURCE},
* {@link #MIDDLE}, and {@link #TARGET}.
*
* @param connection
* The Connection
* @param align
* The alignment
*
* @since 2.0
*/
public ConnectionLocator(Connection connection, int align) {
setConnection(connection);
setAlignment(align);
}
/**
* Returns the alignment of ConnectionLocator.
*
* @return The alignment
* @since 2.0
*/
public int getAlignment() {
return alignment;
}
/**
* Returns connection associated with ConnectionLocator.
*
* @return The Connection
* @since 2.0
*/
protected Connection getConnection() {
return connection;
}
/**
* Returns ConnectionLocator's reference point in absolute coordinates.
*
* @return The reference point
* @since 2.0
*/
protected Point getReferencePoint() {
Point p = getLocation(getConnection().getPoints());
getConnection().translateToAbsolute(p);
return p;
}
/**
* Returns a point from the passed PointList, dependent on
* ConnectionLocator's alignment. If the alignment is {@link #SOURCE}, it
* returns the first point in points. If {@link #TARGET}, it returns
* the last point in points. If {@link #MIDDLE}, it returns the
* middle of line represented by points.
*
* @param points
* The points in the Connection
* @return The location
* @since 2.0
*/
protected Point getLocation(PointList points) {
switch (getAlignment()) {
case SOURCE:
return points.getPoint(Point.SINGLETON, 0);
case TARGET:
return points.getPoint(Point.SINGLETON, points.size() - 1);
case MIDDLE:
if (points.size() % 2 == 0) {
int i = points.size() / 2;
int j = i - 1;
Point p1 = points.getPoint(j);
Point p2 = points.getPoint(i);
Dimension d = p2.getDifference(p1);
return Point.SINGLETON.setLocation(p1.x + d.width / 2, p1.y
+ d.height / 2);
}
int i = (points.size() - 1) / 2;
return points.getPoint(Point.SINGLETON, i);
default:
return new Point();
}
}
/**
* Sets the alignment. Possible values are {@link #SOURCE}, {@link #MIDDLE},
* and {@link #TARGET}.
*
* @param align
* The alignment
* @since 2.0
*/
protected void setAlignment(int align) {
alignment = align;
}
/**
* Sets the Connection to be associated with this ConnectionLocator.
*
* @param connection
* The Connection
* @since 2.0
*/
protected void setConnection(Connection connection) {
this.connection = connection;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy