/*********************************************************************** * mt4j Copyright (c) 2008 - 2009 Christopher Ruff, Fraunhofer-Gesellschaft All rights reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * ***********************************************************************/ package org.mt4j.input.inputData; import org.mt4j.components.interfaces.IMTComponent3D; import org.mt4j.input.MTEvent; /** * The Class MTInputEvent. The base class for all input events. * * @author Christopher Ruff */ public class MTInputEvent extends MTEvent { /** The target component. */ private IMTComponent3D target; /** * Instantiates a new mT input event. * * @param source the source */ public MTInputEvent(Object source) { this(source, null); } public MTInputEvent(Object source, IMTComponent3D target) { this(source, target, true); } /** * Instantiates a new mT input event. * * @param source the source * @param target the target component */ public MTInputEvent(Object source, IMTComponent3D target, boolean bubbles) { super(source); this.target = target; this.propatationStopped = false; this.bubbles = bubbles; this.eventPhase = CAPTURING_PHASE; //default? } /** * Gets the target of this input event. * <br><strong>NOTE:</strong> Not every event has a target component! To check this * we can call <code>event.hasTarget()</code>. * * @return the target component * @deprecated use getTarget() instead * @see #getTarget() */ public IMTComponent3D getTargetComponent() { return target; } /** * Gets the target of this input event. * <br><strong>NOTE:</strong> Not every event has a target component! To check this * we can call <code>event.hasTarget()</code>. * * @return the target component */ public IMTComponent3D getTarget() { return target; } /** * Sets the target component of this input event. * <br>NOTE: This is supposed to be called internally by * MT4j and not by users. * * @param targetComponent the new target component */ public void setTarget(IMTComponent3D targetComponent) { this.target = targetComponent; } /** * Checks if this input event has a target component. * * @return true, if successful */ public boolean hasTarget(){ return this.target != null; } /** * This method is invoked right before the event is fired. * This can be used to do event specific actions if needed before firing. * <br>NOTE: this is called internally and should not be called by users! */ public void onFired(){ } private short eventPhase; public static final short CAPTURING_PHASE = 1; // The current event phase is the capturing phase. public static final short AT_TARGET = 2; // The event is currently being evaluated at the target EventTarget. public static final short BUBBLING_PHASE = 3;// The current event phase is the bubbling phase. private boolean propatationStopped; private boolean bubbles; /** * The <code>setEventPhase</code> method is used by the DOM implementation * to change the value of a <code>eventPhase</code> attribute on the * <code>Event</code> interface. * @param phase Specifies the <code>eventPhase</code> attribute on the * <code>Event</code> interface. */ public void setEventPhase(short phase){ //TODO check if bubbles = true if someone wants to set the pase to BUBBLING_PHASE? this.eventPhase = phase; } public short getEventPhase(){ return this.eventPhase; } public void stopPropagation(){ this.propatationStopped = true; } public boolean isPropagationStopped(){ return propatationStopped; } public boolean getBubbles(){ return bubbles; } private IMTComponent3D currentTarget; /** * The <code>setCurrentTarget</code> method is used by the DOM * implementation to change the value of a <code>currentTarget</code> * attribute on the <code>Event</code> interface. * @param target Specifies the <code>currentTarget</code> attribute on * the <code>Event</code> interface. */ public void setCurrentTarget(IMTComponent3D target){ this.currentTarget = target; } public IMTComponent3D getCurrentTarget(){ return this.currentTarget; } }