/**
* eAdventure (formerly <e-Adventure> and <e-Game>) is a research project of the
* <e-UCM> research group.
*
* Copyright 2005-2010 <e-UCM> research group.
*
* You can access a list of all the contributors to eAdventure at:
* http://e-adventure.e-ucm.es/contributors
*
* <e-UCM> is a research group of the Department of Software Engineering
* and Artificial Intelligence at the Complutense University of Madrid
* (School of Computer Science).
*
* C Profesor Jose Garcia Santesmases sn,
* 28040 Madrid (Madrid), Spain.
*
* For more info please visit: <http://e-adventure.e-ucm.es> or
* <http://www.e-ucm.es>
*
* ****************************************************************************
*
* This file is part of eAdventure, version 2.0
*
* eAdventure is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* eAdventure is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with eAdventure. If not, see <http://www.gnu.org/licenses/>.
*/
package es.eucm.ead.model.params.guievents;
import es.eucm.ead.model.interfaces.Element;
import es.eucm.ead.model.interfaces.Param;
import es.eucm.ead.model.params.AbstractParam;
import es.eucm.ead.model.params.guievents.enums.MouseGEvButtonType;
import es.eucm.ead.model.params.guievents.enums.MouseGEvType;
@Element
public class MouseGEv extends AbstractParam implements EAdGUIEvent {
public static final MouseGEv MOUSE_RIGHT_PRESSED = new MouseGEv(
MouseGEvType.PRESSED, MouseGEvButtonType.BUTTON_3);
public static final MouseGEv MOUSE_ENTERED = new MouseGEv(
MouseGEvType.ENTERED, MouseGEvButtonType.NO_BUTTON);
public static final MouseGEv MOUSE_EXITED = new MouseGEv(
MouseGEvType.EXITED, MouseGEvButtonType.NO_BUTTON);
public static final MouseGEv MOUSE_DRAG = new MouseGEv(MouseGEvType.DRAG,
MouseGEvButtonType.NO_BUTTON);
public static final MouseGEv MOUSE_START_DRAG = new MouseGEv(
MouseGEvType.START_DRAG, MouseGEvButtonType.NO_BUTTON);
public static final MouseGEv MOUSE_MOVED = new MouseGEv(MouseGEvType.MOVED,
MouseGEvButtonType.NO_BUTTON);
public static final MouseGEv MOUSE_LEFT_PRESSED = new MouseGEv(
MouseGEvType.PRESSED, MouseGEvButtonType.BUTTON_1);
public static final MouseGEv MOUSE_LEFT_RELEASED = new MouseGEv(
MouseGEvType.RELEASED, MouseGEvButtonType.BUTTON_1);
public static final MouseGEv MOUSE_RIGHT_RELEASED = new MouseGEv(
MouseGEvType.RELEASED, MouseGEvButtonType.BUTTON_3);
public static final MouseGEv MOUSE_MIDDLE_RELEASED = new MouseGEv(
MouseGEvType.RELEASED, MouseGEvButtonType.BUTTON_2);
public static final MouseGEv MOUSE_DROP = new MouseGEv(MouseGEvType.DROP,
MouseGEvButtonType.NO_BUTTON);
public static final MouseGEv MOUSE_SWIPE_RIGHT = new MouseGEv(
MouseGEvType.SWIPE_RIGHT, MouseGEvButtonType.NO_BUTTON);
public static final MouseGEv MOUSE_SWIPE_LEFT = new MouseGEv(
MouseGEvType.SWIPE_LEFT, MouseGEvButtonType.NO_BUTTON);
public static final EAdGUIEvent MOUSE_MIDDLE_PRESSED = new MouseGEv(
MouseGEvType.PRESSED, MouseGEvButtonType.BUTTON_2);
@Param
private MouseGEvType type;
@Param
private MouseGEvButtonType button;
/**
* Constructs a mouse event from its string representation
*
* @param data
*/
public MouseGEv(String data) {
parse(data);
}
public MouseGEv() {
}
/**
* Returns an {@link MouseGEv} with the given type
*
* @param type
* event's type
* @param draggingGameObject
* @return an {@link MouseGEv} with the given type
*/
public static MouseGEv getMouseEvent(MouseGEvType type,
MouseGEvButtonType button) {
switch (type) {
case ENTERED:
return MOUSE_ENTERED;
case EXITED:
return MOUSE_EXITED;
case DRAG:
if (button == MouseGEvButtonType.BUTTON_1)
return MOUSE_DRAG;
break;
case MOVED:
return MOUSE_MOVED;
case PRESSED:
if (button == MouseGEvButtonType.BUTTON_1)
return MOUSE_LEFT_PRESSED;
break;
case RELEASED:
if (button == MouseGEvButtonType.BUTTON_1)
return MOUSE_LEFT_RELEASED;
break;
case DROP:
return MOUSE_DROP;
case START_DRAG:
return MOUSE_START_DRAG;
case SWIPE_LEFT:
return MOUSE_SWIPE_LEFT;
case SWIPE_RIGHT:
return MOUSE_SWIPE_RIGHT;
}
return new MouseGEv(type, button);
}
/**
* Constructs a mouse event with the given type
*
* @param type
* the type
*/
public MouseGEv(MouseGEvType type, MouseGEvButtonType button) {
this.type = type;
this.button = button;
}
public MouseGEvType getType() {
return type;
}
public MouseGEvButtonType getButton() {
return button;
}
public boolean equals(Object o) {
return (o != null && o.getClass().equals(this.getClass()) && this
.toString().equals(o.toString()));
}
public int hashCode() {
return toString().hashCode();
}
public String toString() {
return type.toString() + ";" + button.toString();
}
public void setType(MouseGEvType type) {
this.type = type;
}
public void setButton(MouseGEvButtonType button) {
this.button = button;
}
@Override
public String toStringData() {
return toString();
}
@Override
public boolean parse(String data) {
String[] values = data.split(";");
if (values.length == 2) {
try {
this.type = MouseGEvType.valueOf(values[0]);
this.button = MouseGEvButtonType.valueOf(values[1]);
return true;
} catch (IllegalArgumentException e) {
return false;
}
}
return false;
}
}