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

/**
 * An event caused by the user interacting with the mouse.
 */
public class MouseEvent extends InputEvent {

	/** The X coordinate of the mouse event. */
	public int x;
	/** The Y coordinate of the mouse event. */
	public int y;

	/** The button that was pressed or released: {1, 2, 3}. */
	public int button;

	/**
	 * Constructs a new MouseEvent.
	 * 
	 * @param dispatcher
	 *            the event dispatcher
	 * @param source
	 *            the source of the event
	 * @param me
	 *            an SWT mouse event used to supply the state mask, button and
	 *            position
	 * @since 3.7
	 */
	public MouseEvent(EventDispatcher dispatcher, IFigure source,
			org.eclipse.swt.events.MouseEvent me) {
		super(dispatcher, source, me.stateMask);
		this.button = me.button;
		Point pt = Point.SINGLETON;
		pt.setLocation(me.x, me.y);
		source.translateToRelative(pt);
		this.x = pt.x;
		this.y = pt.y;
	}

	/**
	 * Constructor for MouseEvent.
	 * 
	 * @param x
	 * @param y
	 * @param dispatcher
	 * @param f
	 * @param button
	 * @param stateMask
	 * @since 3.6
	 * @deprecated Use
	 *             {@link #MouseEvent(EventDispatcher, IFigure, org.eclipse.swt.events.MouseEvent)}
	 *             instead.
	 */
	public MouseEvent(int x, int y, EventDispatcher dispatcher, IFigure f,
			int button, int stateMask) {
		super(dispatcher, f, stateMask);
		Point pt = Point.SINGLETON;
		pt.setLocation(x, y);
		f.translateToRelative(pt);
		this.button = button;
		this.x = pt.x;
		this.y = pt.y;
	}

	/**
	 * @return the location of this mouse event
	 */
	public Point getLocation() {
		return new Point(x, y);
	}

	/**
	 * @see Object#toString()
	 */
	public String toString() {
		return "MouseEvent(" + x + ',' + y + ") to Figure: " + source;//$NON-NLS-2$//$NON-NLS-1$
	}

}
