/*******************************************************************************
 * 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.geometry;

/**
 * Conditionally transposes geometrical objects based on an "enabled" flag. When
 * enabled, the method t(Object) will transpose the passed geometrical object.
 * Otherwise, the object will be returned without modification
 */
public class Transposer {

	private boolean enabled = false;

	/**
	 * Disables transposing of inputs.
	 * 
	 * @since 2.0
	 */
	public void disable() {
		enabled = false;
	}

	/**
	 * Enables transposing of inputs.
	 * 
	 * @since 2.0
	 */
	public void enable() {
		enabled = true;
	}

	/**
	 * Returns <code>true</code> if this Transposer is enabled.
	 * 
	 * @return <code>true</code> if this Transposer is enabled
	 * @since 2.0
	 */
	public boolean isEnabled() {
		return enabled;
	}

	/**
	 * Sets the enabled state of this Transposer.
	 * 
	 * @param e
	 *            New enabled value
	 * @since 2.0
	 */
	public void setEnabled(boolean e) {
		enabled = e;
	}

	/**
	 * Returns a new transposed Dimension of the input Dimension.
	 * 
	 * @param d
	 *            Input dimension being transposed.
	 * @return The new transposed dimension.
	 * @since 2.0
	 */
	public Dimension t(Dimension d) {
		if (isEnabled())
			return d.getTransposed();
		return d;
	}

	/**
	 * Returns a new transposed Insets of the input Insets.
	 * 
	 * @param i
	 *            Insets to be transposed.
	 * @return The new transposed Insets.
	 * @since 2.0
	 */
	public Insets t(Insets i) {
		if (isEnabled())
			return i.getTransposed();
		return i;
	}

	/**
	 * Returns a new transposed Point of the input Point.
	 * 
	 * @param p
	 *            Point to be transposed.
	 * @return The new transposed Point.
	 * @since 2.0
	 */
	public Point t(Point p) {
		if (isEnabled())
			return p.getTransposed();
		return p;
	}

	/**
	 * Returns a new transposed Rectangle of the input Rectangle.
	 * 
	 * @param r
	 *            Rectangle to be transposed.
	 * @return The new trasnposed Rectangle.
	 * @since 2.0
	 */
	public Rectangle t(Rectangle r) {
		if (isEnabled())
			return r.getTransposed();
		return r;
	}

}
