/////////////////////////////////////////////////////////////////////////////
-// Name: joystick.cpp
+// Name: src/msw/joystick.cpp
// Purpose: wxJoystick class
// Author: Julian Smart
// Modified by:
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma implementation "joystick.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
-#pragma hdrstop
+ #pragma hdrstop
#endif
-#include "wx/string.h"
-#include "wx/window.h"
-#include "wx/msw/private.h"
+#if wxUSE_JOYSTICK
-#if !defined(__GNUWIN32_OLD__) || defined(__CYGWIN10__)
- #include <mmsystem.h>
-#endif
+#include "wx/joystick.h"
-#if !defined(__WIN32__) && !defined(_MMRESULT_)
-typedef UINT MMRESULT;
+#ifndef WX_PRECOMP
+ #include "wx/string.h"
+ #include "wx/window.h"
#endif
-#ifdef __GNUWIN32_OLD__
-#include "wx/msw/gnuwin32/extra.h"
+#include "wx/msw/private.h"
+
+#if !defined(__GNUWIN32_OLD__) || defined(__CYGWIN10__)
+ #include <mmsystem.h>
#endif
// Why doesn't BC++ have joyGetPosEx?
#define NO_JOYGETPOSEX
#endif
-#include "wx/window.h"
-#include "wx/msw/joystick.h"
+#include "wx/msw/registry.h"
+
+#include <regstr.h>
IMPLEMENT_DYNAMIC_CLASS(wxJoystick, wxObject)
/* No such joystick, return ID 0 */
m_joystick = 0;
return;
-};
+}
wxPoint wxJoystick::GetPosition() const
{
if (res == JOYERR_NOERROR )
return wxPoint(joyInfo.wXpos, joyInfo.wYpos);
else
- return wxPoint(0, 0);
+ return wxPoint(0,0);
+}
+
+int wxJoystick::GetPosition(unsigned axis) const
+{
+ switch (axis) {
+ case 0:
+ return GetPosition().x;
+ case 1:
+ return GetPosition().y;
+ case 2:
+ return GetZPosition();
+ case 3:
+ return GetRudderPosition();
+ case 4:
+ return GetUPosition();
+ case 5:
+ return GetVPosition();
+ default:
+ return 0;
+ }
}
int wxJoystick::GetZPosition() const
return 0;
}
+bool wxJoystick::GetButtonState(unsigned id) const
+{
+ if (id > sizeof(int) * 8)
+ return false;
+
+ return (GetButtonState() & (1 << id)) != 0;
+}
+
/**
JLI 2002-08-20:
Returns -1 to signify error.
wxString wxJoystick::GetProductName() const
{
+ wxString str;
+#ifndef __WINE__
JOYCAPS joyCaps;
- if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR)
+ if (joyGetDevCaps(m_joystick, &joyCaps, sizeof(joyCaps)) != JOYERR_NOERROR)
return wxEmptyString;
- else
- return wxString(joyCaps.szPname);
+
+ wxRegKey key1(wxString::Format(wxT("HKEY_LOCAL_MACHINE\\%s\\%s\\%s"),
+ REGSTR_PATH_JOYCONFIG, joyCaps.szRegKey, REGSTR_KEY_JOYCURR));
+
+ key1.QueryValue(wxString::Format(wxT("Joystick%d%s"),
+ m_joystick + 1, REGSTR_VAL_JOYOEMNAME),
+ str);
+
+ wxRegKey key2(wxString::Format(wxT("HKEY_LOCAL_MACHINE\\%s\\%s"),
+ REGSTR_PATH_JOYOEM, str.c_str()));
+ key2.QueryValue(REGSTR_VAL_JOYOEMNAME, str);
+#endif
+ return str;
}
int wxJoystick::GetXMin() const
bool wxJoystick::SetCapture(wxWindow* win, int pollingFreq)
{
+#ifdef __WXMSW__
BOOL changed = (pollingFreq == 0);
MMRESULT res = joySetCapture((HWND) win->GetHWND(), m_joystick, pollingFreq, changed);
return (res == JOYERR_NOERROR);
+#else
+ wxUnusedVar(win);
+ wxUnusedVar(pollingFreq);
+ return false;
+#endif
}
bool wxJoystick::ReleaseCapture()
return (res == JOYERR_NOERROR);
}
+#endif // wxUSE_JOYSTICK