142 lines
3.1 KiB
Java
142 lines
3.1 KiB
Java
//**********************************************************************************************
|
|
// (C) Copyright 2002 by Dipl. Phys. Joerg Plewe, HARDCODE Development
|
|
// All rights reserved. Copying, modification,
|
|
// distribution or publication without the prior written
|
|
// consent of the author is prohibited.
|
|
//
|
|
// Created on 9. April 2002, 22:43
|
|
//**********************************************************************************************
|
|
package de.hardcode.jxinput.keyboard;
|
|
|
|
import java.awt.event.KeyListener;
|
|
import java.awt.event.KeyEvent;
|
|
import java.util.HashMap;
|
|
import java.security.InvalidParameterException;
|
|
|
|
|
|
|
|
/**
|
|
* Listen to a JComponent handle handle all associated button objects.
|
|
* This is the main worker class for JXKeyboardInputDevice.
|
|
*
|
|
* @author Herkules
|
|
*/
|
|
class KeyboardDriver implements KeyListener
|
|
{
|
|
// HashMap mKeysToObserveMap = new HashMap();
|
|
|
|
int mNumberOfKeysObserved = 0;
|
|
KeyButton [] mKeysObserved = new KeyButton [ 0x100 ];
|
|
|
|
|
|
/**
|
|
* Creates a new instance of KeyboardDriver.
|
|
*/
|
|
public KeyboardDriver()
|
|
{
|
|
}
|
|
|
|
|
|
/**
|
|
* How many buttons are registered?
|
|
*/
|
|
final int getNumberOfButtons()
|
|
{
|
|
return mNumberOfKeysObserved;
|
|
// return mKeysToObserveMap.size();
|
|
}
|
|
|
|
|
|
/**
|
|
* Place a new button under my observation.
|
|
*/
|
|
final boolean registerKeyButton( KeyButton b )
|
|
{
|
|
final int keycode = b.getKeyCode();
|
|
|
|
if ( 0 > keycode || 0x100 < keycode )
|
|
throw new InvalidKeyCodeException();
|
|
|
|
if ( null == mKeysObserved[ keycode ] )
|
|
{
|
|
mKeysObserved[ keycode ] = b;
|
|
mNumberOfKeysObserved++;
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
|
|
// Integer code = new Integer( b.getKeyCode() );
|
|
// if ( ! mKeysToObserveMap.containsKey( code ) )
|
|
// {
|
|
// mKeysToObserveMap.put( code, b );
|
|
// return true;
|
|
// }
|
|
// else
|
|
// {
|
|
// return false;
|
|
// }
|
|
}
|
|
|
|
final void unregisterKeyButton( KeyButton b )
|
|
{
|
|
final int keycode = b.getKeyCode();
|
|
|
|
if ( 0 > keycode || 0x100 < keycode )
|
|
throw new InvalidKeyCodeException();
|
|
|
|
if ( null != mKeysObserved[ b.getKeyCode() ] )
|
|
{
|
|
mKeysObserved[ keycode ] = null;
|
|
mNumberOfKeysObserved--;
|
|
}
|
|
|
|
// Integer code = new Integer( b.getKeyCode() );
|
|
// mKeysToObserveMap.remove( code );
|
|
}
|
|
|
|
|
|
/**
|
|
* Retrieve the button from its keycode.
|
|
*/
|
|
final KeyButton getButton( int keycode )
|
|
{
|
|
if ( 0 > keycode || 0x100 < keycode )
|
|
throw new InvalidKeyCodeException();
|
|
|
|
return mKeysObserved[ keycode ];
|
|
|
|
// Integer code = new Integer( keycode );
|
|
// return (KeyButton)mKeysToObserveMap.get( code );
|
|
}
|
|
|
|
|
|
//*********************************************************************************************
|
|
//
|
|
// Implement KeyListener
|
|
//
|
|
//*********************************************************************************************
|
|
|
|
public void keyPressed( KeyEvent keyEvent )
|
|
{
|
|
KeyButton b = getButton( keyEvent.getKeyCode() );
|
|
if ( null != b )
|
|
b.setIsPressed( true );
|
|
}
|
|
|
|
public void keyReleased( KeyEvent keyEvent )
|
|
{
|
|
KeyButton b = getButton( keyEvent.getKeyCode() );
|
|
if ( null != b )
|
|
b.setIsPressed( false );
|
|
}
|
|
|
|
public void keyTyped( KeyEvent keyEvent )
|
|
{
|
|
// Intentionally empty.
|
|
}
|
|
|
|
}
|