]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/event.h
applied patch to make wxGLCanvas derive from wxWindow, not wxScrolledWindow (Paul...
[wxWidgets.git] / include / wx / event.h
index 19922acda2efd535626ede8cde57e28c7659b208..760e675e55c3293762496465464498a22105c8f0 100644 (file)
@@ -18,6 +18,7 @@
 
 #include "wx/defs.h"
 #include "wx/object.h"
+#include "wx/clntdata.h"
 
 #if wxUSE_GUI
     #include "wx/gdicmn.h"
@@ -33,7 +34,6 @@
 class WXDLLEXPORT wxList;
 
 #if wxUSE_GUI
-    class WXDLLEXPORT wxClientData;
     class WXDLLEXPORT wxDC;
     class WXDLLEXPORT wxMenu;
     class WXDLLEXPORT wxWindow;
@@ -76,6 +76,7 @@ typedef int wxEventType;
 #define DECLARE_EVENT_TYPE(name, value) name = wxEVT_FIRST + value,
 #define DECLARE_LOCAL_EVENT_TYPE(name, value) name = wxEVT_FIRST + value,
 #define DEFINE_EVENT_TYPE(name)
+#define DEFINE_LOCAL_EVENT_TYPE(name)
 
 
 #else // !WXWIN_COMPATIBILITY_EVENT_TYPES
@@ -89,6 +90,7 @@ typedef int wxEventType;
     extern const wxEventType WXDLLEXPORT name;
 #define DECLARE_LOCAL_EVENT_TYPE(name, value) extern const wxEventType name;
 #define DEFINE_EVENT_TYPE(name) const wxEventType name = wxNewEventType();
+#define DEFINE_LOCAL_EVENT_TYPE(name) const wxEventType name = wxNewEventType();
 
 // generate a new unique event type
 extern WXDLLEXPORT wxEventType wxNewEventType();
@@ -780,7 +782,10 @@ public:
     bool AltDown() const { return m_altDown; }
     bool ShiftDown() const { return m_shiftDown; }
 
-    bool HasModifiers() const { return ControlDown() || AltDown() || MetaDown(); }
+    // exclude MetaDown() from HasModifiers() because NumLock under X is often
+    // configured as mod2 modifier, yet the key events even when it is pressed
+    // should be processed normally, not like Ctrl- or Alt-key
+    bool HasModifiers() const { return ControlDown() || AltDown(); }
 
     // get the key code: an ASCII7 char or an element of wxKeyCode enum
     int GetKeyCode() const { return (int)m_keyCode; }
@@ -1548,6 +1553,7 @@ protected:
  wxEVT_COMPARE_ITEM
 */
 
+
 // ============================================================================
 // event handler and related classes
 // ============================================================================
@@ -1697,6 +1703,15 @@ public:
                   wxObject *userData = (wxObject *) NULL )
         { return Disconnect(id, -1, eventType, func, userData); }
 
+
+    // User data can be associated with each wxEvtHandler
+    void SetClientObject( wxClientData *data ) { DoSetClientObject(data); }
+    wxClientData *GetClientObject() const { return DoGetClientObject(); }
+
+    void SetClientData( void *data ) { DoSetClientData(data); }
+    void *GetClientData() const { return DoGetClientData(); }
+
+
     // implementation from now on
     virtual bool SearchEventTable(wxEventTable& table, wxEvent& event);
     bool SearchDynamicEventTable( wxEvent& event );
@@ -1757,6 +1772,29 @@ protected:
     // Is event handler enabled?
     bool                m_enabled;
 
+
+    // The user data: either an object which will be deleted by the container
+    // when it's deleted or some raw pointer which we do nothing with - only
+    // one type of data can be used with the given window (i.e. you cannot set
+    // the void data and then associate the container with wxClientData or vice
+    // versa)
+    union
+    {
+        wxClientData *m_clientObject;
+        void         *m_clientData;
+    };
+
+    // what kind of data do we have?
+    wxClientDataType m_clientDataType;
+
+    // client data accessors
+    virtual void DoSetClientObject( wxClientData *data );
+    virtual wxClientData *DoGetClientObject() const;
+
+    virtual void DoSetClientData( void *data );
+    virtual void *DoGetClientData() const;
+
+
 private:
     DECLARE_DYNAMIC_CLASS(wxEvtHandler)
 };