]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/mac/corefoundation/hid.h
wxTheColourDatabase->Find() can fail.
[wxWidgets.git] / include / wx / mac / corefoundation / hid.h
index 33b01d54df3cdfecc3f3f5a7d9de5693cce8f19f..077a4c44359d528a08602e1f82ac44f2ca80d654 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
-// Name:        hid.h
+// Name:        wx/mac/corefoundation/hid.h
 // Purpose:     DARWIN HID layer for WX
 // Author:      Ryan Norton
 // Modified by:
 // Purpose:     DARWIN HID layer for WX
 // Author:      Ryan Norton
 // Modified by:
@@ -8,6 +8,7 @@
 // Copyright:   (c) Ryan Norton
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 // Copyright:   (c) Ryan Norton
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
+
 // ===========================================================================
 // declarations
 // ===========================================================================
 // ===========================================================================
 // declarations
 // ===========================================================================
 #include "wx/defs.h"
 #include "wx/string.h"
 
 #include "wx/defs.h"
 #include "wx/string.h"
 
-// ---------------------------------------------------------------------------
-// definitions
-// ---------------------------------------------------------------------------
-
 //Mac OSX only
 #ifdef __DARWIN__
 
 //Mac OSX only
 #ifdef __DARWIN__
 
 #include <IOKit/hid/IOHIDKeys.h>
 #include <Kernel/IOKit/hidsystem/IOHIDUsageTables.h>
 
 #include <IOKit/hid/IOHIDKeys.h>
 #include <Kernel/IOKit/hidsystem/IOHIDUsageTables.h>
 
-#include <mach/mach.h>
+//Darn apple - doesn't properly wrap their headers in extern "C"!
+//http://www.macosx.com/forums/archive/index.php/t-68069.html
+//Needed for codewarrior link error with mach_port_deallocate()
+extern "C" {
+#include <mach/mach_port.h>
+}
 
 
-//Utility wrapper around CFArray
-class wxCFArray
-{
-public:
-       wxCFArray(CFTypeRef pData) : pArray((CFArrayRef) pData) {}
-       CFTypeRef operator [] (const int& nIndex) {return CFArrayGetValueAtIndex(pArray, nIndex); }
-       int Count() {return CFArrayGetCount(pArray);}
-private:
-       CFArrayRef pArray;
-};
+#include <mach/mach.h> //this actually includes mach_port.h (see above)
 
 
+// ===========================================================================
+// definitions
+// ===========================================================================
+
+
+// ---------------------------------------------------------------------------
+// wxHIDDevice
 //
 //
-//     A wrapper around OS X HID Manager procedures.
-//     The tutorial "Working With HID Class Device Interfaces" Is
-//     Quite good, as is the sample program associated with it 
-//  (Depite the author's protests!).
+// A wrapper around OS X HID Manager procedures.
+// The tutorial "Working With HID Class Device Interfaces" Is
+// Quite good, as is the sample program associated with it
+// (Depite the author's protests!).
+// ---------------------------------------------------------------------------
 class wxHIDDevice
 {
 public:
 class wxHIDDevice
 {
 public:
-       wxHIDDevice() : m_ppDevice(NULL), m_ppQueue(NULL), m_pCookies(NULL) {}
-       //kHIDPage_GenericDesktop
-       //kHIDUsage_GD_Joystick,kHIDUsage_GD_Mouse,kHIDUsage_GD_Keyboard
-       bool Create (int nClass = -1, int nType = -1, int nDev = 1);
-    
-    static int GetCount(int nClass = -1, int nType = -1);
-
-       void AddCookie(CFTypeRef Data, int i);
-       void AddCookieInQueue(CFTypeRef Data, int i);   
-       void InitCookies(size_t dwSize, bool bQueue = false);
-
-       //Must be implemented by derived classes
-       //builds the cookie array -
-       //first call InitCookies to initialize the cookie
-       //array, then AddCookie to add a cookie at a certain point in an array
-       virtual void BuildCookies(wxCFArray& Array) = 0;
-               
-       //checks to see whether the cookie at nIndex is active (element value != 0)
-       bool IsActive(int nIndex);
-    
-    //checks to see whether the cookie at nIndex exists
+    wxHIDDevice() : m_ppDevice(NULL), m_ppQueue(NULL), m_pCookies(NULL) {}
+
+    bool Create (int nClass = -1, int nType = -1, int nDev = 1);
+
+    static size_t GetCount(int nClass = -1, int nType = -1);
+
+    void AddCookie(CFTypeRef Data, int i);
+    void AddCookieInQueue(CFTypeRef Data, int i);
+    void InitCookies(size_t dwSize, bool bQueue = false);
+
+    //Must be implemented by derived classes
+    //builds the cookie array -
+    //first call InitCookies to initialize the cookie
+    //array, then AddCookie to add a cookie at a certain point in an array
+    virtual void BuildCookies(CFArrayRef Array) = 0;
+
+    //checks to see whether the cookie at nIndex is active (element value != 0)
+    bool IsActive(int nIndex);
+
+    //checks to see whether an element in the internal cookie array
+    //exists
     bool HasElement(int nIndex);
     bool HasElement(int nIndex);
-       
-       //closes the device and cleans the queue and cookies
-       virtual ~wxHIDDevice();
-    
+
+    //closes the device and cleans the queue and cookies
+    virtual ~wxHIDDevice();
+
 protected:
 protected:
-       IOHIDDeviceInterface**  m_ppDevice; //this, essentially
-       IOHIDQueueInterface**   m_ppQueue;  //queue (if we want one)
-       IOHIDElementCookie*     m_pCookies; //cookies
-
-       wxString                                m_szProductName; //product name
-       int                                             m_nProductId; //product id
-       int                                             m_nManufacturerId; //manufacturer id
-       mach_port_t                     m_pPort;
+    IOHIDDeviceInterface** m_ppDevice; //this, essentially
+    IOHIDQueueInterface**  m_ppQueue;  //queue (if we want one)
+    IOHIDElementCookie*    m_pCookies; //cookies
+
+    wxString    m_szProductName; //product name
+    int         m_nProductId; //product id
+    int         m_nManufacturerId; //manufacturer id
+    mach_port_t                        m_pPort;            //mach port to use
 };
 
 };
 
+// ---------------------------------------------------------------------------
+// wxHIDKeyboard
+//
+// Semi-simple implementation that opens a connection to the first
+// keyboard of the machine. Used in wxGetKeyState.
+// ---------------------------------------------------------------------------
 class wxHIDKeyboard : public wxHIDDevice
 {
 public:
 class wxHIDKeyboard : public wxHIDDevice
 {
 public:
-       bool Create();
-       virtual void BuildCookies(wxCFArray& Array);
+    static int GetCount();
+    bool Create(int nDev = 1);
+    void AddCookie(CFTypeRef Data, int i);
+    virtual void BuildCookies(CFArrayRef Array);
+    void DoBuildCookies(CFArrayRef Array);
 };
 
 #endif //__DARWIN__
 
 };
 
 #endif //__DARWIN__
 
-#endif 
-        //WX_MACCARBONHID_H
\ No newline at end of file
+#endif //WX_MACCARBONHID_H