]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/joystick.cpp
Do not allow multiple selection when dragging in the 'value' column
[wxWidgets.git] / src / msw / joystick.cpp
index eb5ea63c87199aa62da8a4295164803206826d15..1b9f8b04cede331fa8819b936854cf4745c2daef 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        joystick.cpp
+// Name:        src/msw/joystick.cpp
 // Purpose:     wxJoystick class
 // Author:      Julian Smart
 // Modified by:
@@ -9,31 +9,26 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-#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?
@@ -41,8 +36,9 @@ typedef UINT MMRESULT;
 #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)
 
@@ -50,35 +46,35 @@ IMPLEMENT_DYNAMIC_CLASS(wxJoystick, wxObject)
 ////////////////////////////////////////////////////////////////////////////
 
 /**
-       johan@linkdata.se 2002-08-20:
-       Now returns only valid, functioning
-       joysticks, counting from the first
-       available and upwards.
+    johan@linkdata.se 2002-08-20:
+    Now returns only valid, functioning
+    joysticks, counting from the first
+    available and upwards.
 */
 wxJoystick::wxJoystick(int joystick)
 {
     JOYINFO joyInfo;
-       int i, maxsticks;
-
-       maxsticks = joyGetNumDevs();
-       for( i=0; i<maxsticks; i++ )
-       {
-           if( joyGetPos(i, & joyInfo) == JOYERR_NOERROR )
-           {
-               if( !joystick )
-               {
-                       /* Found the one we want, store actual OS id and return */
-                       m_joystick = i;
-                       return;
-               }
-               joystick --;
-           }
-       }
-
-       /* No such joystick, return ID 0 */
-       m_joystick = 0;
-       return;
-};
+    int i, maxsticks;
+
+    maxsticks = joyGetNumDevs();
+    for( i=0; i<maxsticks; i++ )
+    {
+        if( joyGetPos(i, & joyInfo) == JOYERR_NOERROR )
+        {
+            if( !joystick )
+            {
+                /* Found the one we want, store actual OS id and return */
+                m_joystick = i;
+                return;
+            }
+            joystick --;
+        }
+    }
+
+    /* No such joystick, return ID 0 */
+    m_joystick = 0;
+    return;
+}
 
 wxPoint wxJoystick::GetPosition() const
 {
@@ -87,7 +83,27 @@ 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
@@ -101,9 +117,9 @@ int wxJoystick::GetZPosition() const
 }
 
 /**
-       johan@linkdata.se 2002-08-20:
-       Return a bitmap with all button states in it,
-       like the GTK version does and Win32 does.
+    johan@linkdata.se 2002-08-20:
+    Return a bitmap with all button states in it,
+    like the GTK version does and Win32 does.
 */
 int wxJoystick::GetButtonState() const
 {
@@ -111,7 +127,7 @@ int wxJoystick::GetButtonState() const
     MMRESULT res = joyGetPos(m_joystick, & joyInfo);
     if (res == JOYERR_NOERROR )
     {
-       return joyInfo.wButtons;
+        return joyInfo.wButtons;
 #if 0
         int buttons = 0;
 
@@ -131,9 +147,17 @@ int wxJoystick::GetButtonState() 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.
+    JLI 2002-08-20:
+    Returns -1 to signify error.
 */
 int wxJoystick::GetPOVPosition() const
 {
@@ -154,8 +178,8 @@ int wxJoystick::GetPOVPosition() const
 }
 
 /**
-       johan@linkdata.se 2002-08-20:
-       Returns -1 to signify error.
+    johan@linkdata.se 2002-08-20:
+    Returns -1 to signify error.
 */
 int wxJoystick::GetPOVCTSPosition() const
 {
@@ -251,30 +275,30 @@ void wxJoystick::SetMovementThreshold(int threshold)
 ////////////////////////////////////////////////////////////////////////////
 
 /**
-       johan@linkdata.se 2002-08-20:
-       Now returns the number of connected, functioning
-       joysticks, as intended.
+    johan@linkdata.se 2002-08-20:
+    Now returns the number of connected, functioning
+    joysticks, as intended.
 */
 int wxJoystick::GetNumberJoysticks()
 {
     JOYINFO joyInfo;
-       int i, maxsticks, actualsticks;
-       maxsticks = joyGetNumDevs();
-       actualsticks = 0;
-       for( i=0; i<maxsticks; i++ )
-       {
-               if( joyGetPos( i, & joyInfo ) == JOYERR_NOERROR )
-               {
-                       actualsticks ++;
-               }
-       }
+    int i, maxsticks, actualsticks;
+    maxsticks = joyGetNumDevs();
+    actualsticks = 0;
+    for( i=0; i<maxsticks; i++ )
+    {
+        if( joyGetPos( i, & joyInfo ) == JOYERR_NOERROR )
+        {
+            actualsticks ++;
+        }
+    }
     return actualsticks;
 }
 
 /**
-       johan@linkdata.se 2002-08-20:
-       The old code returned true if there were any
-       joystick capable drivers loaded (=always).
+    johan@linkdata.se 2002-08-20:
+    The old code returned true if there were any
+    joystick capable drivers loaded (=always).
 */
 bool wxJoystick::IsOk() const
 {
@@ -302,11 +326,24 @@ int wxJoystick::GetProductId() const
 
 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
@@ -513,11 +550,11 @@ bool wxJoystick::HasRudder() const
 #if defined(__WIN32__)
     JOYCAPS joyCaps;
     if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR)
-        return FALSE;
+        return false;
     else
         return ((joyCaps.wCaps & JOYCAPS_HASR) == JOYCAPS_HASR);
 #else
-    return FALSE;
+    return false;
 #endif
 }
 
@@ -526,11 +563,11 @@ bool wxJoystick::HasZ() const
 #if defined(__WIN32__)
     JOYCAPS joyCaps;
     if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR)
-        return FALSE;
+        return false;
     else
         return ((joyCaps.wCaps & JOYCAPS_HASZ) == JOYCAPS_HASZ);
 #else
-    return FALSE;
+    return false;
 #endif
 }
 
@@ -539,11 +576,11 @@ bool wxJoystick::HasU() const
 #if defined(__WIN32__)
     JOYCAPS joyCaps;
     if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR)
-        return FALSE;
+        return false;
     else
         return ((joyCaps.wCaps & JOYCAPS_HASU) == JOYCAPS_HASU);
 #else
-    return FALSE;
+    return false;
 #endif
 }
 
@@ -552,11 +589,11 @@ bool wxJoystick::HasV() const
 #if defined(__WIN32__)
     JOYCAPS joyCaps;
     if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR)
-        return FALSE;
+        return false;
     else
         return ((joyCaps.wCaps & JOYCAPS_HASV) == JOYCAPS_HASV);
 #else
-    return FALSE;
+    return false;
 #endif
 }
 
@@ -565,11 +602,11 @@ bool wxJoystick::HasPOV() const
 #if defined(__WIN32__)
     JOYCAPS joyCaps;
     if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR)
-        return FALSE;
+        return false;
     else
         return ((joyCaps.wCaps & JOYCAPS_HASPOV) == JOYCAPS_HASPOV);
 #else
-    return FALSE;
+    return false;
 #endif
 }
 
@@ -578,11 +615,11 @@ bool wxJoystick::HasPOV4Dir() const
 #if defined(__WIN32__)
     JOYCAPS joyCaps;
     if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR)
-        return FALSE;
+        return false;
     else
         return ((joyCaps.wCaps & JOYCAPS_POV4DIR) == JOYCAPS_POV4DIR);
 #else
-    return FALSE;
+    return false;
 #endif
 }
 
@@ -591,11 +628,11 @@ bool wxJoystick::HasPOVCTS() const
 #if defined(__WIN32__)
     JOYCAPS joyCaps;
     if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR)
-        return FALSE;
+        return false;
     else
         return ((joyCaps.wCaps & JOYCAPS_POVCTS) == JOYCAPS_POVCTS);
 #else
-    return FALSE;
+    return false;
 #endif
 }
 
@@ -615,3 +652,4 @@ bool wxJoystick::ReleaseCapture()
     return (res == JOYERR_NOERROR);
 }
 
+#endif // wxUSE_JOYSTICK