pull vendor
This commit is contained in:
175
vendor/JXInput/0.3.4/c/JXInputManager.cpp
vendored
Normal file
175
vendor/JXInput/0.3.4/c/JXInputManager.cpp
vendored
Normal file
@@ -0,0 +1,175 @@
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "JXInputManager.h"
|
||||
#include "JXInput.h"
|
||||
|
||||
//
|
||||
// Globals
|
||||
//
|
||||
extern HINSTANCE g_hInst;
|
||||
|
||||
|
||||
JXInputManager::JXInputManager( HWND hWnd ) :
|
||||
mhWnd( hWnd ),
|
||||
mDeviceCounter( 0 )
|
||||
{
|
||||
|
||||
for ( int i = 0; i < MAX_JXINPUTS; ++i )
|
||||
{
|
||||
mDevices[ i ] = NULL;
|
||||
}
|
||||
|
||||
|
||||
if ( FAILED( InitDirectInput( hWnd ) ) )
|
||||
{
|
||||
FreeDirectInput();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
JXInputManager::~JXInputManager()
|
||||
{
|
||||
for ( int i = 0; i < getNumberOfJXInputs(); ++i )
|
||||
{
|
||||
delete mDevices[ i ];
|
||||
mDevices[ i ] = NULL;
|
||||
}
|
||||
|
||||
FreeDirectInput();
|
||||
}
|
||||
|
||||
int JXInputManager::getNumberOfJXInputs() const
|
||||
{
|
||||
return mDeviceCounter;
|
||||
}
|
||||
|
||||
JXInput& JXInputManager::getJXInput( int idx ) const
|
||||
{
|
||||
assert( idx < mDeviceCounter );
|
||||
return * mDevices[ idx ];
|
||||
}
|
||||
|
||||
|
||||
int JXInputManager::getMaxNumberOfAxes() const
|
||||
{
|
||||
return JXINPUT_MAX_AXES;
|
||||
}
|
||||
|
||||
int JXInputManager::getMaxNumberOfButtons() const
|
||||
{
|
||||
return JXINPUT_MAX_BUTTONS;
|
||||
}
|
||||
|
||||
int JXInputManager::getMaxNumberOfDirectionals() const
|
||||
{
|
||||
return JXINPUT_MAX_DIRECTIONALS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: InitDirectInput()
|
||||
// Desc: Initialize the DirectInput variables.
|
||||
//-----------------------------------------------------------------------------
|
||||
HRESULT JXInputManager::InitDirectInput( HWND hWnd )
|
||||
{
|
||||
HRESULT hr;
|
||||
|
||||
// Register with the DirectInput subsystem and get a pointer
|
||||
// to a IDirectInput interface we can use.
|
||||
// Create a DInput object
|
||||
if( FAILED( hr = DirectInput8Create( g_hInst, DIRECTINPUT_VERSION,
|
||||
IID_IDirectInput8, (VOID**)&mpDI, NULL ) ) )
|
||||
return hr;
|
||||
|
||||
// Look for a simple joystick we can use for this sample program.
|
||||
if( FAILED( hr = mpDI->EnumDevices( DI8DEVCLASS_GAMECTRL,
|
||||
EnumJoysticksCallback,
|
||||
(VOID*)this, DIEDFL_ALLDEVICES /*| DIEDFL_INCLUDEPHANTOMS*/ ) ) )
|
||||
return hr;
|
||||
|
||||
// Look for a other devices
|
||||
if( FAILED( hr = mpDI->EnumDevices( DI8DEVCLASS_DEVICE,
|
||||
EnumJoysticksCallback,
|
||||
(VOID*)this, DIEDFL_ALLDEVICES /*| DIEDFL_INCLUDEPHANTOMS*/ ) ) )
|
||||
return hr;
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: FreeDirectInput()
|
||||
// Desc: Initialize the DirectInput variables.
|
||||
//-----------------------------------------------------------------------------
|
||||
HRESULT JXInputManager::FreeDirectInput()
|
||||
{
|
||||
|
||||
if ( NULL != mpDI )
|
||||
mpDI->Release();
|
||||
mpDI = NULL;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: EnumJoysticksCallback()
|
||||
// Desc: Called once for each enumerated joystick. If we find one, create a
|
||||
// device interface on it so we can play with it.
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL CALLBACK JXInputManager::EnumJoysticksCallback( const DIDEVICEINSTANCE* pdidInstance,
|
||||
VOID* pContext )
|
||||
{
|
||||
HRESULT hr;
|
||||
LPDIRECTINPUTDEVICE8 pJoystick;
|
||||
|
||||
JXInputManager* pThis = (JXInputManager*)pContext;
|
||||
|
||||
//
|
||||
// if the maximum number of devices is already registered,
|
||||
// issue a warning and stop enumeration.
|
||||
//
|
||||
if( MAX_JXINPUTS == pThis->mDeviceCounter )
|
||||
{
|
||||
OutputDebugString( "Max. number of devices exceeded!" );
|
||||
return DIENUM_STOP;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Obtain an interface to the enumerated joystick.
|
||||
hr = pThis->mpDI->CreateDevice( pdidInstance->guidInstance, &pJoystick, NULL );
|
||||
|
||||
// If it failed, then we can't use this joystick. (Maybe the user unplugged
|
||||
// it while we were in the middle of enumerating it.)
|
||||
if( FAILED(hr) )
|
||||
return DIENUM_CONTINUE;
|
||||
|
||||
JXInput* pJ = new JXInput( pJoystick, pThis->mhWnd );
|
||||
|
||||
//
|
||||
// only register useful devices
|
||||
//
|
||||
if( pJ->getNumberOfAxes() + pJ->getNumberOfButtons() + pJ->getNumberOfDirectionals() > 0 )
|
||||
{
|
||||
pThis->addJXInput( pJ );
|
||||
}
|
||||
else
|
||||
{
|
||||
delete pJ;
|
||||
}
|
||||
|
||||
return DIENUM_CONTINUE;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Register a JXInput device.
|
||||
*/
|
||||
void JXInputManager::addJXInput( JXInput* pJ )
|
||||
{
|
||||
assert( mDeviceCounter < MAX_JXINPUTS );
|
||||
|
||||
if( mDeviceCounter < MAX_JXINPUTS )
|
||||
mDevices[ mDeviceCounter++ ] = pJ;
|
||||
}
|
||||
47
vendor/JXInput/0.3.4/c/JXInputManager.h
vendored
Normal file
47
vendor/JXInput/0.3.4/c/JXInputManager.h
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
// JXInputManager.h: Schnittstelle f<>r die Klasse JXInputManager.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
#if !defined(AFX_JXINPUTMANAGER_H__24862402_14C9_407D_8532_A16A6E3A7D64__INCLUDED_)
|
||||
#define AFX_JXINPUTMANAGER_H__24862402_14C9_407D_8532_A16A6E3A7D64__INCLUDED_
|
||||
|
||||
#if _MSC_VER > 1000
|
||||
#pragma once
|
||||
#endif // _MSC_VER > 1000
|
||||
|
||||
|
||||
#define MAX_JXINPUTS 10
|
||||
|
||||
class JXInput;
|
||||
|
||||
class JXINPUT_API JXInputManager
|
||||
{
|
||||
public:
|
||||
JXInputManager( HWND hWnd );
|
||||
virtual ~JXInputManager();
|
||||
|
||||
int getNumberOfJXInputs() const;
|
||||
JXInput& getJXInput( int idx ) const;
|
||||
|
||||
//
|
||||
// Numbering methods
|
||||
//
|
||||
int getMaxNumberOfAxes() const;
|
||||
int getMaxNumberOfButtons() const;
|
||||
int getMaxNumberOfDirectionals() const;
|
||||
|
||||
private:
|
||||
LPDIRECTINPUT8 mpDI;
|
||||
HWND mhWnd;
|
||||
JXInput* mDevices[ MAX_JXINPUTS ];
|
||||
int mDeviceCounter;
|
||||
|
||||
HRESULT InitDirectInput( HWND hWnd = NULL );
|
||||
HRESULT FreeDirectInput();
|
||||
|
||||
static BOOL CALLBACK EnumJoysticksCallback( const DIDEVICEINSTANCE* pdidInstance,
|
||||
VOID* pContext );
|
||||
void addJXInput( JXInput* pJ );
|
||||
};
|
||||
|
||||
#endif // !defined(AFX_JXINPUTMANAGER_H__24862402_14C9_407D_8532_A16A6E3A7D64__INCLUDED_)
|
||||
37
vendor/JXInput/0.3.4/c/ReadMe.txt
vendored
Normal file
37
vendor/JXInput/0.3.4/c/ReadMe.txt
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
========================================================================
|
||||
DYNAMIC LINK LIBRARY : jxinput
|
||||
========================================================================
|
||||
|
||||
|
||||
Diese jxinput-DLL hat der Anwendungs-Assistent f<>r Sie erstellt.
|
||||
|
||||
Diese Datei enth<74>lt eine Zusammenfassung dessen, was Sie in jeder der Dateien
|
||||
finden, die Ihre jxinput-Anwendung bilden.
|
||||
|
||||
jxinput.dsp
|
||||
Diese Datei (Projektdatei) enth<74>lt Informationen auf Projektebene und wird zur
|
||||
Erstellung eines einzelnen Projekts oder Teilprojekts verwendet. Andere Benutzer k<>nnen
|
||||
die Projektdatei (.dsp) gemeinsam nutzen, sollten aber die Makefiles lokal exportieren.
|
||||
|
||||
jxinput.cpp
|
||||
Dies ist die Hauptquellcodedatei f<>r die DLL.
|
||||
|
||||
jxinput.h
|
||||
Diese Datei enth<74>lt Ihre DLL-Exporte.
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
Weitere Standarddateien:
|
||||
|
||||
StdAfx.h, StdAfx.cpp
|
||||
Diese Dateien werden zum Erstellen einer vorkompilierten Header-Datei (PCH) namens
|
||||
jxinput.pch und einer vorkompilierten Typdatei namens StdAfx.obj verwendet.
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
Weitere Hinweise:
|
||||
|
||||
Der Anwendungs-Assistent verwendet "ZU ERLEDIGEN:", um Bereiche des Quellcodes zu
|
||||
kennzeichnen, die Sie hinzuf<75>gen oder anpassen sollten.
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
9
vendor/JXInput/0.3.4/c/StdAfx.cpp
vendored
Normal file
9
vendor/JXInput/0.3.4/c/StdAfx.cpp
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
// stdafx.cpp : Quelltextdatei, die nur die Standard-Includes einbindet
|
||||
// jxinput.pch ist die vorkompilierte Header-Datei
|
||||
// stdafx.obj enth<74>lt die vorkompilierte Typinformation
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
// ZU ERLEDIGEN: Verweis auf alle zus<75>tzlichen Header-Dateien, die Sie in STDAFX.H
|
||||
// und nicht in dieser Datei ben<65>tigen
|
||||
|
||||
32
vendor/JXInput/0.3.4/c/StdAfx.h
vendored
Normal file
32
vendor/JXInput/0.3.4/c/StdAfx.h
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
// stdafx.h : Include-Datei f<>r Standard-System-Include-Dateien,
|
||||
// oder projektspezifische Include-Dateien, die h<>ufig benutzt, aber
|
||||
// in unregelm<6C><6D>igen Abst<73>nden ge<67>ndert werden.
|
||||
//
|
||||
|
||||
#if !defined(AFX_STDAFX_H__68E14C76_098F_47ED_932B_4C01E8E9EFFB__INCLUDED_)
|
||||
#define AFX_STDAFX_H__68E14C76_098F_47ED_932B_4C01E8E9EFFB__INCLUDED_
|
||||
|
||||
#if _MSC_VER > 1000
|
||||
#pragma once
|
||||
#endif // _MSC_VER > 1000
|
||||
|
||||
|
||||
// F<>gen Sie hier Ihre Header-Dateien ein
|
||||
#define WIN32_LEAN_AND_MEAN // Selten benutzte Teile der Windows-Header nicht einbinden
|
||||
#define STRICT
|
||||
#include <windows.h>
|
||||
|
||||
// ZU ERLEDIGEN: Verweisen Sie hier auf zus<75>tzliche Header-Dateien, die Ihr Programm ben<65>tigt
|
||||
#ifdef JXINPUT_EXPORTS
|
||||
#define JXINPUT_API __declspec(dllexport)
|
||||
#else
|
||||
#define JXINPUT_API __declspec(dllimport)
|
||||
#endif
|
||||
|
||||
#include <dinput.h>
|
||||
#include <assert.h>
|
||||
|
||||
//{{AFX_INSERT_LOCATION}}
|
||||
// Microsoft Visual C++ f<>gt zus<75>tzliche Deklarationen unmittelbar vor der vorherigen Zeile ein.
|
||||
|
||||
#endif // !defined(AFX_STDAFX_H__68E14C76_098F_47ED_932B_4C01E8E9EFFB__INCLUDED_)
|
||||
279
vendor/JXInput/0.3.4/c/de_hardcode_jxinput_directinput_DirectInputDriver.cpp
vendored
Normal file
279
vendor/JXInput/0.3.4/c/de_hardcode_jxinput_directinput_DirectInputDriver.cpp
vendored
Normal file
@@ -0,0 +1,279 @@
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "de_hardcode_jxinput_directinput_DirectInputDriver.h"
|
||||
#include "jxinput.h"
|
||||
#include "JXInputManager.h"
|
||||
|
||||
|
||||
//
|
||||
// Globals
|
||||
//
|
||||
extern HINSTANCE g_hInst;
|
||||
|
||||
static JXInputManager* pJXInputManager = NULL;
|
||||
static JXInput* apJXInput[ MAX_JXINPUTS ];
|
||||
static HWND hWndJava;
|
||||
|
||||
//
|
||||
// IDs of the static Java arrays.
|
||||
//
|
||||
static jfieldID sAxesFieldID;
|
||||
static jfieldID sButtonsFieldID;
|
||||
static jfieldID sDirectionsFieldID;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Remove all resources allocated by the Java binding.
|
||||
*/
|
||||
void shutdownJavaResources()
|
||||
{
|
||||
if ( NULL != pJXInputManager )
|
||||
delete pJXInputManager;
|
||||
|
||||
if ( NULL != hWndJava )
|
||||
DestroyWindow( hWndJava );
|
||||
|
||||
pJXInputManager = NULL;
|
||||
|
||||
for( int i = 0; i < MAX_JXINPUTS; ++i )
|
||||
apJXInput[ i ] = NULL;
|
||||
|
||||
hWndJava = NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
|
||||
{
|
||||
return JNI_VERSION_1_2;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *vm, void *reserved)
|
||||
{
|
||||
shutdownJavaResources();
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_nativeinit
|
||||
(JNIEnv * penv, jclass pClazz )
|
||||
{
|
||||
|
||||
//
|
||||
// Create a non-visible window as 'owner' of the DI device.
|
||||
//
|
||||
hWndJava = CreateWindowEx(
|
||||
0/*WS_EX_APPWINDOW*/, // DWORD dwExStyle, // extended window style
|
||||
"STATIC", // LPCTSTR lpClassName, // pointer to registered class name
|
||||
NULL, // LPCTSTR lpWindowName, // pointer to window name
|
||||
0/*WS_CAPTION*/, // DWORD dwStyle, // window style
|
||||
0, // int x, // horizontal position of window
|
||||
0, // int y, // vertical position of window
|
||||
0, // int nWidth, // window width
|
||||
0, // int nHeight, // window height
|
||||
NULL, // HWND hWndParent, // handle to parent or owner window
|
||||
NULL, // HMENU hMenu, // handle to menu, or child-window identifier
|
||||
g_hInst, // HINSTANCE hInstance, // handle to application instance
|
||||
NULL // LPVOID lpParam // pointer to window-creation data
|
||||
);
|
||||
|
||||
|
||||
if ( NULL == pJXInputManager )
|
||||
{
|
||||
pJXInputManager = new JXInputManager( hWndJava );
|
||||
|
||||
for( int i = 0; i < MAX_JXINPUTS; ++i )
|
||||
apJXInput[ i ] = NULL;
|
||||
|
||||
for ( int i = 0; i < pJXInputManager->getNumberOfJXInputs(); ++i )
|
||||
{
|
||||
apJXInput[ i ] = & pJXInputManager->getJXInput( i );
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
JNIEXPORT void JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_nativeexit
|
||||
(JNIEnv *, jclass )
|
||||
{
|
||||
shutdownJavaResources();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Bind my field IDs to the Java variables.
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_bind
|
||||
(JNIEnv * penv, jclass pClazz)
|
||||
{
|
||||
//
|
||||
// All fields are static.
|
||||
//
|
||||
sAxesFieldID = penv->GetStaticFieldID( pClazz, "sAxisValues", "[[D" );
|
||||
sButtonsFieldID = penv->GetStaticFieldID( pClazz, "sButtonStates", "[[Z" );
|
||||
sDirectionsFieldID = penv->GetStaticFieldID( pClazz, "sDirectionalValues", "[[I" );
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getNumberOfDevices
|
||||
(JNIEnv *penv, jclass)
|
||||
{
|
||||
return pJXInputManager->getNumberOfJXInputs();
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jstring JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getName
|
||||
(JNIEnv *penv, jclass, jint dev)
|
||||
{
|
||||
return penv->NewStringUTF( apJXInput[ dev ]->getName() );
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getNumberOfAxes
|
||||
(JNIEnv *, jclass, jint dev)
|
||||
{
|
||||
return apJXInput[ dev ]->getNumberOfAxes();
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getNumberOfButtons
|
||||
(JNIEnv *, jclass, jint dev)
|
||||
{
|
||||
return apJXInput[ dev ]->getNumberOfButtons();
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getNumberOfDirectionals
|
||||
(JNIEnv *, jclass, jint dev)
|
||||
{
|
||||
return apJXInput[ dev ]->getNumberOfDirectionals();
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getMaxNumberOfAxes
|
||||
(JNIEnv *, jclass)
|
||||
{
|
||||
return pJXInputManager->getMaxNumberOfAxes();
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getMaxNumberOfButtons
|
||||
(JNIEnv *, jclass)
|
||||
{
|
||||
return pJXInputManager->getMaxNumberOfButtons();
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getMaxNumberOfDirectionals
|
||||
(JNIEnv *, jclass)
|
||||
{
|
||||
return pJXInputManager->getMaxNumberOfDirectionals();
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_isAxisAvailable
|
||||
(JNIEnv *, jclass, jint dev, jint idx )
|
||||
{
|
||||
return apJXInput[ dev ]->isAxisAvailable( idx );
|
||||
}
|
||||
|
||||
JNIEXPORT jstring JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getAxisName
|
||||
(JNIEnv *penv, jclass, jint dev, jint idx )
|
||||
{
|
||||
return penv->NewStringUTF( apJXInput[ dev ]->getAxisName( idx ) );
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getAxisType
|
||||
(JNIEnv *, jclass, jint dev, jint idx )
|
||||
{
|
||||
return apJXInput[ dev ]->getAxisType( idx );
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_isButtonAvailable
|
||||
(JNIEnv *, jclass, jint dev, jint idx )
|
||||
{
|
||||
return apJXInput[ dev ]->isButtonAvailable( idx );
|
||||
}
|
||||
|
||||
JNIEXPORT jstring JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getButtonName
|
||||
(JNIEnv *penv, jclass, jint dev, jint idx )
|
||||
{
|
||||
return penv->NewStringUTF( apJXInput[ dev ]->getButtonName( idx ) );
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getButtonType
|
||||
(JNIEnv *, jclass, jint dev, jint idx )
|
||||
{
|
||||
return apJXInput[ dev ]->getButtonType( idx );
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_isDirectionalAvailable
|
||||
(JNIEnv *, jclass, jint dev, jint idx )
|
||||
{
|
||||
return apJXInput[ dev ]->isDirectionalAvailable( idx );
|
||||
}
|
||||
|
||||
JNIEXPORT jstring JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getDirectionalName
|
||||
(JNIEnv *penv, jclass, jint dev, jint idx )
|
||||
{
|
||||
return penv->NewStringUTF( apJXInput[ dev ]->getDirectionalName( idx ) );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* The main update method.
|
||||
* Here, the actual work is done.
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_nativeupdate
|
||||
(JNIEnv * penv, jclass pClazz )
|
||||
{
|
||||
|
||||
static jdouble axes [ MAX_JXINPUTS ][ JXINPUT_MAX_AXES ];
|
||||
static jboolean buttons [ MAX_JXINPUTS ][ JXINPUT_MAX_BUTTONS ];
|
||||
static jint directions [ MAX_JXINPUTS ][ JXINPUT_MAX_DIRECTIONALS ];
|
||||
|
||||
static jobjectArray axisarrayarray;
|
||||
static jobjectArray buttonarrayarray;
|
||||
static jobjectArray directionarrayarray;
|
||||
|
||||
static jdoubleArray axisarray;
|
||||
static jbooleanArray buttonarray;
|
||||
static jintArray directionarray;
|
||||
|
||||
axisarrayarray = (jobjectArray)penv->GetStaticObjectField( pClazz, sAxesFieldID );
|
||||
buttonarrayarray = (jobjectArray)penv->GetStaticObjectField( pClazz, sButtonsFieldID );
|
||||
directionarrayarray = (jobjectArray)penv->GetStaticObjectField( pClazz, sDirectionsFieldID );
|
||||
|
||||
//
|
||||
// For each device....
|
||||
//
|
||||
for ( int dev = 0; dev < pJXInputManager->getNumberOfJXInputs(); ++dev )
|
||||
{
|
||||
// Do the update of the device.
|
||||
apJXInput[ dev ]->update();
|
||||
|
||||
//
|
||||
// Copy all values into my arrays.
|
||||
//
|
||||
for ( int i = 0; i < JXINPUT_MAX_AXES; ++i )
|
||||
axes[ dev ][ i ] = apJXInput[ dev ]->getAxisValue( i );
|
||||
for ( int i = 0; i < JXINPUT_MAX_BUTTONS; ++i )
|
||||
buttons[ dev ][ i ] = apJXInput[ dev ]->isButtonDown( i );
|
||||
for ( int i = 0; i < JXINPUT_MAX_DIRECTIONALS; ++i )
|
||||
directions[ dev ][ i ] = apJXInput[ dev ]->getDirection( i );
|
||||
|
||||
|
||||
//
|
||||
// Move my arrays to the Java arrays.
|
||||
//
|
||||
axisarray = (jdoubleArray)penv->GetObjectArrayElement( axisarrayarray, dev );
|
||||
penv->SetDoubleArrayRegion( axisarray, 0, JXINPUT_MAX_AXES, axes[ dev ] );
|
||||
|
||||
buttonarray = (jbooleanArray)penv->GetObjectArrayElement( buttonarrayarray, dev );
|
||||
penv->SetBooleanArrayRegion( buttonarray, 0, JXINPUT_MAX_BUTTONS, buttons[ dev ] );
|
||||
|
||||
directionarray = (jintArray)penv->GetObjectArrayElement( directionarrayarray, dev );
|
||||
penv->SetIntArrayRegion( directionarray, 0, JXINPUT_MAX_DIRECTIONALS, directions[ dev ] );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
183
vendor/JXInput/0.3.4/c/de_hardcode_jxinput_directinput_DirectInputDriver.h
vendored
Normal file
183
vendor/JXInput/0.3.4/c/de_hardcode_jxinput_directinput_DirectInputDriver.h
vendored
Normal file
@@ -0,0 +1,183 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
|
||||
/* Header for class de_hardcode_jxinput_directinput_DirectInputDriver */
|
||||
|
||||
#ifndef _Included_de_hardcode_jxinput_directinput_DirectInputDriver
|
||||
#define _Included_de_hardcode_jxinput_directinput_DirectInputDriver
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Inaccessible static: sIsOperational */
|
||||
/* Inaccessible static: sAxisValues */
|
||||
/* Inaccessible static: sButtonStates */
|
||||
/* Inaccessible static: sDirectionalValues */
|
||||
/*
|
||||
* Class: de_hardcode_jxinput_directinput_DirectInputDriver
|
||||
* Method: nativeinit
|
||||
* Signature: ()Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_nativeinit
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: de_hardcode_jxinput_directinput_DirectInputDriver
|
||||
* Method: nativeexit
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_nativeexit
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: de_hardcode_jxinput_directinput_DirectInputDriver
|
||||
* Method: bind
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_bind
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: de_hardcode_jxinput_directinput_DirectInputDriver
|
||||
* Method: getNumberOfDevices
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getNumberOfDevices
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: de_hardcode_jxinput_directinput_DirectInputDriver
|
||||
* Method: getName
|
||||
* Signature: (I)Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getName
|
||||
(JNIEnv *, jclass, jint);
|
||||
|
||||
/*
|
||||
* Class: de_hardcode_jxinput_directinput_DirectInputDriver
|
||||
* Method: getNumberOfAxes
|
||||
* Signature: (I)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getNumberOfAxes
|
||||
|
||||
(JNIEnv *, jclass, jint);
|
||||
|
||||
/*
|
||||
* Class: de_hardcode_jxinput_directinput_DirectInputDriver
|
||||
* Method: getNumberOfButtons
|
||||
* Signature: (I)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getNumberOfButtons
|
||||
(JNIEnv *, jclass, jint);
|
||||
|
||||
/*
|
||||
* Class: de_hardcode_jxinput_directinput_DirectInputDriver
|
||||
* Method: getNumberOfDirectionals
|
||||
* Signature: (I)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getNumberOfDirectionals
|
||||
(JNIEnv *, jclass, jint);
|
||||
|
||||
/*
|
||||
* Class: de_hardcode_jxinput_directinput_DirectInputDriver
|
||||
* Method: getMaxNumberOfAxes
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getMaxNumberOfAxes
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
|
||||
/*
|
||||
* Class: de_hardcode_jxinput_directinput_DirectInputDriver
|
||||
* Method: getMaxNumberOfButtons
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getMaxNumberOfButtons
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: de_hardcode_jxinput_directinput_DirectInputDriver
|
||||
* Method: getMaxNumberOfDirectionals
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getMaxNumberOfDirectionals
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: de_hardcode_jxinput_directinput_DirectInputDriver
|
||||
* Method: isAxisAvailable
|
||||
* Signature: (II)Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_isAxisAvailable
|
||||
(JNIEnv *, jclass, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: de_hardcode_jxinput_directinput_DirectInputDriver
|
||||
* Method: getAxisName
|
||||
* Signature: (II)Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getAxisName
|
||||
(JNIEnv *, jclass, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: de_hardcode_jxinput_directinput_DirectInputDriver
|
||||
* Method: getAxisType
|
||||
* Signature: (II)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getAxisType
|
||||
(JNIEnv *, jclass, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: de_hardcode_jxinput_directinput_DirectInputDriver
|
||||
* Method: isButtonAvailable
|
||||
* Signature: (II)Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_isButtonAvailable
|
||||
(JNIEnv *, jclass, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: de_hardcode_jxinput_directinput_DirectInputDriver
|
||||
* Method: getButtonName
|
||||
* Signature: (II)Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getButtonName
|
||||
(JNIEnv *, jclass, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: de_hardcode_jxinput_directinput_DirectInputDriver
|
||||
* Method: getButtonType
|
||||
* Signature: (II)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getButtonType
|
||||
(JNIEnv *, jclass, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: de_hardcode_jxinput_directinput_DirectInputDriver
|
||||
* Method: isDirectionalAvailable
|
||||
* Signature: (II)Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_isDirectionalAvailable
|
||||
(JNIEnv *, jclass, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: de_hardcode_jxinput_directinput_DirectInputDriver
|
||||
* Method: getDirectionalName
|
||||
* Signature: (II)Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_getDirectionalName
|
||||
(JNIEnv *, jclass, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: de_hardcode_jxinput_directinput_DirectInputDriver
|
||||
* Method: nativeupdate
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_de_hardcode_jxinput_directinput_DirectInputDriver_nativeupdate
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
24
vendor/JXInput/0.3.4/c/dllmain.cpp
vendored
Normal file
24
vendor/JXInput/0.3.4/c/dllmain.cpp
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
#include "stdafx.h"
|
||||
|
||||
HINSTANCE g_hInst;
|
||||
|
||||
|
||||
BOOL APIENTRY DllMain( HANDLE hModule,
|
||||
DWORD ul_reason_for_call,
|
||||
LPVOID lpReserved
|
||||
)
|
||||
{
|
||||
switch (ul_reason_for_call)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
g_hInst = (HINSTANCE)hModule;
|
||||
break;
|
||||
case DLL_THREAD_ATTACH:
|
||||
case DLL_THREAD_DETACH:
|
||||
break;
|
||||
case DLL_PROCESS_DETACH:
|
||||
g_hInst = NULL;
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
600
vendor/JXInput/0.3.4/c/jxinput.cpp
vendored
Normal file
600
vendor/JXInput/0.3.4/c/jxinput.cpp
vendored
Normal file
@@ -0,0 +1,600 @@
|
||||
//
|
||||
// jxinput.cpp
|
||||
//
|
||||
#include "stdafx.h"
|
||||
#include "jxinput.h"
|
||||
|
||||
|
||||
//
|
||||
// Globals
|
||||
//
|
||||
extern HINSTANCE g_hInst;
|
||||
|
||||
|
||||
/**
|
||||
* Ctor: Connect with DI
|
||||
*/
|
||||
JXInput::JXInput( LPDIRECTINPUTDEVICE8 pJoystick, HWND hWnd ) :
|
||||
mpJoystick( pJoystick ),
|
||||
mSliderCount( 0 ),
|
||||
mPOVCount( 0 ),
|
||||
mButtonCount( 0 )
|
||||
{
|
||||
initAxisConfig();
|
||||
initButtonsConfig();
|
||||
initDirectionalsConfig();
|
||||
|
||||
if ( FAILED( InitDirectInput( hWnd ) ) )
|
||||
{
|
||||
FreeDirectInput();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Destructor:
|
||||
* Free DirectInput.
|
||||
*/
|
||||
JXInput::~JXInput()
|
||||
{
|
||||
FreeDirectInput();
|
||||
}
|
||||
|
||||
|
||||
void JXInput::update()
|
||||
{
|
||||
UpdateInputState();
|
||||
}
|
||||
|
||||
|
||||
TCHAR * const JXInput::getName() const
|
||||
{
|
||||
return (TCHAR*)mdiDevInfo.tszInstanceName;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int JXInput::getNumberOfAxes() const
|
||||
{
|
||||
return mdiDevCaps.dwAxes;
|
||||
}
|
||||
|
||||
int JXInput::getNumberOfButtons() const
|
||||
{
|
||||
return mButtonCount;
|
||||
}
|
||||
|
||||
int JXInput::getNumberOfDirectionals() const
|
||||
{
|
||||
return mPOVCount;
|
||||
}
|
||||
|
||||
|
||||
double JXInput::getAxisValueHelper( LONG val, int idx ) const
|
||||
{
|
||||
const AxisConfig& cfg = mAxisConfig[ idx ];
|
||||
|
||||
double span = (double)( cfg.mMaxValue - cfg.mMinValue );
|
||||
double ret = (double)(val - cfg.mMinValue) / span;
|
||||
|
||||
if ( TYPE_SLIDER != cfg.mType )
|
||||
return ret*2.0 - 1.0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
double JXInput::getX() const
|
||||
{
|
||||
return getAxisValueHelper( mJS.lX, ID_X );
|
||||
}
|
||||
double JXInput::getY() const
|
||||
{
|
||||
return getAxisValueHelper( mJS.lY, ID_Y );
|
||||
}
|
||||
double JXInput::getZ() const
|
||||
{
|
||||
return getAxisValueHelper( mJS.lZ, ID_Z );
|
||||
}
|
||||
double JXInput::getRotX() const
|
||||
{
|
||||
return getAxisValueHelper( mJS.lRx, ID_ROTX );
|
||||
}
|
||||
double JXInput::getRotY() const
|
||||
{
|
||||
return getAxisValueHelper( mJS.lRy, ID_ROTY );
|
||||
}
|
||||
double JXInput::getRotZ() const
|
||||
{
|
||||
return getAxisValueHelper( mJS.lRz, ID_ROTZ );
|
||||
}
|
||||
double JXInput::getSlider0() const
|
||||
{
|
||||
return getAxisValueHelper( mJS.rglSlider[ 0 ], ID_SLIDER0 );
|
||||
}
|
||||
double JXInput::getSlider1() const
|
||||
{
|
||||
return getAxisValueHelper( mJS.rglSlider[ 1 ], ID_SLIDER1 );
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool JXInput::isAxisAvailable( int idx ) const
|
||||
{
|
||||
assert( idx < JXINPUT_MAX_AXES );
|
||||
return mAxisConfig[ idx ].mIsAvailable;
|
||||
}
|
||||
|
||||
TCHAR * const JXInput::getAxisName( int idx ) const
|
||||
{
|
||||
assert( idx < JXINPUT_MAX_AXES );
|
||||
return (char*const)mAxisConfig[ idx ].mName;
|
||||
}
|
||||
|
||||
int JXInput::getAxisType( int idx ) const
|
||||
{
|
||||
assert( idx < JXINPUT_MAX_AXES );
|
||||
return mAxisConfig[ idx ].mType;
|
||||
}
|
||||
|
||||
double JXInput::getAxisValue( int idx ) const
|
||||
{
|
||||
assert( idx < JXINPUT_MAX_AXES );
|
||||
|
||||
// Failsafe if called accidentally
|
||||
if ( ! mAxisConfig[ idx ].mIsAvailable )
|
||||
return 0.0;
|
||||
|
||||
return (this->*mAxisConfig[ idx ].mGetValueMethod)();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bool JXInput::isButtonAvailable( int idx ) const
|
||||
{
|
||||
assert( idx < JXINPUT_MAX_BUTTONS );
|
||||
return mButtonConfig[ idx ].mIsAvailable;
|
||||
}
|
||||
|
||||
TCHAR * const JXInput::getButtonName( int idx ) const
|
||||
{
|
||||
assert( idx < JXINPUT_MAX_BUTTONS );
|
||||
return (char*const)mButtonConfig[ idx ].mName;
|
||||
}
|
||||
|
||||
int JXInput::getButtonType( int idx ) const
|
||||
{
|
||||
assert( idx < JXINPUT_MAX_BUTTONS );
|
||||
return mButtonConfig[ idx ].mType;
|
||||
}
|
||||
|
||||
bool JXInput::isButtonDown( int idx ) const
|
||||
{
|
||||
assert( idx < JXINPUT_MAX_BUTTONS );
|
||||
return 0 != mJS.rgbButtons[ idx ] ;
|
||||
}
|
||||
|
||||
|
||||
bool JXInput::isDirectionalAvailable( int idx ) const
|
||||
{
|
||||
assert( idx < JXINPUT_MAX_DIRECTIONALS );
|
||||
return mDirectionalConfig[ idx ].mIsAvailable;
|
||||
}
|
||||
|
||||
TCHAR * const JXInput::getDirectionalName( int idx ) const
|
||||
{
|
||||
assert( idx < JXINPUT_MAX_DIRECTIONALS );
|
||||
return (char*const)mDirectionalConfig[ idx ].mName;
|
||||
}
|
||||
|
||||
int JXInput::getDirection( int idx ) const
|
||||
{
|
||||
assert( idx < JXINPUT_MAX_DIRECTIONALS );
|
||||
return mJS.rgdwPOV[ idx ] ;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Initialize axis configuration array.
|
||||
*/
|
||||
void JXInput::initAxisConfig()
|
||||
{
|
||||
mAxisConfig[ ID_X ].mIsAvailable = false;
|
||||
mAxisConfig[ ID_X ].mType = TYPE_TRANSLATION;
|
||||
mAxisConfig[ ID_X ].mGetValueMethod = &JXInput::getX;
|
||||
|
||||
mAxisConfig[ ID_Y ].mIsAvailable = false;
|
||||
mAxisConfig[ ID_Y ].mType = TYPE_TRANSLATION;
|
||||
mAxisConfig[ ID_Y ].mGetValueMethod = &JXInput::getY;
|
||||
|
||||
mAxisConfig[ ID_Z ].mIsAvailable = false;
|
||||
mAxisConfig[ ID_Z ].mType = TYPE_TRANSLATION;
|
||||
mAxisConfig[ ID_Z ].mGetValueMethod = &JXInput::getZ;
|
||||
|
||||
mAxisConfig[ ID_ROTX ].mIsAvailable = false;
|
||||
mAxisConfig[ ID_ROTX ].mType = TYPE_ROTATION;
|
||||
mAxisConfig[ ID_ROTX ].mGetValueMethod = &JXInput::getRotX;
|
||||
|
||||
mAxisConfig[ ID_ROTY ].mIsAvailable = false;
|
||||
mAxisConfig[ ID_ROTY ].mType = TYPE_ROTATION;
|
||||
mAxisConfig[ ID_ROTY ].mGetValueMethod = &JXInput::getRotY;
|
||||
|
||||
mAxisConfig[ ID_ROTZ ].mIsAvailable = false;
|
||||
mAxisConfig[ ID_ROTZ ].mType = TYPE_ROTATION;
|
||||
mAxisConfig[ ID_ROTZ ].mGetValueMethod = &JXInput::getRotZ;
|
||||
|
||||
mAxisConfig[ ID_SLIDER0 ].mIsAvailable = false;
|
||||
mAxisConfig[ ID_SLIDER0 ].mType = TYPE_SLIDER;
|
||||
mAxisConfig[ ID_SLIDER0 ].mGetValueMethod = &JXInput::getSlider0;
|
||||
|
||||
mAxisConfig[ ID_SLIDER1 ].mIsAvailable = false;
|
||||
mAxisConfig[ ID_SLIDER1 ].mType = TYPE_SLIDER;
|
||||
mAxisConfig[ ID_SLIDER1 ].mGetValueMethod = &JXInput::getSlider1;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Initialize buttons configuration array.
|
||||
*/
|
||||
void JXInput::initButtonsConfig()
|
||||
{
|
||||
for ( int i = 0; i < JXINPUT_MAX_BUTTONS; ++i )
|
||||
{
|
||||
mButtonConfig[ i ].mIsAvailable = false;
|
||||
mButtonConfig[ i ].mName[ 0 ] = '\0';
|
||||
mButtonConfig[ i ].mType = TYPE_PUSHBUTTON;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Initialize directionals configuration array.
|
||||
*/
|
||||
void JXInput::initDirectionalsConfig()
|
||||
{
|
||||
for ( int i = 0; i < JXINPUT_MAX_DIRECTIONALS; ++i )
|
||||
{
|
||||
mDirectionalConfig[ i ].mIsAvailable = false;
|
||||
mDirectionalConfig[ i ].mName[ 0 ] = '\0';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: EnumAxesCallback()
|
||||
// Desc: Callback function for enumerating the axes on a joystick
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL CALLBACK JXInput::EnumAxesCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,
|
||||
VOID* pContext )
|
||||
{
|
||||
JXInput* pThis = (JXInput*)pContext;
|
||||
|
||||
AxisConfig* pAxCfg = NULL;
|
||||
|
||||
// Set the UI to reflect what objects the joystick supports
|
||||
// Code derived from M$ samples, really sucks, eh?
|
||||
if (pdidoi->guidType == GUID_XAxis)
|
||||
{
|
||||
pAxCfg = & pThis->mAxisConfig[ ID_X ];
|
||||
}
|
||||
if (pdidoi->guidType == GUID_YAxis)
|
||||
{
|
||||
pAxCfg = & pThis->mAxisConfig[ ID_Y ];
|
||||
}
|
||||
if (pdidoi->guidType == GUID_ZAxis)
|
||||
{
|
||||
pAxCfg = & pThis->mAxisConfig[ ID_Z ];
|
||||
}
|
||||
if (pdidoi->guidType == GUID_RxAxis)
|
||||
{
|
||||
pAxCfg = & pThis->mAxisConfig[ ID_ROTX ];
|
||||
}
|
||||
if (pdidoi->guidType == GUID_RyAxis)
|
||||
{
|
||||
pAxCfg = & pThis->mAxisConfig[ ID_ROTY ];
|
||||
}
|
||||
if (pdidoi->guidType == GUID_RzAxis)
|
||||
{
|
||||
pAxCfg = & pThis->mAxisConfig[ ID_ROTZ ];
|
||||
}
|
||||
if (pdidoi->guidType == GUID_Slider)
|
||||
{
|
||||
switch( pThis->mSliderCount++ )
|
||||
{
|
||||
case 0 :
|
||||
pAxCfg = & pThis->mAxisConfig[ ID_SLIDER0 ];
|
||||
break;
|
||||
|
||||
case 1 :
|
||||
pAxCfg = & pThis->mAxisConfig[ ID_SLIDER1 ];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// fail-safe
|
||||
if( NULL == pAxCfg ) // e.g. GUID_Unknown
|
||||
return DIENUM_CONTINUE;
|
||||
|
||||
|
||||
//
|
||||
// Perform config.
|
||||
//
|
||||
|
||||
DIPROPRANGE diprg;
|
||||
diprg.diph.dwSize = sizeof(DIPROPRANGE);
|
||||
diprg.diph.dwHeaderSize = sizeof(DIPROPHEADER);
|
||||
diprg.diph.dwHow = DIPH_BYID;
|
||||
diprg.diph.dwObj = pdidoi->dwType; // Specify the enumerated axis
|
||||
|
||||
// Get the range for the axis
|
||||
if( FAILED( pThis->mpJoystick->GetProperty( DIPROP_RANGE, &diprg.diph ) ) )
|
||||
return DIENUM_CONTINUE;
|
||||
|
||||
pAxCfg->mMinValue = diprg.lMin;
|
||||
pAxCfg->mMaxValue = diprg.lMax;
|
||||
|
||||
strcpy( (char*)pAxCfg->mName, (char*)pdidoi->tszName );
|
||||
pAxCfg->mIsAvailable = true;
|
||||
|
||||
return DIENUM_CONTINUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: EnumButtonsCallback()
|
||||
// Desc: Callback function for enumerating the axes on a joystick
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL CALLBACK JXInput::EnumButtonsCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,
|
||||
VOID* pContext )
|
||||
{
|
||||
JXInput* pThis = (JXInput*)pContext;
|
||||
|
||||
//
|
||||
// if the maximum number of buttons is already registered,
|
||||
// issue a warning and stop enumeration.
|
||||
//
|
||||
if( JXINPUT_MAX_BUTTONS == pThis->mButtonCount )
|
||||
{
|
||||
OutputDebugString( "Max. number of buttons exceeded!" );
|
||||
return DIENUM_STOP;
|
||||
}
|
||||
|
||||
|
||||
ButtonConfig* pBtCfg = NULL;
|
||||
|
||||
if ( pdidoi->guidType == GUID_Button )
|
||||
{
|
||||
assert( JXINPUT_MAX_BUTTONS > pThis->mButtonCount );
|
||||
pBtCfg = & pThis->mButtonConfig[ pThis->mButtonCount++ ];
|
||||
}
|
||||
|
||||
|
||||
// fail-safe
|
||||
if( NULL == pBtCfg ) // e.g. unknown stuff
|
||||
return DIENUM_CONTINUE;
|
||||
assert( NULL != pBtCfg );
|
||||
|
||||
//
|
||||
// Perform config.
|
||||
//
|
||||
|
||||
strcpy( (char*)pBtCfg->mName, (char*)pdidoi->tszName );
|
||||
pBtCfg->mIsAvailable = true;
|
||||
|
||||
return DIENUM_CONTINUE;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: EnumPOVsCallback()
|
||||
// Desc: Callback function for enumerating the axes on a joystick
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL CALLBACK JXInput::EnumPOVsCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,
|
||||
VOID* pContext )
|
||||
{
|
||||
JXInput* pThis = (JXInput*)pContext;
|
||||
|
||||
//
|
||||
// if the maximum number of buttons is already registered,
|
||||
// issue a warning and stop enumeration.
|
||||
//
|
||||
if( JXINPUT_MAX_DIRECTIONALS == pThis->mPOVCount )
|
||||
{
|
||||
OutputDebugString( "Max. number of POVs exceeded!" );
|
||||
return DIENUM_STOP;
|
||||
}
|
||||
|
||||
DirectionalConfig* pDirCfg = NULL;
|
||||
|
||||
|
||||
if (pdidoi->guidType == GUID_POV)
|
||||
{
|
||||
assert( JXINPUT_MAX_DIRECTIONALS > pThis->mPOVCount );
|
||||
pDirCfg = & pThis->mDirectionalConfig[ pThis->mPOVCount++ ];
|
||||
}
|
||||
|
||||
// fail-safe
|
||||
if( NULL == pDirCfg ) // e.g. unknown stuff
|
||||
return DIENUM_CONTINUE;
|
||||
assert( NULL != pDirCfg );
|
||||
|
||||
//
|
||||
// Perform config.
|
||||
//
|
||||
|
||||
strcpy( (char*)pDirCfg->mName, (char*)pdidoi->tszName );
|
||||
pDirCfg->mIsAvailable = true;
|
||||
|
||||
return DIENUM_CONTINUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: EnumEffectsCallback()
|
||||
// Desc: Callback function for enumerating the effects of a joystick
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL CALLBACK JXInput::EnumEffectsCallback( const DIEFFECTINFO* pdidoi,
|
||||
VOID* pContext )
|
||||
{
|
||||
JXInput* pThis = (JXInput*)pContext;
|
||||
|
||||
//
|
||||
// Work on that!!
|
||||
//
|
||||
|
||||
return DIENUM_CONTINUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: InitDirectInput()
|
||||
// Desc: Initialize the DirectInput variables.
|
||||
//-----------------------------------------------------------------------------
|
||||
HRESULT JXInput::InitDirectInput( HWND hWnd )
|
||||
{
|
||||
HRESULT hr;
|
||||
|
||||
// Make sure we got a joystick
|
||||
if( NULL == mpJoystick )
|
||||
{
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Ask the device for some useful information.
|
||||
//
|
||||
mdiDevInfo.dwSize = sizeof( DIDEVICEINSTANCE );
|
||||
hr = mpJoystick->GetDeviceInfo( &mdiDevInfo );
|
||||
if( FAILED(hr) )
|
||||
return hr;
|
||||
|
||||
// Set the data format to "simple joystick" - a predefined data format
|
||||
//
|
||||
// A data format specifies which controls on a device we are interested in,
|
||||
// and how they should be reported. This tells DInput that we will be
|
||||
// passing a DIJOYSTATE structure to IDirectInputDevice::GetDeviceState().
|
||||
hr = mpJoystick->SetDataFormat( &c_dfDIJoystick2 );
|
||||
if( FAILED(hr) )
|
||||
return hr;
|
||||
|
||||
// Set the cooperative level to let DInput know how this device should
|
||||
// interact with the system and with other DInput applications.
|
||||
// hr = g_pJoystick->SetCooperativeLevel( hDlg, DISCL_EXCLUSIVE|DISCL_FOREGROUND );
|
||||
DWORD mode = ( NULL == hWnd ? DISCL_NONEXCLUSIVE|DISCL_BACKGROUND : DISCL_EXCLUSIVE|DISCL_BACKGROUND );
|
||||
hr = mpJoystick->SetCooperativeLevel( hWnd, mode );
|
||||
if( FAILED(hr) )
|
||||
return hr;
|
||||
|
||||
// Determine how many axis the joystick has (so we don't error out setting
|
||||
// properties for unavailable axis)
|
||||
mdiDevCaps.dwSize = sizeof(DIDEVCAPS);
|
||||
hr = mpJoystick->GetCapabilities(&mdiDevCaps);
|
||||
if ( FAILED(hr) )
|
||||
return hr;
|
||||
|
||||
|
||||
// Enumerate the axes of the joyctick and set the range of each axis. Note:
|
||||
// we could just use the defaults, but we're just trying to show an example
|
||||
// of enumerating device objects (axes, buttons, etc.).
|
||||
mpJoystick->EnumObjects( EnumAxesCallback, (VOID*)this, DIDFT_AXIS );
|
||||
mpJoystick->EnumObjects( EnumButtonsCallback, (VOID*)this, DIDFT_BUTTON );
|
||||
mpJoystick->EnumObjects( EnumPOVsCallback, (VOID*)this, DIDFT_POV );
|
||||
|
||||
mpJoystick->EnumEffects( EnumEffectsCallback, (VOID*)this, DIEFT_ALL );
|
||||
|
||||
// For FF sticks, switch on autocenter as long as we do not use real FF
|
||||
SwitchAutoCenter( true );
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: UpdateInputState()
|
||||
// Desc: Get the input device's state and display it.
|
||||
//-----------------------------------------------------------------------------
|
||||
HRESULT JXInput::UpdateInputState()
|
||||
{
|
||||
HRESULT hr;
|
||||
|
||||
if( mpJoystick )
|
||||
{
|
||||
|
||||
// Poll the device to read the current state
|
||||
hr = mpJoystick->Poll();
|
||||
if( FAILED(hr) )
|
||||
{
|
||||
// DInput is telling us that the input stream has been
|
||||
// interrupted. We aren't tracking any state between polls, so
|
||||
// we don't have any special reset that needs to be done. We
|
||||
// just re-acquire and try again.
|
||||
hr = mpJoystick->Acquire();
|
||||
while( hr == DIERR_INPUTLOST )
|
||||
hr = mpJoystick->Acquire();
|
||||
|
||||
// hr may be DIERR_OTHERAPPHASPRIO or other errors. This
|
||||
// may occur when the app is minimized or in the process of
|
||||
// switching, so just try again later
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
// Get the input's device state
|
||||
if( FAILED( hr = mpJoystick->GetDeviceState( sizeof(DIJOYSTATE2), &mJS ) ) )
|
||||
return hr; // The device should have been acquired during the Poll()
|
||||
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: FreeDirectInput()
|
||||
// Desc: Initialize the DirectInput variables.
|
||||
//-----------------------------------------------------------------------------
|
||||
HRESULT JXInput::FreeDirectInput()
|
||||
{
|
||||
// Unacquire and release any DirectInputDevice objects.
|
||||
if( NULL != mpJoystick )
|
||||
{
|
||||
// Unacquire the device one last time just in case
|
||||
// the app tried to exit while the device is still acquired.
|
||||
mpJoystick->Unacquire();
|
||||
|
||||
mpJoystick->Release();
|
||||
mpJoystick = NULL;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
HRESULT JXInput::SwitchAutoCenter( bool onoff )
|
||||
{
|
||||
HRESULT hr;
|
||||
|
||||
DIPROPDWORD DIPropAutoCenter;
|
||||
|
||||
DIPropAutoCenter.diph.dwSize = sizeof(DIPropAutoCenter);
|
||||
DIPropAutoCenter.diph.dwHeaderSize = sizeof(DIPROPHEADER);
|
||||
DIPropAutoCenter.diph.dwObj = 0;
|
||||
DIPropAutoCenter.diph.dwHow = DIPH_DEVICE;
|
||||
DIPropAutoCenter.dwData = ( onoff ? DIPROPAUTOCENTER_ON : DIPROPAUTOCENTER_OFF );
|
||||
|
||||
hr = mpJoystick->SetProperty( DIPROP_AUTOCENTER, &DIPropAutoCenter.diph );
|
||||
return hr;
|
||||
}
|
||||
175
vendor/JXInput/0.3.4/c/jxinput.dsp
vendored
Normal file
175
vendor/JXInput/0.3.4/c/jxinput.dsp
vendored
Normal file
@@ -0,0 +1,175 @@
|
||||
# Microsoft Developer Studio Project File - Name="jxinput" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** NICHT BEARBEITEN **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
|
||||
|
||||
CFG=jxinput - Win32 Debug
|
||||
!MESSAGE Dies ist kein g<>ltiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
|
||||
!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und f<>hren Sie den Befehl
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "jxinput.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE Sie k<>nnen beim Ausf<73>hren von NMAKE eine Konfiguration angeben
|
||||
!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "jxinput.mak" CFG="jxinput - Win32 Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE F<>r die Konfiguration stehen zur Auswahl:
|
||||
!MESSAGE
|
||||
!MESSAGE "jxinput - Win32 Release" (basierend auf "Win32 (x86) Dynamic-Link Library")
|
||||
!MESSAGE "jxinput - Win32 Debug" (basierend auf "Win32 (x86) Dynamic-Link Library")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
MTL=midl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "jxinput - Win32 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Release"
|
||||
# PROP Intermediate_Dir "Release"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JXINPUT_EXPORTS" /Yu"stdafx.h" /FD /c
|
||||
# ADD CPP /nologo /MT /W3 /GX /O2 /I "C:\j2sdk1.4.2\include" /I "C:\j2sdk1.4.2\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JXINPUT_EXPORTS" /FR /Yu"stdafx.h" /FD /c
|
||||
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x407 /d "NDEBUG"
|
||||
# ADD RSC /l 0x407 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
|
||||
# ADD LINK32 dxguid.lib dinput8.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\build\jxinput.dll"
|
||||
|
||||
!ELSEIF "$(CFG)" == "jxinput - Win32 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "Debug"
|
||||
# PROP BASE Intermediate_Dir "Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Debug"
|
||||
# PROP Intermediate_Dir "Debug"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JXINPUT_EXPORTS" /Yu"stdafx.h" /FD /GZ /c
|
||||
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "C:\j2sdk1.4.2\include" /I "C:\j2sdk1.4.2\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JXINPUT_EXPORTS" /FR /Yu"stdafx.h" /FD /GZ /c
|
||||
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x407 /d "_DEBUG"
|
||||
# ADD RSC /l 0x407 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 dxguid.lib dinput8.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\Classes\jxinput.dll" /pdbtype:sept
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "jxinput - Win32 Release"
|
||||
# Name "jxinput - Win32 Debug"
|
||||
# Begin Group "Quellcodedateien"
|
||||
|
||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\de_hardcode_jxinput_directinput_DirectInputDriver.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\dllmain.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\jxinput.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\JXInputManager.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\StdAfx.cpp
|
||||
# ADD CPP /Yc"stdafx.h"
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Header-Dateien"
|
||||
|
||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\de_hardcode_jxinput_directinput_DirectInputDriver.h
|
||||
|
||||
!IF "$(CFG)" == "jxinput - Win32 Release"
|
||||
|
||||
# PROP Ignore_Default_Tool 1
|
||||
USERDEP__DE_HA="..\classes\de\hardcode\jxinput\directinput\DirectInputDriver.class"
|
||||
# Begin Custom Build
|
||||
InputPath=.\de_hardcode_jxinput_directinput_DirectInputDriver.h
|
||||
|
||||
"de_hardcode_jxinput_directinput_DirectInputDriver.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
|
||||
cd ..\Classes
|
||||
C:\j2sdk1.4.2\bin\javah -classpath . -d ..\win32 de.hardcode.jxinput.directinput.DirectInputDriver
|
||||
cd ..\win32
|
||||
|
||||
# End Custom Build
|
||||
|
||||
!ELSEIF "$(CFG)" == "jxinput - Win32 Debug"
|
||||
|
||||
# PROP Ignore_Default_Tool 1
|
||||
USERDEP__DE_HA="..\classes\de\hardcode\jxinput\directinput\DirectInputDriver.class"
|
||||
# Begin Custom Build
|
||||
InputPath=.\de_hardcode_jxinput_directinput_DirectInputDriver.h
|
||||
|
||||
"de_hardcode_jxinput_directinput_DirectInputDriver.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
|
||||
cd ..\Classes
|
||||
C:\j2sdk1.4.2\bin\javah -classpath . -d ..\win32 de.hardcode.jxinput.directinput.DirectInputDriver
|
||||
cd ..\win32
|
||||
|
||||
# End Custom Build
|
||||
|
||||
!ENDIF
|
||||
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\jxinput.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\JXInputManager.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\StdAfx.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Ressourcendateien"
|
||||
|
||||
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||
# End Group
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ReadMe.txt
|
||||
# End Source File
|
||||
# End Target
|
||||
# End Project
|
||||
29
vendor/JXInput/0.3.4/c/jxinput.dsw
vendored
Normal file
29
vendor/JXInput/0.3.4/c/jxinput.dsw
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||
# WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GEL<45>SCHT WERDEN!
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "jxinput"=".\jxinput.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Global:
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<3>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
183
vendor/JXInput/0.3.4/c/jxinput.h
vendored
Normal file
183
vendor/JXInput/0.3.4/c/jxinput.h
vendored
Normal file
@@ -0,0 +1,183 @@
|
||||
|
||||
#define JXINPUT_MAX_AXES 8
|
||||
#define JXINPUT_MAX_BUTTONS 256
|
||||
#define JXINPUT_MAX_DIRECTIONALS 4
|
||||
|
||||
|
||||
/**
|
||||
* This class will be exported by jxinput.dll.
|
||||
*/
|
||||
class JXINPUT_API JXInput
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
typedef enum AXISTYPE
|
||||
{
|
||||
TYPE_TRANSLATION,
|
||||
TYPE_ROTATION,
|
||||
TYPE_SLIDER
|
||||
};
|
||||
|
||||
typedef enum BUTTONTYPE
|
||||
{
|
||||
TYPE_PUSHBUTTON,
|
||||
TYPE_TOGGLEBUTTON
|
||||
};
|
||||
|
||||
typedef enum AXISID
|
||||
{
|
||||
ID_X, ID_Y, ID_Z,
|
||||
ID_ROTX, ID_ROTY, ID_ROTZ,
|
||||
ID_SLIDER0, ID_SLIDER1
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Ctor
|
||||
//
|
||||
JXInput( LPDIRECTINPUTDEVICE8 pJoystick, HWND hWnd = NULL );
|
||||
|
||||
//
|
||||
// Dtor
|
||||
//
|
||||
virtual ~JXInput();
|
||||
|
||||
//
|
||||
// Operational methods
|
||||
//
|
||||
void update();
|
||||
|
||||
// Ask for the name
|
||||
TCHAR * const getName() const;
|
||||
|
||||
//
|
||||
// Numbering methods
|
||||
//
|
||||
int getNumberOfAxes() const;
|
||||
int getNumberOfButtons() const;
|
||||
int getNumberOfDirectionals() const;
|
||||
|
||||
|
||||
//
|
||||
// Access axes
|
||||
//
|
||||
double getX() const; /** -1.0 .... 1.0 */
|
||||
double getY() const; /** -1.0 .... 1.0 */
|
||||
double getZ() const; /** -1.0 .... 1.0 */
|
||||
double getRotX() const; /** -1.0 .... 1.0 */
|
||||
double getRotY() const; /** -1.0 .... 1.0 */
|
||||
double getRotZ() const; /** -1.0 .... 1.0 */
|
||||
double getSlider0() const; /** 0.0 .... 1.0 */
|
||||
double getSlider1() const; /** 0.0 .... 1.0 */
|
||||
|
||||
|
||||
//
|
||||
// Axis methods
|
||||
//
|
||||
bool isAxisAvailable( int idx ) const;
|
||||
TCHAR* const getAxisName( int idx ) const;
|
||||
int getAxisType( int idx ) const;
|
||||
double getAxisValue( int idx ) const;
|
||||
|
||||
//
|
||||
// Button methods
|
||||
//
|
||||
bool isButtonAvailable( int idx ) const;
|
||||
TCHAR* const getButtonName( int idx ) const;
|
||||
int getButtonType( int idx ) const;
|
||||
bool isButtonDown( int idx ) const;
|
||||
|
||||
//
|
||||
// Directional methods
|
||||
//
|
||||
bool isDirectionalAvailable( int idx ) const;
|
||||
TCHAR* const getDirectionalName( int idx ) const;
|
||||
int getDirection( int idx ) const;
|
||||
|
||||
private://-----------------------------------------------------------------------------------------
|
||||
LPDIRECTINPUTDEVICE8 mpJoystick;
|
||||
|
||||
DIDEVICEINSTANCE mdiDevInfo;
|
||||
DIDEVCAPS mdiDevCaps;
|
||||
DIJOYSTATE2 mJS; // DInput joystick state
|
||||
|
||||
int mSliderCount;
|
||||
int mPOVCount;
|
||||
int mButtonCount;
|
||||
|
||||
double getAxisValueHelper( LONG val, int idx ) const;
|
||||
|
||||
HRESULT SwitchAutoCenter( bool onoff = true );
|
||||
|
||||
HRESULT InitDirectInput( HWND hWnd = NULL );
|
||||
HRESULT FreeDirectInput();
|
||||
HRESULT UpdateInputState();
|
||||
|
||||
|
||||
static BOOL CALLBACK EnumAxesCallback
|
||||
(
|
||||
const DIDEVICEOBJECTINSTANCE* pdidoi,
|
||||
VOID* pContext
|
||||
);
|
||||
|
||||
static BOOL CALLBACK EnumButtonsCallback
|
||||
(
|
||||
const DIDEVICEOBJECTINSTANCE* pdidoi,
|
||||
VOID* pContext
|
||||
);
|
||||
|
||||
static BOOL CALLBACK EnumPOVsCallback
|
||||
(
|
||||
const DIDEVICEOBJECTINSTANCE* pdidoi,
|
||||
VOID* pContext
|
||||
);
|
||||
|
||||
static BOOL CALLBACK EnumEffectsCallback
|
||||
(
|
||||
const DIEFFECTINFO* pdidoi,
|
||||
VOID* pContext
|
||||
);
|
||||
|
||||
|
||||
class JXINPUT_API AxisConfig
|
||||
{
|
||||
|
||||
public:
|
||||
bool mIsAvailable;
|
||||
CHAR mName[MAX_PATH];
|
||||
AXISTYPE mType;
|
||||
LONG mMinValue;
|
||||
LONG mMaxValue;
|
||||
double (JXInput::*mGetValueMethod)() const;
|
||||
|
||||
} mAxisConfig [ JXINPUT_MAX_AXES ];
|
||||
|
||||
void initAxisConfig();
|
||||
|
||||
|
||||
class JXINPUT_API ButtonConfig
|
||||
{
|
||||
|
||||
public:
|
||||
bool mIsAvailable;
|
||||
CHAR mName[MAX_PATH];
|
||||
BUTTONTYPE mType;
|
||||
|
||||
} mButtonConfig[ JXINPUT_MAX_BUTTONS ];
|
||||
|
||||
void initButtonsConfig();
|
||||
|
||||
|
||||
class JXINPUT_API DirectionalConfig
|
||||
{
|
||||
|
||||
public:
|
||||
bool mIsAvailable;
|
||||
CHAR mName[MAX_PATH];
|
||||
|
||||
} mDirectionalConfig[ JXINPUT_MAX_DIRECTIONALS ];
|
||||
|
||||
void initDirectionalsConfig();
|
||||
};
|
||||
|
||||
20
vendor/JXInput/0.3.4/c/jxinput.sln
vendored
Normal file
20
vendor/JXInput/0.3.4/c/jxinput.sln
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual C++ Express 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jxinput", "jxinput.vcproj", "{8AEA84DC-D8F0-4425-BEBF-A84E91115F76}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{8AEA84DC-D8F0-4425-BEBF-A84E91115F76}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{8AEA84DC-D8F0-4425-BEBF-A84E91115F76}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{8AEA84DC-D8F0-4425-BEBF-A84E91115F76}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{8AEA84DC-D8F0-4425-BEBF-A84E91115F76}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
367
vendor/JXInput/0.3.4/c/jxinput.vcproj
vendored
Normal file
367
vendor/JXInput/0.3.4/c/jxinput.vcproj
vendored
Normal file
@@ -0,0 +1,367 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="8,00"
|
||||
Name="jxinput"
|
||||
ProjectGUID="{8AEA84DC-D8F0-4425-BEBF-A84E91115F76}"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory=".\Release"
|
||||
IntermediateDirectory=".\Release"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
|
||||
UseOfMFC="0"
|
||||
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
PreprocessorDefinitions="NDEBUG"
|
||||
MkTypLibCompatible="true"
|
||||
SuppressStartupBanner="true"
|
||||
TargetEnvironment="1"
|
||||
TypeLibraryName=".\Release/jxinput.tlb"
|
||||
HeaderFileName=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
InlineFunctionExpansion="1"
|
||||
AdditionalIncludeDirectories="C:\Programme\Java\jdk1.5.0_06\include;C:\Programme\Java\jdk1.5.0_06\include\win32"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;JXINPUT_EXPORTS"
|
||||
StringPooling="true"
|
||||
RuntimeLibrary="0"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="2"
|
||||
PrecompiledHeaderThrough="stdafx.h"
|
||||
PrecompiledHeaderFile=".\Release/jxinput.pch"
|
||||
AssemblerListingLocation=".\Release/"
|
||||
ObjectFile=".\Release/"
|
||||
ProgramDataBaseFileName=".\Release/"
|
||||
BrowseInformation="1"
|
||||
WarningLevel="3"
|
||||
SuppressStartupBanner="true"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="NDEBUG"
|
||||
Culture="1031"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="dxguid.lib dinput8.lib user32.lib"
|
||||
OutputFile="..\build\jxinput.dll"
|
||||
LinkIncremental="1"
|
||||
SuppressStartupBanner="true"
|
||||
ProgramDatabaseFile=".\Release/jxinput.pdb"
|
||||
ImportLibrary=".\Release/jxinput.lib"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
SuppressStartupBanner="true"
|
||||
OutputFile=".\Release/jxinput.bsc"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="..\classes"
|
||||
IntermediateDirectory=".\Debug"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
|
||||
UseOfMFC="0"
|
||||
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
PreprocessorDefinitions="_DEBUG"
|
||||
MkTypLibCompatible="true"
|
||||
SuppressStartupBanner="true"
|
||||
TargetEnvironment="1"
|
||||
TypeLibraryName=".\Debug/jxinput.tlb"
|
||||
HeaderFileName=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="C:\Programme\Java\jdk1.5.0_06\include;C:\Programme\Java\jdk1.5.0_06\include\win32"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;JXINPUT_EXPORTS"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="1"
|
||||
UsePrecompiledHeader="2"
|
||||
PrecompiledHeaderThrough="stdafx.h"
|
||||
PrecompiledHeaderFile=".\Debug/jxinput.pch"
|
||||
AssemblerListingLocation=".\Debug/"
|
||||
ObjectFile=".\Debug/"
|
||||
ProgramDataBaseFileName=".\Debug/"
|
||||
BrowseInformation="1"
|
||||
WarningLevel="3"
|
||||
SuppressStartupBanner="true"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="_DEBUG"
|
||||
Culture="1031"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="dxguid.lib dinput8.lib user32.lib"
|
||||
OutputFile="..\Classes\jxinput.dll"
|
||||
LinkIncremental="2"
|
||||
SuppressStartupBanner="true"
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile=".\Debug/jxinput.pdb"
|
||||
ImportLibrary=".\Debug/jxinput.lib"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
SuppressStartupBanner="true"
|
||||
OutputFile=".\Debug/jxinput.bsc"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Quellcodedateien"
|
||||
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
>
|
||||
<File
|
||||
RelativePath="de_hardcode_jxinput_directinput_DirectInputDriver.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="dllmain.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="jxinput.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="JXInputManager.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="StdAfx.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
UsePrecompiledHeader="1"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
UsePrecompiledHeader="1"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header-Dateien"
|
||||
Filter="h;hpp;hxx;hm;inl"
|
||||
>
|
||||
<File
|
||||
RelativePath="de_hardcode_jxinput_directinput_DirectInputDriver.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="jxinput.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="JXInputManager.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="StdAfx.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Ressourcendateien"
|
||||
Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||
>
|
||||
</Filter>
|
||||
<File
|
||||
RelativePath="ReadMe.txt"
|
||||
>
|
||||
</File>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
72
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/Axis.java
vendored
Normal file
72
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/Axis.java
vendored
Normal file
@@ -0,0 +1,72 @@
|
||||
//**********************************************************************************************
|
||||
// (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 19. Dezember 2001, 21:58
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput;
|
||||
|
||||
/**
|
||||
* The Axis interface describes the most common feature of a joystick or other input devices.
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
public interface Axis extends Feature
|
||||
{
|
||||
// Enumeration of axes.
|
||||
final static int ID_X = 0;
|
||||
final static int ID_Y = 1;
|
||||
final static int ID_Z = 2;
|
||||
final static int ID_ROTX = 3;
|
||||
final static int ID_ROTY = 4;
|
||||
final static int ID_ROTZ = 5;
|
||||
final static int ID_SLIDER0 = 6;
|
||||
final static int ID_SLIDER1 = 7;
|
||||
final static int NUMBER_OF_ID = 8;
|
||||
|
||||
// Enumeration of axis types
|
||||
final static int TRANSLATION = 0;
|
||||
final static int ROTATION = 1;
|
||||
final static int SLIDER = 2;
|
||||
|
||||
/**
|
||||
* Retrieve the type of the axis.
|
||||
* The type is describes the meaning and the range of values of the axis.
|
||||
* <p>
|
||||
* <code>TRANSLATION</code> typed axes denote a translational deviation from a center
|
||||
* position. This can be e.g. the common, basic joystick axes.
|
||||
* The range of <code>getValue()</code> is <code>[-1.0,1.0]</code>.
|
||||
* <p>
|
||||
* <code>ROTATION</code> typed axes denote a rotational deviation from a center
|
||||
* position. Something on the stick is turned or twisted.
|
||||
* The range of <code>getValue()</code> is <code>[-1.0,1.0]</code>.
|
||||
* <p>
|
||||
* <code>SLIDER</code> typed axes denote a shifting device without a center position.
|
||||
* A good sample is a throttle control.
|
||||
* The range of <code>getValue()</code> is <code>[0.0,1.0]</code>.
|
||||
*
|
||||
* @return [ TRANSLATION | ROTATION | SLIDER ]
|
||||
*/
|
||||
int getType();
|
||||
|
||||
/**
|
||||
* Returns the current value of the axis.
|
||||
* The range of the result depends on the axis type.
|
||||
*
|
||||
* @return value [-1.0,1.0] or [0.0,1.0]
|
||||
*/
|
||||
double getValue();
|
||||
|
||||
|
||||
/**
|
||||
* Inform about the resolution of the axis.
|
||||
*
|
||||
* @return resolution, e.g. 2^-16
|
||||
*/
|
||||
double getResolution();
|
||||
|
||||
}
|
||||
|
||||
|
||||
35
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/Button.java
vendored
Normal file
35
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/Button.java
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
//**********************************************************************************************
|
||||
// (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 19. Dezember 2001, 21:58
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
public interface Button extends Feature
|
||||
{
|
||||
// Enumeration of button types
|
||||
final static int PUSHBUTTON = 0;
|
||||
final static int TOGGLEBUTTON = 1;
|
||||
|
||||
/**
|
||||
* Retrieve the type of the button.
|
||||
* Pushbutton will deliver <code>true==getState()</code> as long as they are pressed down.
|
||||
* Togglebuttons will change their state once they are pressed and keep that state
|
||||
* until they are pressed again.
|
||||
* @return [ PUSHBUTTON | TOGGLEBUTTON ]
|
||||
*/
|
||||
int getType();
|
||||
|
||||
/**
|
||||
* Tells the state of the button at last update.
|
||||
*/
|
||||
boolean getState();
|
||||
}
|
||||
|
||||
45
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/Directional.java
vendored
Normal file
45
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/Directional.java
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
//**********************************************************************************************
|
||||
// (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 27. Dezember 2001, 23:33
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
public interface Directional extends Feature
|
||||
{
|
||||
/**
|
||||
* If the Directional has a center position where it points to no direction, this
|
||||
* flag is true when this position is reached.
|
||||
*/
|
||||
boolean isCentered();
|
||||
|
||||
/**
|
||||
* Retrieve the direction pointed to.
|
||||
* Value is given in 1/100 degree, [0,36000]
|
||||
*/
|
||||
int getDirection();
|
||||
|
||||
/**
|
||||
* Retrieve the analog value pointing to the angle described by
|
||||
* <code>getDirection()</code>.
|
||||
* For coolie hats this will be either 1,0 for any direction or 0.0
|
||||
* when <code>isCentered()==true</code>.
|
||||
*/
|
||||
double getValue();
|
||||
|
||||
/**
|
||||
* Inform about the resolution of the value returned by <code>getValue()</code>.
|
||||
*
|
||||
* @return resolution, e.g. 1.0 for coolie hats
|
||||
*/
|
||||
double getResolution();
|
||||
|
||||
}
|
||||
|
||||
38
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/Feature.java
vendored
Normal file
38
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/Feature.java
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
//**********************************************************************************************
|
||||
// (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 27. Dezember 2001, 00:19
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput;
|
||||
|
||||
/**
|
||||
* An input device offers a set of features (otherwise it would be pretty useless).
|
||||
* Features in this sense can be axes, buttons and a feature callede <e>directional</e> here.
|
||||
* Coolie hats are typical directionals because they control a direction (to look at e.g.).
|
||||
* <p>
|
||||
* There are no concrete classes directly derived from <code>Feature</code> - it only
|
||||
* provides a basis for other interfaces.
|
||||
*
|
||||
* @see Axis
|
||||
* @see Button
|
||||
* @see Directional
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
public abstract interface Feature
|
||||
{
|
||||
/**
|
||||
* Features may have a name provided e.g. by the driver.
|
||||
*/
|
||||
String getName();
|
||||
|
||||
/**
|
||||
* Denote wether this feature has changed beyond it's resolution since it got last
|
||||
* updated.
|
||||
*/
|
||||
boolean hasChanged();
|
||||
}
|
||||
|
||||
71
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/JXInputDevice.java
vendored
Normal file
71
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/JXInputDevice.java
vendored
Normal file
@@ -0,0 +1,71 @@
|
||||
//**********************************************************************************************
|
||||
// (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 19. Dezember 2001, 21:47
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput;
|
||||
|
||||
/**
|
||||
* The <code>JXInputDevise</code> is the main entrypoint to the jxinput package.
|
||||
* <p>
|
||||
* A JXInputDevice represents one physical device like a joystick, a gamepad or
|
||||
* even some emulation (e.g. using keyboard) that implements the interface.
|
||||
* <p>
|
||||
* The basis task of a <code>JXInputDevise</code> is to maintain a consistent state of all its features.
|
||||
* <br>
|
||||
* It is save to distribute the <code>Feature</code> objects into application without worrying
|
||||
* about someone else performing an <code>update</code> method and thereby destructing the consistent state.
|
||||
* <p>
|
||||
* An additional task is to provide basic device features information like number of axes, buttons
|
||||
* and directional features.
|
||||
*
|
||||
* @see Feature
|
||||
* @see JXInputManager
|
||||
*
|
||||
* @author Herkules
|
||||
* @version 0.2beta
|
||||
*/
|
||||
public interface JXInputDevice
|
||||
{
|
||||
/**
|
||||
* @directed
|
||||
*/
|
||||
/*#Features lnkFeatures;*/
|
||||
|
||||
/**
|
||||
*@link aggregationByValue
|
||||
*/
|
||||
/*#Feature lnkFeature;*/
|
||||
|
||||
/**
|
||||
* Devices may have a name.
|
||||
* This name might be provided by a system dependant driver.
|
||||
*/
|
||||
String getName();
|
||||
|
||||
/** Actual number of available axes. */
|
||||
int getNumberOfAxes();
|
||||
|
||||
/** Actual number of available buttons. */
|
||||
int getNumberOfButtons();
|
||||
|
||||
/** Actual number of available directional features. */
|
||||
int getNumberOfDirectionals();
|
||||
|
||||
/** Maximum number of axes as an upper bound for index values. */
|
||||
int getMaxNumberOfAxes();
|
||||
|
||||
/** Maximum number of buttons as an upper bound for index values. */
|
||||
int getMaxNumberOfButtons();
|
||||
|
||||
/** Maximum number of directional features as an upper bound for index values. */
|
||||
int getMaxNumberOfDirectionals();
|
||||
|
||||
Axis getAxis( int idx );
|
||||
Button getButton( int idx );
|
||||
Directional getDirectional( int idx );
|
||||
}
|
||||
|
||||
233
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/JXInputManager.java
vendored
Normal file
233
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/JXInputManager.java
vendored
Normal file
@@ -0,0 +1,233 @@
|
||||
//**********************************************************************************************
|
||||
// (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 29. Dezember 2001, 02:17
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput;
|
||||
|
||||
//
|
||||
// Import driver stuff
|
||||
//
|
||||
import de.hardcode.jxinput.directinput.DirectInputDevice;
|
||||
import de.hardcode.jxinput.event.JXInputEventManager;
|
||||
import de.hardcode.jxinput.keyboard.JXKeyboardInputDevice;
|
||||
import de.hardcode.jxinput.virtual.JXVirtualInputDevice;
|
||||
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.awt.Component;
|
||||
|
||||
|
||||
/**
|
||||
* Manages the available instances of JXInputDevice.
|
||||
* It holds the one central update method which synchronizes with the physical device.
|
||||
* @author Herkules
|
||||
*/
|
||||
public class JXInputManager
|
||||
{
|
||||
|
||||
/** Remember when the last update took place. */
|
||||
private static long mTimeOfLastUpdate;
|
||||
|
||||
/** Maintain a list of devices. */
|
||||
private final static ArrayList mDevices = new ArrayList();
|
||||
|
||||
/** Maintain a list of direct input devices. */
|
||||
private final static ArrayList mDIDevices = new ArrayList();
|
||||
|
||||
/** Maintain a list of virtual devices. */
|
||||
private final static ArrayList mVirtualDevices = new ArrayList();
|
||||
|
||||
/** Maintain a list of keyboard devices. */
|
||||
private final static ArrayList mKBDevices = new ArrayList();
|
||||
|
||||
/**
|
||||
* Statically retrieve all DirectInputDevices available.
|
||||
*/
|
||||
static
|
||||
{
|
||||
reset();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @directed
|
||||
*/
|
||||
/*#JXInputDevice lnkJXInputDevice;*/
|
||||
|
||||
/**
|
||||
* Creates a new instance of JXInputManager.
|
||||
* This is prohibited - it only has static members.
|
||||
*/
|
||||
private JXInputManager()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve the number of available input devices.
|
||||
*/
|
||||
public static int getNumberOfDevices()
|
||||
{
|
||||
return mDevices.size();
|
||||
}
|
||||
|
||||
/**
|
||||
* Delivers the JXInputDevice with the desired index.
|
||||
* <p>
|
||||
* Take care that <code>idx < getNumberOfDevices()</code>!
|
||||
*/
|
||||
public static JXInputDevice getJXInputDevice( int idx )
|
||||
{
|
||||
//
|
||||
// Be well-behaved even if idx is out of range.
|
||||
//
|
||||
if ( idx >= mDevices.size() )
|
||||
return null;
|
||||
return (JXInputDevice)mDevices.get( idx );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Master reset for all devices and events.
|
||||
* After calling reset(), better forget all devices created or retrieved.
|
||||
* They are no longer valid.
|
||||
* Event listeners will no longer be called and should be discarded.
|
||||
*/
|
||||
synchronized public static void reset()
|
||||
{
|
||||
JXInputEventManager.reset();
|
||||
|
||||
mDevices.clear();
|
||||
|
||||
mVirtualDevices.clear();
|
||||
mDIDevices.clear();
|
||||
|
||||
DirectInputDevice.reset();
|
||||
|
||||
for ( int i = 0; i < DirectInputDevice.getNumberOfDevices(); ++i )
|
||||
{
|
||||
DirectInputDevice dev = new DirectInputDevice( i );
|
||||
mDevices.add( dev );
|
||||
mDIDevices.add( dev );
|
||||
}
|
||||
|
||||
// I have to call updateFeatures one time here during initialization
|
||||
// bc. I experienced difficulties otherwise while running with the
|
||||
// J3D sensoring stuff!
|
||||
// updateFeatures();
|
||||
DirectInputDevice.update();
|
||||
|
||||
int n = mKBDevices.size();
|
||||
for ( int i = 0; i < n; ++i )
|
||||
((JXKeyboardInputDevice)mKBDevices.get( i )).shutdown();
|
||||
mKBDevices.clear();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Update the (shared) state of all features in one step.
|
||||
* This method asks the actual device for a consistant state.
|
||||
* After calling this method, all features may have new values.
|
||||
* updateFeatures() is meant to be called e.g. once per frame in a gaming environment.
|
||||
*/
|
||||
public static void updateFeatures()
|
||||
{
|
||||
// Get timing
|
||||
long now = System.currentTimeMillis();
|
||||
long deltaT = now - mTimeOfLastUpdate;
|
||||
|
||||
// Update available driver
|
||||
DirectInputDevice.update();
|
||||
|
||||
//
|
||||
// Update the virtual devices.
|
||||
//
|
||||
Iterator vdevices = mVirtualDevices.iterator();
|
||||
while ( vdevices.hasNext() )
|
||||
{
|
||||
((JXVirtualInputDevice)vdevices.next()).update( deltaT );
|
||||
}
|
||||
|
||||
// Remember time
|
||||
mTimeOfLastUpdate = now;
|
||||
|
||||
// Fire all events.
|
||||
JXInputEventManager.trigger();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Get time when last update occurred.
|
||||
* @return tickervalue in milliseconds
|
||||
*/
|
||||
public static long getLastUpdateTime()
|
||||
{
|
||||
return mTimeOfLastUpdate;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create a new pseudo-device.
|
||||
*/
|
||||
public static JXKeyboardInputDevice createKeyboardDevice()
|
||||
{
|
||||
JXKeyboardInputDevice d = new JXKeyboardInputDevice();
|
||||
mDevices.add( d );
|
||||
mKBDevices.add( d );
|
||||
return d;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create a new pseudo-device listening to a Swing component.
|
||||
* Make sure that the component also has the keyboard focus!!
|
||||
*/
|
||||
public static JXKeyboardInputDevice createKeyboardDevice( Component comp )
|
||||
{
|
||||
JXKeyboardInputDevice d = new JXKeyboardInputDevice( comp );
|
||||
mDevices.add( d );
|
||||
mKBDevices.add( d );
|
||||
return d;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Delete a keyboard device again e.g. when the corresponding
|
||||
* JComponent gets deleted.
|
||||
*/
|
||||
public static void deleteKeyboardDevice( JXKeyboardInputDevice dev )
|
||||
{
|
||||
mDevices.remove( dev );
|
||||
mKBDevices.remove( dev );
|
||||
((JXKeyboardInputDevice)dev).shutdown();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create a new pseudo-device.
|
||||
*/
|
||||
public static JXVirtualInputDevice createVirtualDevice()
|
||||
{
|
||||
JXVirtualInputDevice d = new JXVirtualInputDevice();
|
||||
mDevices.add( d );
|
||||
mVirtualDevices.add( d );
|
||||
return d;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Delete a virtual device again.
|
||||
*/
|
||||
public static void deleteVirtualDevice( JXVirtualInputDevice dev )
|
||||
{
|
||||
mDevices.remove( dev );
|
||||
mVirtualDevices.remove( dev );
|
||||
}
|
||||
|
||||
}
|
||||
70
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/directinput/DIAxis.java
vendored
Normal file
70
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/directinput/DIAxis.java
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
//**********************************************************************************************
|
||||
// (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 27. Dezember 2001, 00:14
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.directinput;
|
||||
|
||||
import de.hardcode.jxinput.Axis;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
class DIAxis implements Axis
|
||||
{
|
||||
private final int mDeviceIdx;
|
||||
private final int mIdx;
|
||||
|
||||
/**
|
||||
* Creates a new instance of DIAxis.
|
||||
*/
|
||||
DIAxis( int devidx, int idx )
|
||||
{
|
||||
mDeviceIdx = devidx;
|
||||
mIdx = idx;
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return DirectInputDriver.getAxisName( mDeviceIdx, mIdx );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Denote wether this feature has changed beyond it's resolution since it got last
|
||||
* updated.
|
||||
*/
|
||||
public boolean hasChanged()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public double getValue()
|
||||
{
|
||||
return DirectInputDriver.getAxisValue( mDeviceIdx, mIdx );
|
||||
}
|
||||
|
||||
public int getType()
|
||||
{
|
||||
return DirectInputDriver.getAxisType( mDeviceIdx, mIdx );
|
||||
}
|
||||
|
||||
/**
|
||||
* Inform about the resolution of the axis.
|
||||
*
|
||||
* @return resolution, e.g. 2^-16
|
||||
*/
|
||||
public double getResolution()
|
||||
{
|
||||
// extend the driver here!!
|
||||
// Here I assume typical 16 bit resolution
|
||||
return ( getType() == Axis.SLIDER ? 1.0/65536.0 : 2.0/65536.0 ) ;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
55
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/directinput/DIButton.java
vendored
Normal file
55
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/directinput/DIButton.java
vendored
Normal file
@@ -0,0 +1,55 @@
|
||||
//**********************************************************************************************
|
||||
// (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 27. Dezember 2001, 00:14
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.directinput;
|
||||
|
||||
import de.hardcode.jxinput.Button;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
class DIButton implements Button
|
||||
{
|
||||
private final int mDeviceIdx;
|
||||
private final int mIdx;
|
||||
|
||||
/**
|
||||
* Creates a new instance of DIButton.
|
||||
*/
|
||||
DIButton( int devidx, int idx )
|
||||
{
|
||||
mDeviceIdx = devidx;
|
||||
mIdx = idx;
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return DirectInputDriver.getButtonName( mDeviceIdx, mIdx );
|
||||
}
|
||||
|
||||
/**
|
||||
* Denote wether this feature has changed beyond it's resolution since it got last
|
||||
* updated.
|
||||
*/
|
||||
public boolean hasChanged()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public int getType()
|
||||
{
|
||||
return DirectInputDriver.getButtonType( mDeviceIdx, mIdx );
|
||||
}
|
||||
|
||||
public boolean getState()
|
||||
{
|
||||
return DirectInputDriver.getButtonState( mDeviceIdx, mIdx );
|
||||
}
|
||||
}
|
||||
78
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/directinput/DIDirectional.java
vendored
Normal file
78
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/directinput/DIDirectional.java
vendored
Normal file
@@ -0,0 +1,78 @@
|
||||
//**********************************************************************************************
|
||||
// (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 27. Dezember 2001, 23:40
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.directinput;
|
||||
|
||||
import de.hardcode.jxinput.Directional;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
class DIDirectional implements Directional
|
||||
{
|
||||
private final int mDeviceIdx;
|
||||
private final int mIdx;
|
||||
|
||||
/**
|
||||
* Creates a new instance of DIDirectional.
|
||||
*/
|
||||
DIDirectional( int devidx, int idx )
|
||||
{
|
||||
mDeviceIdx = devidx;
|
||||
mIdx = idx;
|
||||
}
|
||||
|
||||
/** Features may have a name provided e.g. by the driver. */
|
||||
public String getName()
|
||||
{
|
||||
return DirectInputDriver.getDirectionalName( mDeviceIdx, mIdx );
|
||||
}
|
||||
|
||||
/**
|
||||
* Denote wether this feature has changed beyond it's resolution since it got last
|
||||
* updated.
|
||||
*/
|
||||
public boolean hasChanged()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public boolean isCentered()
|
||||
{
|
||||
return ( 0xffff == (DirectInputDriver.getDirection( mDeviceIdx, mIdx ) & 0xffff) );
|
||||
}
|
||||
|
||||
public int getDirection()
|
||||
{
|
||||
return isCentered() ? 0 : DirectInputDriver.getDirection( mDeviceIdx, mIdx );
|
||||
}
|
||||
|
||||
public double getValue()
|
||||
{
|
||||
if ( isCentered() )
|
||||
return 0.0;
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Inform about the resolution of the value returned by <code>getValue()</code>.
|
||||
*
|
||||
* @return resolution, e.g. 1.0 for coolie hats
|
||||
*/
|
||||
public double getResolution()
|
||||
{
|
||||
// DI POV always return 0.0 or 1.0, so the resolution is 1.0.
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
170
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/directinput/DirectInputDevice.java
vendored
Normal file
170
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/directinput/DirectInputDevice.java
vendored
Normal file
@@ -0,0 +1,170 @@
|
||||
//**********************************************************************************************
|
||||
// (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 26. Dezember 2001, 00:40
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.directinput;
|
||||
|
||||
import de.hardcode.jxinput.JXInputDevice;
|
||||
import de.hardcode.jxinput.Axis;
|
||||
import de.hardcode.jxinput.Directional;
|
||||
import de.hardcode.jxinput.Button;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
public class DirectInputDevice implements JXInputDevice
|
||||
{
|
||||
int mDeviceIdx;
|
||||
|
||||
private DIAxis[] mAxes;
|
||||
private DIButton[] mButtons;
|
||||
private DIDirectional[] mDirectionals;
|
||||
|
||||
/**
|
||||
* The number of DirectInput devices available with the driver.
|
||||
*/
|
||||
public static int getNumberOfDevices()
|
||||
{
|
||||
if ( DirectInputDriver.isAvailable() )
|
||||
return DirectInputDriver.getNumberOfDevices();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Update the state of all devices.
|
||||
*/
|
||||
public static void update()
|
||||
{
|
||||
if ( DirectInputDriver.isAvailable() )
|
||||
DirectInputDriver.nativeupdate();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new instance of DirectInputDevice.
|
||||
*/
|
||||
public DirectInputDevice( int devidx )
|
||||
{
|
||||
mDeviceIdx = devidx;
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the DirectInput connection.
|
||||
*/
|
||||
public static void reset()
|
||||
{
|
||||
if ( DirectInputDriver.isAvailable() )
|
||||
DirectInputDriver.reset();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Initialisation of fields.
|
||||
*/
|
||||
private final void init()
|
||||
{
|
||||
//
|
||||
// Allocate arrays for max. number of features
|
||||
//
|
||||
mAxes = new DIAxis [ getMaxNumberOfAxes() ];
|
||||
mButtons = new DIButton [ getMaxNumberOfButtons() ];
|
||||
mDirectionals = new DIDirectional [ getMaxNumberOfDirectionals() ];
|
||||
|
||||
//
|
||||
// Fill arrays due to the state of the driver.
|
||||
//
|
||||
for ( int i = 0; i < mAxes.length; ++i )
|
||||
{
|
||||
if ( DirectInputDriver.isAxisAvailable( mDeviceIdx, i ) )
|
||||
mAxes[ i ] = new DIAxis( mDeviceIdx, i );
|
||||
}
|
||||
|
||||
for ( int i = 0; i < mButtons.length; ++i )
|
||||
{
|
||||
if ( DirectInputDriver.isButtonAvailable( mDeviceIdx, i ) )
|
||||
mButtons[ i ] = new DIButton( mDeviceIdx, i );
|
||||
}
|
||||
|
||||
for ( int i = 0; i < mDirectionals.length; ++i )
|
||||
{
|
||||
if ( DirectInputDriver.isDirectionalAvailable( mDeviceIdx, i ) )
|
||||
mDirectionals[ i ] = new DIDirectional( mDeviceIdx, i );
|
||||
}
|
||||
}
|
||||
|
||||
/** Devices may have a name. */
|
||||
public String getName()
|
||||
{
|
||||
String name = DirectInputDriver.getName( mDeviceIdx );
|
||||
if ( null == name )
|
||||
return "Win32 DirectInput Joystick";
|
||||
return name;
|
||||
}
|
||||
|
||||
|
||||
/** Actual number of available buttons. */
|
||||
public int getNumberOfButtons()
|
||||
{
|
||||
return DirectInputDriver.getNumberOfButtons( mDeviceIdx );
|
||||
}
|
||||
|
||||
/** Actual number of available axes. */
|
||||
public int getNumberOfAxes()
|
||||
{
|
||||
return DirectInputDriver.getNumberOfAxes( mDeviceIdx );
|
||||
}
|
||||
|
||||
/** Actual number of available directional features. */
|
||||
public int getNumberOfDirectionals()
|
||||
{
|
||||
return DirectInputDriver.getNumberOfDirectionals( mDeviceIdx );
|
||||
}
|
||||
|
||||
/** Maximum number of buttons as an upper bound for index values. */
|
||||
public int getMaxNumberOfButtons()
|
||||
{
|
||||
return DirectInputDriver.getMaxNumberOfButtons();
|
||||
}
|
||||
|
||||
/** Maximum number of axes as an upper bound for index values. */
|
||||
public int getMaxNumberOfAxes()
|
||||
{
|
||||
return DirectInputDriver.getMaxNumberOfAxes();
|
||||
}
|
||||
|
||||
/** Maximum number of available directional features. */
|
||||
public int getMaxNumberOfDirectionals()
|
||||
{
|
||||
return DirectInputDriver.getMaxNumberOfDirectionals();
|
||||
}
|
||||
|
||||
|
||||
public Axis getAxis(int idx)
|
||||
{
|
||||
return mAxes[ idx ];
|
||||
}
|
||||
|
||||
public Button getButton(int idx)
|
||||
{
|
||||
return mButtons[ idx ];
|
||||
}
|
||||
|
||||
public Directional getDirectional(int idx)
|
||||
{
|
||||
return mDirectionals[ idx ];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
184
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/directinput/DirectInputDriver.java
vendored
Normal file
184
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/directinput/DirectInputDriver.java
vendored
Normal file
@@ -0,0 +1,184 @@
|
||||
//**********************************************************************************************
|
||||
// (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 19. Dezember 2001, 22:44
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.directinput;
|
||||
|
||||
import java.lang.reflect.Array;
|
||||
|
||||
/**
|
||||
* DirectInputDriver: the connection to the Win32 joystick.
|
||||
* There is only one allowed, so the layout of this class is merely static.
|
||||
*
|
||||
* History:
|
||||
*
|
||||
* Changes since 0.1beta:
|
||||
* - support of multiple devices addressed by the <code>dev</code> index
|
||||
*
|
||||
*
|
||||
* @author Herkules
|
||||
* @version 0.2beta
|
||||
*/
|
||||
class DirectInputDriver
|
||||
{
|
||||
private final static String NATIVE_LIB_NAME = "jxinput";
|
||||
|
||||
/** Remember wether nativeinit() succeeded. */
|
||||
static boolean sIsOperational = false;
|
||||
|
||||
//
|
||||
// Static arrays to hold the values.
|
||||
//
|
||||
private static double [][] sAxisValues;
|
||||
private static boolean [][] sButtonStates;
|
||||
private static int [][] sDirectionalValues;
|
||||
|
||||
/**
|
||||
* Perform the static initialization.
|
||||
*/
|
||||
static
|
||||
{
|
||||
try
|
||||
{
|
||||
// Load the native lib.
|
||||
System.loadLibrary( NATIVE_LIB_NAME );
|
||||
|
||||
init();
|
||||
}
|
||||
catch( SecurityException e )
|
||||
{
|
||||
Log.logger.warning("Native library jxinput not loaded due to a SecurityException.");
|
||||
}
|
||||
catch( UnsatisfiedLinkError e )
|
||||
{
|
||||
Log.logger.info("Native library jxinput not loaded due to an UnsatisfiedLinkError.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private final static void init()
|
||||
{
|
||||
sIsOperational = false;
|
||||
//
|
||||
// Initialize it.
|
||||
//
|
||||
if ( nativeinit() )
|
||||
{
|
||||
int devs = getNumberOfDevices();
|
||||
sAxisValues = new double [ devs ][ DirectInputDriver.getMaxNumberOfAxes() ];
|
||||
sButtonStates = new boolean [ devs ][ DirectInputDriver.getMaxNumberOfButtons() ];
|
||||
sDirectionalValues = new int [ devs ][ DirectInputDriver.getMaxNumberOfDirectionals() ];
|
||||
|
||||
// Bind the native lib to my variables.
|
||||
bind();
|
||||
|
||||
// Remember I am fine.
|
||||
sIsOperational = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Static ctor of DirectInputDriver.
|
||||
* No object will be created due to the static layout.
|
||||
*/
|
||||
private DirectInputDriver()
|
||||
{
|
||||
}
|
||||
|
||||
// Administration
|
||||
private static native boolean nativeinit();
|
||||
private static native void nativeexit();
|
||||
private static native void bind();
|
||||
|
||||
static native int getNumberOfDevices();
|
||||
|
||||
// Configuration
|
||||
static native String getName( int dev );
|
||||
static native int getNumberOfAxes( int dev );
|
||||
static native int getNumberOfButtons( int dev );
|
||||
static native int getNumberOfDirectionals( int dev );
|
||||
static native int getMaxNumberOfAxes();
|
||||
static native int getMaxNumberOfButtons();
|
||||
static native int getMaxNumberOfDirectionals();
|
||||
|
||||
static native boolean isAxisAvailable( int dev, int idx );
|
||||
static native String getAxisName( int dev, int idx );
|
||||
static native int getAxisType( int dev, int idx );
|
||||
|
||||
static native boolean isButtonAvailable( int dev, int idx );
|
||||
static native String getButtonName( int dev, int idx );
|
||||
static native int getButtonType( int dev, int idx );
|
||||
|
||||
static native boolean isDirectionalAvailable( int dev, int idx );
|
||||
static native String getDirectionalName( int dev, int idx );
|
||||
|
||||
// Operation
|
||||
static native void nativeupdate();
|
||||
|
||||
|
||||
public static boolean isAvailable()
|
||||
{
|
||||
return sIsOperational;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Shutdown the device and free all Win32 resources.
|
||||
* It is not a good idea to access any joystick features after
|
||||
* <code>shutdown()</code>.
|
||||
*/
|
||||
static void shutdown()
|
||||
{
|
||||
nativeexit();
|
||||
sAxisValues = null;
|
||||
sButtonStates = null;
|
||||
sDirectionalValues = null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Reset the device and free all Win32 resources.
|
||||
*/
|
||||
static void reset()
|
||||
{
|
||||
shutdown();
|
||||
init();
|
||||
}
|
||||
|
||||
static double getAxisValue( int dev, int idx )
|
||||
{
|
||||
return sAxisValues[ dev ][ idx ];
|
||||
}
|
||||
|
||||
static boolean getButtonState( int dev, int idx )
|
||||
{
|
||||
return sButtonStates[ dev ][ idx ];
|
||||
}
|
||||
|
||||
static int getDirection( int dev, int idx )
|
||||
{
|
||||
return sDirectionalValues[ dev ][ idx ];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param args the command line arguments
|
||||
*/
|
||||
public static void main (String args[])
|
||||
{
|
||||
|
||||
if ( ! sIsOperational )
|
||||
return;
|
||||
|
||||
for( int i = 0; i < 5000; ++i )
|
||||
nativeupdate();
|
||||
|
||||
shutdown();
|
||||
}
|
||||
|
||||
}
|
||||
34
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/directinput/Log.java
vendored
Normal file
34
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/directinput/Log.java
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
//**********************************************************************************************
|
||||
// (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 29. Oktober 2002, 22:57
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.directinput;
|
||||
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
public class Log
|
||||
{
|
||||
public final static Logger logger = Logger.getLogger( Log.class.getPackage().getName() );
|
||||
|
||||
// static
|
||||
// {
|
||||
// logger.setLevel( Level.ALL );
|
||||
// }
|
||||
|
||||
/**
|
||||
* Creates a new instance of Log.
|
||||
*/
|
||||
private Log()
|
||||
{
|
||||
}
|
||||
|
||||
}
|
||||
48
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/event/JXInputAxisEvent.java
vendored
Normal file
48
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/event/JXInputAxisEvent.java
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
//**********************************************************************************************
|
||||
// (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 31. Januar 2002, 23:33
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.event;
|
||||
|
||||
import de.hardcode.jxinput.JXInputDevice;
|
||||
import de.hardcode.jxinput.Axis;
|
||||
|
||||
/**
|
||||
* Represents an event coming from an axis.
|
||||
* @author Joerg Plewe
|
||||
*/
|
||||
public class JXInputAxisEvent
|
||||
{
|
||||
private final Axis mAxis;
|
||||
double mDelta;
|
||||
|
||||
/**
|
||||
* Creates a new instance of JXInputEvent.
|
||||
*/
|
||||
JXInputAxisEvent( Axis axis )
|
||||
{
|
||||
mAxis = axis;
|
||||
}
|
||||
|
||||
/**
|
||||
* The feature that caused the event.
|
||||
*/
|
||||
public final Axis getAxis()
|
||||
{
|
||||
return mAxis;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the change in value that caused the event.
|
||||
*/
|
||||
public double getDelta()
|
||||
{
|
||||
return mDelta;
|
||||
}
|
||||
|
||||
}
|
||||
19
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/event/JXInputAxisEventListener.java
vendored
Normal file
19
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/event/JXInputAxisEventListener.java
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
//**********************************************************************************************
|
||||
// (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 31. Januar 2002, 23:54
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.event;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
public interface JXInputAxisEventListener
|
||||
{
|
||||
void changed( JXInputAxisEvent ev );
|
||||
}
|
||||
|
||||
38
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/event/JXInputButtonEvent.java
vendored
Normal file
38
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/event/JXInputButtonEvent.java
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
//**********************************************************************************************
|
||||
// (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 31. Januar 2002, 23:33
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.event;
|
||||
|
||||
import de.hardcode.jxinput.JXInputDevice;
|
||||
import de.hardcode.jxinput.Button;
|
||||
|
||||
/**
|
||||
* Represents event coming from a button.
|
||||
* @author Joerg Plewe
|
||||
*/
|
||||
public class JXInputButtonEvent
|
||||
{
|
||||
final Button mButton;
|
||||
|
||||
/**
|
||||
* Creates a new instance of JXInputEvent.
|
||||
*/
|
||||
JXInputButtonEvent( Button button )
|
||||
{
|
||||
mButton = button;
|
||||
}
|
||||
|
||||
/**
|
||||
* The feature that caused the event.
|
||||
*/
|
||||
public final Button getButton()
|
||||
{
|
||||
return mButton;
|
||||
}
|
||||
|
||||
}
|
||||
19
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/event/JXInputButtonEventListener.java
vendored
Normal file
19
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/event/JXInputButtonEventListener.java
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
//**********************************************************************************************
|
||||
// (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 31. Januar 2002, 23:54
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.event;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
public interface JXInputButtonEventListener
|
||||
{
|
||||
void changed( JXInputButtonEvent ev );
|
||||
}
|
||||
|
||||
56
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/event/JXInputDirectionalEvent.java
vendored
Normal file
56
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/event/JXInputDirectionalEvent.java
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
//**********************************************************************************************
|
||||
// (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 31. Januar 2002, 23:33
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.event;
|
||||
|
||||
import de.hardcode.jxinput.JXInputDevice;
|
||||
import de.hardcode.jxinput.Directional;
|
||||
|
||||
/**
|
||||
* Represents an event coming from an axis.
|
||||
* @author Joerg Plewe
|
||||
*/
|
||||
public class JXInputDirectionalEvent
|
||||
{
|
||||
private final Directional mDirectional;
|
||||
double mValueDelta;
|
||||
int mDirectionDelta;
|
||||
|
||||
/**
|
||||
* Creates a new instance of JXInputEvent.
|
||||
*/
|
||||
JXInputDirectionalEvent( Directional directional )
|
||||
{
|
||||
mDirectional = directional;
|
||||
}
|
||||
|
||||
/**
|
||||
* The feature that caused the event.
|
||||
*/
|
||||
public final Directional getDirectional()
|
||||
{
|
||||
return mDirectional;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the change in value that caused the event.
|
||||
*/
|
||||
public double getValueDelta()
|
||||
{
|
||||
return mValueDelta;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the change in direction that caused the event.
|
||||
*/
|
||||
public int getDirectionDelta()
|
||||
{
|
||||
return mDirectionDelta;
|
||||
}
|
||||
|
||||
}
|
||||
19
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/event/JXInputDirectionalEventListener.java
vendored
Normal file
19
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/event/JXInputDirectionalEventListener.java
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
//**********************************************************************************************
|
||||
// (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 31. Januar 2002, 23:54
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.event;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
public interface JXInputDirectionalEventListener
|
||||
{
|
||||
void changed( JXInputDirectionalEvent ev );
|
||||
}
|
||||
|
||||
284
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/event/JXInputEventManager.java
vendored
Normal file
284
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/event/JXInputEventManager.java
vendored
Normal file
@@ -0,0 +1,284 @@
|
||||
//**********************************************************************************************
|
||||
// (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 31. Januar 2002, 23:42
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.event;
|
||||
|
||||
import de.hardcode.jxinput.JXInputManager;
|
||||
import de.hardcode.jxinput.JXInputDevice;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import de.hardcode.jxinput.Axis;
|
||||
import java.util.Iterator;
|
||||
import de.hardcode.jxinput.Button;
|
||||
import de.hardcode.jxinput.Directional;
|
||||
|
||||
/**
|
||||
* Handles all events and listeners.
|
||||
* <code>JXInputEventManager</code> is layed out a static singleton.
|
||||
* @author Herkules
|
||||
*/
|
||||
public class JXInputEventManager
|
||||
{
|
||||
|
||||
private final static ArrayList mAxisEventListeners = new ArrayList();
|
||||
private final static ArrayList mButtonEventListeners = new ArrayList();
|
||||
private final static ArrayList mDirectionalEventListeners = new ArrayList();
|
||||
|
||||
private static autotrigger mAutoTrigger = null;
|
||||
|
||||
/**
|
||||
* Inner class combining a listener with its scheduling parameters.
|
||||
*/
|
||||
private static class axislistener
|
||||
{
|
||||
final JXInputAxisEventListener mListener;
|
||||
final double mTreshold;
|
||||
final JXInputAxisEvent mEvent;
|
||||
double mLastValueFired = 0.0;
|
||||
|
||||
axislistener( JXInputAxisEventListener l, Axis axis, double treshold )
|
||||
{
|
||||
mListener = l;
|
||||
mTreshold = treshold;
|
||||
mEvent = new JXInputAxisEvent( axis );
|
||||
}
|
||||
|
||||
final void checkTrigger()
|
||||
{
|
||||
double curval = mEvent.getAxis().getValue();
|
||||
double delta = curval - mLastValueFired;
|
||||
|
||||
if ( Math.abs( delta ) >= mTreshold )
|
||||
{
|
||||
mLastValueFired = curval;
|
||||
mEvent.mDelta = delta;
|
||||
mListener.changed( mEvent );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Inner class combining a listener with its scheduling parameters.
|
||||
*/
|
||||
private static class buttonlistener
|
||||
{
|
||||
final JXInputButtonEventListener mListener;
|
||||
final JXInputButtonEvent mEvent;
|
||||
boolean mLastValueFired = false;
|
||||
|
||||
buttonlistener( JXInputButtonEventListener l, Button button )
|
||||
{
|
||||
mListener = l;
|
||||
mEvent = new JXInputButtonEvent( button );
|
||||
}
|
||||
|
||||
final void checkTrigger()
|
||||
{
|
||||
boolean curstate = mEvent.getButton().getState();
|
||||
if ( curstate != mLastValueFired )
|
||||
{
|
||||
mLastValueFired = curstate;
|
||||
mListener.changed( mEvent );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static class directionallistener
|
||||
{
|
||||
final JXInputDirectionalEventListener mListener;
|
||||
final double mValueTreshold;
|
||||
final JXInputDirectionalEvent mEvent;
|
||||
double mLastValueFired = 0.0;
|
||||
boolean mLastCenteredFired = true;
|
||||
int mLastDirectionFired = 0;
|
||||
|
||||
directionallistener( JXInputDirectionalEventListener l, Directional directional, double valuetreshold )
|
||||
{
|
||||
mListener = l;
|
||||
mValueTreshold = valuetreshold;
|
||||
mEvent = new JXInputDirectionalEvent( directional );
|
||||
}
|
||||
|
||||
final void checkTrigger()
|
||||
{
|
||||
double curval = mEvent.getDirectional().getValue();
|
||||
int curdir = mEvent.getDirectional().getDirection();
|
||||
boolean curctr = mEvent.getDirectional().isCentered();
|
||||
|
||||
double delta = curval - mLastValueFired;
|
||||
int dirdelta = curdir - mLastDirectionFired;
|
||||
boolean centeredchanged = mLastCenteredFired != curctr;
|
||||
|
||||
if ( Math.abs( delta ) >= mValueTreshold
|
||||
|| Math.abs( dirdelta ) > 0
|
||||
|| centeredchanged )
|
||||
{
|
||||
mLastValueFired = curval;
|
||||
mLastDirectionFired = curdir;
|
||||
mLastCenteredFired = curctr;
|
||||
|
||||
mEvent.mValueDelta = delta;
|
||||
mEvent.mDirectionDelta = dirdelta;
|
||||
mListener.changed( mEvent );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new instance of JXInputEventManager.
|
||||
*/
|
||||
private JXInputEventManager()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Remove all listeners at once.
|
||||
*/
|
||||
public static void reset()
|
||||
{
|
||||
mAxisEventListeners.clear();
|
||||
mButtonEventListeners.clear();
|
||||
mDirectionalEventListeners.clear();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Query devices and fire all occuring events.
|
||||
* <code>trigger()</code> is thought to be called by <code>JXInputManager#updateFeatures()</code>.
|
||||
*/
|
||||
public static void trigger()
|
||||
{
|
||||
int n = mAxisEventListeners.size();
|
||||
for ( int i = 0; i < n; i++ )
|
||||
{
|
||||
axislistener l = (axislistener)mAxisEventListeners.get( i );
|
||||
l.checkTrigger();
|
||||
}
|
||||
|
||||
n = mButtonEventListeners.size();
|
||||
for ( int i = 0; i < n; i++ )
|
||||
{
|
||||
buttonlistener l = (buttonlistener)mButtonEventListeners.get( i );
|
||||
l.checkTrigger();
|
||||
}
|
||||
|
||||
n = mDirectionalEventListeners.size();
|
||||
for ( int i = 0; i < n; i++ )
|
||||
{
|
||||
directionallistener l = (directionallistener)mDirectionalEventListeners.get( i );
|
||||
l.checkTrigger();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private final static class autotrigger extends Thread
|
||||
{
|
||||
boolean mFinish = false;
|
||||
final int mDelay;
|
||||
|
||||
autotrigger( int delay )
|
||||
{
|
||||
mDelay = delay;
|
||||
}
|
||||
|
||||
public void run()
|
||||
{
|
||||
while ( ! mFinish )
|
||||
{
|
||||
try
|
||||
{
|
||||
Thread.sleep( mDelay );
|
||||
JXInputManager.updateFeatures();
|
||||
}
|
||||
catch ( InterruptedException ex )
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the intervall in ms that is used to check for new values of the features.
|
||||
* Set it to <= 0 to prohibit automatic triggering. Events will then only be fired
|
||||
* when somebody invokes <code>JXInputManager#updateFeatures()</code>.
|
||||
*/
|
||||
public static void setTriggerIntervall( int ms )
|
||||
{
|
||||
//
|
||||
// Kill current thread, if any
|
||||
//
|
||||
if ( null != mAutoTrigger )
|
||||
{
|
||||
mAutoTrigger.mFinish = true;
|
||||
try
|
||||
{
|
||||
mAutoTrigger.join();
|
||||
}
|
||||
catch ( InterruptedException ex )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
mAutoTrigger = null;
|
||||
|
||||
if ( ms > 0 )
|
||||
{
|
||||
mAutoTrigger = new autotrigger( ms );
|
||||
mAutoTrigger.start();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public static void addListener( JXInputAxisEventListener l, Axis axis, double treshold )
|
||||
{
|
||||
mAxisEventListeners.add( new JXInputEventManager.axislistener( l, axis, treshold ) );
|
||||
}
|
||||
|
||||
public static void addListener( JXInputAxisEventListener l, Axis axis )
|
||||
{
|
||||
mAxisEventListeners.add( new JXInputEventManager.axislistener( l, axis, axis.getResolution() ) );
|
||||
}
|
||||
|
||||
public static void removeListener( JXInputAxisEventListener l )
|
||||
{
|
||||
mAxisEventListeners.remove( l );
|
||||
}
|
||||
|
||||
|
||||
public static void addListener( JXInputButtonEventListener l, Button button )
|
||||
{
|
||||
mButtonEventListeners.add( new JXInputEventManager.buttonlistener( l, button ) );
|
||||
}
|
||||
|
||||
public static void removeListener( JXInputButtonEventListener l )
|
||||
{
|
||||
mButtonEventListeners.remove( l );
|
||||
}
|
||||
|
||||
public static void addListener( JXInputDirectionalEventListener l, Directional directional, double valuetreshold )
|
||||
{
|
||||
mDirectionalEventListeners.add( new JXInputEventManager.directionallistener( l, directional, valuetreshold ) );
|
||||
}
|
||||
|
||||
public static void addListener( JXInputDirectionalEventListener l, Directional directional )
|
||||
{
|
||||
mDirectionalEventListeners.add( new JXInputEventManager.directionallistener( l, directional, directional.getResolution() ) );
|
||||
}
|
||||
|
||||
public static void removeListener( JXInputDirectionalEventListener l )
|
||||
{
|
||||
mDirectionalEventListeners.remove( l );
|
||||
}
|
||||
|
||||
}
|
||||
95
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/j3d/DeviceConfiguration.java
vendored
Normal file
95
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/j3d/DeviceConfiguration.java
vendored
Normal file
@@ -0,0 +1,95 @@
|
||||
//**********************************************************************************************
|
||||
// (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 23. Februar 2002, 14:05
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.j3d;
|
||||
|
||||
import de.hardcode.jxinput.Axis;
|
||||
|
||||
|
||||
/**
|
||||
* Connects JXInput with J3DInputDevice.
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
public class DeviceConfiguration
|
||||
{
|
||||
public final static int AXIS_X = 0;
|
||||
public final static int AXIS_Y = 1;
|
||||
public final static int AXIS_Z = 2;
|
||||
|
||||
private final static class axisvalue
|
||||
{
|
||||
private final Axis mAxis;
|
||||
private final IsActiveCondition mIsActive;
|
||||
private final IsActiveCondition mIsIncremental;
|
||||
private final double mScale;
|
||||
private final double mOffset;
|
||||
private double mValue;
|
||||
|
||||
axisvalue( Axis axis, IsActiveCondition active, IsActiveCondition incremental, double offset, double scale )
|
||||
{
|
||||
mAxis = axis;
|
||||
mIsActive = active;
|
||||
mIsIncremental = incremental;
|
||||
mValue = mOffset = offset;
|
||||
mScale = scale;
|
||||
}
|
||||
|
||||
double value()
|
||||
{
|
||||
if ( mIsActive.isActive() )
|
||||
{
|
||||
double newval = mAxis.getValue() * mScale;
|
||||
|
||||
if ( mIsIncremental.isActive() )
|
||||
mValue += newval;
|
||||
else
|
||||
mValue = newval + mOffset;
|
||||
}
|
||||
return mValue;
|
||||
}
|
||||
}
|
||||
|
||||
DeviceConfiguration.axisvalue [] mAxisTrans = new DeviceConfiguration.axisvalue[ 3 ];
|
||||
DeviceConfiguration.axisvalue [] mAxisRot = new DeviceConfiguration.axisvalue[ 3 ];
|
||||
|
||||
/**
|
||||
* Creates a new instance of DeviceConfiguration.
|
||||
*/
|
||||
public DeviceConfiguration()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
double getTranslational( int axisid )
|
||||
{
|
||||
DeviceConfiguration.axisvalue val = mAxisTrans[ axisid ];
|
||||
return null == val ? 0.0 : val.value();
|
||||
}
|
||||
|
||||
double getRotational( int axisid )
|
||||
{
|
||||
DeviceConfiguration.axisvalue val = mAxisRot[ axisid ];
|
||||
return null == val ? 0.0 : val.value();
|
||||
}
|
||||
|
||||
public void setTranslational( int axisid, Axis axis, IsActiveCondition active, IsActiveCondition incremental, double offset, double scale )
|
||||
{
|
||||
if ( axisid < 0 || axisid > AXIS_Z )
|
||||
throw new IllegalArgumentException();
|
||||
mAxisTrans[ axisid ] = new DeviceConfiguration.axisvalue( axis, active, incremental, offset, scale );
|
||||
}
|
||||
|
||||
public void setRotational( int axisid, Axis axis, IsActiveCondition active, IsActiveCondition incremental, double offset, double scale )
|
||||
{
|
||||
if ( axisid < 0 || axisid > AXIS_Z )
|
||||
throw new IllegalArgumentException();
|
||||
mAxisRot[ axisid ] = new DeviceConfiguration.axisvalue( axis, active, incremental, offset, scale );
|
||||
}
|
||||
|
||||
}
|
||||
25
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/j3d/IsActiveCondition.java
vendored
Normal file
25
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/j3d/IsActiveCondition.java
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
//**********************************************************************************************
|
||||
// (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 25. Februar 2002, 22:41
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.j3d;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
public interface IsActiveCondition
|
||||
{
|
||||
public final static IsActiveCondition ALWAYS = IsAlwaysActiveCondition.ALWAYS;
|
||||
public final static IsActiveCondition NEVER = IsAlwaysActiveCondition.NEVER;
|
||||
|
||||
/**
|
||||
* Tell wether a certain thing is active.
|
||||
*/
|
||||
boolean isActive();
|
||||
}
|
||||
|
||||
39
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/j3d/IsActiveOnButtonCondition.java
vendored
Normal file
39
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/j3d/IsActiveOnButtonCondition.java
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
//**********************************************************************************************
|
||||
// (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 25. Februar 2002, 22:43
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.j3d;
|
||||
|
||||
import de.hardcode.jxinput.Button;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
public class IsActiveOnButtonCondition implements IsActiveCondition
|
||||
{
|
||||
private final boolean mActiveState;
|
||||
private final Button mButton;
|
||||
|
||||
/**
|
||||
* Creates a new instance of IsAlwayActiveCondition.
|
||||
*/
|
||||
public IsActiveOnButtonCondition( Button button, boolean activestate )
|
||||
{
|
||||
mActiveState = activestate;
|
||||
mButton = button;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tell wether a certain thing is active.
|
||||
*/
|
||||
public boolean isActive()
|
||||
{
|
||||
return mButton.getState() == mActiveState;
|
||||
}
|
||||
|
||||
}
|
||||
38
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/j3d/IsAlwaysActiveCondition.java
vendored
Normal file
38
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/j3d/IsAlwaysActiveCondition.java
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
//**********************************************************************************************
|
||||
// (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 25. Februar 2002, 22:43
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.j3d;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
final class IsAlwaysActiveCondition implements IsActiveCondition
|
||||
{
|
||||
private final boolean mIsActive;
|
||||
|
||||
public final static IsActiveCondition ALWAYS = new IsAlwaysActiveCondition( true );
|
||||
public final static IsActiveCondition NEVER = new IsAlwaysActiveCondition( false );
|
||||
|
||||
/**
|
||||
* Creates a new instance of IsAlwayActiveCondition.
|
||||
*/
|
||||
private IsAlwaysActiveCondition(boolean isactive)
|
||||
{
|
||||
mIsActive = isactive;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tell wether a certain thing is active.
|
||||
*/
|
||||
public boolean isActive()
|
||||
{
|
||||
return mIsActive;
|
||||
}
|
||||
|
||||
}
|
||||
171
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/j3d/J3DInputDevice.java
vendored
Normal file
171
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/j3d/J3DInputDevice.java
vendored
Normal file
@@ -0,0 +1,171 @@
|
||||
//**********************************************************************************************
|
||||
// (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 22. Februar 2002, 13:21
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.j3d;
|
||||
|
||||
import javax.media.j3d.InputDevice;
|
||||
import javax.media.j3d.Sensor;
|
||||
import javax.media.j3d.SensorRead;
|
||||
import javax.vecmath.Vector3d;
|
||||
import javax.media.j3d.Transform3D;
|
||||
import de.hardcode.jxinput.JXInputManager;
|
||||
|
||||
|
||||
/**
|
||||
* Implementation of Java3D's InputDevice
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
public class J3DInputDevice
|
||||
implements InputDevice
|
||||
{
|
||||
private Vector3d mPosition = new Vector3d();
|
||||
private Transform3D mNewTransform = new Transform3D();
|
||||
|
||||
private Transform3D mRotTransX = new Transform3D();
|
||||
private Transform3D mRotTransY = new Transform3D();
|
||||
private Transform3D mRotTransZ = new Transform3D();
|
||||
|
||||
private Vector3d mInitPos = new Vector3d( 0.0, 0.0, 0.0 );
|
||||
|
||||
private Sensor mSensor = new Sensor( this );
|
||||
private SensorRead mSensorRead = new SensorRead();
|
||||
|
||||
private DeviceConfiguration mConfig;
|
||||
|
||||
/**
|
||||
* Creates a new instance of J3DInputDevice.
|
||||
*/
|
||||
public J3DInputDevice( DeviceConfiguration config )
|
||||
{
|
||||
mConfig = config;
|
||||
setNominalPositionAndOrientation();
|
||||
}
|
||||
|
||||
|
||||
public void close()
|
||||
{
|
||||
// Intentionally empty
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve processing mode.
|
||||
* For this device, it always is NON_BLOCKING.
|
||||
*/
|
||||
public int getProcessingMode()
|
||||
{
|
||||
return InputDevice.NON_BLOCKING;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Don't care for the index, I only support one sensor.
|
||||
* And I deliver that.
|
||||
*/
|
||||
public Sensor getSensor( int param )
|
||||
{
|
||||
return mSensor;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Tell the world about the only one sensor I support.
|
||||
*/
|
||||
public int getSensorCount()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Well - initialize!
|
||||
* Nothing to do here.
|
||||
*/
|
||||
public boolean initialize()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* The main update method.
|
||||
*/
|
||||
public void pollAndProcessInput()
|
||||
{
|
||||
JXInputManager.updateFeatures();
|
||||
|
||||
mSensorRead.setTime( JXInputManager.getLastUpdateTime() );
|
||||
|
||||
mRotTransX.rotX( mConfig.getRotational( DeviceConfiguration.AXIS_X ) );
|
||||
mRotTransY.rotY( mConfig.getRotational( DeviceConfiguration.AXIS_Y ) );
|
||||
mRotTransZ.rotZ( mConfig.getRotational( DeviceConfiguration.AXIS_Z ) );
|
||||
|
||||
mPosition.set(
|
||||
mConfig.getTranslational( DeviceConfiguration.AXIS_X ),
|
||||
mConfig.getTranslational( DeviceConfiguration.AXIS_Y ),
|
||||
mConfig.getTranslational( DeviceConfiguration.AXIS_Z )
|
||||
);
|
||||
|
||||
mNewTransform.set( mPosition );
|
||||
|
||||
mNewTransform.mul( mRotTransX );
|
||||
mNewTransform.mul( mRotTransY );
|
||||
mNewTransform.mul( mRotTransZ );
|
||||
|
||||
mSensorRead.set( mNewTransform );
|
||||
mSensor.setNextSensorRead( mSensorRead );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Not called by current j3d implementation.
|
||||
*/
|
||||
public void processStreamInput()
|
||||
{
|
||||
// Intentionally empty
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Reset state.
|
||||
*/
|
||||
public void setNominalPositionAndOrientation()
|
||||
{
|
||||
mSensorRead.setTime( JXInputManager.getLastUpdateTime() );
|
||||
|
||||
mRotTransX.rotX( 0.0 );
|
||||
mRotTransY.rotY( 0.0 );
|
||||
mRotTransZ.rotZ( 0.0 );
|
||||
|
||||
mPosition.set( mInitPos );
|
||||
|
||||
mNewTransform.set( mPosition );
|
||||
|
||||
mNewTransform.mul( mRotTransX );
|
||||
mNewTransform.mul( mRotTransY );
|
||||
mNewTransform.mul( mRotTransZ );
|
||||
|
||||
mSensorRead.set( mNewTransform );
|
||||
mSensor.setNextSensorRead( mSensorRead );
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the processing mode.
|
||||
* Only NON_BLOCKING is allowed!
|
||||
*/
|
||||
public void setProcessingMode(int param)
|
||||
{
|
||||
if ( param != InputDevice.NON_BLOCKING )
|
||||
throw new IllegalArgumentException("Processing mode must be NON_BLOCKING");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
11
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/j3d/package.html
vendored
Normal file
11
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/j3d/package.html
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE></TITLE>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
Connecting JXInput to Java3D by implementing the interface
|
||||
javax.media.j3d.InputDevice.
|
||||
</BODY>
|
||||
</HTML>
|
||||
205
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/j3d/test/HelloUniverse.java
vendored
Normal file
205
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/j3d/test/HelloUniverse.java
vendored
Normal file
@@ -0,0 +1,205 @@
|
||||
|
||||
/*
|
||||
* @(#)HelloUniverse.java 1.15 02/02/07 14:48:36
|
||||
*
|
||||
* Copyright (c) 1996-2002 Sun Microsystems, Inc. All Rights Reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistribution in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* Neither the name of Sun Microsystems, Inc. or the names of
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* This software is provided "AS IS," without a warranty of any
|
||||
* kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
|
||||
* WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
|
||||
* EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
|
||||
* SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
|
||||
* DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
|
||||
* OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
|
||||
* FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
||||
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
||||
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE,
|
||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
*
|
||||
* You acknowledge that Software is not designed,licensed or intended
|
||||
* for use in the design, construction, operation or maintenance of
|
||||
* any nuclear facility.
|
||||
*/
|
||||
|
||||
package de.hardcode.jxinput.j3d.test;
|
||||
|
||||
|
||||
import java.applet.Applet;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import com.sun.j3d.utils.applet.MainFrame;
|
||||
import com.sun.j3d.utils.geometry.ColorCube;
|
||||
import com.sun.j3d.utils.universe.*;
|
||||
import javax.media.j3d.*;
|
||||
import javax.vecmath.*;
|
||||
import de.hardcode.jxinput.j3d.DeviceConfiguration;
|
||||
import de.hardcode.jxinput.Axis;
|
||||
import de.hardcode.jxinput.JXInputManager;
|
||||
import de.hardcode.jxinput.j3d.IsActiveCondition;
|
||||
import de.hardcode.jxinput.j3d.J3DInputDevice;
|
||||
import de.hardcode.jxinput.j3d.IsActiveOnButtonCondition;
|
||||
|
||||
|
||||
public class HelloUniverse extends Applet
|
||||
{
|
||||
|
||||
private SimpleUniverse u = null;
|
||||
TransformGroup objTrans;
|
||||
|
||||
public BranchGroup createSceneGraph()
|
||||
{
|
||||
BranchGroup objRoot = new BranchGroup();
|
||||
objTrans = new TransformGroup();
|
||||
objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
|
||||
objRoot.addChild(objTrans);
|
||||
objTrans.addChild(new ColorCube(0.4));
|
||||
|
||||
// Transform3D yAxis = new Transform3D();
|
||||
// Alpha rotationAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE,
|
||||
// 0, 0,
|
||||
// 4000, 0, 0,
|
||||
// 0, 0, 0);
|
||||
// RotationInterpolator rotator = new RotationInterpolator(rotationAlpha, objTrans, yAxis,
|
||||
// 0.0f, (float) Math.PI*2.0f);
|
||||
// BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
|
||||
// rotator.setSchedulingBounds(bounds);
|
||||
// objTrans.addChild(rotator);
|
||||
return objRoot;
|
||||
}
|
||||
|
||||
|
||||
public HelloUniverse()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void init()
|
||||
{
|
||||
// These are the string arguments given to the VirtualInputDevice
|
||||
// constructor. These are settable parameters. Look in the
|
||||
// VirtualInputDevice constructor for a complete list.
|
||||
String[] args = new String[10];
|
||||
args[0] = "printvalues";
|
||||
args[1] = "true";
|
||||
args[2] = "yscreeninitloc";
|
||||
args[3] = "50";
|
||||
args[4] = null;
|
||||
|
||||
|
||||
// now create the HelloUniverse Canvas
|
||||
setLayout(new BorderLayout());
|
||||
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
|
||||
|
||||
Canvas3D c = new Canvas3D(config);
|
||||
add("Center", c);
|
||||
|
||||
// Create a simple scene and attach it to the virtual universe
|
||||
BranchGroup scene = createSceneGraph();
|
||||
u = new SimpleUniverse(c);
|
||||
|
||||
//
|
||||
// Use the inputdevice
|
||||
//
|
||||
InputDevice device = createInputDevice();
|
||||
|
||||
// Register the VirtualInputDevice with Java 3D
|
||||
u.getViewer().getPhysicalEnvironment().addInputDevice( device );
|
||||
|
||||
// TransformGroup viewTrans = u.getViewingPlatform().getViewPlatformTransform();
|
||||
|
||||
// Put the behavoir to teh object
|
||||
SensorBehavior s = new SensorBehavior( objTrans, device.getSensor(0) );
|
||||
s.setSchedulingBounds( new BoundingSphere( new Point3d(0.0,0.0,0.0), Float.MAX_VALUE ) );
|
||||
objTrans.addChild( s );
|
||||
|
||||
u.getViewingPlatform().setNominalViewingTransform();
|
||||
u.addBranchGraph(scene);
|
||||
}
|
||||
|
||||
public void destroy()
|
||||
{
|
||||
u.removeAllLocales();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Setup an input device.
|
||||
*/
|
||||
private InputDevice createInputDevice()
|
||||
{
|
||||
IsActiveCondition button1down = new IsActiveOnButtonCondition(JXInputManager.getJXInputDevice( 0 ).getButton( 0 ), true );
|
||||
IsActiveCondition button1up = new IsActiveOnButtonCondition(JXInputManager.getJXInputDevice( 0 ).getButton( 0 ), false );
|
||||
|
||||
Axis xaxis = JXInputManager.getJXInputDevice( 0 ).getAxis( Axis.ID_X );
|
||||
Axis yaxis = JXInputManager.getJXInputDevice( 0 ).getAxis( Axis.ID_Y );
|
||||
|
||||
DeviceConfiguration cnf = new DeviceConfiguration();
|
||||
|
||||
//
|
||||
// Setup the configuration to use joysticks x/y for rotation is not button is pressed
|
||||
// and for translation if button1 is pressed.
|
||||
//
|
||||
cnf.setRotational(
|
||||
DeviceConfiguration.AXIS_Y,
|
||||
xaxis,
|
||||
button1up,
|
||||
IsActiveCondition.NEVER,
|
||||
0.0, Math.PI
|
||||
);
|
||||
|
||||
cnf.setRotational(
|
||||
DeviceConfiguration.AXIS_X,
|
||||
yaxis,
|
||||
button1up,
|
||||
IsActiveCondition.NEVER,
|
||||
0.0, Math.PI
|
||||
);
|
||||
|
||||
cnf.setTranslational(
|
||||
DeviceConfiguration.AXIS_Z,
|
||||
yaxis,
|
||||
button1down,
|
||||
IsActiveCondition.NEVER,
|
||||
-5.0, 4.0
|
||||
);
|
||||
cnf.setTranslational(
|
||||
DeviceConfiguration.AXIS_X,
|
||||
xaxis,
|
||||
button1down,
|
||||
IsActiveCondition.NEVER,
|
||||
0.0, 4.0
|
||||
);
|
||||
|
||||
// We have the config, create the device...
|
||||
J3DInputDevice d = new J3DInputDevice( cnf );
|
||||
|
||||
// The InputDevice must be initialized before registering it
|
||||
// with the PhysicalEnvironment object.
|
||||
d.initialize();
|
||||
|
||||
return d;
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new MainFrame(new HelloUniverse(), 350, 350);
|
||||
}
|
||||
}
|
||||
70
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/j3d/test/SensorBehavior.java
vendored
Normal file
70
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/j3d/test/SensorBehavior.java
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
package de.hardcode.jxinput.j3d.test;
|
||||
|
||||
/*
|
||||
* @(#)SensorBehavior.java 1.8 02/02/07 14:48:34
|
||||
*
|
||||
* Copyright (c) 1996-2002 Sun Microsystems, Inc. All Rights Reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistribution in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* Neither the name of Sun Microsystems, Inc. or the names of
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* This software is provided "AS IS," without a warranty of any
|
||||
* kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
|
||||
* WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
|
||||
* EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
|
||||
* SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
|
||||
* DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
|
||||
* OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
|
||||
* FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
||||
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
||||
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE,
|
||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
*
|
||||
* You acknowledge that Software is not designed,licensed or intended
|
||||
* for use in the design, construction, operation or maintenance of
|
||||
* any nuclear facility.
|
||||
*/
|
||||
|
||||
import javax.media.j3d.*;
|
||||
import java.util.*;
|
||||
|
||||
public class SensorBehavior extends Behavior
|
||||
{
|
||||
private WakeupOnElapsedFrames conditions = new WakeupOnElapsedFrames(0);
|
||||
private TransformGroup transformGroup;
|
||||
private Sensor sensor;
|
||||
private Transform3D transform = new Transform3D();
|
||||
|
||||
public SensorBehavior( TransformGroup tg, Sensor sensor )
|
||||
{
|
||||
transformGroup = tg;
|
||||
this.sensor = sensor;
|
||||
}
|
||||
|
||||
public void initialize()
|
||||
{
|
||||
wakeupOn( conditions );
|
||||
}
|
||||
|
||||
public void processStimulus( Enumeration criteria )
|
||||
{
|
||||
sensor.getRead( transform );
|
||||
transformGroup.setTransform( transform );
|
||||
wakeupOn( conditions );
|
||||
}
|
||||
|
||||
}
|
||||
35
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/keyboard/InvalidKeyCodeException.java
vendored
Normal file
35
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/keyboard/InvalidKeyCodeException.java
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
//**********************************************************************************************
|
||||
// (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 16. April 2002, 23:31
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.keyboard;
|
||||
|
||||
/**
|
||||
* Exeception to be thrown if keycode is not in then range [0,255].
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
public class InvalidKeyCodeException
|
||||
extends IllegalArgumentException
|
||||
{
|
||||
|
||||
/**
|
||||
* Creates a new instance of InvalidKeyCodeException.
|
||||
*/
|
||||
public InvalidKeyCodeException()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new instance of InvalidKeyCodeException.
|
||||
*/
|
||||
public InvalidKeyCodeException( String s )
|
||||
{
|
||||
super( s );
|
||||
}
|
||||
}
|
||||
175
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/keyboard/JXKeyboardInputDevice.java
vendored
Normal file
175
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/keyboard/JXKeyboardInputDevice.java
vendored
Normal file
@@ -0,0 +1,175 @@
|
||||
//**********************************************************************************************
|
||||
// (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;
|
||||
}
|
||||
|
||||
}
|
||||
94
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/keyboard/KeyButton.java
vendored
Normal file
94
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/keyboard/KeyButton.java
vendored
Normal file
@@ -0,0 +1,94 @@
|
||||
//**********************************************************************************************
|
||||
// (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:51
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.keyboard;
|
||||
|
||||
import de.hardcode.jxinput.Button;
|
||||
import java.awt.event.KeyEvent;
|
||||
|
||||
|
||||
/**
|
||||
* Associates a keycode with a Button and handles the current state of that button.
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
class KeyButton
|
||||
implements Button
|
||||
{
|
||||
private final int mKeyCode;
|
||||
private boolean mIsPressed;
|
||||
private boolean mHasChanged;
|
||||
|
||||
/**
|
||||
* Creates a new instance of KeyButton.
|
||||
*/
|
||||
public KeyButton( int keycode )
|
||||
{
|
||||
mKeyCode = keycode;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the keycode assigned with this button.
|
||||
*/
|
||||
public final int getKeyCode()
|
||||
{
|
||||
return mKeyCode;
|
||||
}
|
||||
|
||||
final void setIsPressed( boolean flag )
|
||||
{
|
||||
mIsPressed = flag;
|
||||
}
|
||||
|
||||
//*********************************************************************************************
|
||||
//
|
||||
// Implement Button
|
||||
//
|
||||
//*********************************************************************************************
|
||||
|
||||
|
||||
/**
|
||||
* Features may have a name provided e.g. by the driver.
|
||||
*/
|
||||
public String getName()
|
||||
{
|
||||
return KeyEvent.getKeyText( mKeyCode );
|
||||
}
|
||||
|
||||
/**
|
||||
* Tells the state of the button at last update.
|
||||
*/
|
||||
public boolean getState()
|
||||
{
|
||||
return mIsPressed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the type of the button.
|
||||
* Pushbutton will deliver <code>true==getState()</code> as long as they are pressed down.
|
||||
* Togglebuttons will change their state once they are pressed and keep that state
|
||||
* until they are pressed again.
|
||||
* @return [ PUSHBUTTON | TOGGLEBUTTON ]
|
||||
*/
|
||||
public int getType()
|
||||
{
|
||||
return Button.PUSHBUTTON;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Denote wether this feature has changed beyond it's resolution since it got last
|
||||
* updated.
|
||||
*/
|
||||
public boolean hasChanged()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
141
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/keyboard/KeyboardDriver.java
vendored
Normal file
141
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/keyboard/KeyboardDriver.java
vendored
Normal file
@@ -0,0 +1,141 @@
|
||||
//**********************************************************************************************
|
||||
// (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.
|
||||
}
|
||||
|
||||
}
|
||||
10
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/keyboard/package.html
vendored
Normal file
10
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/keyboard/package.html
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>de.hardcode.jxinput.keyboard</TITLE>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
Connects Swing keyboard handling to the JXInput infrastructure.
|
||||
</BODY>
|
||||
</HTML>
|
||||
39
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/test/AxisListener.java
vendored
Normal file
39
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/test/AxisListener.java
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
//**********************************************************************************************
|
||||
// (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 20. Februar 2002, 22:19
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.test;
|
||||
|
||||
import de.hardcode.jxinput.event.JXInputEventManager;
|
||||
import de.hardcode.jxinput.event.JXInputAxisEventListener;
|
||||
import de.hardcode.jxinput.event.JXInputAxisEvent;
|
||||
import de.hardcode.jxinput.Axis;
|
||||
|
||||
/**
|
||||
* Example listener to an axis.
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
public class AxisListener
|
||||
implements JXInputAxisEventListener
|
||||
{
|
||||
|
||||
/**
|
||||
* Creates a new instance of AxisListener.
|
||||
*/
|
||||
public AxisListener( Axis axis )
|
||||
{
|
||||
JXInputEventManager.addListener( this, axis, 0.1 );
|
||||
}
|
||||
|
||||
|
||||
public void changed( JXInputAxisEvent ev )
|
||||
{
|
||||
System.out.println( "Axis " + ev.getAxis().getName() + " changed : value=" + ev.getAxis().getValue() + ", event causing delta=" + ev.getDelta() );
|
||||
}
|
||||
|
||||
}
|
||||
38
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/test/ButtonListener.java
vendored
Normal file
38
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/test/ButtonListener.java
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
//**********************************************************************************************
|
||||
// (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 20. Februar 2002, 22:19
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.test;
|
||||
|
||||
import de.hardcode.jxinput.event.JXInputEventManager;
|
||||
import de.hardcode.jxinput.event.JXInputButtonEventListener;
|
||||
import de.hardcode.jxinput.event.JXInputButtonEvent;
|
||||
import de.hardcode.jxinput.Button;
|
||||
|
||||
/**
|
||||
* Sample button listener.
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
public class ButtonListener implements JXInputButtonEventListener
|
||||
{
|
||||
|
||||
/**
|
||||
* Creates a new instance of AxisListener.
|
||||
*/
|
||||
public ButtonListener( Button button )
|
||||
{
|
||||
JXInputEventManager.addListener( this, button );
|
||||
}
|
||||
|
||||
|
||||
public void changed( JXInputButtonEvent ev )
|
||||
{
|
||||
System.out.println( "Button " + ev.getButton().getName() + " changed : state=" + ev.getButton().getState() );
|
||||
}
|
||||
|
||||
}
|
||||
37
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/test/DirectionalListener.java
vendored
Normal file
37
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/test/DirectionalListener.java
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
//**********************************************************************************************
|
||||
// (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 20. Februar 2002, 22:19
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.test;
|
||||
|
||||
import de.hardcode.jxinput.event.JXInputEventManager;
|
||||
import de.hardcode.jxinput.event.JXInputDirectionalEventListener;
|
||||
import de.hardcode.jxinput.event.JXInputDirectionalEvent;
|
||||
import de.hardcode.jxinput.Directional;
|
||||
|
||||
/**
|
||||
* Sample directional listener.
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
public class DirectionalListener implements JXInputDirectionalEventListener
|
||||
{
|
||||
/**
|
||||
* Creates a new instance of AxisListener.
|
||||
*/
|
||||
public DirectionalListener( Directional directional )
|
||||
{
|
||||
JXInputEventManager.addListener( this, directional, 1.0 );
|
||||
}
|
||||
|
||||
|
||||
public void changed( JXInputDirectionalEvent ev )
|
||||
{
|
||||
System.out.println( "Directional " + ev.getDirectional().getName() + " changed : direction=" + ev.getDirectional().getDirection() + ", value=" + ev.getDirectional().getValue() + ", event causing delta=" + ev.getDirectionDelta() );
|
||||
}
|
||||
|
||||
}
|
||||
97
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/test/JXInputDevicePanel.form
vendored
Normal file
97
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/test/JXInputDevicePanel.form
vendored
Normal file
@@ -0,0 +1,97 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<Form version="1.0" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||
<Events>
|
||||
<EventHandler event="componentShown" listener="java.awt.event.ComponentListener" parameters="java.awt.event.ComponentEvent" handler="OnShow"/>
|
||||
</Events>
|
||||
<AuxValues>
|
||||
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,1,-112"/>
|
||||
</AuxValues>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout">
|
||||
<Property name="horizontalGap" type="int" value="2"/>
|
||||
<Property name="verticalGap" type="int" value="2"/>
|
||||
</Layout>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JPanel" name="mAxesPanelContainer">
|
||||
<Properties>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||
<Border info="org.netbeans.modules.form.compat2.border.BevelBorderInfo">
|
||||
<BevelBorder/>
|
||||
</Border>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="Center"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JPanel" name="mAxesPanel">
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="North"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
|
||||
<Property name="columns" type="int" value="1"/>
|
||||
<Property name="rows" type="int" value="1"/>
|
||||
<Property name="verticalGap" type="int" value="20"/>
|
||||
</Layout>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
<Container class="javax.swing.JPanel" name="mDirectionalPanel">
|
||||
<Properties>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||
<Border info="org.netbeans.modules.form.compat2.border.BevelBorderInfo">
|
||||
<BevelBorder/>
|
||||
</Border>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="South"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
|
||||
<Property name="columns" type="int" value="1"/>
|
||||
<Property name="rows" type="int" value="1"/>
|
||||
</Layout>
|
||||
</Container>
|
||||
<Container class="javax.swing.JScrollPane" name="mButtonScrollPane">
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="East"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JPanel" name="mButtonsPanel">
|
||||
<Properties>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||
<Border info="org.netbeans.modules.form.compat2.border.BevelBorderInfo">
|
||||
<BevelBorder/>
|
||||
</Border>
|
||||
</Property>
|
||||
</Properties>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
|
||||
<Property name="columns" type="int" value="1"/>
|
||||
<Property name="rows" type="int" value="1"/>
|
||||
</Layout>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Form>
|
||||
296
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/test/JXInputDevicePanel.java
vendored
Normal file
296
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/test/JXInputDevicePanel.java
vendored
Normal file
@@ -0,0 +1,296 @@
|
||||
/*
|
||||
* JXInputDevicePanel.java
|
||||
*
|
||||
* Created on 23. Januar 2002, 22:19
|
||||
*/
|
||||
package de.hardcode.jxinput.test;
|
||||
|
||||
import de.hardcode.jxinput.JXInputManager;
|
||||
import de.hardcode.jxinput.JXInputDevice;
|
||||
import de.hardcode.jxinput.Axis;
|
||||
import de.hardcode.jxinput.Directional;
|
||||
import de.hardcode.jxinput.Button;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.GridLayout;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Font;
|
||||
import java.util.Dictionary;
|
||||
import java.util.Enumeration;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
public class JXInputDevicePanel extends javax.swing.JPanel
|
||||
{
|
||||
private static final Font AXIS_SLIDER_FONT = new Font( "Verdana", Font.PLAIN, 9 );
|
||||
|
||||
private final JXInputDevice mDev;
|
||||
private final ArrayList mAxisSliders = new ArrayList();
|
||||
private final ArrayList mButtonCheckboxes = new ArrayList();
|
||||
private final ArrayList mDirectionalLabels = new ArrayList();
|
||||
|
||||
|
||||
/** Creates new form JXInputDevicePanel */
|
||||
public JXInputDevicePanel( JXInputDevice dev )
|
||||
{
|
||||
mDev = dev;
|
||||
initComponents();
|
||||
initFromDevice();
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper class connecting a JSlider with an Axis.
|
||||
*/
|
||||
private class AxisSlider extends JSlider
|
||||
{
|
||||
Axis mAxis;
|
||||
AxisSlider( Axis axis )
|
||||
{
|
||||
super( ( Axis.SLIDER == axis.getType() ? 0 : -100 ), 100 );
|
||||
this.setMajorTickSpacing( Axis.SLIDER == axis.getType() ? 25 : 50 );
|
||||
this.setMinorTickSpacing( 5 );
|
||||
this.setPaintTicks( true );
|
||||
this.setPaintLabels( true );
|
||||
this.setEnabled( false );
|
||||
|
||||
Dictionary labeldict = this.getLabelTable();
|
||||
Enumeration labels = labeldict.elements();
|
||||
while ( labels.hasMoreElements() )
|
||||
{
|
||||
JLabel label = (JLabel)labels.nextElement();
|
||||
label.setFont( AXIS_SLIDER_FONT );
|
||||
label.setSize( 32, 12 );
|
||||
label.setHorizontalAlignment( SwingConstants.LEFT );
|
||||
}
|
||||
|
||||
mAxis = axis;
|
||||
}
|
||||
|
||||
void update()
|
||||
{
|
||||
int ax = (int)(mAxis.getValue() * 100.0);
|
||||
|
||||
//
|
||||
// Only if value really changes
|
||||
//
|
||||
if ( ax != this.getValue() )
|
||||
{
|
||||
this.setValue( ax );
|
||||
this.setToolTipText( mAxis.getName() + ": " + Double.toString( mAxis.getValue() ) );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
private class ButtonCheckbox extends JCheckBox
|
||||
{
|
||||
Button mButton;
|
||||
ButtonCheckbox( Button button )
|
||||
{
|
||||
super( button.getName() );
|
||||
this.setEnabled( false );
|
||||
mButton = button;
|
||||
}
|
||||
|
||||
void update()
|
||||
{
|
||||
boolean state = mButton.getState();
|
||||
|
||||
//
|
||||
// Only if value really changes
|
||||
//
|
||||
if ( state != this.isSelected() )
|
||||
{
|
||||
this.setSelected( state );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private class DirectionalLabel extends JLabel
|
||||
{
|
||||
Directional mDirectional;
|
||||
int mCurrent = 0;
|
||||
|
||||
DirectionalLabel( Directional directional )
|
||||
{
|
||||
super( directional.getName() );
|
||||
mDirectional = directional;
|
||||
}
|
||||
|
||||
void update()
|
||||
{
|
||||
int dir = mDirectional.getDirection();
|
||||
|
||||
//
|
||||
// Only if value really changes
|
||||
//
|
||||
if ( dir != mCurrent )
|
||||
{
|
||||
this.setText( mDirectional.getName() + ": " + ( mDirectional.isCentered() ? "-" : Integer.toString( dir ) ) );
|
||||
mCurrent = dir;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Setup the dialogs content from the JXInputDevice.
|
||||
*/
|
||||
void initFromDevice()
|
||||
{
|
||||
if ( null != mDev )
|
||||
{
|
||||
((GridLayout)mAxesPanel.getLayout()).setRows( mDev.getNumberOfAxes() );
|
||||
|
||||
for ( int i = 0; i < mDev.getMaxNumberOfAxes(); ++i )
|
||||
{
|
||||
if ( null != mDev.getAxis( i ) )
|
||||
{
|
||||
AxisSlider slider = new AxisSlider( mDev.getAxis( i ) );
|
||||
|
||||
JLabel name = new JLabel( mDev.getAxis( i ).getName() );
|
||||
name.setVerticalAlignment( SwingConstants.TOP );
|
||||
name.setHorizontalAlignment( SwingConstants.CENTER );
|
||||
name.setPreferredSize( new java.awt.Dimension( 90, 0 ) );
|
||||
|
||||
JPanel p = new JPanel();
|
||||
p.setLayout( new BorderLayout() );
|
||||
|
||||
p.add( name, BorderLayout.WEST );
|
||||
p.add( slider, BorderLayout.CENTER );
|
||||
|
||||
mAxesPanel.add( p );
|
||||
|
||||
// Add to list of all AxisSlider controls
|
||||
mAxisSliders.add( slider );
|
||||
|
||||
// Add an event listener:
|
||||
new AxisListener( mDev.getAxis( i ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
((GridLayout)mButtonsPanel.getLayout()).setRows( mDev.getNumberOfButtons() );
|
||||
for ( int i = 0; i < mDev.getMaxNumberOfButtons(); ++i )
|
||||
{
|
||||
if ( null != mDev.getButton( i ) )
|
||||
{
|
||||
ButtonCheckbox chk = new ButtonCheckbox( mDev.getButton( i ) );
|
||||
mButtonCheckboxes.add( chk );
|
||||
mButtonsPanel.add( chk );
|
||||
|
||||
// Add an event listener:
|
||||
new ButtonListener( mDev.getButton( i ) );
|
||||
}
|
||||
}
|
||||
|
||||
((GridLayout)mDirectionalPanel.getLayout()).setRows( mDev.getNumberOfDirectionals() / 2 );
|
||||
for ( int i = 0; i < mDev.getMaxNumberOfDirectionals(); ++i )
|
||||
{
|
||||
if ( null != mDev.getDirectional( i ) )
|
||||
{
|
||||
DirectionalLabel lbl = new DirectionalLabel( mDev.getDirectional( i ) );
|
||||
mDirectionalLabels.add( lbl );
|
||||
mDirectionalPanel.add( lbl );
|
||||
|
||||
// Add an event listener:
|
||||
new DirectionalListener( mDev.getDirectional( i ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void update()
|
||||
{
|
||||
Iterator it = mAxisSliders.iterator();
|
||||
while ( it.hasNext() )
|
||||
{
|
||||
((AxisSlider)it.next()).update();
|
||||
}
|
||||
|
||||
it = mButtonCheckboxes.iterator();
|
||||
while ( it.hasNext() )
|
||||
{
|
||||
((ButtonCheckbox)it.next()).update();
|
||||
}
|
||||
|
||||
it = mDirectionalLabels.iterator();
|
||||
while ( it.hasNext() )
|
||||
{
|
||||
((DirectionalLabel)it.next()).update();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/** This method is called from within the constructor to
|
||||
* initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is
|
||||
* always regenerated by the Form Editor.
|
||||
*/
|
||||
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
|
||||
private void initComponents()
|
||||
{
|
||||
mAxesPanelContainer = new javax.swing.JPanel();
|
||||
mAxesPanel = new javax.swing.JPanel();
|
||||
mDirectionalPanel = new javax.swing.JPanel();
|
||||
mButtonScrollPane = new javax.swing.JScrollPane();
|
||||
mButtonsPanel = new javax.swing.JPanel();
|
||||
|
||||
setLayout(new java.awt.BorderLayout(2, 2));
|
||||
|
||||
addComponentListener(new java.awt.event.ComponentAdapter()
|
||||
{
|
||||
public void componentShown(java.awt.event.ComponentEvent evt)
|
||||
{
|
||||
OnShow(evt);
|
||||
}
|
||||
});
|
||||
|
||||
mAxesPanelContainer.setLayout(new java.awt.BorderLayout());
|
||||
|
||||
mAxesPanelContainer.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
|
||||
mAxesPanel.setLayout(new java.awt.GridLayout(1, 1, 0, 20));
|
||||
|
||||
mAxesPanelContainer.add(mAxesPanel, java.awt.BorderLayout.NORTH);
|
||||
|
||||
add(mAxesPanelContainer, java.awt.BorderLayout.CENTER);
|
||||
|
||||
mDirectionalPanel.setLayout(new java.awt.GridLayout(1, 1));
|
||||
|
||||
mDirectionalPanel.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
|
||||
add(mDirectionalPanel, java.awt.BorderLayout.SOUTH);
|
||||
|
||||
mButtonsPanel.setLayout(new java.awt.GridLayout(1, 1));
|
||||
|
||||
mButtonsPanel.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
|
||||
mButtonScrollPane.setViewportView(mButtonsPanel);
|
||||
|
||||
add(mButtonScrollPane, java.awt.BorderLayout.EAST);
|
||||
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
|
||||
private void OnShow(java.awt.event.ComponentEvent evt)//GEN-FIRST:event_OnShow
|
||||
{//GEN-HEADEREND:event_OnShow
|
||||
// Commented: the focus is held by a parent component
|
||||
// System.out.println("OnShow");
|
||||
// this.requestFocus();
|
||||
}//GEN-LAST:event_OnShow
|
||||
|
||||
|
||||
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private javax.swing.JPanel mAxesPanel;
|
||||
private javax.swing.JPanel mAxesPanelContainer;
|
||||
private javax.swing.JScrollPane mButtonScrollPane;
|
||||
private javax.swing.JPanel mButtonsPanel;
|
||||
private javax.swing.JPanel mDirectionalPanel;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
|
||||
}
|
||||
79
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/test/JXInputTestDialog.form
vendored
Normal file
79
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/test/JXInputTestDialog.form
vendored
Normal file
@@ -0,0 +1,79 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<Form version="1.0" type="org.netbeans.modules.form.forminfo.JDialogFormInfo">
|
||||
<Properties>
|
||||
<Property name="title" type="java.lang.String" value="JXInput (C) 2001-2006 HARDCODE Dev."/>
|
||||
</Properties>
|
||||
<SyntheticProperties>
|
||||
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
|
||||
</SyntheticProperties>
|
||||
<Events>
|
||||
<EventHandler event="windowClosing" listener="java.awt.event.WindowListener" parameters="java.awt.event.WindowEvent" handler="closeDialog"/>
|
||||
</Events>
|
||||
<AuxValues>
|
||||
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,1,-112"/>
|
||||
</AuxValues>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JPanel" name="mMainPanel">
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="Center"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout">
|
||||
<Property name="horizontalGap" type="int" value="10"/>
|
||||
</Layout>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JLabel" name="mLabelNoDevice">
|
||||
<Properties>
|
||||
<Property name="horizontalAlignment" type="int" value="0"/>
|
||||
<Property name="text" type="java.lang.String" value="No JXInputDevice available!"/>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||
<Border info="org.netbeans.modules.form.compat2.border.SoftBevelBorderInfo">
|
||||
<BevelBorder/>
|
||||
</Border>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="North"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Container class="javax.swing.JTabbedPane" name="mDevicesTabbedPane">
|
||||
<Events>
|
||||
<EventHandler event="focusGained" listener="java.awt.event.FocusListener" parameters="java.awt.event.FocusEvent" handler="mDevicesTabbedPaneFocusGained"/>
|
||||
</Events>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="Center"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout"/>
|
||||
</Container>
|
||||
<Component class="javax.swing.JButton" name="mButtonReset">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" value="Reset "/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="mButtonResetActionPerformed"/>
|
||||
</Events>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="South"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Form>
|
||||
286
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/test/JXInputTestDialog.java
vendored
Normal file
286
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/test/JXInputTestDialog.java
vendored
Normal file
@@ -0,0 +1,286 @@
|
||||
//**********************************************************************************************
|
||||
// Dipl. Phys. Joerg Plewe, HARDCODE Development
|
||||
// Created on 27. Dezember 2001, 01:15
|
||||
//**********************************************************************************************
|
||||
|
||||
package de.hardcode.jxinput.test;
|
||||
|
||||
import de.hardcode.jxinput.*;
|
||||
import de.hardcode.jxinput.event.*;
|
||||
import de.hardcode.jxinput.keyboard.JXKeyboardInputDevice;
|
||||
import de.hardcode.jxinput.virtual.JXVirtualInputDevice;
|
||||
import de.hardcode.jxinput.virtual.VirtualAxis;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.KeyEvent;
|
||||
|
||||
|
||||
/**
|
||||
* Test dialog showing some features of JXInput.
|
||||
* @author Herkules
|
||||
*/
|
||||
public class JXInputTestDialog extends javax.swing.JDialog
|
||||
implements ActionListener
|
||||
{
|
||||
|
||||
private JXKeyboardInputDevice mKeyboardDevice = null;
|
||||
private JXVirtualInputDevice mVirtualDevice = null;
|
||||
|
||||
Button mButtonUp;
|
||||
Button mButtonDown;
|
||||
Button mButtonLeft;
|
||||
Button mButtonRight;
|
||||
Button mButtonFire;
|
||||
Button mButtonSpace;
|
||||
|
||||
/** Creates new form JXInputTestDialog */
|
||||
public JXInputTestDialog(java.awt.Frame parent, boolean modal)
|
||||
{
|
||||
super(parent, modal);
|
||||
initComponents();
|
||||
configureKeyboardInputDevice();
|
||||
configureVirtualInputDevice();
|
||||
initDevicePanels();
|
||||
pack();
|
||||
|
||||
// Request the focus so that the keyboarddevice can work
|
||||
mMainPanel.requestFocus();
|
||||
|
||||
new Timer( 50, this ).start();
|
||||
|
||||
// Uncomment this line as an alternative to the Timer above.
|
||||
// Don't use both!!
|
||||
//JXInputEventManager.setTriggerIntervall( 50 );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Implement ActionListener#actionPerformed().
|
||||
* This is called by the Timer.
|
||||
*/
|
||||
public void actionPerformed( ActionEvent e )
|
||||
{
|
||||
JXInputManager.updateFeatures();
|
||||
SwingUtilities.invokeLater(
|
||||
new Runnable()
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
for ( int i = 0; i < mDevicesTabbedPane.getComponentCount(); ++i )
|
||||
{
|
||||
((JXInputDevicePanel)mDevicesTabbedPane.getComponent( i )).update();
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Configure a test JXKeyboardInputdevice.
|
||||
*/
|
||||
void configureKeyboardInputDevice()
|
||||
{
|
||||
mKeyboardDevice = JXInputManager.createKeyboardDevice();
|
||||
|
||||
mKeyboardDevice.createButton( KeyEvent.VK_ESCAPE );
|
||||
|
||||
mKeyboardDevice.createButton( KeyEvent.VK_F1 );
|
||||
mKeyboardDevice.createButton( KeyEvent.VK_F2 );
|
||||
mKeyboardDevice.createButton( KeyEvent.VK_F3 );
|
||||
mKeyboardDevice.createButton( KeyEvent.VK_F4 );
|
||||
|
||||
mKeyboardDevice.createButton( KeyEvent.VK_LEFT );
|
||||
mKeyboardDevice.createButton( KeyEvent.VK_RIGHT );
|
||||
mKeyboardDevice.createButton( KeyEvent.VK_UP );
|
||||
mKeyboardDevice.createButton( KeyEvent.VK_DOWN );
|
||||
|
||||
mKeyboardDevice.createButton( KeyEvent.VK_PAGE_UP );
|
||||
mKeyboardDevice.createButton( KeyEvent.VK_PAGE_DOWN );
|
||||
|
||||
mButtonSpace = mKeyboardDevice.createButton( KeyEvent.VK_SPACE );
|
||||
mButtonLeft = mKeyboardDevice.createButton( KeyEvent.VK_A );
|
||||
mButtonRight = mKeyboardDevice.createButton( KeyEvent.VK_D );
|
||||
mButtonDown = mKeyboardDevice.createButton( KeyEvent.VK_S );
|
||||
mButtonUp = mKeyboardDevice.createButton( KeyEvent.VK_W );
|
||||
|
||||
// Configure it to make it listen to the main panel.
|
||||
// I try to keep the kbd focus on it.
|
||||
mKeyboardDevice.listenTo( mMainPanel );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Configure a test JXVirtualInputdevice.
|
||||
*/
|
||||
void configureVirtualInputDevice()
|
||||
{
|
||||
mVirtualDevice = JXInputManager.createVirtualDevice();
|
||||
|
||||
Button firebutton;
|
||||
//
|
||||
// Remember 'fire' button of first device for use
|
||||
// in the virtual device.
|
||||
// For we ran configureKeyboardInputDevice() before,
|
||||
// getJXInputDevice( 0 ) should not return null
|
||||
//
|
||||
firebutton = JXInputManager.getJXInputDevice( 0 ).getButton( 0 );
|
||||
|
||||
VirtualAxis x = mVirtualDevice.createAxis( Axis.ID_X );
|
||||
x.setButtons( mButtonRight, mButtonLeft );
|
||||
x.setName( "x: A-D" );
|
||||
|
||||
VirtualAxis y = mVirtualDevice.createAxis( Axis.ID_Y );
|
||||
y.setButtons( mButtonUp, mButtonDown );
|
||||
y.setSpringSpeed( 0.0 );
|
||||
y.setName( "y: S|W" );
|
||||
|
||||
VirtualAxis slider = mVirtualDevice.createAxis( Axis.ID_SLIDER0 );
|
||||
slider.setIncreaseButton( mButtonSpace );
|
||||
slider.setTimeFor0To1( 2000 );
|
||||
slider.setName( "<space>" );
|
||||
slider.setType( Axis.SLIDER );
|
||||
|
||||
if ( null != firebutton )
|
||||
{
|
||||
slider = mVirtualDevice.createAxis( Axis.ID_SLIDER1 );
|
||||
slider.setIncreaseButton( firebutton );
|
||||
slider.setTimeFor0To1( 2000 );
|
||||
slider.setName( "JoyButton 0" );
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Initialize one panel for each device available.
|
||||
*/
|
||||
void initDevicePanels()
|
||||
{
|
||||
int cnt = JXInputManager.getNumberOfDevices();
|
||||
|
||||
mLabelNoDevice.setVisible( cnt == 0 );
|
||||
mDevicesTabbedPane.setVisible( cnt != 0 );
|
||||
|
||||
for ( int i = 0; i < cnt; ++i )
|
||||
{
|
||||
JXInputDevice dev = JXInputManager.getJXInputDevice( i );
|
||||
if ( null != dev )
|
||||
{
|
||||
//
|
||||
// Setup an own panel for each device.
|
||||
//
|
||||
JPanel panel = new JXInputDevicePanel( dev );
|
||||
mDevicesTabbedPane.addTab( dev.getName(), panel );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** This method is called from within the constructor to
|
||||
* initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is
|
||||
* always regenerated by the Form Editor.
|
||||
*/
|
||||
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
|
||||
private void initComponents()
|
||||
{
|
||||
mMainPanel = new javax.swing.JPanel();
|
||||
mLabelNoDevice = new javax.swing.JLabel();
|
||||
mDevicesTabbedPane = new javax.swing.JTabbedPane();
|
||||
mButtonReset = new javax.swing.JButton();
|
||||
|
||||
setTitle("JXInput (C) 2001-2006 HARDCODE Dev.");
|
||||
addWindowListener(new java.awt.event.WindowAdapter()
|
||||
{
|
||||
public void windowClosing(java.awt.event.WindowEvent evt)
|
||||
{
|
||||
closeDialog(evt);
|
||||
}
|
||||
});
|
||||
|
||||
mMainPanel.setLayout(new java.awt.BorderLayout(10, 0));
|
||||
|
||||
mLabelNoDevice.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
|
||||
mLabelNoDevice.setText("No JXInputDevice available!");
|
||||
mLabelNoDevice.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
|
||||
mMainPanel.add(mLabelNoDevice, java.awt.BorderLayout.NORTH);
|
||||
|
||||
mDevicesTabbedPane.addFocusListener(new java.awt.event.FocusAdapter()
|
||||
{
|
||||
public void focusGained(java.awt.event.FocusEvent evt)
|
||||
{
|
||||
mDevicesTabbedPaneFocusGained(evt);
|
||||
}
|
||||
});
|
||||
|
||||
mMainPanel.add(mDevicesTabbedPane, java.awt.BorderLayout.CENTER);
|
||||
|
||||
mButtonReset.setText("Reset ");
|
||||
mButtonReset.addActionListener(new java.awt.event.ActionListener()
|
||||
{
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt)
|
||||
{
|
||||
mButtonResetActionPerformed(evt);
|
||||
}
|
||||
});
|
||||
|
||||
mMainPanel.add(mButtonReset, java.awt.BorderLayout.SOUTH);
|
||||
|
||||
getContentPane().add(mMainPanel, java.awt.BorderLayout.CENTER);
|
||||
|
||||
pack();
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
|
||||
private void mButtonResetActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_mButtonResetActionPerformed
|
||||
{//GEN-HEADEREND:event_mButtonResetActionPerformed
|
||||
|
||||
while ( this.mDevicesTabbedPane.getTabCount() > 0 )
|
||||
this.mDevicesTabbedPane.removeTabAt( 0 );
|
||||
|
||||
JXInputManager.reset();
|
||||
configureKeyboardInputDevice();
|
||||
configureVirtualInputDevice();
|
||||
initDevicePanels();
|
||||
pack();
|
||||
|
||||
// Request the focus so that the keyboarddevice can work
|
||||
mMainPanel.requestFocus();
|
||||
|
||||
}//GEN-LAST:event_mButtonResetActionPerformed
|
||||
|
||||
private void mDevicesTabbedPaneFocusGained(java.awt.event.FocusEvent evt)//GEN-FIRST:event_mDevicesTabbedPaneFocusGained
|
||||
{//GEN-HEADEREND:event_mDevicesTabbedPaneFocusGained
|
||||
// Switch focus back to main panel!
|
||||
this.mMainPanel.requestFocus();
|
||||
}//GEN-LAST:event_mDevicesTabbedPaneFocusGained
|
||||
|
||||
/** Closes the dialog */
|
||||
private void closeDialog(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_closeDialog
|
||||
setVisible(false);
|
||||
dispose();
|
||||
System.exit( 0 );
|
||||
}//GEN-LAST:event_closeDialog
|
||||
|
||||
/**
|
||||
* Allow the dialog to run standalone.
|
||||
* @param args the command line arguments
|
||||
*/
|
||||
public static void main(String args[])
|
||||
{
|
||||
new JXInputTestDialog(new javax.swing.JFrame(), true).setVisible(true);
|
||||
}
|
||||
|
||||
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private javax.swing.JButton mButtonReset;
|
||||
private javax.swing.JTabbedPane mDevicesTabbedPane;
|
||||
private javax.swing.JLabel mLabelNoDevice;
|
||||
private javax.swing.JPanel mMainPanel;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
|
||||
}
|
||||
98
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/util/LatestChangedValueAxis.java
vendored
Normal file
98
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/util/LatestChangedValueAxis.java
vendored
Normal file
@@ -0,0 +1,98 @@
|
||||
//**********************************************************************************************
|
||||
// (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 17. April 2002, 23:24
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.util;
|
||||
|
||||
import de.hardcode.jxinput.Axis;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
public class LatestChangedValueAxis implements Axis
|
||||
{
|
||||
private final Axis mAxis1;
|
||||
private final Axis mAxis2;
|
||||
private Axis mAxisInUse;
|
||||
|
||||
private double mSaved1;
|
||||
private double mSaved2;
|
||||
|
||||
/**
|
||||
* Creates a new instance of MeanValueAxis.
|
||||
*/
|
||||
public LatestChangedValueAxis(Axis a1, Axis a2)
|
||||
{
|
||||
mAxis1 = a1;
|
||||
mAxis2 = a2;
|
||||
mAxisInUse = a1;
|
||||
|
||||
mSaved1 = a1.getValue();
|
||||
mSaved2 = a2.getValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Features may have a name provided e.g. by the driver.
|
||||
*/
|
||||
public String getName()
|
||||
{
|
||||
return mAxis1.getName();
|
||||
}
|
||||
|
||||
/** Inform about the resolution of the axis.
|
||||
*
|
||||
* @return resolution, e.g. 2^-16
|
||||
*/
|
||||
public double getResolution()
|
||||
{
|
||||
return mAxis1.getResolution();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the type of the axis.
|
||||
*
|
||||
* @return [ TRANSLATION | ROTATION | SLIDER ]
|
||||
*/
|
||||
public int getType()
|
||||
{
|
||||
return mAxis1.getType();
|
||||
}
|
||||
|
||||
/** Returns the current value of the axis.
|
||||
* The range of the result depends on the axis type.
|
||||
*s
|
||||
* @return value [-1.0,1.0] or [0.0,1.0]
|
||||
*/
|
||||
public double getValue()
|
||||
{
|
||||
double v1 = mAxis1.getValue();
|
||||
double v2 = mAxis2.getValue();
|
||||
|
||||
if ( Math.abs( v2 - mSaved2 ) > 0.2 )
|
||||
{
|
||||
mAxisInUse = mAxis2;
|
||||
mSaved2 = v2;
|
||||
}
|
||||
if ( Math.abs( v1 - mSaved1 ) > 0.2 )
|
||||
{
|
||||
mAxisInUse = mAxis1;
|
||||
mSaved1 = v1;
|
||||
}
|
||||
|
||||
return mAxisInUse.getValue();
|
||||
}
|
||||
|
||||
/** Denote wether this feature has changed beyond it's resolution since it got last
|
||||
* updated.
|
||||
*/
|
||||
public boolean hasChanged()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
52
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/util/OrButton.java
vendored
Normal file
52
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/util/OrButton.java
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
//**********************************************************************************************
|
||||
// (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 23. Dezember 2002, 19:21
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.util;
|
||||
|
||||
import de.hardcode.jxinput.Button;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
public class OrButton implements Button
|
||||
{
|
||||
private final Button mButton1;
|
||||
private final Button mButton2;
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new instance of OrButton.
|
||||
*/
|
||||
public OrButton( Button b1, Button b2 )
|
||||
{
|
||||
mButton1 = b1;
|
||||
mButton2 = b2;
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return mButton1.getName();
|
||||
}
|
||||
|
||||
public boolean getState()
|
||||
{
|
||||
return mButton1.getState() || mButton2.getState();
|
||||
}
|
||||
|
||||
public int getType()
|
||||
{
|
||||
return mButton1.getType();
|
||||
}
|
||||
|
||||
public boolean hasChanged()
|
||||
{
|
||||
return mButton1.hasChanged() || mButton2.hasChanged();
|
||||
}
|
||||
|
||||
}
|
||||
140
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/virtual/JXVirtualInputDevice.java
vendored
Normal file
140
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/virtual/JXVirtualInputDevice.java
vendored
Normal file
@@ -0,0 +1,140 @@
|
||||
//**********************************************************************************************
|
||||
// (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.virtual;
|
||||
|
||||
|
||||
import de.hardcode.jxinput.*;
|
||||
|
||||
|
||||
/**
|
||||
* Virtual input device.
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
public class JXVirtualInputDevice implements JXInputDevice
|
||||
{
|
||||
private static final String DEVICENAME = "Virtual Device";
|
||||
|
||||
/** The driver doing all the real work. */
|
||||
private final VirtualDriver mDriver = new VirtualDriver();
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new instance of JXKeyboardInputDevice.
|
||||
*/
|
||||
public JXVirtualInputDevice()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* The virtual input device needs to be updated regularly.
|
||||
*/
|
||||
public final void update( long deltaT )
|
||||
{
|
||||
//
|
||||
// Delegate the update call to the driver.
|
||||
//
|
||||
mDriver.update( deltaT );
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a virtual axis object with a certain ID, e.g. Axis.ID_X.
|
||||
*/
|
||||
public VirtualAxis createAxis( int id )
|
||||
{
|
||||
VirtualAxis a;
|
||||
a = new VirtualAxis( id );
|
||||
mDriver.registerVirtualAxis( id, a );
|
||||
return a;
|
||||
}
|
||||
|
||||
|
||||
public void removeAxis( VirtualAxis a )
|
||||
{
|
||||
mDriver.unregisterVirtualAxis( a );
|
||||
}
|
||||
|
||||
|
||||
|
||||
//*********************************************************************************************
|
||||
//
|
||||
// Implement JXInputDevice
|
||||
//
|
||||
//*********************************************************************************************
|
||||
|
||||
public Axis getAxis(int idx)
|
||||
{
|
||||
return mDriver.getAxis( idx );
|
||||
}
|
||||
|
||||
|
||||
public Button getButton(int idx)
|
||||
{
|
||||
// No virtual buttons.
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public Directional getDirectional(int idx)
|
||||
{
|
||||
// No virtual directionals.
|
||||
return null;
|
||||
}
|
||||
|
||||
/** Maximum number of axes as an upper bound for index values. */
|
||||
public int getMaxNumberOfAxes()
|
||||
{
|
||||
return Axis.NUMBER_OF_ID;
|
||||
}
|
||||
|
||||
/** Maximum number of buttons as an upper bound for index values. */
|
||||
public int getMaxNumberOfButtons()
|
||||
{
|
||||
// No virtual buttons.
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Maximum number of directional features as an upper bound for index values. */
|
||||
public int getMaxNumberOfDirectionals()
|
||||
{
|
||||
// No virtual directionals.
|
||||
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 mDriver.getNumberOfAxes();
|
||||
}
|
||||
|
||||
/** Actual number of available buttons. */
|
||||
public int getNumberOfButtons()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Actual number of available directional features. */
|
||||
public int getNumberOfDirectionals()
|
||||
{
|
||||
// No directionals on keyboard.
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
207
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/virtual/VirtualAxis.java
vendored
Normal file
207
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/virtual/VirtualAxis.java
vendored
Normal file
@@ -0,0 +1,207 @@
|
||||
//**********************************************************************************************
|
||||
// (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 11. April 2002, 23:40
|
||||
//**********************************************************************************************
|
||||
package de.hardcode.jxinput.virtual;
|
||||
|
||||
import de.hardcode.jxinput.Axis;
|
||||
import de.hardcode.jxinput.Button;
|
||||
import java.security.InvalidParameterException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author J<>rg Plewe
|
||||
*/
|
||||
public class VirtualAxis
|
||||
implements Axis
|
||||
{
|
||||
|
||||
private int mType = Axis.TRANSLATION;
|
||||
private final int mID;
|
||||
private String mName = "VirtualAxis";
|
||||
private double mCurrentValue = 0;
|
||||
|
||||
private Button mButtonIncrease = null;
|
||||
private Button mButtonDecrease = null;
|
||||
private double mSpeed = 1.0 / 500.0;
|
||||
private double mSpringSpeed = 1.0 / 500.0;
|
||||
|
||||
/**
|
||||
* Creates a new instance of VirtualAxis.
|
||||
*/
|
||||
public VirtualAxis( int id )
|
||||
{
|
||||
mID = id;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the type of this axis to be either <code>Axis.ROTATION</code>,
|
||||
* <code>Axis.TRANSLATION</code> or <code>Axis.SLIDER</code>.
|
||||
*/
|
||||
public void setType( int type )
|
||||
{
|
||||
if ( Axis.ROTATION != type
|
||||
&& Axis.TRANSLATION != type
|
||||
&& Axis.SLIDER != type
|
||||
)
|
||||
throw new InvalidParameterException( "Invalid type for axis!" );
|
||||
|
||||
mType = type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update features under my control.
|
||||
*/
|
||||
final void update( long deltaT )
|
||||
{
|
||||
double change = mSpeed * deltaT;
|
||||
double springchange = mSpringSpeed * deltaT;
|
||||
boolean doincrease = ( null != mButtonIncrease && mButtonIncrease.getState() );
|
||||
boolean dodecrease = ( null != mButtonDecrease && mButtonDecrease.getState() );
|
||||
boolean iscontrolled = doincrease || dodecrease;
|
||||
|
||||
double controlledchange = 0.0;
|
||||
if ( doincrease )
|
||||
controlledchange += change;
|
||||
if ( dodecrease )
|
||||
controlledchange -= change;
|
||||
|
||||
mCurrentValue += controlledchange;
|
||||
|
||||
if ( mCurrentValue > 0.0 && ! doincrease )
|
||||
{
|
||||
springchange = Math.min( mCurrentValue, springchange );
|
||||
mCurrentValue -= springchange;
|
||||
}
|
||||
if ( mCurrentValue < 0.0 && ! dodecrease )
|
||||
{
|
||||
springchange = Math.min( -mCurrentValue, springchange );
|
||||
mCurrentValue += springchange;
|
||||
}
|
||||
|
||||
//
|
||||
// Hold value within range
|
||||
//
|
||||
if ( mCurrentValue > 1.0 )
|
||||
mCurrentValue = 1.0;
|
||||
double lowerlimit = Axis.SLIDER == mType ? 0.0 : -1.0;
|
||||
if ( mCurrentValue < lowerlimit )
|
||||
mCurrentValue = lowerlimit;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the button to increase the axis for a single button axis.
|
||||
*/
|
||||
public final void setIncreaseButton( Button b )
|
||||
{
|
||||
if ( null == b )
|
||||
throw new InvalidParameterException( "Button may not be null!" );
|
||||
|
||||
mButtonIncrease = b;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the buttons to increase and descrease the axis.
|
||||
*/
|
||||
public final void setButtons( Button increase, Button decrease )
|
||||
{
|
||||
if ( null == increase || null == decrease )
|
||||
throw new InvalidParameterException( "Buttons may not be null!" );
|
||||
|
||||
mButtonIncrease = increase;
|
||||
mButtonDecrease = decrease;
|
||||
}
|
||||
|
||||
|
||||
public final void setSpeed( double speed )
|
||||
{
|
||||
mSpeed = speed;
|
||||
}
|
||||
|
||||
public final void setSpringSpeed( double springspeed )
|
||||
{
|
||||
mSpringSpeed = springspeed;
|
||||
}
|
||||
|
||||
|
||||
public final void setTimeFor0To1( int ms )
|
||||
{
|
||||
if ( 0 >= ms )
|
||||
mSpeed = 0.0;
|
||||
else
|
||||
mSpeed = 1.0/ ms;
|
||||
}
|
||||
public final void setTimeFor1To0( int ms )
|
||||
{
|
||||
if ( 0 >= ms )
|
||||
mSpringSpeed = 0.0;
|
||||
else
|
||||
mSpringSpeed = 1.0/ ms;
|
||||
}
|
||||
|
||||
|
||||
public final void setName( String name )
|
||||
{
|
||||
mName = name;
|
||||
}
|
||||
|
||||
//*********************************************************************************************
|
||||
//
|
||||
// Implement Axis
|
||||
//
|
||||
//*********************************************************************************************
|
||||
|
||||
/**
|
||||
* Features may have a name provided e.g. by the driver.
|
||||
*/
|
||||
public String getName()
|
||||
{
|
||||
return mName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Inform about the resolution of the axis.
|
||||
*
|
||||
* @return resolution, e.g. 2^-16
|
||||
*/
|
||||
public double getResolution()
|
||||
{
|
||||
return 1.0/65536.0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve the type of the axis.
|
||||
* @return [ TRANSLATION | ROTATION | SLIDER ]
|
||||
*/
|
||||
public int getType()
|
||||
{
|
||||
return mType;
|
||||
}
|
||||
|
||||
/** Returns the current value of the axis.
|
||||
* The range of the result depends on the axis type.
|
||||
*
|
||||
* @return value [-1.0,1.0] or [0.0,1.0]
|
||||
*/
|
||||
public double getValue()
|
||||
{
|
||||
return mCurrentValue;
|
||||
}
|
||||
|
||||
/** Denote wether this feature has changed beyond it's resolution since it got last
|
||||
* updated.
|
||||
*/
|
||||
public boolean hasChanged()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
95
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/virtual/VirtualDriver.java
vendored
Normal file
95
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/virtual/VirtualDriver.java
vendored
Normal file
@@ -0,0 +1,95 @@
|
||||
//**********************************************************************************************
|
||||
// (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.virtual;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import de.hardcode.jxinput.Axis;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* This is the main worker class for JXVirtualInputDevice.
|
||||
*
|
||||
* @author Herkules
|
||||
*/
|
||||
class VirtualDriver
|
||||
{
|
||||
|
||||
private final VirtualAxis[] mVAxes = new VirtualAxis[ Axis.NUMBER_OF_ID ];
|
||||
|
||||
/**
|
||||
* Creates a new instance of KeyboardDriver.
|
||||
*/
|
||||
VirtualDriver()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Update features under my control.
|
||||
*/
|
||||
final void update( long deltaT )
|
||||
{
|
||||
//
|
||||
// Delegate the update call to the axes in use.
|
||||
//
|
||||
for ( int i = 0; i < mVAxes.length; i++ )
|
||||
{
|
||||
if ( null != mVAxes[ i ] )
|
||||
mVAxes[ i ].update( deltaT );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* How many axes are registered?
|
||||
*/
|
||||
final int getNumberOfAxes()
|
||||
{
|
||||
int ctr = 0;
|
||||
for ( int i = 0; i < mVAxes.length; i++ )
|
||||
{
|
||||
if ( null != mVAxes[ i ] )
|
||||
ctr++;
|
||||
}
|
||||
return ctr;
|
||||
}
|
||||
|
||||
Axis getAxis(int idx)
|
||||
{
|
||||
return mVAxes[ idx ];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Place a new axis under my observation.
|
||||
*/
|
||||
final void registerVirtualAxis( int id, VirtualAxis a )
|
||||
{
|
||||
mVAxes[ id ] = a;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Remove an axis from my control.
|
||||
*/
|
||||
final void unregisterVirtualAxis( VirtualAxis a )
|
||||
{
|
||||
for ( int i = 0; i < mVAxes.length; ++i )
|
||||
{
|
||||
if ( mVAxes[ i ] == a )
|
||||
{
|
||||
mVAxes[ i ] = null;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
11
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/virtual/package.html
vendored
Normal file
11
vendor/JXInput/0.3.4/java/de/hardcode/jxinput/virtual/package.html
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>de.hardcode.jxinput.virtual</TITLE>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
Allows to define virtual axes that are not derived from any device
|
||||
but from other JXInput feature objects.
|
||||
</BODY>
|
||||
</HTML>
|
||||
BIN
vendor/JXInput/0.3.4/jxinput.dll
vendored
Normal file
BIN
vendor/JXInput/0.3.4/jxinput.dll
vendored
Normal file
Binary file not shown.
BIN
vendor/JXInput/0.3.4/jxinput.jar
vendored
Normal file
BIN
vendor/JXInput/0.3.4/jxinput.jar
vendored
Normal file
Binary file not shown.
34
vendor/JavaWinampApi/1.1/cpp/Makefile.win
vendored
Normal file
34
vendor/JavaWinampApi/1.1/cpp/Makefile.win
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
# Project: wpcom
|
||||
# Makefile created by Dev-C++ 4.9.9.2
|
||||
|
||||
CPP = g++.exe
|
||||
CC = gcc.exe
|
||||
WINDRES = windres.exe
|
||||
RES =
|
||||
OBJ = WinampController.o $(RES)
|
||||
LINKOBJ = WinampController.o $(RES)
|
||||
LIBS = -L"E:/java/Dev-Cpp/lib" --no-export-all-symbols --add-stdcall-alias
|
||||
INCS = -I"E:/java/Dev-Cpp/include" -I"E:/Program Files/Java/jdk1.6.0_11/include" -I"E:/Program Files/Java/jdk1.6.0_11/include/win32"
|
||||
CXXINCS = -I"E:/java/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"E:/java/Dev-Cpp/include/c++/3.4.2/backward" -I"E:/java/Dev-Cpp/include/c++/3.4.2/mingw32" -I"E:/java/Dev-Cpp/include/c++/3.4.2" -I"E:/java/Dev-Cpp/include" -I"E:/Program Files/Java/jdk1.6.0_11/include" -I"E:/Program Files/Java/jdk1.6.0_11/include/win32"
|
||||
BIN = ../../wpcom.dll
|
||||
CXXFLAGS = $(CXXINCS) -DBUILDING_DLL=1
|
||||
CFLAGS = $(INCS) -DBUILDING_DLL=1
|
||||
RM = rm -f
|
||||
|
||||
.PHONY: all all-before all-after clean clean-custom
|
||||
|
||||
all: all-before ../../wpcom.dll all-after
|
||||
|
||||
|
||||
clean: clean-custom
|
||||
${RM} $(OBJ) $(BIN)
|
||||
|
||||
DLLWRAP=dllwrap.exe
|
||||
DEFFILE=../../libwpcom.def
|
||||
STATICLIB=../../libwpcom.a
|
||||
|
||||
$(BIN): $(LINKOBJ)
|
||||
$(DLLWRAP) --output-def $(DEFFILE) --implib $(STATICLIB) $(LINKOBJ) $(LIBS) -o $(BIN)
|
||||
|
||||
WinampController.o: WinampController.c
|
||||
$(CC) -c WinampController.c -o WinampController.o $(CFLAGS)
|
||||
62
vendor/JavaWinampApi/1.1/cpp/WINAMPCMD.H
vendored
Normal file
62
vendor/JavaWinampApi/1.1/cpp/WINAMPCMD.H
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
#define WINAMP_FILE_QUIT 40001
|
||||
#define WINAMP_OPTIONS_PREFS 40012
|
||||
#define WINAMP_OPTIONS_AOT 40019
|
||||
#define WINAMP_FILE_REPEAT 40022
|
||||
#define WINAMP_FILE_SHUFFLE 40023
|
||||
#define WINAMP_HIGH_PRIORITY 40025
|
||||
#define WINAMP_FILE_PLAY 40029
|
||||
#define WINAMP_OPTIONS_EQ 40036
|
||||
#define WINAMP_OPTIONS_ELAPSED 40037
|
||||
#define WINAMP_OPTIONS_REMAINING 40038
|
||||
#define WINAMP_OPTIONS_PLEDIT 40040
|
||||
#define WINAMP_HELP_ABOUT 40041
|
||||
#define WINAMP_MAINMENU 40043
|
||||
#define WINAMP_BUTTON1 40044
|
||||
#define WINAMP_BUTTON2 40045
|
||||
#define WINAMP_BUTTON3 40046
|
||||
#define WINAMP_BUTTON4 40047
|
||||
#define WINAMP_BUTTON5 40048
|
||||
#define WINAMP_VOLUMEUP 40058
|
||||
#define WINAMP_VOLUMEDOWN 40059
|
||||
#define WINAMP_FFWD5S 40060
|
||||
#define WINAMP_REW5S 40061
|
||||
#define WINAMP_NEXT_WINDOW 40063
|
||||
#define WINAMP_OPTIONS_WINDOWSHADE 40064
|
||||
#define WINAMP_BUTTON1_SHIFT 40144
|
||||
#define WINAMP_BUTTON2_SHIFT 40145
|
||||
#define WINAMP_BUTTON3_SHIFT 40146
|
||||
#define WINAMP_BUTTON4_SHIFT 40147
|
||||
#define WINAMP_BUTTON5_SHIFT 40148
|
||||
#define WINAMP_BUTTON1_CTRL 40154
|
||||
#define WINAMP_BUTTON2_CTRL 40155
|
||||
#define WINAMP_BUTTON3_CTRL 40156
|
||||
#define WINAMP_BUTTON4_CTRL 40157
|
||||
#define WINAMP_BUTTON5_CTRL 40158
|
||||
#define WINAMP_OPTIONS_DSIZE 40165
|
||||
#define IDC_SORT_FILENAME 40166
|
||||
#define IDC_SORT_FILETITLE 40167
|
||||
#define IDC_SORT_ENTIREFILENAME 40168
|
||||
#define IDC_SELECTALL 40169
|
||||
#define IDC_SELECTNONE 40170
|
||||
#define IDC_SELECTINV 40171
|
||||
#define IDM_EQ_LOADPRE 40172
|
||||
#define IDM_EQ_LOADMP3 40173
|
||||
#define IDM_EQ_LOADDEFAULT 40174
|
||||
#define IDM_EQ_SAVEPRE 40175
|
||||
#define IDM_EQ_SAVEMP3 40176
|
||||
#define IDM_EQ_SAVEDEFAULT 40177
|
||||
#define IDM_EQ_DELPRE 40178
|
||||
#define IDM_EQ_DELMP3 40180
|
||||
#define IDC_PLAYLIST_PLAY 40184
|
||||
#define WINAMP_FILE_LOC 40185
|
||||
#define WINAMP_OPTIONS_EASYMOVE 40186
|
||||
#define WINAMP_FILE_DIR 40187
|
||||
#define WINAMP_EDIT_ID3 40188
|
||||
#define WINAMP_TOGGLE_AUTOSCROLL 40189
|
||||
#define WINAMP_VISSETUP 40190
|
||||
#define WINAMP_PLGSETUP 40191
|
||||
#define WINAMP_VISPLUGIN 40192
|
||||
#define WINAMP_JUMP 40193
|
||||
#define WINAMP_JUMPFILE 40194
|
||||
#define WINAMP_JUMP10FWD 40195
|
||||
#define WINAMP_JUMP10BACK 40197
|
||||
587
vendor/JavaWinampApi/1.1/cpp/WinampController.c
vendored
Normal file
587
vendor/JavaWinampApi/1.1/cpp/WinampController.c
vendored
Normal file
@@ -0,0 +1,587 @@
|
||||
/* meu .h */
|
||||
#include "WinampController.h"
|
||||
|
||||
/* mingw */
|
||||
#include <windows.h>
|
||||
#include <w32api.h>
|
||||
#include <winuser.h>
|
||||
|
||||
/* winamp sdk */
|
||||
#include "wa_ipc.h"
|
||||
#include "WINAMPCMD.H"
|
||||
|
||||
const int WA_CLOSE = 40001 ;
|
||||
const int WA_PLAY = WINAMP_BUTTON2;
|
||||
const int WA_STOP = WINAMP_BUTTON4;
|
||||
const int WA_PAUSE = WINAMP_BUTTON3;
|
||||
const int WA_PREVTRACK = WINAMP_BUTTON1;
|
||||
const int WA_NEXTTRACK = WINAMP_BUTTON5;
|
||||
const int WA_FWD5SECS = WINAMP_FFWD5S;
|
||||
const int WA_REW5SECS = WINAMP_REW5S;
|
||||
|
||||
const int WA_PLAYLISTLEN = IPC_GETLISTLENGTH;
|
||||
const int WA_SETVOLUME = IPC_SETVOLUME;
|
||||
const int WA_SETPLAYLISTPOS = IPC_SETPLAYLISTPOS;
|
||||
const int WA_WRITEPLAYLIST = IPC_WRITEPLAYLIST;
|
||||
const int WA_ENQUEUEFILE = IPC_ENQUEUEFILE;
|
||||
|
||||
const int WA_VOLUMEUP = WINAMP_VOLUMEUP;
|
||||
const int WA_VOLUMEDOWN = WINAMP_VOLUMEDOWN;
|
||||
|
||||
const int WA_CLEARPLAYLIST = IPC_DELETE;
|
||||
const int WA_NOTHING = 0;
|
||||
const int WA_TRACK_LENGTH = 1;
|
||||
|
||||
const int WA_RESTART = IPC_RESTARTWINAMP;
|
||||
const int WA_REFRESHPLCACHE = IPC_REFRESHPLCACHE;
|
||||
const int WA_GETSHUFFLESTATUS = IPC_GET_SHUFFLE;
|
||||
const int WA_GETREPEATSTATUS = IPC_GET_REPEAT;
|
||||
const int WA_SETSHUFFLESTATUS = IPC_SET_SHUFFLE;
|
||||
const int WA_SETREPEATSTATUS = IPC_SET_REPEAT;
|
||||
|
||||
const int WA_GETSTATUS = IPC_ISPLAYING;
|
||||
|
||||
const int WA_GETLISTPOS = IPC_GETLISTPOS;
|
||||
const int WA_GETTITLE = IPC_GETPLAYLISTTITLE;
|
||||
|
||||
const int WA_VERSION = IPC_GETVERSION;
|
||||
const int WA_FILENAMEINLIST = IPC_GETPLAYLISTFILE;
|
||||
const int WA_GETFILEINFO = IPC_GET_EXTENDED_FILE_INFO;
|
||||
|
||||
HWND hwnd_winamp = NULL;
|
||||
INT position = 0;
|
||||
STARTUPINFO si;
|
||||
PROCESS_INFORMATION pi;
|
||||
char messageReturn[255];
|
||||
wchar_t* wMessageReturn;
|
||||
|
||||
LPDWORD temp;
|
||||
|
||||
void initWinampHandle() {
|
||||
hwnd_winamp = NULL;
|
||||
if (hwnd_winamp == NULL) {
|
||||
hwnd_winamp = FindWindow("Winamp v1.x", NULL);
|
||||
}
|
||||
if (hwnd_winamp == NULL) {
|
||||
hwnd_winamp = FindWindow("Winamp v2.x", NULL);
|
||||
}
|
||||
if (hwnd_winamp == NULL) {
|
||||
hwnd_winamp = FindWindow("Winamp v3.x", NULL);
|
||||
}
|
||||
}
|
||||
|
||||
jboolean runWinamp(unsigned char* pathWinamp) {
|
||||
|
||||
/* STARTUPINFO si;
|
||||
PROCESS_INFORMATION pi;*/
|
||||
|
||||
ZeroMemory( &si, sizeof(si) );
|
||||
si.cb = sizeof(si);
|
||||
ZeroMemory( &pi, sizeof(pi) );
|
||||
|
||||
|
||||
// Start the child process.
|
||||
if(!CreateProcess(pathWinamp,
|
||||
NULL,
|
||||
0,
|
||||
0,
|
||||
FALSE,
|
||||
CREATE_NEW_CONSOLE,
|
||||
0,
|
||||
0,
|
||||
&si,
|
||||
&pi))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
DWORD dwResult = WaitForInputIdle(pi.hProcess,INFINITE);
|
||||
if (dwResult != 0) return FALSE;
|
||||
|
||||
CloseHandle(pi.hProcess);
|
||||
CloseHandle(pi.hThread);
|
||||
|
||||
return TRUE;
|
||||
|
||||
|
||||
}
|
||||
|
||||
int getListPos() {
|
||||
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
|
||||
return SendMessage(hwnd_winamp,WM_USER,WA_NOTHING,WA_GETLISTPOS);
|
||||
|
||||
}
|
||||
return -1;
|
||||
|
||||
}
|
||||
|
||||
void getPluginMessage(int param, int sendMessage)
|
||||
{
|
||||
|
||||
LPCVOID message = (LPCVOID)SendMessageW(hwnd_winamp, WM_USER, param, sendMessage);
|
||||
ZeroMemory( &pi, sizeof(pi));
|
||||
GetWindowThreadProcessId(hwnd_winamp, &pi.dwThreadId);
|
||||
pi.hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pi.dwThreadId);
|
||||
ReadProcessMemory(pi.hProcess, message, messageReturn,2056,temp);
|
||||
free(temp);
|
||||
CloseHandle(pi.hProcess);
|
||||
CloseHandle(pi.hThread);
|
||||
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_run
|
||||
(JNIEnv *env, jobject obj) {
|
||||
|
||||
initWinampHandle();
|
||||
|
||||
if ( hwnd_winamp == NULL ) {
|
||||
|
||||
unsigned char path[MAX_PATH]="";
|
||||
DWORD size = MAX_PATH;
|
||||
|
||||
HKEY key;
|
||||
DWORD tipo;
|
||||
|
||||
if (!RegOpenKey(HKEY_LOCAL_MACHINE,"Software\\Clients\\Media\\Winamp\\shell\\open\\command",&key)==ERROR_SUCCESS)
|
||||
{
|
||||
|
||||
printf("0");
|
||||
return FALSE;
|
||||
|
||||
}
|
||||
|
||||
if (!(RegQueryValueEx(key,"",NULL,&tipo,path,&size))==ERROR_SUCCESS)
|
||||
{
|
||||
|
||||
RegCloseKey(key);
|
||||
return FALSE;
|
||||
|
||||
}
|
||||
|
||||
if (!runWinamp(path))
|
||||
{
|
||||
|
||||
RegCloseKey(key);
|
||||
return FALSE;
|
||||
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
}
|
||||
|
||||
int version = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETVERSION);
|
||||
return TRUE;
|
||||
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_exit
|
||||
(JNIEnv *env, jobject obj) {
|
||||
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
SendMessageA(hwnd_winamp, WM_COMMAND, WA_CLOSE, WA_NOTHING);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
||||
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_play
|
||||
(JNIEnv *env, jobject obj) {
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
|
||||
SendMessageA(hwnd_winamp, WM_COMMAND, WA_PLAY, WA_NOTHING);
|
||||
return TRUE;
|
||||
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_stop
|
||||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
SendMessageA(hwnd_winamp, WM_COMMAND, WA_STOP, WA_NOTHING);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_resume
|
||||
(JNIEnv *env, jobject obj) {
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
SendMessageA(hwnd_winamp, WM_COMMAND, WA_PAUSE, WA_NOTHING);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_pause
|
||||
(JNIEnv *env, jobject obj) {
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
SendMessageA(hwnd_winamp, WM_COMMAND, WA_PAUSE, WA_NOTHING);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_previousTrack
|
||||
(JNIEnv *env, jobject obj) {
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
SendMessageA(hwnd_winamp, WM_COMMAND, WA_PREVTRACK, WA_NOTHING);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_nextTrack
|
||||
(JNIEnv *env, jobject obj) {
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
SendMessageA(hwnd_winamp, WM_COMMAND, WA_NEXTTRACK, WA_NOTHING);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_fwd5Secs
|
||||
(JNIEnv *env, jobject obj) {
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
SendMessageA(hwnd_winamp, WM_COMMAND, WA_FWD5SECS, WA_NOTHING);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_rew5Secs
|
||||
(JNIEnv *env, jobject obj) {
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
SendMessageA(hwnd_winamp, WM_COMMAND, WA_REW5SECS, WA_NOTHING);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_increaseVolume
|
||||
(JNIEnv *env, jobject obj) {
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
SendMessageA(hwnd_winamp, WM_COMMAND, WA_VOLUMEUP, WA_NOTHING);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_decreaseVolume
|
||||
(JNIEnv *env, jobject obj) {
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
SendMessageA(hwnd_winamp, WM_COMMAND, WA_VOLUMEDOWN, WA_NOTHING);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_increaseVolumePercent
|
||||
(JNIEnv *env, jobject obj, jint percent) {
|
||||
initWinampHandle();
|
||||
int i = 0;
|
||||
if (hwnd_winamp != NULL) {
|
||||
for(i=0;i<percent;i++) {
|
||||
SendMessageA(hwnd_winamp, WM_COMMAND, WA_VOLUMEUP, WA_NOTHING);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_decreaseVolumePercent
|
||||
(JNIEnv *env, jobject obj, jint percent) {
|
||||
initWinampHandle();
|
||||
int i = 0;
|
||||
if (hwnd_winamp != NULL) {
|
||||
for(i=0;i<percent;i++) {
|
||||
SendMessageA(hwnd_winamp, WM_COMMAND, WA_VOLUMEDOWN, WA_NOTHING);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_setVolume
|
||||
(JNIEnv *env, jobject obj, jint pos) {
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
SendMessageA(hwnd_winamp, WM_USER, pos, WA_SETVOLUME);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_com_qotsa_jni_controller_JNIWinamp_getVolume
|
||||
(JNIEnv *env, jobject obj, jint pos) {
|
||||
jint curVolume = -1;
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
curVolume = (jint)SendMessageA(hwnd_winamp, WM_USER, -666, WA_SETVOLUME);
|
||||
}
|
||||
|
||||
return curVolume;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_restart
|
||||
(JNIEnv *env, jobject obj) {
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
SendMessageA(hwnd_winamp, WM_USER, WA_NOTHING, WA_RESTART);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_setPlaylistPosition
|
||||
(JNIEnv *env, jobject obj, jint pos) {
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
SendMessageA(hwnd_winamp, WM_USER, pos, WA_SETPLAYLISTPOS);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_clearPlayList
|
||||
(JNIEnv *env, jobject obj) {
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
SendMessageA(hwnd_winamp, WM_USER, WA_NOTHING, WA_CLEARPLAYLIST);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_refreshPlayListCache
|
||||
(JNIEnv *env, jobject obj) {
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
SendMessageA(hwnd_winamp, WM_USER, WA_NOTHING, WA_REFRESHPLCACHE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_com_qotsa_jni_controller_JNIWinamp_getPlayListLength
|
||||
(JNIEnv *env, jobject obj) {
|
||||
jint length = -1;
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
length = (jint)SendMessageA(hwnd_winamp, WM_USER, WA_NOTHING, WA_PLAYLISTLEN);
|
||||
}
|
||||
|
||||
return length;
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_com_qotsa_jni_controller_JNIWinamp_writePlayListToFile
|
||||
(JNIEnv *env, jobject obj) {
|
||||
jint length = -1;
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
length = SendMessageA(hwnd_winamp, WM_USER, WA_NOTHING, WA_WRITEPLAYLIST);
|
||||
}
|
||||
return length;
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_com_qotsa_jni_controller_JNIWinamp_isShuffleStatusOn
|
||||
(JNIEnv *env, jobject obj) {
|
||||
jint status = 0;
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
status = (jint)SendMessageA(hwnd_winamp, WM_USER, WA_NOTHING, WA_GETSHUFFLESTATUS);
|
||||
} else
|
||||
return -1;
|
||||
|
||||
return status>0?1:0;
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_com_qotsa_jni_controller_JNIWinamp_isRepeatStatusOn
|
||||
(JNIEnv *env, jobject obj) {
|
||||
jint status = 0;
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
status = (jint)SendMessageA(hwnd_winamp, WM_USER, WA_NOTHING, WA_GETREPEATSTATUS);
|
||||
} else
|
||||
return -1;
|
||||
|
||||
return status>0?1:0;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_setRepeatStatusOn
|
||||
(JNIEnv *env, jobject obj, jboolean status) {
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
SendMessageA(hwnd_winamp, WM_USER, status, WA_SETREPEATSTATUS);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_setShuffleStatusOn
|
||||
(JNIEnv *env, jobject obj, jboolean status) {
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
SendMessageA(hwnd_winamp, WM_USER, status, WA_SETSHUFFLESTATUS);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_appendToPlayList
|
||||
(JNIEnv *env, jobject obj, jstring mp3filename) {
|
||||
initWinampHandle();
|
||||
jboolean iscopy;
|
||||
if (hwnd_winamp != NULL) {
|
||||
wMessageReturn = (wchar_t*)(*env)->GetStringChars(env, mp3filename, &iscopy);
|
||||
int length = wcslen(wMessageReturn);
|
||||
COPYDATASTRUCT cds;
|
||||
cds.dwData = IPC_PLAYFILEW;
|
||||
cds.lpData = (void*)wMessageReturn;
|
||||
cds.cbData = length * 2 + 2 ; // it sums white space
|
||||
|
||||
SendMessageW(hwnd_winamp, WM_COPYDATA, WA_NOTHING, (LPARAM)&cds);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_com_qotsa_jni_controller_JNIWinamp_getStatus
|
||||
(JNIEnv *env, jobject obj) {
|
||||
jint status = -1;
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
status = SendMessageA(hwnd_winamp, WM_USER, WA_NOTHING, WA_GETSTATUS);
|
||||
}
|
||||
|
||||
return status;
|
||||
|
||||
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_com_qotsa_jni_controller_JNIWinamp_getListPos
|
||||
(JNIEnv *env, jobject obj) {
|
||||
|
||||
return getListPos();
|
||||
|
||||
}
|
||||
|
||||
JNIEXPORT jstring JNICALL Java_com_qotsa_jni_controller_JNIWinamp_getTitle
|
||||
(JNIEnv *env, jobject obj) {
|
||||
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
|
||||
char title[500] = "";
|
||||
GetWindowText(hwnd_winamp,title,500);
|
||||
return (*env)->NewStringUTF(env,title);
|
||||
|
||||
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_com_qotsa_jni_controller_JNIWinamp_getTime
|
||||
(JNIEnv *env, jobject obj, jint mode) {
|
||||
|
||||
initWinampHandle();
|
||||
if (hwnd_winamp != NULL) {
|
||||
|
||||
return SendMessage(hwnd_winamp,WM_USER,mode,IPC_GETOUTPUTTIME);
|
||||
|
||||
}
|
||||
|
||||
return -2;
|
||||
|
||||
}
|
||||
|
||||
JNIEXPORT jstring JNICALL Java_com_qotsa_jni_controller_JNIWinamp_getFileNameInList
|
||||
(JNIEnv *env, jobject obj, jint index)
|
||||
{
|
||||
|
||||
initWinampHandle();
|
||||
|
||||
if (hwnd_winamp != NULL) {
|
||||
|
||||
getPluginMessage(index, WA_FILENAMEINLIST);
|
||||
char* filePath = messageReturn;
|
||||
jstring strReturn = (*env)->NewStringUTF(env,filePath);
|
||||
return strReturn;
|
||||
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
||||
}
|
||||
|
||||
JNIEXPORT jstring JNICALL Java_com_qotsa_jni_controller_JNIWinamp_getFileNamePlaying
|
||||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
|
||||
initWinampHandle();
|
||||
|
||||
if (hwnd_winamp != NULL) {
|
||||
|
||||
getPluginMessage(WA_NOTHING, IPC_GET_PLAYING_FILENAME);
|
||||
wchar_t* fileName = (wchar_t*)messageReturn;
|
||||
int length = wcslen(fileName);
|
||||
jstring strReturn = (*env)->NewString(env,fileName,length);
|
||||
return strReturn;
|
||||
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
||||
}
|
||||
285
vendor/JavaWinampApi/1.1/cpp/WinampController.h
vendored
Normal file
285
vendor/JavaWinampApi/1.1/cpp/WinampController.h
vendored
Normal file
@@ -0,0 +1,285 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class WinampController */
|
||||
|
||||
|
||||
#ifndef _Included_WinampController
|
||||
#define _Included_WinampController
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void initWinampHandle();
|
||||
|
||||
jboolean runWinamp(unsigned char* pathWinamp);
|
||||
|
||||
int getListPos();
|
||||
|
||||
void getPluginMessage(int param, int sendMessage);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: run
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_run
|
||||
(JNIEnv *, jclass);
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: exit
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_exit
|
||||
(JNIEnv *, jclass);
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: play
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_play
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: stop
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_stop
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: resume
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_resume
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: pause
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_pause
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: previousTrack
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_previousTrack
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: nextTrack
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_nextTrack
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: fwd5Secs
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_fwd5Secs
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: fwd5Secs
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_rew5Secs
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: increaseVolume
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_increaseVolume
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: decreaseVolume
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_decreaseVolume
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: increaseVolumePercent
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_increaseVolumePercent
|
||||
(JNIEnv *, jclass, jint);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: decreaseVolumePercent
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_decreaseVolumePercent
|
||||
(JNIEnv *, jclass, jint);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: setVolume
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_setVolume
|
||||
(JNIEnv *, jclass, jint);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: setVolume
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_qotsa_jni_controller_JNIWinamp_getVolume
|
||||
(JNIEnv *, jclass, jint);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: restart
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_restart
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: setPlaylistPosition
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_setPlaylistPosition
|
||||
(JNIEnv *, jclass, jint);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: clearPlayList
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_clearPlayList
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: refreshPlayListCache
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_refreshPlayListCache
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: getPlayListLength
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_qotsa_jni_controller_JNIWinamp_getPlayListLength
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: writePlayListToFile
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_qotsa_jni_controller_JNIWinamp_writePlayListToFile
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: isShuffleStatusOn
|
||||
* Signature: ()Z
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_qotsa_jni_controller_JNIWinamp_isShuffleStatusOn
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: isRepeatStatusOn
|
||||
* Signature: ()Z
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_qotsa_jni_controller_JNIWinamp_isRepeatStatusOn
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: setRepeatStatusOn
|
||||
* Signature: (Z)V
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_setRepeatStatusOn
|
||||
(JNIEnv *, jclass, jboolean);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: setShuffleStatusOn
|
||||
* Signature: (Z)V
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_setShuffleStatusOn
|
||||
(JNIEnv *, jclass, jboolean);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: appendToPlayList
|
||||
* Signature: (Ljava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_qotsa_jni_controller_JNIWinamp_appendToPlayList
|
||||
(JNIEnv *, jclass, jstring);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: getStatus
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_qotsa_jni_controller_JNIWinamp_getStatus
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: getListPos
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_qotsa_jni_controller_JNIWinamp_getListPos
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: getTitle
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_qotsa_jni_controller_JNIWinamp_getTitle
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: getTime
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_qotsa_jni_controller_JNIWinamp_getTime
|
||||
(JNIEnv *, jclass, jint);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: getFileNameInList
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_qotsa_jni_controller_JNIWinamp_getFileNameInList
|
||||
(JNIEnv *, jclass, jint);
|
||||
|
||||
/*
|
||||
* Class: WinampController
|
||||
* Method: getFileNamePlaying
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_qotsa_jni_controller_JNIWinamp_getFileNamePlaying
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
1
vendor/JavaWinampApi/1.1/cpp/cpy.bat
vendored
Normal file
1
vendor/JavaWinampApi/1.1/cpp/cpy.bat
vendored
Normal file
@@ -0,0 +1 @@
|
||||
copy /y wpcom.dll c:\winnt\system32\
|
||||
58
vendor/JavaWinampApi/1.1/cpp/libwpcom.def
vendored
Normal file
58
vendor/JavaWinampApi/1.1/cpp/libwpcom.def
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
; dlltool --base-file C:\DOCUME~1\FRANCI~1\CONFIG~1\Temp/cca03628.base --output-exp wpcom.exp --dllname wpcom.dll --output-def libwpcom.def --no-export-all-symbols --add-stdcall-alias --exclude-symbol=DllMainCRTStartup@12 --def C:\DOCUME~1\FRANCI~1\CONFIG~1\Temp/cca03628.def --output-lib libwpcom.a
|
||||
EXPORTS
|
||||
Java_controller_JNIWinampController_appendToPlayList = Java_controller_JNIWinampController_appendToPlayList@12 @ 1
|
||||
Java_controller_JNIWinampController_appendToPlayList@12 @ 2
|
||||
Java_controller_JNIWinampController_clearPlayList = Java_controller_JNIWinampController_clearPlayList@8 @ 3
|
||||
Java_controller_JNIWinampController_clearPlayList@8 @ 4
|
||||
Java_controller_JNIWinampController_clearPlayListCache = Java_controller_JNIWinampController_clearPlayListCache@8 @ 5
|
||||
Java_controller_JNIWinampController_clearPlayListCache@8 @ 6
|
||||
Java_controller_JNIWinampController_decreaseVolume = Java_controller_JNIWinampController_decreaseVolume@8 @ 7
|
||||
Java_controller_JNIWinampController_decreaseVolume@8 @ 8
|
||||
Java_controller_JNIWinampController_decreaseVolumePercent = Java_controller_JNIWinampController_decreaseVolumePercent@12 @ 9
|
||||
Java_controller_JNIWinampController_decreaseVolumePercent@12 @ 10
|
||||
Java_controller_JNIWinampController_exit = Java_controller_JNIWinampController_exit@8 @ 11
|
||||
Java_controller_JNIWinampController_exit@8 @ 12
|
||||
Java_controller_JNIWinampController_getListPos = Java_controller_JNIWinampController_getListPos@8 @ 13
|
||||
Java_controller_JNIWinampController_getListPos@8 @ 14
|
||||
Java_controller_JNIWinampController_getPlayListLength = Java_controller_JNIWinampController_getPlayListLength@8 @ 15
|
||||
Java_controller_JNIWinampController_getPlayListLength@8 @ 16
|
||||
Java_controller_JNIWinampController_getSeconds = Java_controller_JNIWinampController_getSeconds@8 @ 17
|
||||
Java_controller_JNIWinampController_getSeconds@8 @ 18
|
||||
Java_controller_JNIWinampController_getStatus = Java_controller_JNIWinampController_getStatus@8 @ 19
|
||||
Java_controller_JNIWinampController_getStatus@8 @ 20
|
||||
Java_controller_JNIWinampController_getTitle = Java_controller_JNIWinampController_getTitle@8 @ 21
|
||||
Java_controller_JNIWinampController_getTitle@8 @ 22
|
||||
Java_controller_JNIWinampController_increaseVolume = Java_controller_JNIWinampController_increaseVolume@8 @ 23
|
||||
Java_controller_JNIWinampController_increaseVolume@8 @ 24
|
||||
Java_controller_JNIWinampController_increaseVolumePercent = Java_controller_JNIWinampController_increaseVolumePercent@12 @ 25
|
||||
Java_controller_JNIWinampController_increaseVolumePercent@12 @ 26
|
||||
Java_controller_JNIWinampController_isRepeatStatusOn = Java_controller_JNIWinampController_isRepeatStatusOn@8 @ 27
|
||||
Java_controller_JNIWinampController_isRepeatStatusOn@8 @ 28
|
||||
Java_controller_JNIWinampController_isShuffleStatusOn = Java_controller_JNIWinampController_isShuffleStatusOn@8 @ 29
|
||||
Java_controller_JNIWinampController_isShuffleStatusOn@8 @ 30
|
||||
Java_controller_JNIWinampController_nextTrack = Java_controller_JNIWinampController_nextTrack@8 @ 31
|
||||
Java_controller_JNIWinampController_nextTrack@8 @ 32
|
||||
Java_controller_JNIWinampController_pause = Java_controller_JNIWinampController_pause@8 @ 33
|
||||
Java_controller_JNIWinampController_pause@8 @ 34
|
||||
Java_controller_JNIWinampController_play = Java_controller_JNIWinampController_play@8 @ 35
|
||||
Java_controller_JNIWinampController_play@8 @ 36
|
||||
Java_controller_JNIWinampController_previousTrack = Java_controller_JNIWinampController_previousTrack@8 @ 37
|
||||
Java_controller_JNIWinampController_previousTrack@8 @ 38
|
||||
Java_controller_JNIWinampController_restart = Java_controller_JNIWinampController_restart@8 @ 39
|
||||
Java_controller_JNIWinampController_restart@8 @ 40
|
||||
Java_controller_JNIWinampController_resume = Java_controller_JNIWinampController_resume@8 @ 41
|
||||
Java_controller_JNIWinampController_resume@8 @ 42
|
||||
Java_controller_JNIWinampController_run = Java_controller_JNIWinampController_run@8 @ 43
|
||||
Java_controller_JNIWinampController_run@8 @ 44
|
||||
Java_controller_JNIWinampController_setPlaylistPosition = Java_controller_JNIWinampController_setPlaylistPosition@12 @ 45
|
||||
Java_controller_JNIWinampController_setPlaylistPosition@12 @ 46
|
||||
Java_controller_JNIWinampController_setRepeatStatusOn = Java_controller_JNIWinampController_setRepeatStatusOn@12 @ 47
|
||||
Java_controller_JNIWinampController_setRepeatStatusOn@12 @ 48
|
||||
Java_controller_JNIWinampController_setShuffleStatusOn = Java_controller_JNIWinampController_setShuffleStatusOn@12 @ 49
|
||||
Java_controller_JNIWinampController_setShuffleStatusOn@12 @ 50
|
||||
Java_controller_JNIWinampController_setVolume = Java_controller_JNIWinampController_setVolume@12 @ 51
|
||||
Java_controller_JNIWinampController_setVolume@12 @ 52
|
||||
Java_controller_JNIWinampController_stop = Java_controller_JNIWinampController_stop@8 @ 53
|
||||
Java_controller_JNIWinampController_stop@8 @ 54
|
||||
Java_controller_JNIWinampController_writePlayListToFile = Java_controller_JNIWinampController_writePlayListToFile@8 @ 55
|
||||
Java_controller_JNIWinampController_writePlayListToFile@8 @ 56
|
||||
1620
vendor/JavaWinampApi/1.1/cpp/wa_ipc.h
vendored
Normal file
1620
vendor/JavaWinampApi/1.1/cpp/wa_ipc.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
69
vendor/JavaWinampApi/1.1/cpp/wpcom.dev
vendored
Normal file
69
vendor/JavaWinampApi/1.1/cpp/wpcom.dev
vendored
Normal file
@@ -0,0 +1,69 @@
|
||||
[Project]
|
||||
FileName=wpcom.dev
|
||||
Name=wpcom
|
||||
UnitCount=2
|
||||
Type=3
|
||||
Ver=1
|
||||
ObjFiles=
|
||||
Includes="E:\Program Files\Java\jdk1.6.0_11\include";"E:\Program Files\Java\jdk1.6.0_11\include\win32"
|
||||
Libs=
|
||||
PrivateResource=
|
||||
ResourceIncludes=
|
||||
MakeIncludes=
|
||||
Compiler=-DBUILDING_DLL=1_@@_
|
||||
CppCompiler=-DBUILDING_DLL=1_@@_
|
||||
Linker=--no-export-all-symbols --add-stdcall-alias_@@_
|
||||
IsCpp=0
|
||||
Icon=
|
||||
ExeOutput=..\..\..\JavaWinampAPI
|
||||
ObjectOutput=
|
||||
OverrideOutput=1
|
||||
OverrideOutputName=wpcom.dll
|
||||
HostApplication=
|
||||
Folders=
|
||||
CommandLine=
|
||||
UseCustomMakefile=0
|
||||
CustomMakefile=
|
||||
IncludeVersionInfo=0
|
||||
SupportXPThemes=0
|
||||
CompilerSet=0
|
||||
CompilerSettings=0000000000000000000000
|
||||
|
||||
[Unit1]
|
||||
FileName=WinampController.c
|
||||
CompileCpp=0
|
||||
Folder=wacon
|
||||
Compile=1
|
||||
Link=1
|
||||
Priority=1000
|
||||
OverrideBuildCmd=0
|
||||
BuildCmd=$(CC) -c WinampController.c -o WinampController.o $(CFLAGS)
|
||||
|
||||
[VersionInfo]
|
||||
Major=0
|
||||
Minor=1
|
||||
Release=1
|
||||
Build=1
|
||||
LanguageID=1033
|
||||
CharsetID=1252
|
||||
CompanyName=
|
||||
FileVersion=
|
||||
FileDescription=Developed using the Dev-C++ IDE
|
||||
InternalName=
|
||||
LegalCopyright=
|
||||
LegalTrademarks=
|
||||
OriginalFilename=
|
||||
ProductName=
|
||||
ProductVersion=
|
||||
AutoIncBuildNr=0
|
||||
|
||||
[Unit2]
|
||||
FileName=WinampController.h
|
||||
CompileCpp=0
|
||||
Folder=wacon
|
||||
Compile=1
|
||||
Link=1
|
||||
Priority=1000
|
||||
OverrideBuildCmd=0
|
||||
BuildCmd=
|
||||
|
||||
17
vendor/JavaWinampApi/1.1/cpp/wpcom.layout
vendored
Normal file
17
vendor/JavaWinampApi/1.1/cpp/wpcom.layout
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
[Editor_0]
|
||||
CursorCol=32
|
||||
CursorRow=359
|
||||
TopLine=338
|
||||
LeftChar=1
|
||||
Open=1
|
||||
Top=1
|
||||
[Editors]
|
||||
Focused=0
|
||||
Order=1,0
|
||||
[Editor_1]
|
||||
Open=1
|
||||
Top=0
|
||||
CursorCol=73
|
||||
CursorRow=143
|
||||
TopLine=127
|
||||
LeftChar=1
|
||||
40
vendor/JavaWinampApi/1.1/java/com/qotsa/exception/InvalidHandle.java
vendored
Normal file
40
vendor/JavaWinampApi/1.1/java/com/qotsa/exception/InvalidHandle.java
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* InvalidHandle.java
|
||||
*
|
||||
* Created on 9 de Outubro de 2007, 14:18
|
||||
*
|
||||
* To change this template, choose Tools | Template Manager
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
package com.qotsa.exception;
|
||||
|
||||
/**
|
||||
* Exception to throw when Winamp Handle Fails.
|
||||
*
|
||||
* @author Francisco
|
||||
*/
|
||||
public class InvalidHandle extends Exception{
|
||||
|
||||
private static final String defaultMessage = "Invalid Handle. Please Verify if Winamp is running.";
|
||||
|
||||
/**
|
||||
* Creates a new instance of InvalidHandle
|
||||
* @param message Message to print in the stack.
|
||||
*/
|
||||
public InvalidHandle(String message) {
|
||||
|
||||
super(message);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new instance of InvalidHandle with the default message
|
||||
*/
|
||||
public InvalidHandle() {
|
||||
|
||||
super(defaultMessage);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
40
vendor/JavaWinampApi/1.1/java/com/qotsa/exception/InvalidParameter.java
vendored
Normal file
40
vendor/JavaWinampApi/1.1/java/com/qotsa/exception/InvalidParameter.java
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* InvalidParameter.java
|
||||
*
|
||||
* Created on 11 de Outubro de 2007, 10:53
|
||||
*
|
||||
* To change this template, choose Tools | Template Manager
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
package com.qotsa.exception;
|
||||
|
||||
/**
|
||||
* Exception to throw when any parameter is invalid.
|
||||
*
|
||||
* @author Francisco
|
||||
*/
|
||||
public class InvalidParameter extends Exception {
|
||||
|
||||
private static final String defaultMessage = "Invalid Parameter";
|
||||
|
||||
/**
|
||||
* Creates a new instance of NegativeValueException
|
||||
* @param message Message to print in the stack.
|
||||
*/
|
||||
public InvalidParameter(String message) {
|
||||
|
||||
super(message);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new instance of NegativeValueException with the default message
|
||||
*/
|
||||
public InvalidParameter() {
|
||||
|
||||
super(defaultMessage);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
20
vendor/JavaWinampApi/1.1/java/com/qotsa/exception/package.html
vendored
Normal file
20
vendor/JavaWinampApi/1.1/java/com/qotsa/exception/package.html
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
||||
<html>
|
||||
<head>
|
||||
<!--
|
||||
|
||||
@(#)package.html 1.60 98/01/27
|
||||
|
||||
-->
|
||||
</head>
|
||||
<body bgcolor="white">
|
||||
|
||||
Package containing the Exception Class used in the WinampController Class.
|
||||
|
||||
|
||||
<h2>Package Specification</h2>
|
||||
|
||||
<!-- Put @see and @since tags down here. -->
|
||||
|
||||
</body>
|
||||
</html>
|
||||
227
vendor/JavaWinampApi/1.1/java/com/qotsa/jni/controller/JNIWinamp.java
vendored
Normal file
227
vendor/JavaWinampApi/1.1/java/com/qotsa/jni/controller/JNIWinamp.java
vendored
Normal file
@@ -0,0 +1,227 @@
|
||||
/*
|
||||
* JNIWinamp.java
|
||||
*
|
||||
* Created on 23 de Abril de 2007, 20:41
|
||||
*
|
||||
* To change this template, choose Tools | Template Manager
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
package com.qotsa.jni.controller;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Francisco Guimar<61>es
|
||||
*/
|
||||
final class JNIWinamp {
|
||||
|
||||
static {
|
||||
System.loadLibrary("wpcom");
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify if Winamp is started
|
||||
* and if not started, starts it
|
||||
* @return True - if successful run Winamp
|
||||
* False - if not successful run Winamp
|
||||
*/
|
||||
|
||||
protected static native boolean run() throws UnsatisfiedLinkError;
|
||||
|
||||
/*
|
||||
* Exit Winamp
|
||||
* @return True - if successful exit
|
||||
* False - if not successful exit
|
||||
*/
|
||||
protected static native boolean exit() throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Play Winamp.
|
||||
*
|
||||
*/
|
||||
protected static native boolean play() throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Stop Winamp.
|
||||
*
|
||||
*/
|
||||
protected static native boolean stop() throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Resume Winamp.
|
||||
*
|
||||
*/
|
||||
protected static native boolean resume() throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Pause Winamp.
|
||||
*
|
||||
*/
|
||||
protected static native boolean pause() throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Go to Previous Track.
|
||||
*
|
||||
*/
|
||||
protected static native boolean previousTrack() throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Go to Next Track.
|
||||
*
|
||||
*/
|
||||
protected static native boolean nextTrack() throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Fowards 5 seconds on the current song.
|
||||
*
|
||||
*/
|
||||
protected static native boolean fwd5Secs() throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Rewinds 5 seconds on the current song.
|
||||
*
|
||||
*/
|
||||
protected static native boolean rew5Secs() throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Increase Volume.
|
||||
*
|
||||
*/
|
||||
protected static native boolean increaseVolume() throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Decrease Volume.
|
||||
*
|
||||
*/
|
||||
protected static native boolean decreaseVolume() throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Increase Volume.
|
||||
* @param percent Percent to Increase.
|
||||
*/
|
||||
protected static native boolean increaseVolumePercent(int percent) throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Decrease Volume.
|
||||
* @param percent Percent to Decrease.
|
||||
*/
|
||||
protected static native boolean decreaseVolumePercent(int percent) throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Adjust Volume
|
||||
* @param pos Position to Set Volume between 0 and 99.
|
||||
*/
|
||||
protected static native boolean setVolume(int pos) throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Get Volume.
|
||||
* @return volume.
|
||||
*/
|
||||
protected static native int getVolume() throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Go to a Specified Position in the List.
|
||||
* @param pos Position.
|
||||
*/
|
||||
protected static native boolean setPlaylistPosition(int pos) throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Clear List.
|
||||
*
|
||||
*/
|
||||
protected static native boolean clearPlayList() throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Refresh List<73>s Cache.
|
||||
*
|
||||
*/
|
||||
protected static native boolean refreshPlayListCache() throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Return the PlayListLength.
|
||||
* @return List Length.
|
||||
*/
|
||||
protected static native int getPlayListLength() throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Write a Playlist in <winampdir>\\Winamp.m3u.
|
||||
* @return List Position.
|
||||
*/
|
||||
protected static native int writePlayListToFile() throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Verify if Shuffle is On.
|
||||
* @return True - On throws UnsatisfiedLinkError; False - Off.
|
||||
*/
|
||||
protected static native int isShuffleStatusOn() throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Verify if Repeat is On.
|
||||
* @return True - On throws UnsatisfiedLinkError; False - Off.
|
||||
*/
|
||||
protected static native int isRepeatStatusOn() throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Turn on Repeat.
|
||||
* @param True - Turn on Repeat throws UnsatisfiedLinkError; False - Turn off Repeat.
|
||||
*/
|
||||
protected static native boolean setRepeatStatusOn(boolean mode) throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Turn on Shuffle.
|
||||
* @param True - Turn on Shuffle throws UnsatisfiedLinkError; False - Turn off Shuffle.
|
||||
*/
|
||||
protected static native boolean setShuffleStatusOn(boolean mode) throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Append a File in the List
|
||||
* @param filename FileName to Append.
|
||||
*/
|
||||
protected static native boolean appendToPlayList(String filename) throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Get Winamp Status.
|
||||
* @return STOPPED - Stop
|
||||
* PLAYING - play
|
||||
* PAUSED - Paused
|
||||
*/
|
||||
protected static native int getStatus() throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Get Current List Pos.
|
||||
* @return Current List Position.
|
||||
*/
|
||||
protected static native int getListPos() throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Get Current Track Title
|
||||
* @return Current Track Title
|
||||
*/
|
||||
protected static native String getTitle() throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Get Track FileName in List<73>s index.
|
||||
* @param index Track Index in the Current PlayList
|
||||
* @return Current Track FileName
|
||||
*/
|
||||
protected static native String getFileNameInList(int index) throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Get Song Time
|
||||
* @param mode CURRENTTIME - Currently Time in Milliseconds
|
||||
* TIMELENGHT - Song Time Length in seconds
|
||||
* @return Song Time in Seconds
|
||||
*/
|
||||
protected static native int getTime(int mode) throws UnsatisfiedLinkError;
|
||||
|
||||
/**
|
||||
* Get File Name Playing In Winamp.
|
||||
*
|
||||
* @return Current File Name.
|
||||
*/
|
||||
protected static native String getFileNamePlaying() throws UnsatisfiedLinkError;
|
||||
|
||||
}
|
||||
|
||||
592
vendor/JavaWinampApi/1.1/java/com/qotsa/jni/controller/WinampController.java
vendored
Normal file
592
vendor/JavaWinampApi/1.1/java/com/qotsa/jni/controller/WinampController.java
vendored
Normal file
@@ -0,0 +1,592 @@
|
||||
/*
|
||||
* WinampController.java
|
||||
*
|
||||
* Created on 9 de Outubro de 2007, 14:06
|
||||
*
|
||||
* To change this template, choose Tools | Template Manager
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Package containing the Controller Class to communicate with Winamp.
|
||||
*
|
||||
* @author Francisco Guimar<61>es
|
||||
*/
|
||||
package com.qotsa.jni.controller;
|
||||
|
||||
import com.qotsa.exception.InvalidHandle;
|
||||
import com.qotsa.exception.InvalidParameter;
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* This class is a wrapper to call JNI functions
|
||||
* to send Message to Winamp Window.
|
||||
*
|
||||
* @author Francisco Guimar<61>es
|
||||
*
|
||||
*
|
||||
*/
|
||||
public class WinampController {
|
||||
|
||||
/**
|
||||
* Constant used as return in getTime()
|
||||
* Value = -1
|
||||
*/
|
||||
public static final int ISNOTPLAYING = -1;
|
||||
|
||||
/**
|
||||
* Constant used as parameter in getTime() method
|
||||
* Value = 0
|
||||
*/
|
||||
public static final int CURRENTTIME = 0;
|
||||
|
||||
/**
|
||||
* Constant used as parameter in getTime() method
|
||||
* Value = 1
|
||||
*/
|
||||
public static final int TIMELENGTH = 1;
|
||||
|
||||
/**
|
||||
* Constant used as return in getStatus() method
|
||||
* Value = 0
|
||||
*/
|
||||
public static final int STOPPED = 0;
|
||||
|
||||
/**
|
||||
* Constant used as return in getStatus() method
|
||||
* Value = 1
|
||||
*/
|
||||
public static final int PLAYING = 1;
|
||||
|
||||
/**
|
||||
* Constant used as return in getStatus() method
|
||||
* Value = 3
|
||||
*/
|
||||
public static final int PAUSED = 3;
|
||||
|
||||
|
||||
/**
|
||||
* Verify if Winamp is started
|
||||
* and if not started, starts it.
|
||||
*
|
||||
* @throws java.lang.Exception When the key HKEY_LOCAL_MACHINE\Software\Clients\Media\Winamp\shell\open\command
|
||||
* is not found in the register. This key is used to find Winamp Directory installation to execute it.
|
||||
*/
|
||||
|
||||
public static void run() throws Exception{
|
||||
|
||||
if (!JNIWinamp.run())
|
||||
throw new Exception("Unable to run Winamp. Verify if it is properly installed");
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Exit Winamp.
|
||||
*
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
*/
|
||||
public static void exit() throws InvalidHandle {
|
||||
|
||||
if (!JNIWinamp.exit())
|
||||
throw new InvalidHandle();
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Play current file in Winamp.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
*/
|
||||
public static void play() throws InvalidHandle {
|
||||
|
||||
if (!JNIWinamp.play())
|
||||
throw new InvalidHandle();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Stop current file in Winamp.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
*/
|
||||
public static void stop() throws InvalidHandle {
|
||||
|
||||
if (!JNIWinamp.stop())
|
||||
throw new InvalidHandle();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Resume current file in Winamp.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
*/
|
||||
public static void resume() throws InvalidHandle {
|
||||
|
||||
if (!JNIWinamp.resume())
|
||||
throw new InvalidHandle();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Pause Winamp.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
*/
|
||||
public static void pause() throws InvalidHandle {
|
||||
|
||||
if (!JNIWinamp.pause())
|
||||
throw new InvalidHandle();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Go to Previous Track in the play list.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
*/
|
||||
public static void previousTrack() throws InvalidHandle {
|
||||
|
||||
if (!JNIWinamp.previousTrack())
|
||||
throw new InvalidHandle();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Go to Next Track in the play list.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
*/
|
||||
public static void nextTrack() throws InvalidHandle {
|
||||
|
||||
if (!JNIWinamp.nextTrack())
|
||||
throw new InvalidHandle();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Fowards 5 seconds on the current song.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
*/
|
||||
public static void fwd5Secs() throws InvalidHandle {
|
||||
|
||||
if (!JNIWinamp.fwd5Secs())
|
||||
throw new InvalidHandle();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Rewinds 5 seconds on the current song.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
*/
|
||||
public static void rew5Secs() throws InvalidHandle {
|
||||
|
||||
if (!JNIWinamp.rew5Secs())
|
||||
throw new InvalidHandle();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Increase Volume a little bit.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
*/
|
||||
public static void increaseVolume() throws InvalidHandle {
|
||||
|
||||
if (!JNIWinamp.increaseVolume())
|
||||
throw new InvalidHandle();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Decrease Volume a little bit.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
*/
|
||||
public static void decreaseVolume() throws InvalidHandle {
|
||||
|
||||
if (!JNIWinamp.decreaseVolume())
|
||||
throw new InvalidHandle();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Increase Volume.
|
||||
*
|
||||
* @param percent Percent to Increase Volume.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
* @throws com.qotsa.exception.InvalidParameter If percent not between 0 and 100
|
||||
*/
|
||||
public static void increaseVolumePercent (int percent) throws InvalidHandle, InvalidParameter {
|
||||
|
||||
if ( (percent < 0) || (percent > 100) )
|
||||
throw new InvalidParameter("percent<EFBFBD>s value must be between 0 and 100");
|
||||
|
||||
if (!JNIWinamp.increaseVolumePercent(percent))
|
||||
throw new InvalidHandle();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Decrease Volume.
|
||||
*
|
||||
* @param percent Percent to Decrease Volume.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
* @throws com.qotsa.exception.InvalidParameter If percent not between 0 and 100
|
||||
*/
|
||||
public static void decreaseVolumePercent(int percent) throws InvalidHandle, InvalidParameter {
|
||||
|
||||
if ( (percent < 0) || (percent > 100) )
|
||||
throw new InvalidParameter("percent<EFBFBD>s value must be between 0 and 100");
|
||||
if (!JNIWinamp.decreaseVolumePercent(percent))
|
||||
throw new InvalidHandle();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Adjust Volume.
|
||||
* Note that the pos must be between 0(0%) and 255 (100%).
|
||||
*
|
||||
* @param pos Position to Set Volume.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
* @throws com.qotsa.exception.InvalidParameter If pos not between 0 and 255
|
||||
*/
|
||||
public static void setVolume(int pos) throws InvalidHandle, InvalidParameter {
|
||||
|
||||
if ( (pos < 0) || (pos > 255) )
|
||||
throw new InvalidParameter("pos value must be between 0 and 255");
|
||||
if (!JNIWinamp.setVolume(pos))
|
||||
throw new InvalidHandle();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Volume.
|
||||
* @return The volume which is a number between 0 (0%) and 255(100%)
|
||||
* @throws com.qotsa.exception.InvalidHandle
|
||||
*/
|
||||
public static int getVolume() throws InvalidHandle {
|
||||
int volume = JNIWinamp.getVolume();
|
||||
if (volume == -1)
|
||||
throw new InvalidHandle();
|
||||
return volume;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Volume Percent.
|
||||
* @return Volume percent.
|
||||
* @throws com.qotsa.exception.InvalidHandle
|
||||
*/
|
||||
public static int getVolumePercent() throws InvalidHandle {
|
||||
|
||||
int volume = getVolume();
|
||||
int percent = (volume * 100) / 255;
|
||||
return percent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restarts Winamp.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
* @throws java.lang.Exception When failed to restart Winamp.
|
||||
*/
|
||||
public static void restart() throws InvalidHandle, Exception {
|
||||
|
||||
exit();
|
||||
run();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Go to a Specified Position in the List. This method doesn<73>t play.
|
||||
* Just set list position. If you wanna play call play() after set position.
|
||||
* Parameter pos is Zero-based index.
|
||||
* @param pos Position.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
* @throws com.qotsa.exception.InvalidParameter If pos is negative or greater than List Length.
|
||||
*/
|
||||
public static void setPlaylistPosition(int pos) throws InvalidHandle, InvalidParameter {
|
||||
|
||||
int listLength = getPlayListLength();
|
||||
if ( (pos < 0) || ( (pos + 1) > listLength) )
|
||||
throw new InvalidParameter("Position is invalid in the list.");
|
||||
if (!JNIWinamp.setPlaylistPosition(pos))
|
||||
throw new InvalidHandle();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear Winamp's internal playlist.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
*/
|
||||
public static void clearPlayList() throws InvalidHandle {
|
||||
|
||||
if (!JNIWinamp.clearPlayList())
|
||||
throw new InvalidHandle();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Flush the playlist cache buffer.
|
||||
* Call this if you want it to go refetch titles for tracks in the list.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
*/
|
||||
public static void refreshPlayListCache() throws InvalidHandle{
|
||||
|
||||
if (!JNIWinamp.refreshPlayListCache())
|
||||
throw new InvalidHandle();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the PlayListLength.
|
||||
*
|
||||
* @return List Length.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
*/
|
||||
public static int getPlayListLength() throws InvalidHandle {
|
||||
|
||||
int length = JNIWinamp.getPlayListLength();
|
||||
if (length == -1)
|
||||
throw new InvalidHandle();
|
||||
return length;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Write a Playlist in winampDirInstallation\\Winamp.m3u.
|
||||
* This is default Winamp IPC Default. If you wanna change this,
|
||||
* just rename the file you<6F>ve created.
|
||||
*
|
||||
* @return Current List Position.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
*/
|
||||
public static int writePlayListToFile() throws InvalidHandle {
|
||||
|
||||
int playListPos = JNIWinamp.writePlayListToFile();
|
||||
if (playListPos == -1)
|
||||
throw new InvalidHandle();
|
||||
return playListPos;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify if Shuffle is On.
|
||||
*
|
||||
* @return True - On ; False - Off.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
*/
|
||||
public static boolean isShuffleStatusOn() throws InvalidHandle {
|
||||
|
||||
int status = JNIWinamp.isShuffleStatusOn();
|
||||
if (status == -1)
|
||||
throw new InvalidHandle();
|
||||
return (status == 1 ? true : false);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify if Repeat is On.
|
||||
*
|
||||
* @return True - On ; False - Off.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
*/
|
||||
public static boolean isRepeatStatusOn() throws InvalidHandle {
|
||||
|
||||
int status = JNIWinamp.isRepeatStatusOn();
|
||||
if (status == -1)
|
||||
throw new InvalidHandle();
|
||||
return (status == 1 ? true : false);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Turn on Repeat.
|
||||
*
|
||||
* @param mode True - Turn on Repeat ; False - Turn off Repeat.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
*/
|
||||
public static void setRepeatStatusOn(boolean mode) throws InvalidHandle {
|
||||
|
||||
if (!JNIWinamp.setRepeatStatusOn(mode))
|
||||
throw new InvalidHandle();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Turn on Shuffle.
|
||||
*
|
||||
* @param mode True - Turn on Shuffle ; False - Turn off Shuffle.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
*/
|
||||
public static void setShuffleStatusOn(boolean mode) throws InvalidHandle {
|
||||
|
||||
if (!JNIWinamp.setShuffleStatusOn(mode))
|
||||
throw new InvalidHandle();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Append a File into the List.
|
||||
*
|
||||
* @param filename FileName to Append in the list.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
* @throws com.qotsa.exception.InvalidParameter If the filename is an invalid path.
|
||||
*/
|
||||
public static void appendToPlayList(String filename) throws InvalidHandle, InvalidParameter {
|
||||
|
||||
File file = new File(filename);
|
||||
if (!file.exists())
|
||||
throw new InvalidParameter("File doesn<73>t exists.");
|
||||
if (!JNIWinamp.appendToPlayList(filename))
|
||||
throw new InvalidHandle();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Winamp Status.
|
||||
*
|
||||
* @return STOPPED - Stop
|
||||
* PLAYING - play
|
||||
* PAUSED - Paused
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
*/
|
||||
public static int getStatus() throws InvalidHandle {
|
||||
|
||||
int status = JNIWinamp.getStatus();
|
||||
if (status == -1)
|
||||
throw new InvalidHandle();
|
||||
return status;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Current List Pos.
|
||||
*
|
||||
* @return Current List Position.
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
*/
|
||||
public static int getListPos() throws InvalidHandle {
|
||||
|
||||
int pos = JNIWinamp.getListPos();
|
||||
if (pos == -1)
|
||||
throw new InvalidHandle();
|
||||
return pos;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Current Track Title.
|
||||
*
|
||||
* @return Current Track Title
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
*/
|
||||
public static String getTitle() throws InvalidHandle {
|
||||
|
||||
String title = JNIWinamp.getTitle();
|
||||
if (title == null)
|
||||
throw new InvalidHandle();
|
||||
return title;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Current Track FileName.
|
||||
* Parameter pos is Zero-based index.
|
||||
*
|
||||
* @return Current Track FileName
|
||||
* @param pos Track Position in the Current PlayList
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
* @throws com.qotsa.exception.InvalidParameter If pos is negative or greater than List Length
|
||||
*/
|
||||
public static String getFileNameInList(int pos) throws InvalidHandle, InvalidParameter {
|
||||
|
||||
int listLength = getPlayListLength();
|
||||
if ( (pos < 0) || (pos > listLength) )
|
||||
throw new InvalidParameter("Position is invalid in the list.");
|
||||
String filename = JNIWinamp.getFileNameInList(pos);
|
||||
if (filename == null)
|
||||
throw new InvalidHandle();
|
||||
return filename;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Song Time.
|
||||
*
|
||||
* @return Time Song (depends on Param mode) or
|
||||
* ISNOTPLAYING if there is no info about time because it not starts to play.
|
||||
* @param mode CURRENTTIME - Currently Time in Milliseconds
|
||||
* TIMELENGHT - Song Time Length in seconds
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
* @throws com.qotsa.exception.InvalidParameter if parameter is not CURRENTTIME or TIMELENGTH.
|
||||
*/
|
||||
public static int getTime(int mode) throws InvalidHandle, InvalidParameter {
|
||||
|
||||
if (mode != CURRENTTIME && mode != TIMELENGTH)
|
||||
throw new InvalidParameter();
|
||||
int time = JNIWinamp.getTime(mode);
|
||||
if (time == -2)
|
||||
throw new InvalidHandle();
|
||||
return time;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Fowards n Tracks in Play List.
|
||||
*
|
||||
* @param n Number of Tracks to Foward
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
* @throws com.qotsa.exception.InvalidParameter if n is negative or Zero.
|
||||
*/
|
||||
public static void fwdTracks(int n) throws InvalidParameter, InvalidHandle {
|
||||
|
||||
if (n <= 0)
|
||||
throw new InvalidParameter("Value must be Positive");
|
||||
int pos = getListPos();
|
||||
int lengthList = getPlayListLength();
|
||||
int newPos = pos + n;
|
||||
if (newPos > lengthList ) {
|
||||
setPlaylistPosition(lengthList);
|
||||
play();
|
||||
}
|
||||
else {
|
||||
setPlaylistPosition(newPos);
|
||||
play();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Rewinds n Tracks in Play List.
|
||||
*
|
||||
* @param n Number of Tracks to Rewind
|
||||
* @throws com.qotsa.exception.InvalidHandle When the Winamp Windows is not handle(in most case, it means that winamp is not running)
|
||||
* @throws com.qotsa.exception.InvalidParameter if n is negative or Zero.
|
||||
*/
|
||||
public static void rewTracks(int n) throws InvalidParameter, InvalidHandle {
|
||||
|
||||
if (n <= 0)
|
||||
throw new InvalidParameter("Value must be Positive");
|
||||
int pos = getListPos();
|
||||
int lengthList = getPlayListLength();
|
||||
int newPos = pos - n;
|
||||
if (newPos < 0 ) {
|
||||
setPlaylistPosition(0);
|
||||
play();
|
||||
}
|
||||
else {
|
||||
setPlaylistPosition(newPos);
|
||||
play();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get File Name Playing In Winamp.
|
||||
*
|
||||
* @return Current File Name.
|
||||
*/
|
||||
public static String getFileNamePlaying() throws InvalidHandle {
|
||||
|
||||
String fileName = JNIWinamp.getFileNamePlaying();
|
||||
if (fileName == null)
|
||||
throw new InvalidHandle();
|
||||
return fileName;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
20
vendor/JavaWinampApi/1.1/java/com/qotsa/jni/controller/package.html
vendored
Normal file
20
vendor/JavaWinampApi/1.1/java/com/qotsa/jni/controller/package.html
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
||||
<html>
|
||||
<head>
|
||||
<!--
|
||||
|
||||
@(#)package.html 1.60 98/01/27
|
||||
|
||||
-->
|
||||
</head>
|
||||
<body bgcolor="white">
|
||||
|
||||
Package containing the Controller Class to communicate with Winamp.
|
||||
|
||||
|
||||
<h2>Package Specification</h2>
|
||||
|
||||
<!-- Put @see and @since tags down here. -->
|
||||
|
||||
</body>
|
||||
</html>
|
||||
BIN
vendor/commons-logging/1.1.1/commons-logging-1.1.1.jar
vendored
Normal file
BIN
vendor/commons-logging/1.1.1/commons-logging-1.1.1.jar
vendored
Normal file
Binary file not shown.
BIN
vendor/commons-logging/1.1.1/commons-logging-adapters-1.1.1.jar
vendored
Normal file
BIN
vendor/commons-logging/1.1.1/commons-logging-adapters-1.1.1.jar
vendored
Normal file
Binary file not shown.
BIN
vendor/commons-logging/1.1.1/commons-logging-api-1.1.1.jar
vendored
Normal file
BIN
vendor/commons-logging/1.1.1/commons-logging-api-1.1.1.jar
vendored
Normal file
Binary file not shown.
246
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/Log.java
vendored
Normal file
246
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/Log.java
vendored
Normal file
@@ -0,0 +1,246 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package org.apache.commons.logging;
|
||||
|
||||
/**
|
||||
* <p>A simple logging interface abstracting logging APIs. In order to be
|
||||
* instantiated successfully by {@link LogFactory}, classes that implement
|
||||
* this interface must have a constructor that takes a single String
|
||||
* parameter representing the "name" of this Log.</p>
|
||||
*
|
||||
* <p> The six logging levels used by <code>Log</code> are (in order):
|
||||
* <ol>
|
||||
* <li>trace (the least serious)</li>
|
||||
* <li>debug</li>
|
||||
* <li>info</li>
|
||||
* <li>warn</li>
|
||||
* <li>error</li>
|
||||
* <li>fatal (the most serious)</li>
|
||||
* </ol>
|
||||
* The mapping of these log levels to the concepts used by the underlying
|
||||
* logging system is implementation dependent.
|
||||
* The implemention should ensure, though, that this ordering behaves
|
||||
* as expected.</p>
|
||||
*
|
||||
* <p>Performance is often a logging concern.
|
||||
* By examining the appropriate property,
|
||||
* a component can avoid expensive operations (producing information
|
||||
* to be logged).</p>
|
||||
*
|
||||
* <p> For example,
|
||||
* <code><pre>
|
||||
* if (log.isDebugEnabled()) {
|
||||
* ... do something expensive ...
|
||||
* log.debug(theResult);
|
||||
* }
|
||||
* </pre></code>
|
||||
* </p>
|
||||
*
|
||||
* <p>Configuration of the underlying logging system will generally be done
|
||||
* external to the Logging APIs, through whatever mechanism is supported by
|
||||
* that system.</p>
|
||||
*
|
||||
* @author <a href="mailto:sanders@apache.org">Scott Sanders</a>
|
||||
* @author Rod Waldhoff
|
||||
* @version $Id: Log.java 424107 2006-07-20 23:15:42Z skitching $
|
||||
*/
|
||||
public interface Log {
|
||||
|
||||
|
||||
// ----------------------------------------------------- Logging Properties
|
||||
|
||||
|
||||
/**
|
||||
* <p> Is debug logging currently enabled? </p>
|
||||
*
|
||||
* <p> Call this method to prevent having to perform expensive operations
|
||||
* (for example, <code>String</code> concatenation)
|
||||
* when the log level is more than debug. </p>
|
||||
*
|
||||
* @return true if debug is enabled in the underlying logger.
|
||||
*/
|
||||
public boolean isDebugEnabled();
|
||||
|
||||
|
||||
/**
|
||||
* <p> Is error logging currently enabled? </p>
|
||||
*
|
||||
* <p> Call this method to prevent having to perform expensive operations
|
||||
* (for example, <code>String</code> concatenation)
|
||||
* when the log level is more than error. </p>
|
||||
*
|
||||
* @return true if error is enabled in the underlying logger.
|
||||
*/
|
||||
public boolean isErrorEnabled();
|
||||
|
||||
|
||||
/**
|
||||
* <p> Is fatal logging currently enabled? </p>
|
||||
*
|
||||
* <p> Call this method to prevent having to perform expensive operations
|
||||
* (for example, <code>String</code> concatenation)
|
||||
* when the log level is more than fatal. </p>
|
||||
*
|
||||
* @return true if fatal is enabled in the underlying logger.
|
||||
*/
|
||||
public boolean isFatalEnabled();
|
||||
|
||||
|
||||
/**
|
||||
* <p> Is info logging currently enabled? </p>
|
||||
*
|
||||
* <p> Call this method to prevent having to perform expensive operations
|
||||
* (for example, <code>String</code> concatenation)
|
||||
* when the log level is more than info. </p>
|
||||
*
|
||||
* @return true if info is enabled in the underlying logger.
|
||||
*/
|
||||
public boolean isInfoEnabled();
|
||||
|
||||
|
||||
/**
|
||||
* <p> Is trace logging currently enabled? </p>
|
||||
*
|
||||
* <p> Call this method to prevent having to perform expensive operations
|
||||
* (for example, <code>String</code> concatenation)
|
||||
* when the log level is more than trace. </p>
|
||||
*
|
||||
* @return true if trace is enabled in the underlying logger.
|
||||
*/
|
||||
public boolean isTraceEnabled();
|
||||
|
||||
|
||||
/**
|
||||
* <p> Is warn logging currently enabled? </p>
|
||||
*
|
||||
* <p> Call this method to prevent having to perform expensive operations
|
||||
* (for example, <code>String</code> concatenation)
|
||||
* when the log level is more than warn. </p>
|
||||
*
|
||||
* @return true if warn is enabled in the underlying logger.
|
||||
*/
|
||||
public boolean isWarnEnabled();
|
||||
|
||||
|
||||
// -------------------------------------------------------- Logging Methods
|
||||
|
||||
|
||||
/**
|
||||
* <p> Log a message with trace log level. </p>
|
||||
*
|
||||
* @param message log this message
|
||||
*/
|
||||
public void trace(Object message);
|
||||
|
||||
|
||||
/**
|
||||
* <p> Log an error with trace log level. </p>
|
||||
*
|
||||
* @param message log this message
|
||||
* @param t log this cause
|
||||
*/
|
||||
public void trace(Object message, Throwable t);
|
||||
|
||||
|
||||
/**
|
||||
* <p> Log a message with debug log level. </p>
|
||||
*
|
||||
* @param message log this message
|
||||
*/
|
||||
public void debug(Object message);
|
||||
|
||||
|
||||
/**
|
||||
* <p> Log an error with debug log level. </p>
|
||||
*
|
||||
* @param message log this message
|
||||
* @param t log this cause
|
||||
*/
|
||||
public void debug(Object message, Throwable t);
|
||||
|
||||
|
||||
/**
|
||||
* <p> Log a message with info log level. </p>
|
||||
*
|
||||
* @param message log this message
|
||||
*/
|
||||
public void info(Object message);
|
||||
|
||||
|
||||
/**
|
||||
* <p> Log an error with info log level. </p>
|
||||
*
|
||||
* @param message log this message
|
||||
* @param t log this cause
|
||||
*/
|
||||
public void info(Object message, Throwable t);
|
||||
|
||||
|
||||
/**
|
||||
* <p> Log a message with warn log level. </p>
|
||||
*
|
||||
* @param message log this message
|
||||
*/
|
||||
public void warn(Object message);
|
||||
|
||||
|
||||
/**
|
||||
* <p> Log an error with warn log level. </p>
|
||||
*
|
||||
* @param message log this message
|
||||
* @param t log this cause
|
||||
*/
|
||||
public void warn(Object message, Throwable t);
|
||||
|
||||
|
||||
/**
|
||||
* <p> Log a message with error log level. </p>
|
||||
*
|
||||
* @param message log this message
|
||||
*/
|
||||
public void error(Object message);
|
||||
|
||||
|
||||
/**
|
||||
* <p> Log an error with error log level. </p>
|
||||
*
|
||||
* @param message log this message
|
||||
* @param t log this cause
|
||||
*/
|
||||
public void error(Object message, Throwable t);
|
||||
|
||||
|
||||
/**
|
||||
* <p> Log a message with fatal log level. </p>
|
||||
*
|
||||
* @param message log this message
|
||||
*/
|
||||
public void fatal(Object message);
|
||||
|
||||
|
||||
/**
|
||||
* <p> Log an error with fatal log level. </p>
|
||||
*
|
||||
* @param message log this message
|
||||
* @param t log this cause
|
||||
*/
|
||||
public void fatal(Object message, Throwable t);
|
||||
|
||||
|
||||
}
|
||||
98
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/LogConfigurationException.java
vendored
Normal file
98
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/LogConfigurationException.java
vendored
Normal file
@@ -0,0 +1,98 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.apache.commons.logging;
|
||||
|
||||
|
||||
/**
|
||||
* <p>An exception that is thrown only if a suitable <code>LogFactory</code>
|
||||
* or <code>Log</code> instance cannot be created by the corresponding
|
||||
* factory methods.</p>
|
||||
*
|
||||
* @author Craig R. McClanahan
|
||||
* @version $Revision: 424107 $ $Date: 2006-07-21 01:15:42 +0200 (fr, 21 jul 2006) $
|
||||
*/
|
||||
|
||||
public class LogConfigurationException extends RuntimeException {
|
||||
|
||||
|
||||
/**
|
||||
* Construct a new exception with <code>null</code> as its detail message.
|
||||
*/
|
||||
public LogConfigurationException() {
|
||||
|
||||
super();
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Construct a new exception with the specified detail message.
|
||||
*
|
||||
* @param message The detail message
|
||||
*/
|
||||
public LogConfigurationException(String message) {
|
||||
|
||||
super(message);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Construct a new exception with the specified cause and a derived
|
||||
* detail message.
|
||||
*
|
||||
* @param cause The underlying cause
|
||||
*/
|
||||
public LogConfigurationException(Throwable cause) {
|
||||
|
||||
this((cause == null) ? null : cause.toString(), cause);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Construct a new exception with the specified detail message and cause.
|
||||
*
|
||||
* @param message The detail message
|
||||
* @param cause The underlying cause
|
||||
*/
|
||||
public LogConfigurationException(String message, Throwable cause) {
|
||||
|
||||
super(message + " (Caused by " + cause + ")");
|
||||
this.cause = cause; // Two-argument version requires JDK 1.4 or later
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* The underlying cause of this exception.
|
||||
*/
|
||||
protected Throwable cause = null;
|
||||
|
||||
|
||||
/**
|
||||
* Return the underlying cause of this exception (if any).
|
||||
*/
|
||||
public Throwable getCause() {
|
||||
|
||||
return (this.cause);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
1824
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/LogFactory.java
vendored
Normal file
1824
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/LogFactory.java
vendored
Normal file
File diff suppressed because it is too large
Load Diff
262
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/LogSource.java
vendored
Normal file
262
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/LogSource.java
vendored
Normal file
@@ -0,0 +1,262 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.apache.commons.logging;
|
||||
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.util.Hashtable;
|
||||
|
||||
import org.apache.commons.logging.impl.NoOpLog;
|
||||
|
||||
|
||||
/**
|
||||
* <p>Factory for creating {@link Log} instances. Applications should call
|
||||
* the <code>makeNewLogInstance()</code> method to instantiate new instances
|
||||
* of the configured {@link Log} implementation class.</p>
|
||||
*
|
||||
* <p>By default, calling <code>getInstance()</code> will use the following
|
||||
* algorithm:</p>
|
||||
* <ul>
|
||||
* <li>If Log4J is available, return an instance of
|
||||
* <code>org.apache.commons.logging.impl.Log4JLogger</code>.</li>
|
||||
* <li>If JDK 1.4 or later is available, return an instance of
|
||||
* <code>org.apache.commons.logging.impl.Jdk14Logger</code>.</li>
|
||||
* <li>Otherwise, return an instance of
|
||||
* <code>org.apache.commons.logging.impl.NoOpLog</code>.</li>
|
||||
* </ul>
|
||||
*
|
||||
* <p>You can change the default behavior in one of two ways:</p>
|
||||
* <ul>
|
||||
* <li>On the startup command line, set the system property
|
||||
* <code>org.apache.commons.logging.log</code> to the name of the
|
||||
* <code>org.apache.commons.logging.Log</code> implementation class
|
||||
* you want to use.</li>
|
||||
* <li>At runtime, call <code>LogSource.setLogImplementation()</code>.</li>
|
||||
* </ul>
|
||||
*
|
||||
* @deprecated Use {@link LogFactory} instead - The default factory
|
||||
* implementation performs exactly the same algorithm as this class did
|
||||
*
|
||||
* @author Rod Waldhoff
|
||||
* @version $Id: LogSource.java 424107 2006-07-20 23:15:42Z skitching $
|
||||
*/
|
||||
public class LogSource {
|
||||
|
||||
// ------------------------------------------------------- Class Attributes
|
||||
|
||||
static protected Hashtable logs = new Hashtable();
|
||||
|
||||
/** Is log4j available (in the current classpath) */
|
||||
static protected boolean log4jIsAvailable = false;
|
||||
|
||||
/** Is JDK 1.4 logging available */
|
||||
static protected boolean jdk14IsAvailable = false;
|
||||
|
||||
/** Constructor for current log class */
|
||||
static protected Constructor logImplctor = null;
|
||||
|
||||
|
||||
// ----------------------------------------------------- Class Initializers
|
||||
|
||||
static {
|
||||
|
||||
// Is Log4J Available?
|
||||
try {
|
||||
if (null != Class.forName("org.apache.log4j.Logger")) {
|
||||
log4jIsAvailable = true;
|
||||
} else {
|
||||
log4jIsAvailable = false;
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
log4jIsAvailable = false;
|
||||
}
|
||||
|
||||
// Is JDK 1.4 Logging Available?
|
||||
try {
|
||||
if ((null != Class.forName("java.util.logging.Logger")) &&
|
||||
(null != Class.forName("org.apache.commons.logging.impl.Jdk14Logger"))) {
|
||||
jdk14IsAvailable = true;
|
||||
} else {
|
||||
jdk14IsAvailable = false;
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
jdk14IsAvailable = false;
|
||||
}
|
||||
|
||||
// Set the default Log implementation
|
||||
String name = null;
|
||||
try {
|
||||
name = System.getProperty("org.apache.commons.logging.log");
|
||||
if (name == null) {
|
||||
name = System.getProperty("org.apache.commons.logging.Log");
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
}
|
||||
if (name != null) {
|
||||
try {
|
||||
setLogImplementation(name);
|
||||
} catch (Throwable t) {
|
||||
try {
|
||||
setLogImplementation
|
||||
("org.apache.commons.logging.impl.NoOpLog");
|
||||
} catch (Throwable u) {
|
||||
;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
if (log4jIsAvailable) {
|
||||
setLogImplementation
|
||||
("org.apache.commons.logging.impl.Log4JLogger");
|
||||
} else if (jdk14IsAvailable) {
|
||||
setLogImplementation
|
||||
("org.apache.commons.logging.impl.Jdk14Logger");
|
||||
} else {
|
||||
setLogImplementation
|
||||
("org.apache.commons.logging.impl.NoOpLog");
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
try {
|
||||
setLogImplementation
|
||||
("org.apache.commons.logging.impl.NoOpLog");
|
||||
} catch (Throwable u) {
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// ------------------------------------------------------------ Constructor
|
||||
|
||||
|
||||
/** Don't allow others to create instances */
|
||||
private LogSource() {
|
||||
}
|
||||
|
||||
|
||||
// ---------------------------------------------------------- Class Methods
|
||||
|
||||
|
||||
/**
|
||||
* Set the log implementation/log implementation factory
|
||||
* by the name of the class. The given class
|
||||
* must implement {@link Log}, and provide a constructor that
|
||||
* takes a single {@link String} argument (containing the name
|
||||
* of the log).
|
||||
*/
|
||||
static public void setLogImplementation(String classname) throws
|
||||
LinkageError, ExceptionInInitializerError,
|
||||
NoSuchMethodException, SecurityException,
|
||||
ClassNotFoundException {
|
||||
try {
|
||||
Class logclass = Class.forName(classname);
|
||||
Class[] argtypes = new Class[1];
|
||||
argtypes[0] = "".getClass();
|
||||
logImplctor = logclass.getConstructor(argtypes);
|
||||
} catch (Throwable t) {
|
||||
logImplctor = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the log implementation/log implementation factory
|
||||
* by class. The given class must implement {@link Log},
|
||||
* and provide a constructor that takes a single {@link String}
|
||||
* argument (containing the name of the log).
|
||||
*/
|
||||
static public void setLogImplementation(Class logclass) throws
|
||||
LinkageError, ExceptionInInitializerError,
|
||||
NoSuchMethodException, SecurityException {
|
||||
Class[] argtypes = new Class[1];
|
||||
argtypes[0] = "".getClass();
|
||||
logImplctor = logclass.getConstructor(argtypes);
|
||||
}
|
||||
|
||||
|
||||
/** Get a <code>Log</code> instance by class name */
|
||||
static public Log getInstance(String name) {
|
||||
Log log = (Log) (logs.get(name));
|
||||
if (null == log) {
|
||||
log = makeNewLogInstance(name);
|
||||
logs.put(name, log);
|
||||
}
|
||||
return log;
|
||||
}
|
||||
|
||||
|
||||
/** Get a <code>Log</code> instance by class */
|
||||
static public Log getInstance(Class clazz) {
|
||||
return getInstance(clazz.getName());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create a new {@link Log} implementation, based
|
||||
* on the given <i>name</i>.
|
||||
* <p>
|
||||
* The specific {@link Log} implementation returned
|
||||
* is determined by the value of the
|
||||
* <tt>org.apache.commons.logging.log</tt> property.
|
||||
* The value of <tt>org.apache.commons.logging.log</tt> may be set to
|
||||
* the fully specified name of a class that implements
|
||||
* the {@link Log} interface. This class must also
|
||||
* have a public constructor that takes a single
|
||||
* {@link String} argument (containing the <i>name</i>
|
||||
* of the {@link Log} to be constructed.
|
||||
* <p>
|
||||
* When <tt>org.apache.commons.logging.log</tt> is not set,
|
||||
* or when no corresponding class can be found,
|
||||
* this method will return a Log4JLogger
|
||||
* if the log4j Logger class is
|
||||
* available in the {@link LogSource}'s classpath, or a
|
||||
* Jdk14Logger if we are on a JDK 1.4 or later system, or
|
||||
* NoOpLog if neither of the above conditions is true.
|
||||
*
|
||||
* @param name the log name (or category)
|
||||
*/
|
||||
static public Log makeNewLogInstance(String name) {
|
||||
|
||||
Log log = null;
|
||||
try {
|
||||
Object[] args = new Object[1];
|
||||
args[0] = name;
|
||||
log = (Log) (logImplctor.newInstance(args));
|
||||
} catch (Throwable t) {
|
||||
log = null;
|
||||
}
|
||||
if (null == log) {
|
||||
log = new NoOpLog(name);
|
||||
}
|
||||
return log;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns a {@link String} array containing the names of
|
||||
* all logs known to me.
|
||||
*/
|
||||
static public String[] getLogNames() {
|
||||
return (String[]) (logs.keySet().toArray(new String[logs.size()]));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
292
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/impl/AvalonLogger.java
vendored
Normal file
292
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/impl/AvalonLogger.java
vendored
Normal file
@@ -0,0 +1,292 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.apache.commons.logging.impl;
|
||||
|
||||
import org.apache.avalon.framework.logger.Logger;
|
||||
import org.apache.commons.logging.Log;
|
||||
|
||||
/**
|
||||
* <p>Implementation of commons-logging Log interface that delegates all
|
||||
* logging calls to the Avalon logging abstraction: the Logger interface.
|
||||
* </p>
|
||||
* <p>
|
||||
* There are two ways in which this class can be used:
|
||||
* </p>
|
||||
* <ul>
|
||||
* <li>the instance can be constructed with an Avalon logger
|
||||
* (by calling {@link #AvalonLogger(Logger)}). In this case, it acts
|
||||
* as a simple thin wrapping implementation over the logger. This is
|
||||
* particularly useful when using a property setter.
|
||||
* </li>
|
||||
* <li>the {@link #setDefaultLogger} class property can be called which
|
||||
* sets the ancesteral Avalon logger for this class. Any <code>AvalonLogger</code>
|
||||
* instances created through the <code>LogFactory</code> mechanisms will output
|
||||
* to child loggers of this <code>Logger</code>.
|
||||
* </li>
|
||||
* </ul>
|
||||
* <p>
|
||||
* <strong>Note:</strong> <code>AvalonLogger</code> does not implement Serializable
|
||||
* because the constructors available for it make this impossible to achieve in all
|
||||
* circumstances; there is no way to "reconnect" to an underlying Logger object on
|
||||
* deserialization if one was just passed in to the constructor of the original
|
||||
* object. This class <i>was</i> marked Serializable in the 1.0.4 release of
|
||||
* commons-logging, but this never actually worked (a NullPointerException would
|
||||
* be thrown as soon as the deserialized object was used), so removing this marker
|
||||
* is not considered to be an incompatible change.
|
||||
* </p>
|
||||
* @author <a href="mailto:neeme@apache.org">Neeme Praks</a>
|
||||
* @version $Revision: 424107 $ $Date: 2006-07-21 01:15:42 +0200 (fr, 21 jul 2006) $
|
||||
*/
|
||||
public class AvalonLogger implements Log {
|
||||
|
||||
/** Ancesteral avalon logger */
|
||||
private static Logger defaultLogger = null;
|
||||
/** Avalon logger used to perform log */
|
||||
private transient Logger logger = null;
|
||||
|
||||
/**
|
||||
* Constructs an <code>AvalonLogger</code> that outputs to the given
|
||||
* <code>Logger</code> instance.
|
||||
* @param logger the avalon logger implementation to delegate to
|
||||
*/
|
||||
public AvalonLogger(Logger logger) {
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs an <code>AvalonLogger</code> that will log to a child
|
||||
* of the <code>Logger</code> set by calling {@link #setDefaultLogger}.
|
||||
* @param name the name of the avalon logger implementation to delegate to
|
||||
*/
|
||||
public AvalonLogger(String name) {
|
||||
if (defaultLogger == null)
|
||||
throw new NullPointerException("default logger has to be specified if this constructor is used!");
|
||||
this.logger = defaultLogger.getChildLogger(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the Avalon logger implementation used to perform logging.
|
||||
* @return avalon logger implementation
|
||||
*/
|
||||
public Logger getLogger() {
|
||||
return logger;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the ancesteral Avalon logger from which the delegating loggers
|
||||
* will descend.
|
||||
* @param logger the default avalon logger,
|
||||
* in case there is no logger instance supplied in constructor
|
||||
*/
|
||||
public static void setDefaultLogger(Logger logger) {
|
||||
defaultLogger = logger;
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs a message with
|
||||
* <code>org.apache.avalon.framework.logger.Logger.debug</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param t log this cause
|
||||
* @see org.apache.commons.logging.Log#debug(Object, Throwable)
|
||||
*/
|
||||
public void debug(Object message, Throwable t) {
|
||||
if (getLogger().isDebugEnabled()) getLogger().debug(String.valueOf(message), t);
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs a message with
|
||||
* <code>org.apache.avalon.framework.logger.Logger.debug</code>.
|
||||
*
|
||||
* @param message to log.
|
||||
* @see org.apache.commons.logging.Log#debug(Object)
|
||||
*/
|
||||
public void debug(Object message) {
|
||||
if (getLogger().isDebugEnabled()) getLogger().debug(String.valueOf(message));
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs a message with
|
||||
* <code>org.apache.avalon.framework.logger.Logger.error</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param t log this cause
|
||||
* @see org.apache.commons.logging.Log#error(Object, Throwable)
|
||||
*/
|
||||
public void error(Object message, Throwable t) {
|
||||
if (getLogger().isErrorEnabled()) getLogger().error(String.valueOf(message), t);
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs a message with
|
||||
* <code>org.apache.avalon.framework.logger.Logger.error</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#error(Object)
|
||||
*/
|
||||
public void error(Object message) {
|
||||
if (getLogger().isErrorEnabled()) getLogger().error(String.valueOf(message));
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs a message with
|
||||
* <code>org.apache.avalon.framework.logger.Logger.fatalError</code>.
|
||||
*
|
||||
* @param message to log.
|
||||
* @param t log this cause.
|
||||
* @see org.apache.commons.logging.Log#fatal(Object, Throwable)
|
||||
*/
|
||||
public void fatal(Object message, Throwable t) {
|
||||
if (getLogger().isFatalErrorEnabled()) getLogger().fatalError(String.valueOf(message), t);
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs a message with
|
||||
* <code>org.apache.avalon.framework.logger.Logger.fatalError</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#fatal(Object)
|
||||
*/
|
||||
public void fatal(Object message) {
|
||||
if (getLogger().isFatalErrorEnabled()) getLogger().fatalError(String.valueOf(message));
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs a message with
|
||||
* <code>org.apache.avalon.framework.logger.Logger.info</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param t log this cause
|
||||
* @see org.apache.commons.logging.Log#info(Object, Throwable)
|
||||
*/
|
||||
public void info(Object message, Throwable t) {
|
||||
if (getLogger().isInfoEnabled()) getLogger().info(String.valueOf(message), t);
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs a message with
|
||||
* <code>org.apache.avalon.framework.logger.Logger.info</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#info(Object)
|
||||
*/
|
||||
public void info(Object message) {
|
||||
if (getLogger().isInfoEnabled()) getLogger().info(String.valueOf(message));
|
||||
}
|
||||
|
||||
/**
|
||||
* Is logging to
|
||||
* <code>org.apache.avalon.framework.logger.Logger.debug</code> enabled?
|
||||
* @see org.apache.commons.logging.Log#isDebugEnabled()
|
||||
*/
|
||||
public boolean isDebugEnabled() {
|
||||
return getLogger().isDebugEnabled();
|
||||
}
|
||||
|
||||
/**
|
||||
* Is logging to
|
||||
* <code>org.apache.avalon.framework.logger.Logger.error</code> enabled?
|
||||
* @see org.apache.commons.logging.Log#isErrorEnabled()
|
||||
*/
|
||||
public boolean isErrorEnabled() {
|
||||
return getLogger().isErrorEnabled();
|
||||
}
|
||||
|
||||
/**
|
||||
* Is logging to
|
||||
* <code>org.apache.avalon.framework.logger.Logger.fatalError</code> enabled?
|
||||
* @see org.apache.commons.logging.Log#isFatalEnabled()
|
||||
*/
|
||||
public boolean isFatalEnabled() {
|
||||
return getLogger().isFatalErrorEnabled();
|
||||
}
|
||||
|
||||
/**
|
||||
* Is logging to
|
||||
* <code>org.apache.avalon.framework.logger.Logger.info</code> enabled?
|
||||
* @see org.apache.commons.logging.Log#isInfoEnabled()
|
||||
*/
|
||||
public boolean isInfoEnabled() {
|
||||
return getLogger().isInfoEnabled();
|
||||
}
|
||||
|
||||
/**
|
||||
* Is logging to
|
||||
* <code>org.apache.avalon.framework.logger.Logger.debug</code> enabled?
|
||||
* @see org.apache.commons.logging.Log#isTraceEnabled()
|
||||
*/
|
||||
public boolean isTraceEnabled() {
|
||||
return getLogger().isDebugEnabled();
|
||||
}
|
||||
|
||||
/**
|
||||
* Is logging to
|
||||
* <code>org.apache.avalon.framework.logger.Logger.warn</code> enabled?
|
||||
* @see org.apache.commons.logging.Log#isWarnEnabled()
|
||||
*/
|
||||
public boolean isWarnEnabled() {
|
||||
return getLogger().isWarnEnabled();
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs a message with
|
||||
* <code>org.apache.avalon.framework.logger.Logger.debug</code>.
|
||||
*
|
||||
* @param message to log.
|
||||
* @param t log this cause.
|
||||
* @see org.apache.commons.logging.Log#trace(Object, Throwable)
|
||||
*/
|
||||
public void trace(Object message, Throwable t) {
|
||||
if (getLogger().isDebugEnabled()) getLogger().debug(String.valueOf(message), t);
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs a message with
|
||||
* <code>org.apache.avalon.framework.logger.Logger.debug</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#trace(Object)
|
||||
*/
|
||||
public void trace(Object message) {
|
||||
if (getLogger().isDebugEnabled()) getLogger().debug(String.valueOf(message));
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs a message with
|
||||
* <code>org.apache.avalon.framework.logger.Logger.warn</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param t log this cause
|
||||
* @see org.apache.commons.logging.Log#warn(Object, Throwable)
|
||||
*/
|
||||
public void warn(Object message, Throwable t) {
|
||||
if (getLogger().isWarnEnabled()) getLogger().warn(String.valueOf(message), t);
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs a message with
|
||||
* <code>org.apache.avalon.framework.logger.Logger.warn</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#warn(Object)
|
||||
*/
|
||||
public void warn(Object message) {
|
||||
if (getLogger().isWarnEnabled()) getLogger().warn(String.valueOf(message));
|
||||
}
|
||||
|
||||
}
|
||||
335
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/impl/Jdk13LumberjackLogger.java
vendored
Normal file
335
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/impl/Jdk13LumberjackLogger.java
vendored
Normal file
@@ -0,0 +1,335 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package org.apache.commons.logging.impl;
|
||||
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.logging.LogRecord;
|
||||
import java.util.StringTokenizer;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
||||
|
||||
/**
|
||||
* <p>Implementation of the <code>org.apache.commons.logging.Log</code>
|
||||
* interface that wraps the standard JDK logging mechanisms that are
|
||||
* available in SourceForge's Lumberjack for JDKs prior to 1.4.</p>
|
||||
*
|
||||
* @author <a href="mailto:sanders@apache.org">Scott Sanders</a>
|
||||
* @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
|
||||
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
|
||||
* @author <a href="mailto:vince256@comcast.net">Vince Eagen</a>
|
||||
* @version $Revision: 424107 $ $Date: 2006-07-21 01:15:42 +0200 (fr, 21 jul 2006) $
|
||||
* @since 1.1
|
||||
*/
|
||||
|
||||
public class Jdk13LumberjackLogger implements Log, Serializable {
|
||||
|
||||
|
||||
// ----------------------------------------------------- Instance Variables
|
||||
|
||||
|
||||
/**
|
||||
* The underlying Logger implementation we are using.
|
||||
*/
|
||||
protected transient Logger logger = null;
|
||||
protected String name = null;
|
||||
private String sourceClassName = "unknown";
|
||||
private String sourceMethodName = "unknown";
|
||||
private boolean classAndMethodFound = false;
|
||||
|
||||
|
||||
/**
|
||||
* This member variable simply ensures that any attempt to initialise
|
||||
* this class in a pre-1.4 JVM will result in an ExceptionInInitializerError.
|
||||
* It must not be private, as an optimising compiler could detect that it
|
||||
* is not used and optimise it away.
|
||||
*/
|
||||
protected static final Level dummyLevel = Level.FINE;
|
||||
|
||||
// ----------------------------------------------------------- Constructors
|
||||
|
||||
|
||||
/**
|
||||
* Construct a named instance of this Logger.
|
||||
*
|
||||
* @param name Name of the logger to be constructed
|
||||
*/
|
||||
public Jdk13LumberjackLogger(String name) {
|
||||
|
||||
this.name = name;
|
||||
logger = getLogger();
|
||||
|
||||
}
|
||||
|
||||
|
||||
// --------------------------------------------------------- Public Methods
|
||||
|
||||
|
||||
private void log( Level level, String msg, Throwable ex ) {
|
||||
if( getLogger().isLoggable(level) ) {
|
||||
LogRecord record = new LogRecord(level, msg);
|
||||
if( !classAndMethodFound ) {
|
||||
getClassAndMethod();
|
||||
}
|
||||
record.setSourceClassName(sourceClassName);
|
||||
record.setSourceMethodName(sourceMethodName);
|
||||
if( ex != null ) {
|
||||
record.setThrown(ex);
|
||||
}
|
||||
getLogger().log(record);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Gets the class and method by looking at the stack trace for the
|
||||
* first entry that is not this class.</p>
|
||||
*/
|
||||
private void getClassAndMethod() {
|
||||
try {
|
||||
Throwable throwable = new Throwable();
|
||||
throwable.fillInStackTrace();
|
||||
StringWriter stringWriter = new StringWriter();
|
||||
PrintWriter printWriter = new PrintWriter( stringWriter );
|
||||
throwable.printStackTrace( printWriter );
|
||||
String traceString = stringWriter.getBuffer().toString();
|
||||
StringTokenizer tokenizer =
|
||||
new StringTokenizer( traceString, "\n" );
|
||||
tokenizer.nextToken();
|
||||
String line = tokenizer.nextToken();
|
||||
while ( line.indexOf( this.getClass().getName() ) == -1 ) {
|
||||
line = tokenizer.nextToken();
|
||||
}
|
||||
while ( line.indexOf( this.getClass().getName() ) >= 0 ) {
|
||||
line = tokenizer.nextToken();
|
||||
}
|
||||
int start = line.indexOf( "at " ) + 3;
|
||||
int end = line.indexOf( '(' );
|
||||
String temp = line.substring( start, end );
|
||||
int lastPeriod = temp.lastIndexOf( '.' );
|
||||
sourceClassName = temp.substring( 0, lastPeriod );
|
||||
sourceMethodName = temp.substring( lastPeriod + 1 );
|
||||
} catch ( Exception ex ) {
|
||||
// ignore - leave class and methodname unknown
|
||||
}
|
||||
classAndMethodFound = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.FINE</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#debug(Object)
|
||||
*/
|
||||
public void debug(Object message) {
|
||||
log(Level.FINE, String.valueOf(message), null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.FINE</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param exception log this cause
|
||||
* @see org.apache.commons.logging.Log#debug(Object, Throwable)
|
||||
*/
|
||||
public void debug(Object message, Throwable exception) {
|
||||
log(Level.FINE, String.valueOf(message), exception);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.SEVERE</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#error(Object)
|
||||
*/
|
||||
public void error(Object message) {
|
||||
log(Level.SEVERE, String.valueOf(message), null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.SEVERE</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param exception log this cause
|
||||
* @see org.apache.commons.logging.Log#error(Object, Throwable)
|
||||
*/
|
||||
public void error(Object message, Throwable exception) {
|
||||
log(Level.SEVERE, String.valueOf(message), exception);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.SEVERE</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#fatal(Object)
|
||||
*/
|
||||
public void fatal(Object message) {
|
||||
log(Level.SEVERE, String.valueOf(message), null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.SEVERE</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param exception log this cause
|
||||
* @see org.apache.commons.logging.Log#fatal(Object, Throwable)
|
||||
*/
|
||||
public void fatal(Object message, Throwable exception) {
|
||||
log(Level.SEVERE, String.valueOf(message), exception);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the native Logger instance we are using.
|
||||
*/
|
||||
public Logger getLogger() {
|
||||
if (logger == null) {
|
||||
logger = Logger.getLogger(name);
|
||||
}
|
||||
return (logger);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.INFO</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#info(Object)
|
||||
*/
|
||||
public void info(Object message) {
|
||||
log(Level.INFO, String.valueOf(message), null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.INFO</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param exception log this cause
|
||||
* @see org.apache.commons.logging.Log#info(Object, Throwable)
|
||||
*/
|
||||
public void info(Object message, Throwable exception) {
|
||||
log(Level.INFO, String.valueOf(message), exception);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Is debug logging currently enabled?
|
||||
*/
|
||||
public boolean isDebugEnabled() {
|
||||
return (getLogger().isLoggable(Level.FINE));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Is error logging currently enabled?
|
||||
*/
|
||||
public boolean isErrorEnabled() {
|
||||
return (getLogger().isLoggable(Level.SEVERE));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Is fatal logging currently enabled?
|
||||
*/
|
||||
public boolean isFatalEnabled() {
|
||||
return (getLogger().isLoggable(Level.SEVERE));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Is info logging currently enabled?
|
||||
*/
|
||||
public boolean isInfoEnabled() {
|
||||
return (getLogger().isLoggable(Level.INFO));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Is trace logging currently enabled?
|
||||
*/
|
||||
public boolean isTraceEnabled() {
|
||||
return (getLogger().isLoggable(Level.FINEST));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Is warn logging currently enabled?
|
||||
*/
|
||||
public boolean isWarnEnabled() {
|
||||
return (getLogger().isLoggable(Level.WARNING));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.FINEST</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#trace(Object)
|
||||
*/
|
||||
public void trace(Object message) {
|
||||
log(Level.FINEST, String.valueOf(message), null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.FINEST</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param exception log this cause
|
||||
* @see org.apache.commons.logging.Log#trace(Object, Throwable)
|
||||
*/
|
||||
public void trace(Object message, Throwable exception) {
|
||||
log(Level.FINEST, String.valueOf(message), exception);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.WARNING</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#warn(Object)
|
||||
*/
|
||||
public void warn(Object message) {
|
||||
log(Level.WARNING, String.valueOf(message), null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.WARNING</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param exception log this cause
|
||||
* @see org.apache.commons.logging.Log#warn(Object, Throwable)
|
||||
*/
|
||||
public void warn(Object message, Throwable exception) {
|
||||
log(Level.WARNING, String.valueOf(message), exception);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
304
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/impl/Jdk14Logger.java
vendored
Normal file
304
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/impl/Jdk14Logger.java
vendored
Normal file
@@ -0,0 +1,304 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package org.apache.commons.logging.impl;
|
||||
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
||||
|
||||
/**
|
||||
* <p>Implementation of the <code>org.apache.commons.logging.Log</code>
|
||||
* interface that wraps the standard JDK logging mechanisms that were
|
||||
* introduced in the Merlin release (JDK 1.4).</p>
|
||||
*
|
||||
* @author <a href="mailto:sanders@apache.org">Scott Sanders</a>
|
||||
* @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
|
||||
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
|
||||
* @version $Revision: 424107 $ $Date: 2006-07-21 01:15:42 +0200 (fr, 21 jul 2006) $
|
||||
*/
|
||||
|
||||
public class Jdk14Logger implements Log, Serializable {
|
||||
|
||||
/**
|
||||
* This member variable simply ensures that any attempt to initialise
|
||||
* this class in a pre-1.4 JVM will result in an ExceptionInInitializerError.
|
||||
* It must not be private, as an optimising compiler could detect that it
|
||||
* is not used and optimise it away.
|
||||
*/
|
||||
protected static final Level dummyLevel = Level.FINE;
|
||||
|
||||
// ----------------------------------------------------------- Constructors
|
||||
|
||||
|
||||
/**
|
||||
* Construct a named instance of this Logger.
|
||||
*
|
||||
* @param name Name of the logger to be constructed
|
||||
*/
|
||||
public Jdk14Logger(String name) {
|
||||
|
||||
this.name = name;
|
||||
logger = getLogger();
|
||||
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------------- Instance Variables
|
||||
|
||||
|
||||
/**
|
||||
* The underlying Logger implementation we are using.
|
||||
*/
|
||||
protected transient Logger logger = null;
|
||||
|
||||
|
||||
/**
|
||||
* The name of the logger we are wrapping.
|
||||
*/
|
||||
protected String name = null;
|
||||
|
||||
|
||||
// --------------------------------------------------------- Public Methods
|
||||
|
||||
private void log( Level level, String msg, Throwable ex ) {
|
||||
|
||||
Logger logger = getLogger();
|
||||
if (logger.isLoggable(level)) {
|
||||
// Hack (?) to get the stack trace.
|
||||
Throwable dummyException=new Throwable();
|
||||
StackTraceElement locations[]=dummyException.getStackTrace();
|
||||
// Caller will be the third element
|
||||
String cname="unknown";
|
||||
String method="unknown";
|
||||
if( locations!=null && locations.length >2 ) {
|
||||
StackTraceElement caller=locations[2];
|
||||
cname=caller.getClassName();
|
||||
method=caller.getMethodName();
|
||||
}
|
||||
if( ex==null ) {
|
||||
logger.logp( level, cname, method, msg );
|
||||
} else {
|
||||
logger.logp( level, cname, method, msg, ex );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.FINE</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#debug(Object)
|
||||
*/
|
||||
public void debug(Object message) {
|
||||
log(Level.FINE, String.valueOf(message), null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.FINE</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param exception log this cause
|
||||
* @see org.apache.commons.logging.Log#debug(Object, Throwable)
|
||||
*/
|
||||
public void debug(Object message, Throwable exception) {
|
||||
log(Level.FINE, String.valueOf(message), exception);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.SEVERE</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#error(Object)
|
||||
*/
|
||||
public void error(Object message) {
|
||||
log(Level.SEVERE, String.valueOf(message), null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.SEVERE</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param exception log this cause
|
||||
* @see org.apache.commons.logging.Log#error(Object, Throwable)
|
||||
*/
|
||||
public void error(Object message, Throwable exception) {
|
||||
log(Level.SEVERE, String.valueOf(message), exception);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.SEVERE</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#fatal(Object)
|
||||
*/
|
||||
public void fatal(Object message) {
|
||||
log(Level.SEVERE, String.valueOf(message), null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.SEVERE</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param exception log this cause
|
||||
* @see org.apache.commons.logging.Log#fatal(Object, Throwable)
|
||||
*/
|
||||
public void fatal(Object message, Throwable exception) {
|
||||
log(Level.SEVERE, String.valueOf(message), exception);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the native Logger instance we are using.
|
||||
*/
|
||||
public Logger getLogger() {
|
||||
if (logger == null) {
|
||||
logger = Logger.getLogger(name);
|
||||
}
|
||||
return (logger);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.INFO</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#info(Object)
|
||||
*/
|
||||
public void info(Object message) {
|
||||
log(Level.INFO, String.valueOf(message), null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.INFO</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param exception log this cause
|
||||
* @see org.apache.commons.logging.Log#info(Object, Throwable)
|
||||
*/
|
||||
public void info(Object message, Throwable exception) {
|
||||
log(Level.INFO, String.valueOf(message), exception);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Is debug logging currently enabled?
|
||||
*/
|
||||
public boolean isDebugEnabled() {
|
||||
return (getLogger().isLoggable(Level.FINE));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Is error logging currently enabled?
|
||||
*/
|
||||
public boolean isErrorEnabled() {
|
||||
return (getLogger().isLoggable(Level.SEVERE));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Is fatal logging currently enabled?
|
||||
*/
|
||||
public boolean isFatalEnabled() {
|
||||
return (getLogger().isLoggable(Level.SEVERE));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Is info logging currently enabled?
|
||||
*/
|
||||
public boolean isInfoEnabled() {
|
||||
return (getLogger().isLoggable(Level.INFO));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Is trace logging currently enabled?
|
||||
*/
|
||||
public boolean isTraceEnabled() {
|
||||
return (getLogger().isLoggable(Level.FINEST));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Is warn logging currently enabled?
|
||||
*/
|
||||
public boolean isWarnEnabled() {
|
||||
return (getLogger().isLoggable(Level.WARNING));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.FINEST</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#trace(Object)
|
||||
*/
|
||||
public void trace(Object message) {
|
||||
log(Level.FINEST, String.valueOf(message), null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.FINEST</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param exception log this cause
|
||||
* @see org.apache.commons.logging.Log#trace(Object, Throwable)
|
||||
*/
|
||||
public void trace(Object message, Throwable exception) {
|
||||
log(Level.FINEST, String.valueOf(message), exception);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.WARNING</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#warn(Object)
|
||||
*/
|
||||
public void warn(Object message) {
|
||||
log(Level.WARNING, String.valueOf(message), null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>java.util.logging.Level.WARNING</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param exception log this cause
|
||||
* @see org.apache.commons.logging.Log#warn(Object, Throwable)
|
||||
*/
|
||||
public void warn(Object message, Throwable exception) {
|
||||
log(Level.WARNING, String.valueOf(message), exception);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
342
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/impl/Log4JLogger.java
vendored
Normal file
342
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/impl/Log4JLogger.java
vendored
Normal file
@@ -0,0 +1,342 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package org.apache.commons.logging.impl;
|
||||
|
||||
import java.io.Serializable;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.apache.log4j.Priority;
|
||||
import org.apache.log4j.Level;
|
||||
|
||||
/**
|
||||
* Implementation of {@link Log} that maps directly to a
|
||||
* <strong>Logger</strong> for log4J version 1.2.
|
||||
* <p>
|
||||
* Initial configuration of the corresponding Logger instances should be done
|
||||
* in the usual manner, as outlined in the Log4J documentation.
|
||||
* <p>
|
||||
* The reason this logger is distinct from the 1.3 logger is that in version 1.2
|
||||
* of Log4J:
|
||||
* <ul>
|
||||
* <li>class Logger takes Priority parameters not Level parameters.
|
||||
* <li>class Level extends Priority
|
||||
* </ul>
|
||||
* Log4J1.3 is expected to change Level so it no longer extends Priority, which is
|
||||
* a non-binary-compatible change. The class generated by compiling this code against
|
||||
* log4j 1.2 will therefore not run against log4j 1.3.
|
||||
*
|
||||
* @author <a href="mailto:sanders@apache.org">Scott Sanders</a>
|
||||
* @author Rod Waldhoff
|
||||
* @author Robert Burrell Donkin
|
||||
* @version $Id: Log4JLogger.java 479747 2006-11-27 20:15:01Z dennisl $
|
||||
*/
|
||||
|
||||
public class Log4JLogger implements Log, Serializable {
|
||||
|
||||
// ------------------------------------------------------------- Attributes
|
||||
|
||||
/** The fully qualified name of the Log4JLogger class. */
|
||||
private static final String FQCN = Log4JLogger.class.getName();
|
||||
|
||||
/** Log to this logger */
|
||||
private transient Logger logger = null;
|
||||
|
||||
/** Logger name */
|
||||
private String name = null;
|
||||
|
||||
private static Priority traceLevel;
|
||||
|
||||
// ------------------------------------------------------------
|
||||
// Static Initializer.
|
||||
//
|
||||
// Note that this must come after the static variable declarations
|
||||
// otherwise initialiser expressions associated with those variables
|
||||
// will override any settings done here.
|
||||
//
|
||||
// Verify that log4j is available, and that it is version 1.2.
|
||||
// If an ExceptionInInitializerError is generated, then LogFactoryImpl
|
||||
// will treat that as meaning that the appropriate underlying logging
|
||||
// library is just not present - if discovery is in progress then
|
||||
// discovery will continue.
|
||||
// ------------------------------------------------------------
|
||||
|
||||
static {
|
||||
if (!Priority.class.isAssignableFrom(Level.class)) {
|
||||
// nope, this is log4j 1.3, so force an ExceptionInInitializerError
|
||||
throw new InstantiationError("Log4J 1.2 not available");
|
||||
}
|
||||
|
||||
// Releases of log4j1.2 >= 1.2.12 have Priority.TRACE available, earlier
|
||||
// versions do not. If TRACE is not available, then we have to map
|
||||
// calls to Log.trace(...) onto the DEBUG level.
|
||||
|
||||
try {
|
||||
traceLevel = (Priority) Level.class.getDeclaredField("TRACE").get(null);
|
||||
} catch(Exception ex) {
|
||||
// ok, trace not available
|
||||
traceLevel = Priority.DEBUG;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ------------------------------------------------------------ Constructor
|
||||
|
||||
public Log4JLogger() {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Base constructor.
|
||||
*/
|
||||
public Log4JLogger(String name) {
|
||||
this.name = name;
|
||||
this.logger = getLogger();
|
||||
}
|
||||
|
||||
/**
|
||||
* For use with a log4j factory.
|
||||
*/
|
||||
public Log4JLogger(Logger logger ) {
|
||||
if (logger == null) {
|
||||
throw new IllegalArgumentException(
|
||||
"Warning - null logger in constructor; possible log4j misconfiguration.");
|
||||
}
|
||||
this.name = logger.getName();
|
||||
this.logger=logger;
|
||||
}
|
||||
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// Implementation
|
||||
//
|
||||
// Note that in the methods below the Priority class is used to define
|
||||
// levels even though the Level class is supported in 1.2. This is done
|
||||
// so that at compile time the call definitely resolves to a call to
|
||||
// a method that takes a Priority rather than one that takes a Level.
|
||||
//
|
||||
// The Category class (and hence its subclass Logger) in version 1.2 only
|
||||
// has methods that take Priority objects. The Category class (and hence
|
||||
// Logger class) in version 1.3 has methods that take both Priority and
|
||||
// Level objects. This means that if we use Level here, and compile
|
||||
// against log4j 1.3 then calls would be bound to the versions of
|
||||
// methods taking Level objects and then would fail to run against
|
||||
// version 1.2 of log4j.
|
||||
// ---------------------------------------------------------
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log4j.Priority.TRACE</code>.
|
||||
* When using a log4j version that does not support the <code>TRACE</code>
|
||||
* level, the message will be logged at the <code>DEBUG</code> level.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#trace(Object)
|
||||
*/
|
||||
public void trace(Object message) {
|
||||
getLogger().log(FQCN, traceLevel, message, null );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log4j.Priority.TRACE</code>.
|
||||
* When using a log4j version that does not support the <code>TRACE</code>
|
||||
* level, the message will be logged at the <code>DEBUG</code> level.
|
||||
*
|
||||
* @param message to log
|
||||
* @param t log this cause
|
||||
* @see org.apache.commons.logging.Log#trace(Object, Throwable)
|
||||
*/
|
||||
public void trace(Object message, Throwable t) {
|
||||
getLogger().log(FQCN, traceLevel, message, t );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log4j.Priority.DEBUG</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#debug(Object)
|
||||
*/
|
||||
public void debug(Object message) {
|
||||
getLogger().log(FQCN, Priority.DEBUG, message, null );
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log4j.Priority.DEBUG</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param t log this cause
|
||||
* @see org.apache.commons.logging.Log#debug(Object, Throwable)
|
||||
*/
|
||||
public void debug(Object message, Throwable t) {
|
||||
getLogger().log(FQCN, Priority.DEBUG, message, t );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log4j.Priority.INFO</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#info(Object)
|
||||
*/
|
||||
public void info(Object message) {
|
||||
getLogger().log(FQCN, Priority.INFO, message, null );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log4j.Priority.INFO</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param t log this cause
|
||||
* @see org.apache.commons.logging.Log#info(Object, Throwable)
|
||||
*/
|
||||
public void info(Object message, Throwable t) {
|
||||
getLogger().log(FQCN, Priority.INFO, message, t );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log4j.Priority.WARN</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#warn(Object)
|
||||
*/
|
||||
public void warn(Object message) {
|
||||
getLogger().log(FQCN, Priority.WARN, message, null );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log4j.Priority.WARN</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param t log this cause
|
||||
* @see org.apache.commons.logging.Log#warn(Object, Throwable)
|
||||
*/
|
||||
public void warn(Object message, Throwable t) {
|
||||
getLogger().log(FQCN, Priority.WARN, message, t );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log4j.Priority.ERROR</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#error(Object)
|
||||
*/
|
||||
public void error(Object message) {
|
||||
getLogger().log(FQCN, Priority.ERROR, message, null );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log4j.Priority.ERROR</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param t log this cause
|
||||
* @see org.apache.commons.logging.Log#error(Object, Throwable)
|
||||
*/
|
||||
public void error(Object message, Throwable t) {
|
||||
getLogger().log(FQCN, Priority.ERROR, message, t );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log4j.Priority.FATAL</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#fatal(Object)
|
||||
*/
|
||||
public void fatal(Object message) {
|
||||
getLogger().log(FQCN, Priority.FATAL, message, null );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log4j.Priority.FATAL</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param t log this cause
|
||||
* @see org.apache.commons.logging.Log#fatal(Object, Throwable)
|
||||
*/
|
||||
public void fatal(Object message, Throwable t) {
|
||||
getLogger().log(FQCN, Priority.FATAL, message, t );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the native Logger instance we are using.
|
||||
*/
|
||||
public Logger getLogger() {
|
||||
if (logger == null) {
|
||||
logger = Logger.getLogger(name);
|
||||
}
|
||||
return (this.logger);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check whether the Log4j Logger used is enabled for <code>DEBUG</code> priority.
|
||||
*/
|
||||
public boolean isDebugEnabled() {
|
||||
return getLogger().isDebugEnabled();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check whether the Log4j Logger used is enabled for <code>ERROR</code> priority.
|
||||
*/
|
||||
public boolean isErrorEnabled() {
|
||||
return getLogger().isEnabledFor(Priority.ERROR);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check whether the Log4j Logger used is enabled for <code>FATAL</code> priority.
|
||||
*/
|
||||
public boolean isFatalEnabled() {
|
||||
return getLogger().isEnabledFor(Priority.FATAL);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check whether the Log4j Logger used is enabled for <code>INFO</code> priority.
|
||||
*/
|
||||
public boolean isInfoEnabled() {
|
||||
return getLogger().isInfoEnabled();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check whether the Log4j Logger used is enabled for <code>TRACE</code> priority.
|
||||
* When using a log4j version that does not support the TRACE level, this call
|
||||
* will report whether <code>DEBUG</code> is enabled or not.
|
||||
*/
|
||||
public boolean isTraceEnabled() {
|
||||
return getLogger().isEnabledFor(traceLevel);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the Log4j Logger used is enabled for <code>WARN</code> priority.
|
||||
*/
|
||||
public boolean isWarnEnabled() {
|
||||
return getLogger().isEnabledFor(Priority.WARN);
|
||||
}
|
||||
}
|
||||
1500
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/impl/LogFactoryImpl.java
vendored
Normal file
1500
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/impl/LogFactoryImpl.java
vendored
Normal file
File diff suppressed because it is too large
Load Diff
294
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/impl/LogKitLogger.java
vendored
Normal file
294
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/impl/LogKitLogger.java
vendored
Normal file
@@ -0,0 +1,294 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package org.apache.commons.logging.impl;
|
||||
|
||||
import java.io.Serializable;
|
||||
import org.apache.log.Logger;
|
||||
import org.apache.log.Hierarchy;
|
||||
import org.apache.commons.logging.Log;
|
||||
|
||||
/**
|
||||
* <p>Implementation of <code>org.apache.commons.logging.Log</code>
|
||||
* that wraps the <a href="http://avalon.apache.org/logkit/">avalon-logkit</a>
|
||||
* logging system. Configuration of <code>LogKit</code> is left to the user.
|
||||
* </p>
|
||||
*
|
||||
* <p><code>LogKit</code> accepts only <code>String</code> messages.
|
||||
* Therefore, this implementation converts object messages into strings
|
||||
* by called their <code>toString()</code> method before logging them.</p>
|
||||
*
|
||||
* @author <a href="mailto:sanders@apache.org">Scott Sanders</a>
|
||||
* @author Robert Burrell Donkin
|
||||
* @version $Id: LogKitLogger.java 424107 2006-07-20 23:15:42Z skitching $
|
||||
*/
|
||||
|
||||
public class LogKitLogger implements Log, Serializable {
|
||||
|
||||
|
||||
// ------------------------------------------------------------- Attributes
|
||||
|
||||
|
||||
/** Logging goes to this <code>LogKit</code> logger */
|
||||
protected transient Logger logger = null;
|
||||
|
||||
/** Name of this logger */
|
||||
protected String name = null;
|
||||
|
||||
|
||||
// ------------------------------------------------------------ Constructor
|
||||
|
||||
|
||||
/**
|
||||
* Construct <code>LogKitLogger</code> which wraps the <code>LogKit</code>
|
||||
* logger with given name.
|
||||
*
|
||||
* @param name log name
|
||||
*/
|
||||
public LogKitLogger(String name) {
|
||||
this.name = name;
|
||||
this.logger = getLogger();
|
||||
}
|
||||
|
||||
|
||||
// --------------------------------------------------------- Public Methods
|
||||
|
||||
|
||||
/**
|
||||
* <p>Return the underlying Logger we are using.</p>
|
||||
*/
|
||||
public Logger getLogger() {
|
||||
|
||||
if (logger == null) {
|
||||
logger = Hierarchy.getDefaultHierarchy().getLoggerFor(name);
|
||||
}
|
||||
return (logger);
|
||||
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------------- Log Implementation
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log.Priority.DEBUG</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#trace(Object)
|
||||
*/
|
||||
public void trace(Object message) {
|
||||
debug(message);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log.Priority.DEBUG</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param t log this cause
|
||||
* @see org.apache.commons.logging.Log#trace(Object, Throwable)
|
||||
*/
|
||||
public void trace(Object message, Throwable t) {
|
||||
debug(message, t);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log.Priority.DEBUG</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#debug(Object)
|
||||
*/
|
||||
public void debug(Object message) {
|
||||
if (message != null) {
|
||||
getLogger().debug(String.valueOf(message));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log.Priority.DEBUG</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param t log this cause
|
||||
* @see org.apache.commons.logging.Log#debug(Object, Throwable)
|
||||
*/
|
||||
public void debug(Object message, Throwable t) {
|
||||
if (message != null) {
|
||||
getLogger().debug(String.valueOf(message), t);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log.Priority.INFO</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#info(Object)
|
||||
*/
|
||||
public void info(Object message) {
|
||||
if (message != null) {
|
||||
getLogger().info(String.valueOf(message));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log.Priority.INFO</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param t log this cause
|
||||
* @see org.apache.commons.logging.Log#info(Object, Throwable)
|
||||
*/
|
||||
public void info(Object message, Throwable t) {
|
||||
if (message != null) {
|
||||
getLogger().info(String.valueOf(message), t);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log.Priority.WARN</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#warn(Object)
|
||||
*/
|
||||
public void warn(Object message) {
|
||||
if (message != null) {
|
||||
getLogger().warn(String.valueOf(message));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log.Priority.WARN</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param t log this cause
|
||||
* @see org.apache.commons.logging.Log#warn(Object, Throwable)
|
||||
*/
|
||||
public void warn(Object message, Throwable t) {
|
||||
if (message != null) {
|
||||
getLogger().warn(String.valueOf(message), t);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log.Priority.ERROR</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#error(Object)
|
||||
*/
|
||||
public void error(Object message) {
|
||||
if (message != null) {
|
||||
getLogger().error(String.valueOf(message));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log.Priority.ERROR</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param t log this cause
|
||||
* @see org.apache.commons.logging.Log#error(Object, Throwable)
|
||||
*/
|
||||
public void error(Object message, Throwable t) {
|
||||
if (message != null) {
|
||||
getLogger().error(String.valueOf(message), t);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log.Priority.FATAL_ERROR</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#fatal(Object)
|
||||
*/
|
||||
public void fatal(Object message) {
|
||||
if (message != null) {
|
||||
getLogger().fatalError(String.valueOf(message));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with <code>org.apache.log.Priority.FATAL_ERROR</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param t log this cause
|
||||
* @see org.apache.commons.logging.Log#fatal(Object, Throwable)
|
||||
*/
|
||||
public void fatal(Object message, Throwable t) {
|
||||
if (message != null) {
|
||||
getLogger().fatalError(String.valueOf(message), t);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Checks whether the <code>LogKit</code> logger will log messages of priority <code>DEBUG</code>.
|
||||
*/
|
||||
public boolean isDebugEnabled() {
|
||||
return getLogger().isDebugEnabled();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Checks whether the <code>LogKit</code> logger will log messages of priority <code>ERROR</code>.
|
||||
*/
|
||||
public boolean isErrorEnabled() {
|
||||
return getLogger().isErrorEnabled();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Checks whether the <code>LogKit</code> logger will log messages of priority <code>FATAL_ERROR</code>.
|
||||
*/
|
||||
public boolean isFatalEnabled() {
|
||||
return getLogger().isFatalErrorEnabled();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Checks whether the <code>LogKit</code> logger will log messages of priority <code>INFO</code>.
|
||||
*/
|
||||
public boolean isInfoEnabled() {
|
||||
return getLogger().isInfoEnabled();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Checks whether the <code>LogKit</code> logger will log messages of priority <code>DEBUG</code>.
|
||||
*/
|
||||
public boolean isTraceEnabled() {
|
||||
return getLogger().isDebugEnabled();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Checks whether the <code>LogKit</code> logger will log messages of priority <code>WARN</code>.
|
||||
*/
|
||||
public boolean isWarnEnabled() {
|
||||
return getLogger().isWarnEnabled();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
107
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/impl/NoOpLog.java
vendored
Normal file
107
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/impl/NoOpLog.java
vendored
Normal file
@@ -0,0 +1,107 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package org.apache.commons.logging.impl;
|
||||
|
||||
|
||||
import java.io.Serializable;
|
||||
import org.apache.commons.logging.Log;
|
||||
|
||||
|
||||
/**
|
||||
* <p>Trivial implementation of Log that throws away all messages. No
|
||||
* configurable system properties are supported.</p>
|
||||
*
|
||||
* @author <a href="mailto:sanders@apache.org">Scott Sanders</a>
|
||||
* @author Rod Waldhoff
|
||||
* @version $Id: NoOpLog.java 424107 2006-07-20 23:15:42Z skitching $
|
||||
*/
|
||||
public class NoOpLog implements Log, Serializable {
|
||||
|
||||
/** Convenience constructor */
|
||||
public NoOpLog() { }
|
||||
/** Base constructor */
|
||||
public NoOpLog(String name) { }
|
||||
/** Do nothing */
|
||||
public void trace(Object message) { }
|
||||
/** Do nothing */
|
||||
public void trace(Object message, Throwable t) { }
|
||||
/** Do nothing */
|
||||
public void debug(Object message) { }
|
||||
/** Do nothing */
|
||||
public void debug(Object message, Throwable t) { }
|
||||
/** Do nothing */
|
||||
public void info(Object message) { }
|
||||
/** Do nothing */
|
||||
public void info(Object message, Throwable t) { }
|
||||
/** Do nothing */
|
||||
public void warn(Object message) { }
|
||||
/** Do nothing */
|
||||
public void warn(Object message, Throwable t) { }
|
||||
/** Do nothing */
|
||||
public void error(Object message) { }
|
||||
/** Do nothing */
|
||||
public void error(Object message, Throwable t) { }
|
||||
/** Do nothing */
|
||||
public void fatal(Object message) { }
|
||||
/** Do nothing */
|
||||
public void fatal(Object message, Throwable t) { }
|
||||
|
||||
/**
|
||||
* Debug is never enabled.
|
||||
*
|
||||
* @return false
|
||||
*/
|
||||
public final boolean isDebugEnabled() { return false; }
|
||||
|
||||
/**
|
||||
* Error is never enabled.
|
||||
*
|
||||
* @return false
|
||||
*/
|
||||
public final boolean isErrorEnabled() { return false; }
|
||||
|
||||
/**
|
||||
* Fatal is never enabled.
|
||||
*
|
||||
* @return false
|
||||
*/
|
||||
public final boolean isFatalEnabled() { return false; }
|
||||
|
||||
/**
|
||||
* Info is never enabled.
|
||||
*
|
||||
* @return false
|
||||
*/
|
||||
public final boolean isInfoEnabled() { return false; }
|
||||
|
||||
/**
|
||||
* Trace is never enabled.
|
||||
*
|
||||
* @return false
|
||||
*/
|
||||
public final boolean isTraceEnabled() { return false; }
|
||||
|
||||
/**
|
||||
* Warn is never enabled.
|
||||
*
|
||||
* @return false
|
||||
*/
|
||||
public final boolean isWarnEnabled() { return false; }
|
||||
|
||||
}
|
||||
138
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/impl/ServletContextCleaner.java
vendored
Normal file
138
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/impl/ServletContextCleaner.java
vendored
Normal file
@@ -0,0 +1,138 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package org.apache.commons.logging.impl;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import javax.servlet.ServletContextEvent;
|
||||
import javax.servlet.ServletContextListener;
|
||||
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
|
||||
/**
|
||||
* This class is capable of receiving notifications about the undeployment of
|
||||
* a webapp, and responds by ensuring that commons-logging releases all
|
||||
* memory associated with the undeployed webapp.
|
||||
* <p>
|
||||
* In general, the WeakHashtable support added in commons-logging release 1.1
|
||||
* ensures that logging classes do not hold references that prevent an
|
||||
* undeployed webapp's memory from being garbage-collected even when multiple
|
||||
* copies of commons-logging are deployed via multiple classloaders (a
|
||||
* situation that earlier versions had problems with). However there are
|
||||
* some rare cases where the WeakHashtable approach does not work; in these
|
||||
* situations specifying this class as a listener for the web application will
|
||||
* ensure that all references held by commons-logging are fully released.
|
||||
* <p>
|
||||
* To use this class, configure the webapp deployment descriptor to call
|
||||
* this class on webapp undeploy; the contextDestroyed method will tell
|
||||
* every accessable LogFactory class that the entry in its map for the
|
||||
* current webapp's context classloader should be cleared.
|
||||
*
|
||||
* @since 1.1
|
||||
*/
|
||||
|
||||
public class ServletContextCleaner implements ServletContextListener {
|
||||
|
||||
private Class[] RELEASE_SIGNATURE = {ClassLoader.class};
|
||||
|
||||
/**
|
||||
* Invoked when a webapp is undeployed, this tells the LogFactory
|
||||
* class to release any logging information related to the current
|
||||
* contextClassloader.
|
||||
*/
|
||||
public void contextDestroyed(ServletContextEvent sce) {
|
||||
ClassLoader tccl = Thread.currentThread().getContextClassLoader();
|
||||
|
||||
Object[] params = new Object[1];
|
||||
params[0] = tccl;
|
||||
|
||||
// Walk up the tree of classloaders, finding all the available
|
||||
// LogFactory classes and releasing any objects associated with
|
||||
// the tccl (ie the webapp).
|
||||
//
|
||||
// When there is only one LogFactory in the classpath, and it
|
||||
// is within the webapp being undeployed then there is no problem;
|
||||
// garbage collection works fine.
|
||||
//
|
||||
// When there are multiple LogFactory classes in the classpath but
|
||||
// parent-first classloading is used everywhere, this loop is really
|
||||
// short. The first instance of LogFactory found will
|
||||
// be the highest in the classpath, and then no more will be found.
|
||||
// This is ok, as with this setup this will be the only LogFactory
|
||||
// holding any data associated with the tccl being released.
|
||||
//
|
||||
// When there are multiple LogFactory classes in the classpath and
|
||||
// child-first classloading is used in any classloader, then multiple
|
||||
// LogFactory instances may hold info about this TCCL; whenever the
|
||||
// webapp makes a call into a class loaded via an ancestor classloader
|
||||
// and that class calls LogFactory the tccl gets registered in
|
||||
// the LogFactory instance that is visible from the ancestor
|
||||
// classloader. However the concrete logging library it points
|
||||
// to is expected to have been loaded via the TCCL, so the
|
||||
// underlying logging lib is only initialised/configured once.
|
||||
// These references from ancestor LogFactory classes down to
|
||||
// TCCL classloaders are held via weak references and so should
|
||||
// be released but there are circumstances where they may not.
|
||||
// Walking up the classloader ancestry ladder releasing
|
||||
// the current tccl at each level tree, though, will definitely
|
||||
// clear any problem references.
|
||||
ClassLoader loader = tccl;
|
||||
while (loader != null) {
|
||||
// Load via the current loader. Note that if the class is not accessable
|
||||
// via this loader, but is accessable via some ancestor then that class
|
||||
// will be returned.
|
||||
try {
|
||||
Class logFactoryClass = loader.loadClass("org.apache.commons.logging.LogFactory");
|
||||
Method releaseMethod = logFactoryClass.getMethod("release", RELEASE_SIGNATURE);
|
||||
releaseMethod.invoke(null, params);
|
||||
loader = logFactoryClass.getClassLoader().getParent();
|
||||
} catch(ClassNotFoundException ex) {
|
||||
// Neither the current classloader nor any of its ancestors could find
|
||||
// the LogFactory class, so we can stop now.
|
||||
loader = null;
|
||||
} catch(NoSuchMethodException ex) {
|
||||
// This is not expected; every version of JCL has this method
|
||||
System.err.println("LogFactory instance found which does not support release method!");
|
||||
loader = null;
|
||||
} catch(IllegalAccessException ex) {
|
||||
// This is not expected; every ancestor class should be accessable
|
||||
System.err.println("LogFactory instance found which is not accessable!");
|
||||
loader = null;
|
||||
} catch(InvocationTargetException ex) {
|
||||
// This is not expected
|
||||
System.err.println("LogFactory instance release method failed!");
|
||||
loader = null;
|
||||
}
|
||||
}
|
||||
|
||||
// Just to be sure, invoke release on the LogFactory that is visible from
|
||||
// this ServletContextCleaner class too. This should already have been caught
|
||||
// by the above loop but just in case...
|
||||
LogFactory.release(tccl);
|
||||
}
|
||||
|
||||
/**
|
||||
* Invoked when a webapp is deployed. Nothing needs to be done here.
|
||||
*/
|
||||
public void contextInitialized(ServletContextEvent sce) {
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
721
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/impl/SimpleLog.java
vendored
Normal file
721
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/impl/SimpleLog.java
vendored
Normal file
@@ -0,0 +1,721 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package org.apache.commons.logging.impl;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.Serializable;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.security.AccessController;
|
||||
import java.security.PrivilegedAction;
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogConfigurationException;
|
||||
|
||||
/**
|
||||
* <p>Simple implementation of Log that sends all enabled log messages,
|
||||
* for all defined loggers, to System.err. The following system properties
|
||||
* are supported to configure the behavior of this logger:</p>
|
||||
* <ul>
|
||||
* <li><code>org.apache.commons.logging.simplelog.defaultlog</code> -
|
||||
* Default logging detail level for all instances of SimpleLog.
|
||||
* Must be one of ("trace", "debug", "info", "warn", "error", or "fatal").
|
||||
* If not specified, defaults to "info". </li>
|
||||
* <li><code>org.apache.commons.logging.simplelog.log.xxxxx</code> -
|
||||
* Logging detail level for a SimpleLog instance named "xxxxx".
|
||||
* Must be one of ("trace", "debug", "info", "warn", "error", or "fatal").
|
||||
* If not specified, the default logging detail level is used.</li>
|
||||
* <li><code>org.apache.commons.logging.simplelog.showlogname</code> -
|
||||
* Set to <code>true</code> if you want the Log instance name to be
|
||||
* included in output messages. Defaults to <code>false</code>.</li>
|
||||
* <li><code>org.apache.commons.logging.simplelog.showShortLogname</code> -
|
||||
* Set to <code>true</code> if you want the last component of the name to be
|
||||
* included in output messages. Defaults to <code>true</code>.</li>
|
||||
* <li><code>org.apache.commons.logging.simplelog.showdatetime</code> -
|
||||
* Set to <code>true</code> if you want the current date and time
|
||||
* to be included in output messages. Default is <code>false</code>.</li>
|
||||
* <li><code>org.apache.commons.logging.simplelog.dateTimeFormat</code> -
|
||||
* The date and time format to be used in the output messages.
|
||||
* The pattern describing the date and time format is the same that is
|
||||
* used in <code>java.text.SimpleDateFormat</code>. If the format is not
|
||||
* specified or is invalid, the default format is used.
|
||||
* The default format is <code>yyyy/MM/dd HH:mm:ss:SSS zzz</code>.</li>
|
||||
* </ul>
|
||||
*
|
||||
* <p>In addition to looking for system properties with the names specified
|
||||
* above, this implementation also checks for a class loader resource named
|
||||
* <code>"simplelog.properties"</code>, and includes any matching definitions
|
||||
* from this resource (if it exists).</p>
|
||||
*
|
||||
* @author <a href="mailto:sanders@apache.org">Scott Sanders</a>
|
||||
* @author Rod Waldhoff
|
||||
* @author Robert Burrell Donkin
|
||||
*
|
||||
* @version $Id: SimpleLog.java 581090 2007-10-01 22:01:06Z dennisl $
|
||||
*/
|
||||
public class SimpleLog implements Log, Serializable {
|
||||
|
||||
|
||||
// ------------------------------------------------------- Class Attributes
|
||||
|
||||
/** All system properties used by <code>SimpleLog</code> start with this */
|
||||
static protected final String systemPrefix =
|
||||
"org.apache.commons.logging.simplelog.";
|
||||
|
||||
/** Properties loaded from simplelog.properties */
|
||||
static protected final Properties simpleLogProps = new Properties();
|
||||
|
||||
/** The default format to use when formating dates */
|
||||
static protected final String DEFAULT_DATE_TIME_FORMAT =
|
||||
"yyyy/MM/dd HH:mm:ss:SSS zzz";
|
||||
|
||||
/** Include the instance name in the log message? */
|
||||
static protected boolean showLogName = false;
|
||||
/** Include the short name ( last component ) of the logger in the log
|
||||
* message. Defaults to true - otherwise we'll be lost in a flood of
|
||||
* messages without knowing who sends them.
|
||||
*/
|
||||
static protected boolean showShortName = true;
|
||||
/** Include the current time in the log message */
|
||||
static protected boolean showDateTime = false;
|
||||
/** The date and time format to use in the log message */
|
||||
static protected String dateTimeFormat = DEFAULT_DATE_TIME_FORMAT;
|
||||
|
||||
/**
|
||||
* Used to format times.
|
||||
* <p>
|
||||
* Any code that accesses this object should first obtain a lock on it,
|
||||
* ie use synchronized(dateFormatter); this requirement was introduced
|
||||
* in 1.1.1 to fix an existing thread safety bug (SimpleDateFormat.format
|
||||
* is not thread-safe).
|
||||
*/
|
||||
static protected DateFormat dateFormatter = null;
|
||||
|
||||
// ---------------------------------------------------- Log Level Constants
|
||||
|
||||
|
||||
/** "Trace" level logging. */
|
||||
public static final int LOG_LEVEL_TRACE = 1;
|
||||
/** "Debug" level logging. */
|
||||
public static final int LOG_LEVEL_DEBUG = 2;
|
||||
/** "Info" level logging. */
|
||||
public static final int LOG_LEVEL_INFO = 3;
|
||||
/** "Warn" level logging. */
|
||||
public static final int LOG_LEVEL_WARN = 4;
|
||||
/** "Error" level logging. */
|
||||
public static final int LOG_LEVEL_ERROR = 5;
|
||||
/** "Fatal" level logging. */
|
||||
public static final int LOG_LEVEL_FATAL = 6;
|
||||
|
||||
/** Enable all logging levels */
|
||||
public static final int LOG_LEVEL_ALL = (LOG_LEVEL_TRACE - 1);
|
||||
|
||||
/** Enable no logging levels */
|
||||
public static final int LOG_LEVEL_OFF = (LOG_LEVEL_FATAL + 1);
|
||||
|
||||
// ------------------------------------------------------------ Initializer
|
||||
|
||||
private static String getStringProperty(String name) {
|
||||
String prop = null;
|
||||
try {
|
||||
prop = System.getProperty(name);
|
||||
} catch (SecurityException e) {
|
||||
; // Ignore
|
||||
}
|
||||
return (prop == null) ? simpleLogProps.getProperty(name) : prop;
|
||||
}
|
||||
|
||||
private static String getStringProperty(String name, String dephault) {
|
||||
String prop = getStringProperty(name);
|
||||
return (prop == null) ? dephault : prop;
|
||||
}
|
||||
|
||||
private static boolean getBooleanProperty(String name, boolean dephault) {
|
||||
String prop = getStringProperty(name);
|
||||
return (prop == null) ? dephault : "true".equalsIgnoreCase(prop);
|
||||
}
|
||||
|
||||
// Initialize class attributes.
|
||||
// Load properties file, if found.
|
||||
// Override with system properties.
|
||||
static {
|
||||
// Add props from the resource simplelog.properties
|
||||
InputStream in = getResourceAsStream("simplelog.properties");
|
||||
if(null != in) {
|
||||
try {
|
||||
simpleLogProps.load(in);
|
||||
in.close();
|
||||
} catch(java.io.IOException e) {
|
||||
// ignored
|
||||
}
|
||||
}
|
||||
|
||||
showLogName = getBooleanProperty( systemPrefix + "showlogname", showLogName);
|
||||
showShortName = getBooleanProperty( systemPrefix + "showShortLogname", showShortName);
|
||||
showDateTime = getBooleanProperty( systemPrefix + "showdatetime", showDateTime);
|
||||
|
||||
if(showDateTime) {
|
||||
dateTimeFormat = getStringProperty(systemPrefix + "dateTimeFormat",
|
||||
dateTimeFormat);
|
||||
try {
|
||||
dateFormatter = new SimpleDateFormat(dateTimeFormat);
|
||||
} catch(IllegalArgumentException e) {
|
||||
// If the format pattern is invalid - use the default format
|
||||
dateTimeFormat = DEFAULT_DATE_TIME_FORMAT;
|
||||
dateFormatter = new SimpleDateFormat(dateTimeFormat);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------- Attributes
|
||||
|
||||
/** The name of this simple log instance */
|
||||
protected String logName = null;
|
||||
/** The current log level */
|
||||
protected int currentLogLevel;
|
||||
/** The short name of this simple log instance */
|
||||
private String shortLogName = null;
|
||||
|
||||
|
||||
// ------------------------------------------------------------ Constructor
|
||||
|
||||
/**
|
||||
* Construct a simple log with given name.
|
||||
*
|
||||
* @param name log name
|
||||
*/
|
||||
public SimpleLog(String name) {
|
||||
|
||||
logName = name;
|
||||
|
||||
// Set initial log level
|
||||
// Used to be: set default log level to ERROR
|
||||
// IMHO it should be lower, but at least info ( costin ).
|
||||
setLevel(SimpleLog.LOG_LEVEL_INFO);
|
||||
|
||||
// Set log level from properties
|
||||
String lvl = getStringProperty(systemPrefix + "log." + logName);
|
||||
int i = String.valueOf(name).lastIndexOf(".");
|
||||
while(null == lvl && i > -1) {
|
||||
name = name.substring(0,i);
|
||||
lvl = getStringProperty(systemPrefix + "log." + name);
|
||||
i = String.valueOf(name).lastIndexOf(".");
|
||||
}
|
||||
|
||||
if(null == lvl) {
|
||||
lvl = getStringProperty(systemPrefix + "defaultlog");
|
||||
}
|
||||
|
||||
if("all".equalsIgnoreCase(lvl)) {
|
||||
setLevel(SimpleLog.LOG_LEVEL_ALL);
|
||||
} else if("trace".equalsIgnoreCase(lvl)) {
|
||||
setLevel(SimpleLog.LOG_LEVEL_TRACE);
|
||||
} else if("debug".equalsIgnoreCase(lvl)) {
|
||||
setLevel(SimpleLog.LOG_LEVEL_DEBUG);
|
||||
} else if("info".equalsIgnoreCase(lvl)) {
|
||||
setLevel(SimpleLog.LOG_LEVEL_INFO);
|
||||
} else if("warn".equalsIgnoreCase(lvl)) {
|
||||
setLevel(SimpleLog.LOG_LEVEL_WARN);
|
||||
} else if("error".equalsIgnoreCase(lvl)) {
|
||||
setLevel(SimpleLog.LOG_LEVEL_ERROR);
|
||||
} else if("fatal".equalsIgnoreCase(lvl)) {
|
||||
setLevel(SimpleLog.LOG_LEVEL_FATAL);
|
||||
} else if("off".equalsIgnoreCase(lvl)) {
|
||||
setLevel(SimpleLog.LOG_LEVEL_OFF);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// -------------------------------------------------------- Properties
|
||||
|
||||
/**
|
||||
* <p> Set logging level. </p>
|
||||
*
|
||||
* @param currentLogLevel new logging level
|
||||
*/
|
||||
public void setLevel(int currentLogLevel) {
|
||||
|
||||
this.currentLogLevel = currentLogLevel;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <p> Get logging level. </p>
|
||||
*/
|
||||
public int getLevel() {
|
||||
|
||||
return currentLogLevel;
|
||||
}
|
||||
|
||||
|
||||
// -------------------------------------------------------- Logging Methods
|
||||
|
||||
|
||||
/**
|
||||
* <p> Do the actual logging.
|
||||
* This method assembles the message
|
||||
* and then calls <code>write()</code> to cause it to be written.</p>
|
||||
*
|
||||
* @param type One of the LOG_LEVEL_XXX constants defining the log level
|
||||
* @param message The message itself (typically a String)
|
||||
* @param t The exception whose stack trace should be logged
|
||||
*/
|
||||
protected void log(int type, Object message, Throwable t) {
|
||||
// Use a string buffer for better performance
|
||||
StringBuffer buf = new StringBuffer();
|
||||
|
||||
// Append date-time if so configured
|
||||
if(showDateTime) {
|
||||
Date now = new Date();
|
||||
String dateText;
|
||||
synchronized(dateFormatter) {
|
||||
dateText = dateFormatter.format(now);
|
||||
}
|
||||
buf.append(dateText);
|
||||
buf.append(" ");
|
||||
}
|
||||
|
||||
// Append a readable representation of the log level
|
||||
switch(type) {
|
||||
case SimpleLog.LOG_LEVEL_TRACE: buf.append("[TRACE] "); break;
|
||||
case SimpleLog.LOG_LEVEL_DEBUG: buf.append("[DEBUG] "); break;
|
||||
case SimpleLog.LOG_LEVEL_INFO: buf.append("[INFO] "); break;
|
||||
case SimpleLog.LOG_LEVEL_WARN: buf.append("[WARN] "); break;
|
||||
case SimpleLog.LOG_LEVEL_ERROR: buf.append("[ERROR] "); break;
|
||||
case SimpleLog.LOG_LEVEL_FATAL: buf.append("[FATAL] "); break;
|
||||
}
|
||||
|
||||
// Append the name of the log instance if so configured
|
||||
if( showShortName) {
|
||||
if( shortLogName==null ) {
|
||||
// Cut all but the last component of the name for both styles
|
||||
shortLogName = logName.substring(logName.lastIndexOf(".") + 1);
|
||||
shortLogName =
|
||||
shortLogName.substring(shortLogName.lastIndexOf("/") + 1);
|
||||
}
|
||||
buf.append(String.valueOf(shortLogName)).append(" - ");
|
||||
} else if(showLogName) {
|
||||
buf.append(String.valueOf(logName)).append(" - ");
|
||||
}
|
||||
|
||||
// Append the message
|
||||
buf.append(String.valueOf(message));
|
||||
|
||||
// Append stack trace if not null
|
||||
if(t != null) {
|
||||
buf.append(" <");
|
||||
buf.append(t.toString());
|
||||
buf.append(">");
|
||||
|
||||
java.io.StringWriter sw= new java.io.StringWriter(1024);
|
||||
java.io.PrintWriter pw= new java.io.PrintWriter(sw);
|
||||
t.printStackTrace(pw);
|
||||
pw.close();
|
||||
buf.append(sw.toString());
|
||||
}
|
||||
|
||||
// Print to the appropriate destination
|
||||
write(buf);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <p>Write the content of the message accumulated in the specified
|
||||
* <code>StringBuffer</code> to the appropriate output destination. The
|
||||
* default implementation writes to <code>System.err</code>.</p>
|
||||
*
|
||||
* @param buffer A <code>StringBuffer</code> containing the accumulated
|
||||
* text to be logged
|
||||
*/
|
||||
protected void write(StringBuffer buffer) {
|
||||
|
||||
System.err.println(buffer.toString());
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Is the given log level currently enabled?
|
||||
*
|
||||
* @param logLevel is this level enabled?
|
||||
*/
|
||||
protected boolean isLevelEnabled(int logLevel) {
|
||||
// log level are numerically ordered so can use simple numeric
|
||||
// comparison
|
||||
return (logLevel >= currentLogLevel);
|
||||
}
|
||||
|
||||
|
||||
// -------------------------------------------------------- Log Implementation
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with
|
||||
* <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_DEBUG</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#debug(Object)
|
||||
*/
|
||||
public final void debug(Object message) {
|
||||
|
||||
if (isLevelEnabled(SimpleLog.LOG_LEVEL_DEBUG)) {
|
||||
log(SimpleLog.LOG_LEVEL_DEBUG, message, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with
|
||||
* <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_DEBUG</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param t log this cause
|
||||
* @see org.apache.commons.logging.Log#debug(Object, Throwable)
|
||||
*/
|
||||
public final void debug(Object message, Throwable t) {
|
||||
|
||||
if (isLevelEnabled(SimpleLog.LOG_LEVEL_DEBUG)) {
|
||||
log(SimpleLog.LOG_LEVEL_DEBUG, message, t);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with
|
||||
* <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_TRACE</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#trace(Object)
|
||||
*/
|
||||
public final void trace(Object message) {
|
||||
|
||||
if (isLevelEnabled(SimpleLog.LOG_LEVEL_TRACE)) {
|
||||
log(SimpleLog.LOG_LEVEL_TRACE, message, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with
|
||||
* <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_TRACE</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param t log this cause
|
||||
* @see org.apache.commons.logging.Log#trace(Object, Throwable)
|
||||
*/
|
||||
public final void trace(Object message, Throwable t) {
|
||||
|
||||
if (isLevelEnabled(SimpleLog.LOG_LEVEL_TRACE)) {
|
||||
log(SimpleLog.LOG_LEVEL_TRACE, message, t);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with
|
||||
* <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_INFO</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#info(Object)
|
||||
*/
|
||||
public final void info(Object message) {
|
||||
|
||||
if (isLevelEnabled(SimpleLog.LOG_LEVEL_INFO)) {
|
||||
log(SimpleLog.LOG_LEVEL_INFO,message,null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with
|
||||
* <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_INFO</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param t log this cause
|
||||
* @see org.apache.commons.logging.Log#info(Object, Throwable)
|
||||
*/
|
||||
public final void info(Object message, Throwable t) {
|
||||
|
||||
if (isLevelEnabled(SimpleLog.LOG_LEVEL_INFO)) {
|
||||
log(SimpleLog.LOG_LEVEL_INFO, message, t);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with
|
||||
* <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_WARN</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#warn(Object)
|
||||
*/
|
||||
public final void warn(Object message) {
|
||||
|
||||
if (isLevelEnabled(SimpleLog.LOG_LEVEL_WARN)) {
|
||||
log(SimpleLog.LOG_LEVEL_WARN, message, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with
|
||||
* <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_WARN</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param t log this cause
|
||||
* @see org.apache.commons.logging.Log#warn(Object, Throwable)
|
||||
*/
|
||||
public final void warn(Object message, Throwable t) {
|
||||
|
||||
if (isLevelEnabled(SimpleLog.LOG_LEVEL_WARN)) {
|
||||
log(SimpleLog.LOG_LEVEL_WARN, message, t);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with
|
||||
* <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_ERROR</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#error(Object)
|
||||
*/
|
||||
public final void error(Object message) {
|
||||
|
||||
if (isLevelEnabled(SimpleLog.LOG_LEVEL_ERROR)) {
|
||||
log(SimpleLog.LOG_LEVEL_ERROR, message, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with
|
||||
* <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_ERROR</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param t log this cause
|
||||
* @see org.apache.commons.logging.Log#error(Object, Throwable)
|
||||
*/
|
||||
public final void error(Object message, Throwable t) {
|
||||
|
||||
if (isLevelEnabled(SimpleLog.LOG_LEVEL_ERROR)) {
|
||||
log(SimpleLog.LOG_LEVEL_ERROR, message, t);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Log a message with
|
||||
* <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_FATAL</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @see org.apache.commons.logging.Log#fatal(Object)
|
||||
*/
|
||||
public final void fatal(Object message) {
|
||||
|
||||
if (isLevelEnabled(SimpleLog.LOG_LEVEL_FATAL)) {
|
||||
log(SimpleLog.LOG_LEVEL_FATAL, message, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs a message with
|
||||
* <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_FATAL</code>.
|
||||
*
|
||||
* @param message to log
|
||||
* @param t log this cause
|
||||
* @see org.apache.commons.logging.Log#fatal(Object, Throwable)
|
||||
*/
|
||||
public final void fatal(Object message, Throwable t) {
|
||||
|
||||
if (isLevelEnabled(SimpleLog.LOG_LEVEL_FATAL)) {
|
||||
log(SimpleLog.LOG_LEVEL_FATAL, message, t);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <p> Are debug messages currently enabled? </p>
|
||||
*
|
||||
* <p> This allows expensive operations such as <code>String</code>
|
||||
* concatenation to be avoided when the message will be ignored by the
|
||||
* logger. </p>
|
||||
*/
|
||||
public final boolean isDebugEnabled() {
|
||||
|
||||
return isLevelEnabled(SimpleLog.LOG_LEVEL_DEBUG);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <p> Are error messages currently enabled? </p>
|
||||
*
|
||||
* <p> This allows expensive operations such as <code>String</code>
|
||||
* concatenation to be avoided when the message will be ignored by the
|
||||
* logger. </p>
|
||||
*/
|
||||
public final boolean isErrorEnabled() {
|
||||
|
||||
return isLevelEnabled(SimpleLog.LOG_LEVEL_ERROR);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <p> Are fatal messages currently enabled? </p>
|
||||
*
|
||||
* <p> This allows expensive operations such as <code>String</code>
|
||||
* concatenation to be avoided when the message will be ignored by the
|
||||
* logger. </p>
|
||||
*/
|
||||
public final boolean isFatalEnabled() {
|
||||
|
||||
return isLevelEnabled(SimpleLog.LOG_LEVEL_FATAL);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <p> Are info messages currently enabled? </p>
|
||||
*
|
||||
* <p> This allows expensive operations such as <code>String</code>
|
||||
* concatenation to be avoided when the message will be ignored by the
|
||||
* logger. </p>
|
||||
*/
|
||||
public final boolean isInfoEnabled() {
|
||||
|
||||
return isLevelEnabled(SimpleLog.LOG_LEVEL_INFO);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <p> Are trace messages currently enabled? </p>
|
||||
*
|
||||
* <p> This allows expensive operations such as <code>String</code>
|
||||
* concatenation to be avoided when the message will be ignored by the
|
||||
* logger. </p>
|
||||
*/
|
||||
public final boolean isTraceEnabled() {
|
||||
|
||||
return isLevelEnabled(SimpleLog.LOG_LEVEL_TRACE);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <p> Are warn messages currently enabled? </p>
|
||||
*
|
||||
* <p> This allows expensive operations such as <code>String</code>
|
||||
* concatenation to be avoided when the message will be ignored by the
|
||||
* logger. </p>
|
||||
*/
|
||||
public final boolean isWarnEnabled() {
|
||||
|
||||
return isLevelEnabled(SimpleLog.LOG_LEVEL_WARN);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the thread context class loader if available.
|
||||
* Otherwise return null.
|
||||
*
|
||||
* The thread context class loader is available for JDK 1.2
|
||||
* or later, if certain security conditions are met.
|
||||
*
|
||||
* @exception LogConfigurationException if a suitable class loader
|
||||
* cannot be identified.
|
||||
*/
|
||||
private static ClassLoader getContextClassLoader()
|
||||
{
|
||||
ClassLoader classLoader = null;
|
||||
|
||||
if (classLoader == null) {
|
||||
try {
|
||||
// Are we running on a JDK 1.2 or later system?
|
||||
Method method = Thread.class.getMethod("getContextClassLoader",
|
||||
(Class[]) null);
|
||||
|
||||
// Get the thread context class loader (if there is one)
|
||||
try {
|
||||
classLoader = (ClassLoader)method.invoke(Thread.currentThread(),
|
||||
(Class[]) null);
|
||||
} catch (IllegalAccessException e) {
|
||||
; // ignore
|
||||
} catch (InvocationTargetException e) {
|
||||
/**
|
||||
* InvocationTargetException is thrown by 'invoke' when
|
||||
* the method being invoked (getContextClassLoader) throws
|
||||
* an exception.
|
||||
*
|
||||
* getContextClassLoader() throws SecurityException when
|
||||
* the context class loader isn't an ancestor of the
|
||||
* calling class's class loader, or if security
|
||||
* permissions are restricted.
|
||||
*
|
||||
* In the first case (not related), we want to ignore and
|
||||
* keep going. We cannot help but also ignore the second
|
||||
* with the logic below, but other calls elsewhere (to
|
||||
* obtain a class loader) will trigger this exception where
|
||||
* we can make a distinction.
|
||||
*/
|
||||
if (e.getTargetException() instanceof SecurityException) {
|
||||
; // ignore
|
||||
} else {
|
||||
// Capture 'e.getTargetException()' exception for details
|
||||
// alternate: log 'e.getTargetException()', and pass back 'e'.
|
||||
throw new LogConfigurationException
|
||||
("Unexpected InvocationTargetException", e.getTargetException());
|
||||
}
|
||||
}
|
||||
} catch (NoSuchMethodException e) {
|
||||
// Assume we are running on JDK 1.1
|
||||
; // ignore
|
||||
}
|
||||
}
|
||||
|
||||
if (classLoader == null) {
|
||||
classLoader = SimpleLog.class.getClassLoader();
|
||||
}
|
||||
|
||||
// Return the selected class loader
|
||||
return classLoader;
|
||||
}
|
||||
|
||||
private static InputStream getResourceAsStream(final String name)
|
||||
{
|
||||
return (InputStream)AccessController.doPrivileged(
|
||||
new PrivilegedAction() {
|
||||
public Object run() {
|
||||
ClassLoader threadCL = getContextClassLoader();
|
||||
|
||||
if (threadCL != null) {
|
||||
return threadCL.getResourceAsStream(name);
|
||||
} else {
|
||||
return ClassLoader.getSystemResourceAsStream(name);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
478
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/impl/WeakHashtable.java
vendored
Normal file
478
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/impl/WeakHashtable.java
vendored
Normal file
@@ -0,0 +1,478 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package org.apache.commons.logging.impl;
|
||||
|
||||
import java.lang.ref.ReferenceQueue;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* <p>Implementation of <code>Hashtable</code> that uses <code>WeakReference</code>'s
|
||||
* to hold its keys thus allowing them to be reclaimed by the garbage collector.
|
||||
* The associated values are retained using strong references.</p>
|
||||
*
|
||||
* <p>This class follows the symantics of <code>Hashtable</code> as closely as
|
||||
* possible. It therefore does not accept null values or keys.</p>
|
||||
*
|
||||
* <p><strong>Note:</strong>
|
||||
* This is <em>not</em> intended to be a general purpose hash table replacement.
|
||||
* This implementation is also tuned towards a particular purpose: for use as a replacement
|
||||
* for <code>Hashtable</code> in <code>LogFactory</code>. This application requires
|
||||
* good liveliness for <code>get</code> and <code>put</code>. Various tradeoffs
|
||||
* have been made with this in mind.
|
||||
* </p>
|
||||
* <p>
|
||||
* <strong>Usage:</strong> typical use case is as a drop-in replacement
|
||||
* for the <code>Hashtable</code> used in <code>LogFactory</code> for J2EE enviroments
|
||||
* running 1.3+ JVMs. Use of this class <i>in most cases</i> (see below) will
|
||||
* allow classloaders to be collected by the garbage collector without the need
|
||||
* to call {@link org.apache.commons.logging.LogFactory#release(ClassLoader) LogFactory.release(ClassLoader)}.
|
||||
* </p>
|
||||
*
|
||||
* <p><code>org.apache.commons.logging.LogFactory</code> checks whether this class
|
||||
* can be supported by the current JVM, and if so then uses it to store
|
||||
* references to the <code>LogFactory</code> implementationd it loads
|
||||
* (rather than using a standard Hashtable instance).
|
||||
* Having this class used instead of <code>Hashtable</code> solves
|
||||
* certain issues related to dynamic reloading of applications in J2EE-style
|
||||
* environments. However this class requires java 1.3 or later (due to its use
|
||||
* of <code>java.lang.ref.WeakReference</code> and associates).
|
||||
* And by the way, this extends <code>Hashtable</code> rather than <code>HashMap</code>
|
||||
* for backwards compatibility reasons. See the documentation
|
||||
* for method <code>LogFactory.createFactoryStore</code> for more details.</p>
|
||||
*
|
||||
* <p>The reason all this is necessary is due to a issue which
|
||||
* arises during hot deploy in a J2EE-like containers.
|
||||
* Each component running in the container owns one or more classloaders; when
|
||||
* the component loads a LogFactory instance via the component classloader
|
||||
* a reference to it gets stored in the static LogFactory.factories member,
|
||||
* keyed by the component's classloader so different components don't
|
||||
* stomp on each other. When the component is later unloaded, the container
|
||||
* sets the component's classloader to null with the intent that all the
|
||||
* component's classes get garbage-collected. However there's still a
|
||||
* reference to the component's classloader from a key in the "global"
|
||||
* <code>LogFactory</code>'s factories member! If <code>LogFactory.release()</code>
|
||||
* is called whenever component is unloaded, the classloaders will be correctly
|
||||
* garbage collected; this <i>should</i> be done by any container that
|
||||
* bundles commons-logging by default. However, holding the classloader
|
||||
* references weakly ensures that the classloader will be garbage collected
|
||||
* without the container performing this step. </p>
|
||||
*
|
||||
* <p>
|
||||
* <strong>Limitations:</strong>
|
||||
* There is still one (unusual) scenario in which a component will not
|
||||
* be correctly unloaded without an explicit release. Though weak references
|
||||
* are used for its keys, it is necessary to use strong references for its values.
|
||||
* </p>
|
||||
*
|
||||
* <p> If the abstract class <code>LogFactory</code> is
|
||||
* loaded by the container classloader but a subclass of
|
||||
* <code>LogFactory</code> [LogFactory1] is loaded by the component's
|
||||
* classloader and an instance stored in the static map associated with the
|
||||
* base LogFactory class, then there is a strong reference from the LogFactory
|
||||
* class to the LogFactory1 instance (as normal) and a strong reference from
|
||||
* the LogFactory1 instance to the component classloader via
|
||||
* <code>getClass().getClassLoader()</code>. This chain of references will prevent
|
||||
* collection of the child classloader.</p>
|
||||
*
|
||||
* <p>
|
||||
* Such a situation occurs when the commons-logging.jar is
|
||||
* loaded by a parent classloader (e.g. a server level classloader in a
|
||||
* servlet container) and a custom <code>LogFactory</code> implementation is
|
||||
* loaded by a child classloader (e.g. a web app classloader).</p>
|
||||
*
|
||||
* <p>To avoid this scenario, ensure
|
||||
* that any custom LogFactory subclass is loaded by the same classloader as
|
||||
* the base <code>LogFactory</code>. Creating custom LogFactory subclasses is,
|
||||
* however, rare. The standard LogFactoryImpl class should be sufficient
|
||||
* for most or all users.</p>
|
||||
*
|
||||
*
|
||||
* @author Brian Stansberry
|
||||
*
|
||||
* @since 1.1
|
||||
*/
|
||||
public final class WeakHashtable extends Hashtable {
|
||||
|
||||
/**
|
||||
* The maximum number of times put() or remove() can be called before
|
||||
* the map will be purged of all cleared entries.
|
||||
*/
|
||||
private static final int MAX_CHANGES_BEFORE_PURGE = 100;
|
||||
|
||||
/**
|
||||
* The maximum number of times put() or remove() can be called before
|
||||
* the map will be purged of one cleared entry.
|
||||
*/
|
||||
private static final int PARTIAL_PURGE_COUNT = 10;
|
||||
|
||||
/* ReferenceQueue we check for gc'd keys */
|
||||
private ReferenceQueue queue = new ReferenceQueue();
|
||||
/* Counter used to control how often we purge gc'd entries */
|
||||
private int changeCount = 0;
|
||||
|
||||
/**
|
||||
* Constructs a WeakHashtable with the Hashtable default
|
||||
* capacity and load factor.
|
||||
*/
|
||||
public WeakHashtable() {}
|
||||
|
||||
|
||||
/**
|
||||
*@see Hashtable
|
||||
*/
|
||||
public boolean containsKey(Object key) {
|
||||
// purge should not be required
|
||||
Referenced referenced = new Referenced(key);
|
||||
return super.containsKey(referenced);
|
||||
}
|
||||
|
||||
/**
|
||||
*@see Hashtable
|
||||
*/
|
||||
public Enumeration elements() {
|
||||
purge();
|
||||
return super.elements();
|
||||
}
|
||||
|
||||
/**
|
||||
*@see Hashtable
|
||||
*/
|
||||
public Set entrySet() {
|
||||
purge();
|
||||
Set referencedEntries = super.entrySet();
|
||||
Set unreferencedEntries = new HashSet();
|
||||
for (Iterator it=referencedEntries.iterator(); it.hasNext();) {
|
||||
Map.Entry entry = (Map.Entry) it.next();
|
||||
Referenced referencedKey = (Referenced) entry.getKey();
|
||||
Object key = referencedKey.getValue();
|
||||
Object value = entry.getValue();
|
||||
if (key != null) {
|
||||
Entry dereferencedEntry = new Entry(key, value);
|
||||
unreferencedEntries.add(dereferencedEntry);
|
||||
}
|
||||
}
|
||||
return unreferencedEntries;
|
||||
}
|
||||
|
||||
/**
|
||||
*@see Hashtable
|
||||
*/
|
||||
public Object get(Object key) {
|
||||
// for performance reasons, no purge
|
||||
Referenced referenceKey = new Referenced(key);
|
||||
return super.get(referenceKey);
|
||||
}
|
||||
|
||||
/**
|
||||
*@see Hashtable
|
||||
*/
|
||||
public Enumeration keys() {
|
||||
purge();
|
||||
final Enumeration enumer = super.keys();
|
||||
return new Enumeration() {
|
||||
public boolean hasMoreElements() {
|
||||
return enumer.hasMoreElements();
|
||||
}
|
||||
public Object nextElement() {
|
||||
Referenced nextReference = (Referenced) enumer.nextElement();
|
||||
return nextReference.getValue();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*@see Hashtable
|
||||
*/
|
||||
public Set keySet() {
|
||||
purge();
|
||||
Set referencedKeys = super.keySet();
|
||||
Set unreferencedKeys = new HashSet();
|
||||
for (Iterator it=referencedKeys.iterator(); it.hasNext();) {
|
||||
Referenced referenceKey = (Referenced) it.next();
|
||||
Object keyValue = referenceKey.getValue();
|
||||
if (keyValue != null) {
|
||||
unreferencedKeys.add(keyValue);
|
||||
}
|
||||
}
|
||||
return unreferencedKeys;
|
||||
}
|
||||
|
||||
/**
|
||||
*@see Hashtable
|
||||
*/
|
||||
public Object put(Object key, Object value) {
|
||||
// check for nulls, ensuring symantics match superclass
|
||||
if (key == null) {
|
||||
throw new NullPointerException("Null keys are not allowed");
|
||||
}
|
||||
if (value == null) {
|
||||
throw new NullPointerException("Null values are not allowed");
|
||||
}
|
||||
|
||||
// for performance reasons, only purge every
|
||||
// MAX_CHANGES_BEFORE_PURGE times
|
||||
if (changeCount++ > MAX_CHANGES_BEFORE_PURGE) {
|
||||
purge();
|
||||
changeCount = 0;
|
||||
}
|
||||
// do a partial purge more often
|
||||
else if ((changeCount % PARTIAL_PURGE_COUNT) == 0) {
|
||||
purgeOne();
|
||||
}
|
||||
|
||||
Referenced keyRef = new Referenced(key, queue);
|
||||
return super.put(keyRef, value);
|
||||
}
|
||||
|
||||
/**
|
||||
*@see Hashtable
|
||||
*/
|
||||
public void putAll(Map t) {
|
||||
if (t != null) {
|
||||
Set entrySet = t.entrySet();
|
||||
for (Iterator it=entrySet.iterator(); it.hasNext();) {
|
||||
Map.Entry entry = (Map.Entry) it.next();
|
||||
put(entry.getKey(), entry.getValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*@see Hashtable
|
||||
*/
|
||||
public Collection values() {
|
||||
purge();
|
||||
return super.values();
|
||||
}
|
||||
|
||||
/**
|
||||
*@see Hashtable
|
||||
*/
|
||||
public Object remove(Object key) {
|
||||
// for performance reasons, only purge every
|
||||
// MAX_CHANGES_BEFORE_PURGE times
|
||||
if (changeCount++ > MAX_CHANGES_BEFORE_PURGE) {
|
||||
purge();
|
||||
changeCount = 0;
|
||||
}
|
||||
// do a partial purge more often
|
||||
else if ((changeCount % PARTIAL_PURGE_COUNT) == 0) {
|
||||
purgeOne();
|
||||
}
|
||||
return super.remove(new Referenced(key));
|
||||
}
|
||||
|
||||
/**
|
||||
*@see Hashtable
|
||||
*/
|
||||
public boolean isEmpty() {
|
||||
purge();
|
||||
return super.isEmpty();
|
||||
}
|
||||
|
||||
/**
|
||||
*@see Hashtable
|
||||
*/
|
||||
public int size() {
|
||||
purge();
|
||||
return super.size();
|
||||
}
|
||||
|
||||
/**
|
||||
*@see Hashtable
|
||||
*/
|
||||
public String toString() {
|
||||
purge();
|
||||
return super.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Hashtable
|
||||
*/
|
||||
protected void rehash() {
|
||||
// purge here to save the effort of rehashing dead entries
|
||||
purge();
|
||||
super.rehash();
|
||||
}
|
||||
|
||||
/**
|
||||
* Purges all entries whose wrapped keys
|
||||
* have been garbage collected.
|
||||
*/
|
||||
private void purge() {
|
||||
synchronized (queue) {
|
||||
WeakKey key;
|
||||
while ((key = (WeakKey) queue.poll()) != null) {
|
||||
super.remove(key.getReferenced());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Purges one entry whose wrapped key
|
||||
* has been garbage collected.
|
||||
*/
|
||||
private void purgeOne() {
|
||||
|
||||
synchronized (queue) {
|
||||
WeakKey key = (WeakKey) queue.poll();
|
||||
if (key != null) {
|
||||
super.remove(key.getReferenced());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Entry implementation */
|
||||
private final static class Entry implements Map.Entry {
|
||||
|
||||
private final Object key;
|
||||
private final Object value;
|
||||
|
||||
private Entry(Object key, Object value) {
|
||||
this.key = key;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public boolean equals(Object o) {
|
||||
boolean result = false;
|
||||
if (o != null && o instanceof Map.Entry) {
|
||||
Map.Entry entry = (Map.Entry) o;
|
||||
result = (getKey()==null ?
|
||||
entry.getKey() == null :
|
||||
getKey().equals(entry.getKey()))
|
||||
&&
|
||||
(getValue()==null ?
|
||||
entry.getValue() == null :
|
||||
getValue().equals(entry.getValue()));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public int hashCode() {
|
||||
|
||||
return (getKey()==null ? 0 : getKey().hashCode()) ^
|
||||
(getValue()==null ? 0 : getValue().hashCode());
|
||||
}
|
||||
|
||||
public Object setValue(Object value) {
|
||||
throw new UnsupportedOperationException("Entry.setValue is not supported.");
|
||||
}
|
||||
|
||||
public Object getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public Object getKey() {
|
||||
return key;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/** Wrapper giving correct symantics for equals and hashcode */
|
||||
private final static class Referenced {
|
||||
|
||||
private final WeakReference reference;
|
||||
private final int hashCode;
|
||||
|
||||
/**
|
||||
*
|
||||
* @throws NullPointerException if referant is <code>null</code>
|
||||
*/
|
||||
private Referenced(Object referant) {
|
||||
reference = new WeakReference(referant);
|
||||
// Calc a permanent hashCode so calls to Hashtable.remove()
|
||||
// work if the WeakReference has been cleared
|
||||
hashCode = referant.hashCode();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @throws NullPointerException if key is <code>null</code>
|
||||
*/
|
||||
private Referenced(Object key, ReferenceQueue queue) {
|
||||
reference = new WeakKey(key, queue, this);
|
||||
// Calc a permanent hashCode so calls to Hashtable.remove()
|
||||
// work if the WeakReference has been cleared
|
||||
hashCode = key.hashCode();
|
||||
|
||||
}
|
||||
|
||||
public int hashCode() {
|
||||
return hashCode;
|
||||
}
|
||||
|
||||
private Object getValue() {
|
||||
return reference.get();
|
||||
}
|
||||
|
||||
public boolean equals(Object o) {
|
||||
boolean result = false;
|
||||
if (o instanceof Referenced) {
|
||||
Referenced otherKey = (Referenced) o;
|
||||
Object thisKeyValue = getValue();
|
||||
Object otherKeyValue = otherKey.getValue();
|
||||
if (thisKeyValue == null) {
|
||||
result = (otherKeyValue == null);
|
||||
|
||||
// Since our hashcode was calculated from the original
|
||||
// non-null referant, the above check breaks the
|
||||
// hashcode/equals contract, as two cleared Referenced
|
||||
// objects could test equal but have different hashcodes.
|
||||
// We can reduce (not eliminate) the chance of this
|
||||
// happening by comparing hashcodes.
|
||||
if (result == true) {
|
||||
result = (this.hashCode() == otherKey.hashCode());
|
||||
}
|
||||
// In any case, as our c'tor does not allow null referants
|
||||
// and Hashtable does not do equality checks between
|
||||
// existing keys, normal hashtable operations should never
|
||||
// result in an equals comparison between null referants
|
||||
}
|
||||
else
|
||||
{
|
||||
result = thisKeyValue.equals(otherKeyValue);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* WeakReference subclass that holds a hard reference to an
|
||||
* associated <code>value</code> and also makes accessible
|
||||
* the Referenced object holding it.
|
||||
*/
|
||||
private final static class WeakKey extends WeakReference {
|
||||
|
||||
private final Referenced referenced;
|
||||
|
||||
private WeakKey(Object key,
|
||||
ReferenceQueue queue,
|
||||
Referenced referenced) {
|
||||
super(key, queue);
|
||||
this.referenced = referenced;
|
||||
}
|
||||
|
||||
private Referenced getReferenced() {
|
||||
return referenced;
|
||||
}
|
||||
}
|
||||
}
|
||||
22
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/impl/package.html
vendored
Normal file
22
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/impl/package.html
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
<!--
|
||||
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
-->
|
||||
|
||||
<body>
|
||||
<p>Concrete implementations of commons-logging wrapper APIs.</p>
|
||||
</body>
|
||||
255
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/package.html
vendored
Normal file
255
vendor/commons-logging/1.1.1/java/org/apache/commons/logging/package.html
vendored
Normal file
@@ -0,0 +1,255 @@
|
||||
<!--
|
||||
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
-->
|
||||
|
||||
<body>
|
||||
<p>Simple wrapper API around multiple logging APIs.</p>
|
||||
|
||||
|
||||
<h3>Overview</h3>
|
||||
|
||||
<p>This package provides an API for logging in server-based applications that
|
||||
can be used around a variety of different logging implementations, including
|
||||
prebuilt support for the following:</p>
|
||||
<ul>
|
||||
<li><a href="http://logging.apache.org/log4j/">Log4J</a> (version 1.2 or later)
|
||||
from Apache's Logging project. Each named <a href="Log.html">Log</a>
|
||||
instance is connected to a corresponding Log4J Logger.</li>
|
||||
<li><a href="http://java.sun.com/j2se/1.4/docs/guide/util/logging/index.html">
|
||||
JDK Logging API</a>, included in JDK 1.4 or later systems. Each named
|
||||
<a href="Log.html">Log</a> instance is connected to a corresponding
|
||||
<code>java.util.logging.Logger</code> instance.</li>
|
||||
<li><a href="http://avalon.apache.org/logkit/">LogKit</a> from Apache's
|
||||
Avalon project. Each named <a href="Log.html">Log</a> instance is
|
||||
connected to a corresponding LogKit <code>Logger</code>.</li>
|
||||
<li><a href="impl/NoOpLog.html">NoOpLog</a> implementation that simply swallows
|
||||
all log output, for all named <a href="Log.html">Log</a> instances.</li>
|
||||
<li><a href="impl/SimpleLog.html">SimpleLog</a> implementation that writes all
|
||||
log output, for all named <a href="Log.html">Log</a> instances, to
|
||||
System.err.</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3>Quick Start Guide</h3>
|
||||
|
||||
<p>For those impatient to just get on with it, the following example
|
||||
illustrates the typical declaration and use of a logger that is named (by
|
||||
convention) after the calling class:
|
||||
|
||||
<pre>
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
public class Foo {
|
||||
|
||||
private Log log = LogFactory.getLog(Foo.class);
|
||||
|
||||
public void foo() {
|
||||
...
|
||||
try {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("About to do something to object " + name);
|
||||
}
|
||||
name.bar();
|
||||
} catch (IllegalStateException e) {
|
||||
log.error("Something bad happened to " + name, e);
|
||||
}
|
||||
...
|
||||
}
|
||||
</pre>
|
||||
|
||||
<p>Unless you configure things differently, all log output will be written
|
||||
to System.err. Therefore, you really will want to review the remainder of
|
||||
this page in order to understand how to configure logging for your
|
||||
application.</p>
|
||||
|
||||
|
||||
<h3>Configuring the Commons Logging Package</h3>
|
||||
|
||||
|
||||
<h4>Choosing a <code>LogFactory</code> Implementation</h4>
|
||||
|
||||
<p>From an application perspective, the first requirement is to retrieve an
|
||||
object reference to the <code>LogFactory</code> instance that will be used
|
||||
to create <code><a href="Log.html">Log</a></code> instances for this
|
||||
application. This is normally accomplished by calling the static
|
||||
<code>getFactory()</code> method. This method implements the following
|
||||
discovery algorithm to select the name of the <code>LogFactory</code>
|
||||
implementation class this application wants to use:</p>
|
||||
<ul>
|
||||
<li>Check for a system property named
|
||||
<code>org.apache.commons.logging.LogFactory</code>.</li>
|
||||
<li>Use the JDK 1.3 JAR Services Discovery mechanism (see
|
||||
<a href="http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html">
|
||||
http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html</a> for
|
||||
more information) to look for a resource named
|
||||
<code>META-INF/services/org.apache.commons.logging.LogFactory</code>
|
||||
whose first line is assumed to contain the desired class name.</li>
|
||||
<li>Look for a properties file named <code>commons-logging.properties</code>
|
||||
visible in the application class path, with a property named
|
||||
<code>org.apache.commons.logging.LogFactory</code> defining the
|
||||
desired implementation class name.</li>
|
||||
<li>Fall back to a default implementation, which is described
|
||||
further below.</li>
|
||||
</ul>
|
||||
|
||||
<p>If a <code>commons-logging.properties</code> file is found, all of the
|
||||
properties defined there are also used to set configuration attributes on
|
||||
the instantiated <code>LogFactory</code> instance.</p>
|
||||
|
||||
<p>Once an implementation class name is selected, the corresponding class is
|
||||
loaded from the current Thread context class loader (if there is one), or
|
||||
from the class loader that loaded the <code>LogFactory</code> class itself
|
||||
otherwise. This allows a copy of <code>commons-logging.jar</code> to be
|
||||
shared in a multiple class loader environment (such as a servlet container),
|
||||
but still allow each web application to provide its own <code>LogFactory</code>
|
||||
implementation, if it so desires. An instance of this class will then be
|
||||
created, and cached per class loader.
|
||||
|
||||
|
||||
<h4>The Default <code>LogFactory</code> Implementation</h4>
|
||||
|
||||
<p>The Logging Package APIs include a default <code>LogFactory</code>
|
||||
implementation class (<a href="impl/LogFactoryImpl.html">
|
||||
org.apache.commons.logging.impl.LogFactoryImpl</a>) that is selected if no
|
||||
other implementation class name can be discovered. Its primary purpose is
|
||||
to create (as necessary) and return <a href="Log.html">Log</a> instances
|
||||
in response to calls to the <code>getInstance()</code> method. The default
|
||||
implementation uses the following rules:</p>
|
||||
<ul>
|
||||
<li>At most one <code>Log</code> instance of the same name will be created.
|
||||
Subsequent <code>getInstance()</code> calls to the same
|
||||
<code>LogFactory</code> instance, with the same name or <code>Class</code>
|
||||
parameter, will return the same <code>Log</code> instance.</li>
|
||||
<li>When a new <code>Log</code> instance must be created, the default
|
||||
<code>LogFactory</code> implementation uses the following discovery
|
||||
process:
|
||||
<ul>
|
||||
<li>Look for a configuration attribute of this factory named
|
||||
<code>org.apache.commons.logging.Log</code> (for backwards
|
||||
compatibility to pre-1.0 versions of this API, an attribute
|
||||
<code>org.apache.commons.logging.log</code> is also consulted).</li>
|
||||
<li>Look for a system property named
|
||||
<code>org.apache.commons.logging.Log</code> (for backwards
|
||||
compatibility to pre-1.0 versions of this API, a system property
|
||||
<code>org.apache.commons.logging.log</code> is also consulted).</li>
|
||||
<li>If the Log4J logging system is available in the application
|
||||
class path, use the corresponding wrapper class
|
||||
(<a href="impl/Log4JLogger.html">Log4JLogger</a>).</li>
|
||||
<li>If the application is executing on a JDK 1.4 system, use
|
||||
the corresponding wrapper class
|
||||
(<a href="impl/Jdk14Logger.html">Jdk14Logger</a>).</li>
|
||||
<li>Fall back to the default simple logging implementation
|
||||
(<a href="impl/SimpleLog.html">SimpleLog</a>).</li>
|
||||
</ul></li>
|
||||
<li>Load the class of the specified name from the thread context class
|
||||
loader (if any), or from the class loader that loaded the
|
||||
<code>LogFactory</code> class otherwise.</li>
|
||||
<li>Instantiate an instance of the selected <code>Log</code>
|
||||
implementation class, passing the specified name as the single
|
||||
argument to its constructor.</li>
|
||||
</ul>
|
||||
|
||||
<p>See the <a href="impl/SimpleLog.html">SimpleLog</a> JavaDocs for detailed
|
||||
configuration information for this default implementation.</p>
|
||||
|
||||
|
||||
<h4>Configuring the Underlying Logging System</h4>
|
||||
|
||||
<p>The basic principle is that the user is totally responsible for the
|
||||
configuration of the underlying logging system.
|
||||
Commons-logging should not change the existing configuration.</p>
|
||||
|
||||
<p>Each individual <a href="Log.html">Log</a> implementation may
|
||||
support its own configuration properties. These will be documented in the
|
||||
class descriptions for the corresponding implementation class.</p>
|
||||
|
||||
<p>Finally, some <code>Log</code> implementations (such as the one for Log4J)
|
||||
require an external configuration file for the entire logging environment.
|
||||
This file should be prepared in a manner that is specific to the actual logging
|
||||
technology being used.</p>
|
||||
|
||||
|
||||
<h3>Using the Logging Package APIs</h3>
|
||||
|
||||
<p>Use of the Logging Package APIs, from the perspective of an application
|
||||
component, consists of the following steps:</p>
|
||||
<ol>
|
||||
<li>Acquire a reference to an instance of
|
||||
<a href="Log.html">org.apache.commons.logging.Log</a>, by calling the
|
||||
factory method
|
||||
<a href="LogFactory.html#getInstance(java.lang.String)">
|
||||
LogFactory.getInstance(String name)</a>. Your application can contain
|
||||
references to multiple loggers that are used for different
|
||||
purposes. A typical scenario for a server application is to have each
|
||||
major component of the server use its own Log instance.</li>
|
||||
<li>Cause messages to be logged (if the corresponding detail level is enabled)
|
||||
by calling appropriate methods (<code>trace()</code>, <code>debug()</code>,
|
||||
<code>info()</code>, <code>warn()</code>, <code>error</code>, and
|
||||
<code>fatal()</code>).</li>
|
||||
</ol>
|
||||
|
||||
<p>For convenience, <code>LogFactory</code> also offers a static method
|
||||
<code>getLog()</code> that combines the typical two-step pattern:</p>
|
||||
<pre>
|
||||
Log log = LogFactory.getFactory().getInstance(Foo.class);
|
||||
</pre>
|
||||
<p>into a single method call:</p>
|
||||
<pre>
|
||||
Log log = LogFactory.getLog(Foo.class);
|
||||
</pre>
|
||||
|
||||
<p>For example, you might use the following technique to initialize and
|
||||
use a <a href="Log.html">Log</a> instance in an application component:</p>
|
||||
<pre>
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
public class MyComponent {
|
||||
|
||||
protected Log log =
|
||||
LogFactory.getLog(MyComponent.class);
|
||||
|
||||
// Called once at startup time
|
||||
public void start() {
|
||||
...
|
||||
log.info("MyComponent started");
|
||||
...
|
||||
}
|
||||
|
||||
// Called once at shutdown time
|
||||
public void stop() {
|
||||
...
|
||||
log.info("MyComponent stopped");
|
||||
...
|
||||
}
|
||||
|
||||
// Called repeatedly to process a particular argument value
|
||||
// which you want logged if debugging is enabled
|
||||
public void process(String value) {
|
||||
...
|
||||
// Do the string concatenation only if logging is enabled
|
||||
if (log.isDebugEnabled())
|
||||
log.debug("MyComponent processing " + value);
|
||||
...
|
||||
}
|
||||
|
||||
}
|
||||
</pre>
|
||||
|
||||
</body>
|
||||
55
vendor/iTunesController/0.2/com/dt/iTunesController/ITArtwork.java
vendored
Normal file
55
vendor/iTunesController/0.2/com/dt/iTunesController/ITArtwork.java
vendored
Normal file
@@ -0,0 +1,55 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.com.Dispatch;
|
||||
|
||||
/**
|
||||
* Represents a artwork.
|
||||
*
|
||||
* Defines a single piece of artwork.
|
||||
*
|
||||
* Artwork is always associated with an individual track.
|
||||
* To add a piece of artwork to a track, use IITTrack::AddArtworkFromFile().
|
||||
* The IITTrack::Artwork property
|
||||
*
|
||||
* To get a collection of artwork associated with a track call
|
||||
* <code>ITTrack.getArtwork()</code>.
|
||||
*
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public class ITArtwork extends ITObject {
|
||||
|
||||
public ITArtwork (Dispatch d) {
|
||||
super(d);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete this object.
|
||||
*/
|
||||
public void delete() {
|
||||
Dispatch.call(object, "Delete");
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the kind of the object.
|
||||
* @return Returns the kind of the object.
|
||||
*/
|
||||
public ITArtworkFormat getFormat() {
|
||||
return ITArtworkFormat.values()[Dispatch.get(object, "Format").getInt()];
|
||||
}
|
||||
|
||||
// TODO: Comments
|
||||
|
||||
public boolean getIsDownloadedArtwork() {
|
||||
return Dispatch.get(object, "IsDownloadedArtwork").getBoolean();
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return Dispatch.get(object, "Description").getString();
|
||||
|
||||
}
|
||||
|
||||
public void SaveArtworkToFile(String filePath) {
|
||||
Dispatch.call(object, "SaveArtworkToFile",filePath);
|
||||
}
|
||||
|
||||
}
|
||||
55
vendor/iTunesController/0.2/com/dt/iTunesController/ITArtworkCollection.java
vendored
Normal file
55
vendor/iTunesController/0.2/com/dt/iTunesController/ITArtworkCollection.java
vendored
Normal file
@@ -0,0 +1,55 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.com.Dispatch;
|
||||
|
||||
/**
|
||||
* Represents a collection of Artwork objects.
|
||||
*
|
||||
* Note that collection indices are always 1-based.
|
||||
*
|
||||
* You can retrieve all the Artworks defined for a source using
|
||||
* <code>ITSource.getArtwork()</code>.
|
||||
*
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public class ITArtworkCollection {
|
||||
|
||||
protected Dispatch object;
|
||||
|
||||
public ITArtworkCollection(Dispatch d) {
|
||||
object = d;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of playlists in the collection.
|
||||
* @return Returns the number of playlists in the collection.
|
||||
*/
|
||||
public int getCount() {
|
||||
return Dispatch.get(object, "Count").getInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an ITArtwork object corresponding to the given index (1-based).
|
||||
* @param index Index of the playlist to retrieve, must be less than or
|
||||
* equal to <code>ITArtworkCollection.getCount()</code>.
|
||||
* @return Returns an ITArtwork object corresponding to the given index.
|
||||
* Will be set to NULL if no playlist could be retrieved.
|
||||
*/
|
||||
public ITArtwork getItem (int index) {
|
||||
Dispatch item = Dispatch.call(object, "Item", index).toDispatch();
|
||||
return new ITArtwork(item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an ITArtwork object with the specified persistent ID. See the
|
||||
* documentation on ITObject for more information on persistent IDs.
|
||||
* @param highID The high 32 bits of the 64-bit persistent ID.
|
||||
* @param lowID The low 32 bits of the 64-bit persistent ID.
|
||||
* @return Returns an ITArtwork object with the specified persistent ID.
|
||||
* Will be set to NULL if no playlist could be retrieved.
|
||||
*/
|
||||
public ITArtwork getItemByPersistentID (int highID, int lowID) {
|
||||
Dispatch item = Dispatch.call(object, "ItemByPersistentID", highID, lowID).toDispatch();
|
||||
return new ITArtwork(item);
|
||||
}
|
||||
}
|
||||
13
vendor/iTunesController/0.2/com/dt/iTunesController/ITArtworkFormat.java
vendored
Normal file
13
vendor/iTunesController/0.2/com/dt/iTunesController/ITArtworkFormat.java
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
package com.dt.iTunesController;
|
||||
|
||||
/**
|
||||
* Specifies the Artwork kind.
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public enum ITArtworkFormat {
|
||||
ITArtworkFormatUnknown,
|
||||
ITArtworkFormatJPEG,
|
||||
ITArtworkFormatPNG,
|
||||
ITArtworkFormatBMP;
|
||||
}
|
||||
76
vendor/iTunesController/0.2/com/dt/iTunesController/ITAudioCDPlaylist.java
vendored
Normal file
76
vendor/iTunesController/0.2/com/dt/iTunesController/ITAudioCDPlaylist.java
vendored
Normal file
@@ -0,0 +1,76 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.com.Dispatch;
|
||||
|
||||
/**
|
||||
* Represents an audio CD playlist.
|
||||
*
|
||||
* An audio CD playlist is always associated with an IITSource of kind
|
||||
* ITSourceKindAudioCD.
|
||||
*
|
||||
* You can retrieve all the playlists defined for a source using
|
||||
* <code>ITSource.getPlaylists()</code>.
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
public class ITAudioCDPlaylist extends ITPlaylist {
|
||||
|
||||
public ITAudioCDPlaylist(Dispatch d) {
|
||||
super(d);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the audio CD's artist.
|
||||
* @return Returns the audio CD's artist.
|
||||
*/
|
||||
public String getArtist() {
|
||||
return Dispatch.get(object, "Artist").getString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if this audio CD is a compilation album.
|
||||
* @return Returns true if this audio CD is a compilation album.
|
||||
*/
|
||||
public boolean isCompilation() {
|
||||
return Dispatch.get(object, "Compilation").getBoolean();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the audio CD's composer.
|
||||
* @return Returns the audio CD's composer.
|
||||
*/
|
||||
public String getComposer() {
|
||||
return Dispatch.get(object, "Composer").getString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the total number of discs in this CD's album.
|
||||
* @return Returns the total number of discs in this CD's album.
|
||||
*/
|
||||
public long getDiscCount() {
|
||||
return Dispatch.get(object, "DiscCount").getLong();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the index of the CD disc in the source album.
|
||||
* @return Returns the index of the CD disc in the source album.
|
||||
*/
|
||||
public long getDiscNumber() {
|
||||
return Dispatch.get(object, "DiscNumber").getLong();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the audio CD's genre.
|
||||
* @return Returns the audio CD's genre.
|
||||
*/
|
||||
public String getGenre() {
|
||||
return Dispatch.get(object, "Genre").getString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Reveals the CD playlist in the main browser window.
|
||||
*/
|
||||
public void reveal() {
|
||||
Dispatch.call(object, "Reveal");
|
||||
}
|
||||
|
||||
}
|
||||
45
vendor/iTunesController/0.2/com/dt/iTunesController/ITBrowserWindow.java
vendored
Normal file
45
vendor/iTunesController/0.2/com/dt/iTunesController/ITBrowserWindow.java
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
package com.dt.iTunesController;
|
||||
import com.jacob.com.Dispatch;
|
||||
|
||||
/**
|
||||
* Represents the main browser window.
|
||||
*
|
||||
* You can retrieve the main browser window using
|
||||
* <code>iTunes.BrowserWindow()</code>.
|
||||
*
|
||||
* @author <a href="mailto:steve@dot-totally.co.uk">Steve Eyre</a>
|
||||
* @version 0.2
|
||||
*/
|
||||
|
||||
public class ITBrowserWindow extends ITWindow {
|
||||
|
||||
public ITBrowserWindow (Dispatch d) {
|
||||
super(d);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the kind of the object.
|
||||
* @return Returns the kind of the object.
|
||||
*/
|
||||
public boolean getMiniPlayer() {
|
||||
return Dispatch.get(object, "MiniPlayer").getBoolean();
|
||||
}
|
||||
|
||||
// TODO: Comments
|
||||
|
||||
public ITTrackCollection getSelectedTracks() {
|
||||
Dispatch collection = Dispatch.call(object, "SelectedTracks").getDispatch();
|
||||
return new ITTrackCollection(collection);
|
||||
}
|
||||
|
||||
public ITPlaylist getSelectedPlaylist() {
|
||||
Dispatch playlist = Dispatch.get(object, "SelectedPlaylist").toDispatch();
|
||||
return new ITPlaylist(playlist);
|
||||
}
|
||||
|
||||
public void setSelectedPlaylist(ITPlaylist playlist) {
|
||||
Dispatch dispatchRef = playlist.fetchDispatch();
|
||||
Dispatch.put(object, "SelectedPlaylist", dispatchRef);
|
||||
}
|
||||
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user