/*******************************************************************************
 * 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.rap.swt.SWT;
import org.eclipse.swt.graphics.Cursor;

/**
 * A collection of cursors.
 */
public class Cursors {

	/**
	 * Returns the cursor corresponding to the given direction, defined in
	 * {@link PositionConstants}. Note that
	 * {@link #getDirectionalCursor(int, boolean)} should be used for
	 * applications which want to run properly when running in a mirrored
	 * environment. The behavior is the same as calling
	 * {@link #getDirectionalCursor(int, boolean)
	 * getDirectionalCursor(direction, false)}.
	 * 
	 * @param direction
	 *            the relative direction of the desired cursor
	 * @return The appropriate directional cursor
	 */
	public static Cursor getDirectionalCursor(int direction) {
		return getDirectionalCursor(direction, false);
	}

	/**
	 * Returns the cursor corresponding to the given direction and mirroring.
	 * The direction must be one of:
	 * <UL>
	 * <LI>{@link PositionConstants#NORTH}
	 * <LI>{@link PositionConstants#SOUTH}
	 * <LI>{@link PositionConstants#EAST}
	 * <LI>{@link PositionConstants#WEST}
	 * <LI>{@link PositionConstants#NORTH_EAST}
	 * <LI>{@link PositionConstants#NORTH_WEST}
	 * <LI>{@link PositionConstants#SOUTH_EAST}
	 * <LI>{@link PositionConstants#SOUTH_WEST}
	 * </UL>
	 * <P>
	 * The behavior is undefined for other values. If <code>isMirrored</code> is
	 * set to <code>true</code>, EAST and WEST will be inverted.
	 * 
	 * @param direction
	 *            the relative direction of the desired cursor
	 * @param isMirrored
	 *            <code>true</code> if EAST and WEST should be inverted
	 * @return The appropriate directional cursor
	 */
	public static Cursor getDirectionalCursor(int direction, boolean isMirrored) {
		if (isMirrored && (direction & PositionConstants.EAST_WEST) != 0)
			direction = direction ^ PositionConstants.EAST_WEST;
		switch (direction) {
		case PositionConstants.NORTH:
			return SIZEN;
		case PositionConstants.SOUTH:
			return SIZES;
		case PositionConstants.EAST:
			return SIZEE;
		case PositionConstants.WEST:
			return SIZEW;
		case PositionConstants.SOUTH_EAST:
			return SIZESE;
		case PositionConstants.SOUTH_WEST:
			return SIZESW;
		case PositionConstants.NORTH_EAST:
			return SIZENE;
		case PositionConstants.NORTH_WEST:
			return SIZENW;
		default:
			break;
		}
		return null;
	}

	/**
	 * @see SWT#CURSOR_ARROW
	 */
	public static final Cursor ARROW;
	/**
	 * @see SWT#CURSOR_SIZEN
	 */
	public static final Cursor SIZEN;
	/**
	 * @see SWT#CURSOR_SIZENE
	 */
	public static final Cursor SIZENE;
	/**
	 * @see SWT#CURSOR_SIZEE
	 */
	public static final Cursor SIZEE;
	/**
	 * @see SWT#CURSOR_SIZESE
	 */
	public static final Cursor SIZESE;
	/**
	 * @see SWT#CURSOR_SIZES
	 */
	public static final Cursor SIZES;
	/**
	 * @see SWT#CURSOR_SIZESW
	 */
	public static final Cursor SIZESW;
	/**
	 * @see SWT#CURSOR_SIZEW
	 */
	public static final Cursor SIZEW;
	/**
	 * @see SWT#CURSOR_SIZENW
	 */
	public static final Cursor SIZENW;
	/**
	 * @see SWT#CURSOR_APPSTARTING
	 */
	public static final Cursor APPSTARTING;
	/**
	 * @see SWT#CURSOR_CROSS
	 */
	public static final Cursor CROSS;
	/**
	 * @see SWT#CURSOR_HAND
	 */
	public static final Cursor HAND;
	/**
	 * @see SWT#CURSOR_HELP
	 */
	public static final Cursor HELP;
	/**
	 * @see SWT#CURSOR_IBEAM
	 */
	public static final Cursor IBEAM;
	/**
	 * @see SWT#CURSOR_NO
	 */
	public static final Cursor NO;
	/**
	 * @see SWT#CURSOR_SIZEALL
	 */
	public static final Cursor SIZEALL;
	/**
	 * @see SWT#CURSOR_SIZENESW
	 */
	public static final Cursor SIZENESW;
	/**
	 * @see SWT#CURSOR_SIZENWSE
	 */
	public static final Cursor SIZENWSE;
	/**
	 * @see SWT#CURSOR_SIZEWE
	 */
	public static final Cursor SIZEWE;
	/**
	 * @see SWT#CURSOR_SIZENS
	 */
	public static final Cursor SIZENS;
	/**
	 * @see SWT#CURSOR_UPARROW
	 */
	public static final Cursor UPARROW;
	/**
	 * @see SWT#CURSOR_WAIT
	 */
	public static final Cursor WAIT;

	static {
		ARROW = new Cursor(null, SWT.CURSOR_ARROW);
		SIZEN = new Cursor(null, SWT.CURSOR_SIZEN);
		SIZENE = new Cursor(null, SWT.CURSOR_SIZENE);
		SIZEE = new Cursor(null, SWT.CURSOR_SIZEE);
		SIZESE = new Cursor(null, SWT.CURSOR_SIZESE);
		SIZES = new Cursor(null, SWT.CURSOR_SIZES);
		SIZESW = new Cursor(null, SWT.CURSOR_SIZESW);
		SIZEW = new Cursor(null, SWT.CURSOR_SIZEW);
		SIZENW = new Cursor(null, SWT.CURSOR_SIZENW);
		SIZENS = new Cursor(null, SWT.CURSOR_SIZENS);
		SIZEWE = new Cursor(null, SWT.CURSOR_SIZEWE);
		APPSTARTING = new Cursor(null, SWT.CURSOR_APPSTARTING);
		CROSS = new Cursor(null, SWT.CURSOR_CROSS);
		HAND = new Cursor(null, SWT.CURSOR_HAND);
		HELP = new Cursor(null, SWT.CURSOR_HELP);
		IBEAM = new Cursor(null, SWT.CURSOR_IBEAM);
		NO = new Cursor(null, SWT.CURSOR_NO);
		SIZEALL = new Cursor(null, SWT.CURSOR_SIZEALL);
		//UNSUPPORTED - these constants are not implemented yet in RAP
//		SIZENESW = new Cursor(null, SWT.CURSOR_SIZENESW);
//		SIZENWSE = new Cursor(null, SWT.CURSOR_SIZENWSE);
		SIZENESW = new Cursor(null, SWT.CURSOR_SIZEALL);
        SIZENWSE = new Cursor(null, SWT.CURSOR_SIZEALL);
		UPARROW = new Cursor(null, SWT.CURSOR_UPARROW);
		WAIT = new Cursor(null, SWT.CURSOR_WAIT);
	}

}
