/******************************************************************************* * 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 *******************************************************************************/ package org.eclipse.gef.requests; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.draw2d.geometry.Point; import org.eclipse.draw2d.geometry.Rectangle; /** * A Request to change the bounds of the EditPart(s). */ public class ChangeBoundsRequest extends GroupRequest implements DropRequest { private Point moveDelta = new Point(); private Dimension resizeDelta = new Dimension(); private int resizeDirection; private Point mouseLocation; private int flags = 0; private static final int CONSTRAINED_RESIZE = 1; private static final int CENTERED_RESIZE = 2; private static final int CONSTRAINED_MOVE = 4; /** * Default constructor. */ public ChangeBoundsRequest() { } /** * Creates a ChangeBoundsRequest with the given type. * * @param type The type of Request. */ public ChangeBoundsRequest(Object type) { setType(type); } /** * Returns the location of the mouse pointer. * * @return The location of the mouse pointer. */ public Point getLocation() { return mouseLocation; } /** @deprecated Use {@link #getLocation() } * @return The location of the mouse pointer. */ public Point getMouseLocation() { return getLocation(); } /** * Returns a Point representing the distance the EditPart has moved. * * @return A Point representing the distance the EditPart has moved. */ public Point getMoveDelta() { return moveDelta; } /** * Returns the direction the figure is being resized. Possible values are * <ul> * <li>{@link org.eclipse.draw2d.PositionConstants#EAST} * <li>{@link org.eclipse.draw2d.PositionConstants#WEST} * <li>{@link org.eclipse.draw2d.PositionConstants#NORTH} * <li>{@link org.eclipse.draw2d.PositionConstants#SOUTH} * <li>{@link org.eclipse.draw2d.PositionConstants#NORTH_EAST} * <li>{@link org.eclipse.draw2d.PositionConstants#NORTH_WEST} * <li>{@link org.eclipse.draw2d.PositionConstants#SOUTH_EAST} * <li>{@link org.eclipse.draw2d.PositionConstants#SOUTH_WEST} * </ul> * * @return the resize direction */ public int getResizeDirection() { return resizeDirection; } /** * Returns a Dimension representing how much the EditPart has been resized. * * @return A Dimension representing how much the EditPart has been resized. */ public Dimension getSizeDelta() { return resizeDelta; } /** * Transforms a copy of the passed in rectangle to account for the move and/or resize * deltas and returns this copy. * * @param rect the rectangle to transform * @return a copy of the passed in rectangle representing the new bounds */ public Rectangle getTransformedRectangle(Rectangle rect) { return rect.getCopy() .translate(moveDelta) .resize(resizeDelta); } /** * Returns true if the request is for a centered resize. * @since 3.0 * @return <code>true</code> if centered resize */ public boolean isCenteredResize() { return (flags & CENTERED_RESIZE) != 0; } /** * Returns <code>true</code> if the request is for a constrained move * @since 3.0 * @return <code>true</code> if a constrained move */ public boolean isConstrainedMove() { return (flags & CONSTRAINED_MOVE) != 0; } /** * Returns <code>true</code> if the request is for a constrained resize * @since 3.0 * @return <code>true</code> if a constrained resize */ public boolean isConstrainedResize() { return (flags & CONSTRAINED_RESIZE) == CONSTRAINED_RESIZE; } /** * Used to set whether a centered resize is being performed. * @since 3.0 * @param value <code>true</code> if the request is for a centered resize */ public void setCenteredResize(boolean value) { flags = value ? (flags | CENTERED_RESIZE) : (flags & ~CENTERED_RESIZE); } /** * Used to set whether a constrained move is being performed. * @since 3.0 * @param value <code>true</code> if the request is for a constrained move */ public void setConstrainedMove(boolean value) { flags = value ? (flags | CONSTRAINED_MOVE) : (flags & ~CONSTRAINED_MOVE); } /** * Used to set whether a constrained resize is being performed. * @since 3.0 * @param value <code>true</code> if the request is for a constrained resize */ public void setConstrainedResize(boolean value) { flags = value ? (flags | CONSTRAINED_RESIZE) : (flags & ~CONSTRAINED_RESIZE); } /** * Sets the move delta. * * @param p The Point representing the move delta */ public void setMoveDelta(Point p) { moveDelta = p; } /** * Sets the direction the figure is being resized. * @param dir the direction of the resize * @see #getResizeDirection() */ public void setResizeDirection(int dir) { resizeDirection = dir; } /** @deprecated Use {@link #setLocation(Point)} * @param p The location of the mouse pointer. */ public void setMouseLocation(Point p) { setLocation(p); } /** * Sets the location of the mouse pointer. * * @param p The location of the mouse pointer. */ public void setLocation(Point p) { mouseLocation = p; } /** * Sets the size delta. * * @param d The Dimension representing the size delta. */ public void setSizeDelta(Dimension d) { resizeDelta = d; } }