Mercurial > projects > dwt2
diff org.eclipse.draw2d/src/org/eclipse/draw2d/ConnectionLocator.d @ 12:bc29606a740c
Added dwt-addons in original directory structure of eclipse.org
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sat, 14 Mar 2009 18:23:29 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/org.eclipse.draw2d/src/org/eclipse/draw2d/ConnectionLocator.d Sat Mar 14 18:23:29 2009 +0100 @@ -0,0 +1,165 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 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 + * Port to the D programming language: + * Frank Benoit <benoit@tionex.de> + *******************************************************************************/ +module org.eclipse.draw2d.ConnectionLocator; + +import java.lang.all; + +import org.eclipse.draw2d.geometry.Dimension; +import org.eclipse.draw2d.geometry.Point; +import org.eclipse.draw2d.geometry.PointList; +import org.eclipse.draw2d.AbstractLocator; +import org.eclipse.draw2d.Connection; + +/** + * 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 + : AbstractLocator +{ + +/** @deprecated Use {@link #SOURCE} */ +public static const int START = 2; +/** The start (or source) of the Connection */ +public static const int SOURCE = 2; + +/** @deprecated Use {@link #TARGET} */ +public static const int END = 3; +/** The end (or target) of the Connection */ +public static const 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 const int MIDPOINT = 4; +/** The middle of the Connection */ +public static const 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 this(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 this(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 <i>points</i>. If + * {@link #TARGET}, it returns the last point in <i>points</i>. If {@link #MIDDLE}, it + * returns the middle of line represented by <i>points</i>. + * + * @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 is 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; +} + +}