/***********************************************************************
* mt4j Copyright (c) 2008 - 2009, C.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.inputSources;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import org.mt4j.MTApplication;
import org.mt4j.input.inputData.ActiveCursorPool;
import org.mt4j.input.inputData.InputCursor;
import org.mt4j.input.inputData.MTFingerInputEvt;
/**
* The Class MouseInputSource.
* @author Christopher Ruff
*/
public class MouseInputSource extends AbstractInputSource implements MouseMotionListener, MouseListener {
/** The Constant OPENGL_MODE. */
public final static int OPENGL_MODE = 0;
/** The Constant JAVA_MODE. */
public final static int JAVA_MODE = 1;
// private int mode;
/** The last used mouse id. */
private long lastUsedMouseID;
/** The mouse busy. */
private boolean mouseBusy;
//private Stack lastUsedMouseIDs;
/** The mouse pressed button. */
private int mousePressedButton;
//make singleton
/**
* Instantiates a new mouse input source.
*
* @param pa the pa
*/
public MouseInputSource(MTApplication pa){
super(pa);
// this.mode = mode;
// if (this.mode == MouseInputSource.OPENGL_MODE){
// pa.registerMouseEvent(this);
// }
// if (ConstantsAndSettings.getInstance().isOpenGlMode()){
pa.registerMouseEvent(this);
// }
mouseBusy = false;
}
/**
* Mouse event.
*
* @param event the event
*/
public void mouseEvent(MouseEvent event) {
// System.out.println(event.getButton());
// /*
switch (event.getID()) {
case MouseEvent.MOUSE_PRESSED:
this.mousePressed(event);
break;
case MouseEvent.MOUSE_RELEASED:
this.mouseReleased(event);
break;
case MouseEvent.MOUSE_CLICKED:
this.mouseClicked(event);
break;
case MouseEvent.MOUSE_DRAGGED:
this.mouseDragged(event);
break;
case MouseEvent.MOUSE_MOVED:
this.mouseMoved(event);
break;
}
// */
}
/* (non-Javadoc)
* @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent)
*/
public void mouseMoved(MouseEvent e) {
}
/* (non-Javadoc)
* @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
*/
public void mouseClicked(MouseEvent e) {
}
/* (non-Javadoc)
* @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
*/
public void mouseEntered(MouseEvent e) {
}
/* (non-Javadoc)
* @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
*/
public void mouseExited(MouseEvent e) {
}
/* (non-Javadoc)
* @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
*/
public void mousePressed(MouseEvent e) {
if (!mouseBusy ) {
mousePressedButton = e.getButton();
mouseBusy = true;
InputCursor m = new InputCursor();
MTFingerInputEvt touchEvt = new MTFingerInputEvt(this, e.getX(), e.getY(), MTFingerInputEvt.INPUT_DETECTED, m);
// m.addEvent(touchEvt);
lastUsedMouseID = m.getId();
ActiveCursorPool.getInstance().putActiveCursor(lastUsedMouseID, m);
//
// System.out.println("MouseSource Finger DOWN, Motion ID: " + m.getId());
//FIRE
this.enqueueInputEvent(touchEvt);
}
}
/* (non-Javadoc)
* @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent)
*/
public void mouseDragged(MouseEvent e) {
try {
InputCursor m = ActiveCursorPool.getInstance().getActiveCursorByID(lastUsedMouseID);
if (m != null){
MTFingerInputEvt te = new MTFingerInputEvt(this, e.getX(), e.getY(), MTFingerInputEvt.INPUT_UPDATED, m);
// m.addEvent(te);
// System.out.println("MouseSource Finger UPDATE, Motion ID: " + m.getId());
//FIRE
this.enqueueInputEvent(te);
}
} catch (Exception err) {
err.printStackTrace();
}
}
/* (non-Javadoc)
* @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
*/
public void mouseReleased(MouseEvent e) {
if (e.getButton() == mousePressedButton) {
InputCursor m = ActiveCursorPool.getInstance().getActiveCursorByID(lastUsedMouseID);
MTFingerInputEvt te = new MTFingerInputEvt(this, e.getX(), e.getY(), MTFingerInputEvt.INPUT_ENDED, m);
// m.addEvent(te);
//System.out.println("MouseSource Finger UP, Motion ID: " + m.getId());
this.enqueueInputEvent(te);
ActiveCursorPool.getInstance().removeCursor((lastUsedMouseID));
mouseBusy = false;
}
}
// @Override
// public boolean firesEventType(Class<? extends MTInputEvent> evtClass){
// return (evtClass == MTFingerInputEvt.class);
// }
}