176 lines
4.3 KiB
Java
176 lines
4.3 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:40
|
|
//**********************************************************************************************
|
|
package de.hardcode.jxinput.keyboard;
|
|
|
|
|
|
import de.hardcode.jxinput.*;
|
|
import java.awt.Component;
|
|
|
|
|
|
/**
|
|
* Virtual input device treating a AWT keyboard as a source for Buttons.
|
|
*
|
|
* @author Herkules
|
|
*/
|
|
public class JXKeyboardInputDevice
|
|
implements JXInputDevice
|
|
{
|
|
private static final String DEVICENAME = "Swing Keyboard";
|
|
|
|
/** The driver doing all the real work. */
|
|
private final KeyboardDriver mDriver = new KeyboardDriver();
|
|
|
|
/** The Component I am listening to. */
|
|
private Component mComponent = null;
|
|
|
|
/** Hold the biggest keycode for which a button has been created. */
|
|
private int mMaxIdxCreated = 0;
|
|
|
|
|
|
/**
|
|
* Creates a new instance of JXKeyboardInputDevice.
|
|
*/
|
|
public JXKeyboardInputDevice()
|
|
{
|
|
}
|
|
|
|
|
|
/**
|
|
* Creates a new instance of JXKeyboardInputDevice
|
|
* immediately listening to a JComponent.
|
|
*/
|
|
public JXKeyboardInputDevice( Component comp )
|
|
{
|
|
listenTo( comp );
|
|
}
|
|
|
|
/**
|
|
* Makes this device listen to a certain JComponent.
|
|
*/
|
|
public final void listenTo( Component comp )
|
|
{
|
|
shutdown();
|
|
mComponent = comp;
|
|
mComponent.addKeyListener( mDriver );
|
|
}
|
|
|
|
/**
|
|
* Shut down. No longer listen to my JComponent.
|
|
*/
|
|
public final void shutdown()
|
|
{
|
|
if ( null != mComponent )
|
|
mComponent.removeKeyListener( mDriver );
|
|
}
|
|
|
|
|
|
/**
|
|
* Create a button object for a certain keycode.
|
|
*/
|
|
public Button createButton( int keycode )
|
|
{
|
|
if ( 0 > keycode || 0x100 < keycode )
|
|
throw new InvalidKeyCodeException();
|
|
|
|
KeyButton b;
|
|
if ( null == (b = mDriver.getButton( keycode ) ) )
|
|
{
|
|
b = new KeyButton( keycode );
|
|
mDriver.registerKeyButton( b );
|
|
if ( keycode > mMaxIdxCreated )
|
|
mMaxIdxCreated = keycode;
|
|
}
|
|
return b;
|
|
}
|
|
|
|
|
|
public void removeButton( Button b )
|
|
{
|
|
mDriver.unregisterKeyButton( (KeyButton) b );
|
|
}
|
|
|
|
|
|
|
|
//*********************************************************************************************
|
|
//
|
|
// Implement JXInputDevice
|
|
//
|
|
//*********************************************************************************************
|
|
|
|
public Axis getAxis(int idx)
|
|
{
|
|
// No axes on keyboard.
|
|
return null;
|
|
}
|
|
|
|
|
|
public Button getButton(int idx)
|
|
{
|
|
// idx is interpreted as the keycode
|
|
return mDriver.getButton( idx );
|
|
}
|
|
|
|
public Directional getDirectional(int idx)
|
|
{
|
|
// No directionals on keyboard.
|
|
return null;
|
|
}
|
|
|
|
/** Maximum number of axes as an upper bound for index values. */
|
|
public int getMaxNumberOfAxes()
|
|
{
|
|
// No axes on keyboard.
|
|
return 0;
|
|
}
|
|
|
|
/** Maximum number of buttons as an upper bound for index values. */
|
|
public int getMaxNumberOfButtons()
|
|
{
|
|
// Return biggest keycode (inclusive).
|
|
return mMaxIdxCreated + 1;
|
|
}
|
|
|
|
/** Maximum number of directional features as an upper bound for index values. */
|
|
public int getMaxNumberOfDirectionals()
|
|
{
|
|
// No directionals on keyboard.
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* Devices may have a name.
|
|
* This name might be provided by a system dependant driver.
|
|
*/
|
|
public String getName()
|
|
{
|
|
return DEVICENAME;
|
|
}
|
|
|
|
/** Actual number of available axes. */
|
|
public int getNumberOfAxes()
|
|
{
|
|
// No axes on keyboard.
|
|
return 0;
|
|
}
|
|
|
|
/** Actual number of available buttons. */
|
|
public int getNumberOfButtons()
|
|
{
|
|
return mDriver.getNumberOfButtons();
|
|
}
|
|
|
|
/** Actual number of available directional features. */
|
|
public int getNumberOfDirectionals()
|
|
{
|
|
// No directionals on keyboard.
|
|
return 0;
|
|
}
|
|
|
|
}
|