]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/event.h
Common code for the same handling of wxSL_INVERSE.
[wxWidgets.git] / include / wx / event.h
index d2467c125bf6e57608ee4454889ef40f610e75ee..81d0cecc085c831762d7770cb2227a7e5082d5fe 100644 (file)
@@ -5,7 +5,7 @@
 // Modified by:
 // Created:     01/02/97
 // RCS-ID:      $Id$
 // Modified by:
 // Created:     01/02/97
 // RCS-ID:      $Id$
-// Copyright:   (c) wxWindows team
+// Copyright:   (c) wxWidgets team
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
@@ -57,19 +57,19 @@ typedef int wxEventType;
 
 // this is used to make the event table entry type safe, so that for an event
 // handler only a function with proper parameter list can be given.
 
 // this is used to make the event table entry type safe, so that for an event
 // handler only a function with proper parameter list can be given.
-#define wxStaticCastEvent(type, val) wxStaticCast(val, type)
+#define wxStaticCastEvent(type, val) wx_static_cast(type, val)
 
 
-// in previous versions of wxWindows the event types used to be constants
+// in previous versions of wxWidgets the event types used to be constants
 // which created difficulties with custom/user event types definition
 //
 // which created difficulties with custom/user event types definition
 //
-// starting from wxWindows 2.4 the event types are now dynamically assigned
+// starting from wxWidgets 2.4 the event types are now dynamically assigned
 // using wxNewEventType() which solves this problem, however at price of
 // several incompatibilities:
 //
 //  a) event table macros declaration changed, it now uses wxEventTableEntry
 //     ctor instead of initialisation from an agregate - the macro
 //     DECLARE_EVENT_TABLE_ENTRY may be used to write code which can compile
 // using wxNewEventType() which solves this problem, however at price of
 // several incompatibilities:
 //
 //  a) event table macros declaration changed, it now uses wxEventTableEntry
 //     ctor instead of initialisation from an agregate - the macro
 //     DECLARE_EVENT_TABLE_ENTRY may be used to write code which can compile
-//     with all versions of wxWindows
+//     with all versions of wxWidgets
 //
 //  b) event types can't be used as switch() cases as they're not really
 //     constant any more - there is no magic solution here, you just have to
 //
 //  b) event types can't be used as switch() cases as they're not really
 //     constant any more - there is no magic solution here, you just have to
@@ -270,7 +270,7 @@ BEGIN_DECLARE_EVENT_TYPES()
     DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_IDLE, 439)
     DECLARE_EVENT_TYPE(wxEVT_UPDATE_UI, 440)
     DECLARE_EVENT_TYPE(wxEVT_SIZING, 441)
     DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_IDLE, 439)
     DECLARE_EVENT_TYPE(wxEVT_UPDATE_UI, 440)
     DECLARE_EVENT_TYPE(wxEVT_SIZING, 441)
-    DECLARE_EVENT_TYPE(wxEVT_MOVING, 4442)
+    DECLARE_EVENT_TYPE(wxEVT_MOVING, 442)
 
         // Generic command events
         // Note: a click is a higher-level event than button down/up
 
         // Generic command events
         // Note: a click is a higher-level event than button down/up
@@ -315,7 +315,7 @@ enum Propagation_state
 };
 
 /*
 };
 
 /*
- * wxWindows events, covering all interesting things that might happen
+ * wxWidgets events, covering all interesting things that might happen
  * (button clicking, resizing, setting text in widgets, etc.).
  *
  * For each completely new event type, derive a new event class.
  * (button clicking, resizing, setting text in widgets, etc.).
  *
  * For each completely new event type, derive a new event class.
@@ -349,8 +349,8 @@ public:
     // Can instruct event processor that we wish to ignore this event
     // (treat as if the event table entry had not been found): this must be done
     // to allow the event processing by the base classes (calling event.Skip()
     // Can instruct event processor that we wish to ignore this event
     // (treat as if the event table entry had not been found): this must be done
     // to allow the event processing by the base classes (calling event.Skip()
-    // is the analog of calling the base class verstion of a virtual function)
-    void Skip(bool skip = TRUE) { m_skipped = skip; }
+    // is the analog of calling the base class version of a virtual function)
+    void Skip(bool skip = true) { m_skipped = skip; }
     bool GetSkipped() const { return m_skipped; };
 
     // this function is used to create a copy of the event polymorphically and
     bool GetSkipped() const { return m_skipped; };
 
     // this function is used to create a copy of the event polymorphically and
@@ -358,7 +358,7 @@ public:
     // for them wouldn't work (it needs to do a copy of the event)
     virtual wxEvent *Clone() const = 0;
 
     // for them wouldn't work (it needs to do a copy of the event)
     virtual wxEvent *Clone() const = 0;
 
-    // Implementation only: this test is explicitlty anti OO and this functions
+    // Implementation only: this test is explicitly anti OO and this function
     // exists only for optimization purposes.
     bool IsCommandEvent() const { return m_isCommandEvent; }
 
     // exists only for optimization purposes.
     bool IsCommandEvent() const { return m_isCommandEvent; }
 
@@ -382,11 +382,18 @@ public:
         m_propagationLevel = propagationLevel;
     }
 
         m_propagationLevel = propagationLevel;
     }
 
+#if WXWIN_COMPATIBILITY_2_4
 public:
 public:
+#else
+protected:
+#endif
     wxObject*         m_eventObject;
     wxEventType       m_eventType;
     long              m_timeStamp;
     int               m_id;
     wxObject*         m_eventObject;
     wxEventType       m_eventType;
     long              m_timeStamp;
     int               m_id;
+
+public:
+    // m_callbackUserData is for internal usage only
     wxObject*         m_callbackUserData;
 
 protected:
     wxObject*         m_callbackUserData;
 
 protected:
@@ -397,7 +404,11 @@ protected:
     // backwards compatibility as it is new
     int               m_propagationLevel;
 
     // backwards compatibility as it is new
     int               m_propagationLevel;
 
+#if WXWIN_COMPATIBILITY_2_4
 public:
 public:
+#else
+protected:
+#endif
     bool              m_skipped;
     bool              m_isCommandEvent;
 
     bool              m_skipped;
     bool              m_isCommandEvent;
 
@@ -478,6 +489,31 @@ private:
  wxEVT_COMMAND_TOGGLEBUTTON_CLICKED
 */
 
  wxEVT_COMMAND_TOGGLEBUTTON_CLICKED
 */
 
+#if WXWIN_COMPATIBILITY_2_4
+// Backwards compatibility for wxCommandEvent::m_commandString, will lead to compilation errors in some cases of usage
+class WXDLLIMPEXP_CORE wxCommandEvent;
+
+class WXDLLIMPEXP_CORE wxCommandEventStringHelper
+{
+public:
+    wxCommandEventStringHelper(wxCommandEvent * evt)
+        : m_evt(evt)
+        { }
+
+    void operator=(const wxString &str);
+    operator wxString();
+    const wxChar* c_str() const;
+
+private:
+    wxCommandEvent* m_evt;
+};
+#endif
+
+#ifdef __VISUALC__
+    // 'this' : used in base member initializer list (for m_commandString)
+    #pragma warning(disable:4355)
+#endif
+
 class WXDLLIMPEXP_CORE wxCommandEvent : public wxEvent
 {
 public:
 class WXDLLIMPEXP_CORE wxCommandEvent : public wxEvent
 {
 public:
@@ -485,7 +521,10 @@ public:
 
     wxCommandEvent(const wxCommandEvent& event)
         : wxEvent(event),
 
     wxCommandEvent(const wxCommandEvent& event)
         : wxEvent(event),
-          m_commandString(event.m_commandString),
+#if WXWIN_COMPATIBILITY_2_4
+          m_commandString(this),
+#endif
+          m_cmdString(event.m_cmdString),
           m_commandInt(event.m_commandInt),
           m_extraLong(event.m_extraLong),
           m_clientData(event.m_clientData),
           m_commandInt(event.m_commandInt),
           m_extraLong(event.m_extraLong),
           m_clientData(event.m_clientData),
@@ -498,19 +537,19 @@ public:
 
     // Set/Get client object from controls
     void SetClientObject(wxClientData* clientObject) { m_clientObject = clientObject; }
 
     // Set/Get client object from controls
     void SetClientObject(wxClientData* clientObject) { m_clientObject = clientObject; }
-    void *GetClientObject() const { return m_clientObject; }
+    wxClientData *GetClientObject() const { return m_clientObject; }
 
     // Get listbox selection if single-choice
     int GetSelection() const { return m_commandInt; }
 
     // Set/Get listbox/choice selection string
 
     // Get listbox selection if single-choice
     int GetSelection() const { return m_commandInt; }
 
     // Set/Get listbox/choice selection string
-    void SetString(const wxString& s) { m_commandString = s; }
-    wxString GetString() const { return m_commandString; }
+    void SetString(const wxString& s) { m_cmdString = s; }
+    wxString GetString() const;
 
     // Get checkbox value
     bool IsChecked() const { return m_commandInt != 0; }
 
 
     // Get checkbox value
     bool IsChecked() const { return m_commandInt != 0; }
 
-    // TRUE if the listbox event was a selection.
+    // true if the listbox event was a selection.
     bool IsSelection() const { return (m_extraLong != 0); }
 
     void SetExtraLong(long extraLong) { m_extraLong = extraLong; }
     bool IsSelection() const { return (m_extraLong != 0); }
 
     void SetExtraLong(long extraLong) { m_extraLong = extraLong; }
@@ -521,8 +560,13 @@ public:
 
     virtual wxEvent *Clone() const { return new wxCommandEvent(*this); }
 
 
     virtual wxEvent *Clone() const { return new wxCommandEvent(*this); }
 
+#if WXWIN_COMPATIBILITY_2_4
 public:
 public:
-    wxString          m_commandString; // String event argument
+    wxCommandEventStringHelper m_commandString;
+#else
+protected:
+#endif
+    wxString          m_cmdString;     // String event argument
     int               m_commandInt;
     long              m_extraLong;     // Additional information (e.g. select/deselect)
     void*             m_clientData;    // Arbitrary client data
     int               m_commandInt;
     long              m_extraLong;     // Additional information (e.g. select/deselect)
     void*             m_clientData;    // Arbitrary client data
@@ -532,6 +576,27 @@ private:
     DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxCommandEvent)
 };
 
     DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxCommandEvent)
 };
 
+#ifdef __VISUALC__
+    #pragma warning(default:4355)
+#endif
+
+#if WXWIN_COMPATIBILITY_2_4
+inline void wxCommandEventStringHelper::operator=(const wxString &str)
+{
+    m_evt->SetString(str);
+}
+
+inline wxCommandEventStringHelper::operator wxString()
+{
+    return m_evt->GetString();
+}
+
+inline const wxChar* wxCommandEventStringHelper::c_str() const
+{
+    return m_evt->GetString().c_str();
+}
+#endif
+
 // this class adds a possibility to react (from the user) code to a control
 // notification: allow or veto the operation being reported.
 class WXDLLIMPEXP_CORE wxNotifyEvent  : public wxCommandEvent
 // this class adds a possibility to react (from the user) code to a control
 // notification: allow or veto the operation being reported.
 class WXDLLIMPEXP_CORE wxNotifyEvent  : public wxCommandEvent
@@ -539,17 +604,17 @@ class WXDLLIMPEXP_CORE wxNotifyEvent  : public wxCommandEvent
 public:
     wxNotifyEvent(wxEventType commandType = wxEVT_NULL, int winid = 0)
         : wxCommandEvent(commandType, winid)
 public:
     wxNotifyEvent(wxEventType commandType = wxEVT_NULL, int winid = 0)
         : wxCommandEvent(commandType, winid)
-        { m_bAllow = TRUE; }
+        { m_bAllow = true; }
 
     wxNotifyEvent(const wxNotifyEvent& event)
         : wxCommandEvent(event)
         { m_bAllow = event.m_bAllow; }
 
     // veto the operation (usually it's allowed by default)
 
     wxNotifyEvent(const wxNotifyEvent& event)
         : wxCommandEvent(event)
         { m_bAllow = event.m_bAllow; }
 
     // veto the operation (usually it's allowed by default)
-    void Veto() { m_bAllow = FALSE; }
+    void Veto() { m_bAllow = false; }
 
     // allow the operation if it was disabled by default
 
     // allow the operation if it was disabled by default
-    void Allow() { m_bAllow = TRUE; }
+    void Allow() { m_bAllow = true; }
 
     // for implementation code only: is the operation allowed?
     bool IsAllowed() const { return m_bAllow; }
 
     // for implementation code only: is the operation allowed?
     bool IsAllowed() const { return m_bAllow; }
@@ -623,7 +688,11 @@ public:
 
     virtual wxEvent *Clone() const { return new wxScrollWinEvent(*this); }
 
 
     virtual wxEvent *Clone() const { return new wxScrollWinEvent(*this); }
 
+#if WXWIN_COMPATIBILITY_2_4
 public:
 public:
+#else
+protected:
+#endif
     int               m_commandInt;
     long              m_extraLong;
 
     int               m_commandInt;
     long              m_extraLong;
 
@@ -703,6 +772,14 @@ public:
     bool MetaDown() const { return m_metaDown; }
     bool AltDown() const { return m_altDown; }
     bool ShiftDown() const { return m_shiftDown; }
     bool MetaDown() const { return m_metaDown; }
     bool AltDown() const { return m_altDown; }
     bool ShiftDown() const { return m_shiftDown; }
+    bool CmdDown() const
+    {
+#if defined(__WXMAC__) || defined(__WXCOCOA__)
+        return MetaDown();
+#else
+        return ControlDown();
+#endif
+    }
 
     // Find which event was just generated
     bool LeftDown() const { return (m_eventType == wxEVT_LEFT_DOWN); }
 
     // Find which event was just generated
     bool LeftDown() const { return (m_eventType == wxEVT_LEFT_DOWN); }
@@ -750,7 +827,6 @@ public:
             *ypos = m_y;
     }
 
             *ypos = m_y;
     }
 
-#ifndef __WIN16__
     void GetPosition(long *xpos, long *ypos) const
     {
         if (xpos)
     void GetPosition(long *xpos, long *ypos) const
     {
         if (xpos)
@@ -758,7 +834,6 @@ public:
         if (ypos)
             *ypos = (long)m_y;
     }
         if (ypos)
             *ypos = (long)m_y;
     }
-#endif
 
     // Find the position of the event
     wxPoint GetPosition() const { return wxPoint(m_x, m_y); }
 
     // Find the position of the event
     wxPoint GetPosition() const { return wxPoint(m_x, m_y); }
@@ -880,6 +955,20 @@ public:
     bool AltDown() const { return m_altDown; }
     bool ShiftDown() const { return m_shiftDown; }
 
     bool AltDown() const { return m_altDown; }
     bool ShiftDown() const { return m_shiftDown; }
 
+    // "Cmd" is a pseudo key which is Control for PC and Unix platforms but
+    // Apple ("Command") key under Macs: it makes often sense to use it instead
+    // of, say, ControlDown() because Cmd key is used for the same thing under
+    // Mac as Ctrl elsewhere (but Ctrl still exists, just not used for this
+    // purpose under Mac)
+    bool CmdDown() const
+    {
+#if defined(__WXMAC__) || defined(__WXCOCOA__)
+        return MetaDown();
+#else
+        return ControlDown();
+#endif
+    }
+
     // 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
     // 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
@@ -888,6 +977,11 @@ public:
     // get the key code: an ASCII7 char or an element of wxKeyCode enum
     int GetKeyCode() const { return (int)m_keyCode; }
 
     // get the key code: an ASCII7 char or an element of wxKeyCode enum
     int GetKeyCode() const { return (int)m_keyCode; }
 
+#if wxUSE_UNICODE
+    // get the Unicode character corresponding to this key
+    wxChar GetUnicodeKey() const { return m_uniChar; }
+#endif // wxUSE_UNICODE
+
     // get the raw key code (platform-dependent)
     wxUint32 GetRawKeyCode() const { return m_rawCode; }
 
     // get the raw key code (platform-dependent)
     wxUint32 GetRawKeyCode() const { return m_rawCode; }
 
@@ -901,13 +995,11 @@ public:
         if (ypos) *ypos = m_y;
     }
 
         if (ypos) *ypos = m_y;
     }
 
-#ifndef __WIN16__
     void GetPosition(long *xpos, long *ypos) const
     {
         if (xpos) *xpos = (long)m_x;
         if (ypos) *ypos = (long)m_y;
     }
     void GetPosition(long *xpos, long *ypos) const
     {
         if (xpos) *xpos = (long)m_x;
         if (ypos) *ypos = (long)m_y;
     }
-#endif
 
     wxPoint GetPosition() const
         { return wxPoint(m_x, m_y); }
 
     wxPoint GetPosition() const
         { return wxPoint(m_x, m_y); }
@@ -939,6 +1031,9 @@ public:
         m_scanCode = evt.m_scanCode;
         m_rawCode = evt.m_rawCode;
         m_rawFlags = evt.m_rawFlags;
         m_scanCode = evt.m_scanCode;
         m_rawCode = evt.m_rawCode;
         m_rawFlags = evt.m_rawFlags;
+#if wxUSE_UNICODE
+        m_uniChar = evt.m_uniChar;
+#endif
 
         return *this;
     }
 
         return *this;
     }
@@ -998,6 +1093,7 @@ public:
     virtual wxEvent *Clone() const { return new wxSizeEvent(*this); }
 
 public:
     virtual wxEvent *Clone() const { return new wxSizeEvent(*this); }
 
 public:
+    // For internal usage only. Will be converted to protected members.
     wxSize m_size;
     wxRect m_rect; // Used for wxEVT_SIZING
 
     wxSize m_size;
     wxRect m_rect; // Used for wxEVT_SIZING
 
@@ -1030,11 +1126,17 @@ public:
         { m_eventType = wxEVT_MOVING; m_id = id; }
 
     wxPoint GetPosition() const { return m_pos; }
         { m_eventType = wxEVT_MOVING; m_id = id; }
 
     wxPoint GetPosition() const { return m_pos; }
+    void SetPosition(const wxPoint& pos) { m_pos = pos; }
     wxRect GetRect() const { return m_rect; }
     void SetRect(wxRect rect) { m_rect = rect; }
 
     virtual wxEvent *Clone() const { return new wxMoveEvent(*this); }
 
     wxRect GetRect() const { return m_rect; }
     void SetRect(wxRect rect) { m_rect = rect; }
 
     virtual wxEvent *Clone() const { return new wxMoveEvent(*this); }
 
+#if WXWIN_COMPATIBILITY_2_4
+public:
+#else
+protected:
+#endif
     wxPoint m_pos;
     wxRect m_rect;
 
     wxPoint m_pos;
     wxRect m_rect;
 
@@ -1066,7 +1168,15 @@ public:
 #endif // debug
     }
 
 #endif // debug
     }
 
+    // default copy ctor and dtor are normally fine, we only need them to keep
+    // g_isPainting updated in debug build
 #if defined(__WXDEBUG__) && (defined(__WXMSW__) || defined(__WXPM__))
 #if defined(__WXDEBUG__) && (defined(__WXMSW__) || defined(__WXPM__))
+    wxPaintEvent(const wxPaintEvent& event)
+            : wxEvent(event)
+    {
+        g_isPainting++;
+    }
+
     ~wxPaintEvent()
     {
         g_isPainting--;
     ~wxPaintEvent()
     {
         g_isPainting--;
@@ -1114,6 +1224,11 @@ public:
 
     virtual wxEvent *Clone() const { return new wxEraseEvent(*this); }
 
 
     virtual wxEvent *Clone() const { return new wxEraseEvent(*this); }
 
+#if WXWIN_COMPATIBILITY_2_4
+public:
+#else
+protected:
+#endif
     wxDC *m_dc;
 
 private:
     wxDC *m_dc;
 
 private:
@@ -1176,7 +1291,7 @@ private:
 class WXDLLIMPEXP_CORE wxActivateEvent : public wxEvent
 {
 public:
 class WXDLLIMPEXP_CORE wxActivateEvent : public wxEvent
 {
 public:
-    wxActivateEvent(wxEventType type = wxEVT_NULL, bool active = TRUE, int Id = 0)
+    wxActivateEvent(wxEventType type = wxEVT_NULL, bool active = true, int Id = 0)
         : wxEvent(Id, type)
         { m_active = active; }
     wxActivateEvent(const wxActivateEvent& event)
         : wxEvent(Id, type)
         { m_active = active; }
     wxActivateEvent(const wxActivateEvent& event)
@@ -1233,7 +1348,7 @@ public:
     int GetMenuId() const { return m_menuId; }
 
     // only for wxEVT_MENU_OPEN/CLOSE
     int GetMenuId() const { return m_menuId; }
 
     // only for wxEVT_MENU_OPEN/CLOSE
-    bool IsPopup() const { return m_menuId == -1; }
+    bool IsPopup() const { return m_menuId == wxID_ANY; }
 
     // only for wxEVT_MENU_OPEN/CLOSE
     wxMenu* GetMenu() const { return m_menu; }
 
     // only for wxEVT_MENU_OPEN/CLOSE
     wxMenu* GetMenu() const { return m_menu; }
@@ -1259,9 +1374,9 @@ class WXDLLIMPEXP_CORE wxCloseEvent : public wxEvent
 public:
     wxCloseEvent(wxEventType type = wxEVT_NULL, int winid = 0)
         : wxEvent(winid, type),
 public:
     wxCloseEvent(wxEventType type = wxEVT_NULL, int winid = 0)
         : wxEvent(winid, type),
-          m_loggingOff(TRUE),
-          m_veto(FALSE),      // should be FALSE by default
-          m_canVeto(TRUE) {}
+          m_loggingOff(true),
+          m_veto(false),      // should be false by default
+          m_canVeto(true) {}
 
     wxCloseEvent(const wxCloseEvent & event)
         : wxEvent(event),
 
     wxCloseEvent(const wxCloseEvent & event)
         : wxEvent(event),
@@ -1272,9 +1387,9 @@ public:
     void SetLoggingOff(bool logOff) { m_loggingOff = logOff; }
     bool GetLoggingOff() const { return m_loggingOff; }
 
     void SetLoggingOff(bool logOff) { m_loggingOff = logOff; }
     bool GetLoggingOff() const { return m_loggingOff; }
 
-    void Veto(bool veto = TRUE)
+    void Veto(bool veto = true)
     {
     {
-        // GetVeto() will return FALSE anyhow...
+        // GetVeto() will return false anyhow...
         wxCHECK_RET( m_canVeto,
                      wxT("call to Veto() ignored (can't veto this event)") );
 
         wxCHECK_RET( m_canVeto,
                      wxT("call to Veto() ignored (can't veto this event)") );
 
@@ -1303,7 +1418,7 @@ private:
 class WXDLLIMPEXP_CORE wxShowEvent : public wxEvent
 {
 public:
 class WXDLLIMPEXP_CORE wxShowEvent : public wxEvent
 {
 public:
-    wxShowEvent(int winid = 0, bool show = FALSE)
+    wxShowEvent(int winid = 0, bool show = false)
         : wxEvent(winid, wxEVT_SHOW)
         { m_show = show; }
     wxShowEvent(const wxShowEvent & event)
         : wxEvent(winid, wxEVT_SHOW)
         { m_show = show; }
     wxShowEvent(const wxShowEvent & event)
@@ -1329,7 +1444,7 @@ private:
 class WXDLLIMPEXP_CORE wxIconizeEvent : public wxEvent
 {
 public:
 class WXDLLIMPEXP_CORE wxIconizeEvent : public wxEvent
 {
 public:
-    wxIconizeEvent(int winid = 0, bool iconized = TRUE)
+    wxIconizeEvent(int winid = 0, bool iconized = true)
         : wxEvent(winid, wxEVT_ICONIZE)
         { m_iconized = iconized; }
     wxIconizeEvent(const wxIconizeEvent & event)
         : wxEvent(winid, wxEVT_ICONIZE)
         { m_iconized = iconized; }
     wxIconizeEvent(const wxIconizeEvent & event)
@@ -1391,19 +1506,24 @@ enum
 
 class WXDLLIMPEXP_CORE wxJoystickEvent : public wxEvent
 {
 
 class WXDLLIMPEXP_CORE wxJoystickEvent : public wxEvent
 {
+#if WXWIN_COMPATIBILITY_2_4
 public:
 public:
+#else
+protected:
+#endif
     wxPoint   m_pos;
     int       m_zPosition;
     int       m_buttonChange;   // Which button changed?
     int       m_buttonState;    // Which buttons are down?
     int       m_joyStick;       // Which joystick?
 
     wxPoint   m_pos;
     int       m_zPosition;
     int       m_buttonChange;   // Which button changed?
     int       m_buttonState;    // Which buttons are down?
     int       m_joyStick;       // Which joystick?
 
+public:
     wxJoystickEvent(wxEventType type = wxEVT_NULL,
                     int state = 0,
                     int joystick = wxJOYSTICK1,
                     int change = 0)
         : wxEvent(0, type),
     wxJoystickEvent(wxEventType type = wxEVT_NULL,
                     int state = 0,
                     int joystick = wxJOYSTICK1,
                     int change = 0)
         : wxEvent(0, type),
-          m_pos(0, 0),
+          m_pos(),
           m_zPosition(0),
           m_buttonChange(change),
           m_buttonState(state),
           m_zPosition(0),
           m_buttonChange(change),
           m_buttonState(state),
@@ -1541,7 +1661,7 @@ public:
         m_enabled =
         m_setEnabled =
         m_setText =
         m_enabled =
         m_setEnabled =
         m_setText =
-        m_setChecked = FALSE;
+        m_setChecked = false;
     }
     wxUpdateUIEvent(const wxUpdateUIEvent & event)
         : wxCommandEvent(event),
     }
     wxUpdateUIEvent(const wxUpdateUIEvent & event)
         : wxCommandEvent(event),
@@ -1560,9 +1680,9 @@ public:
     bool GetSetChecked() const { return m_setChecked; }
     bool GetSetEnabled() const { return m_setEnabled; }
 
     bool GetSetChecked() const { return m_setChecked; }
     bool GetSetEnabled() const { return m_setEnabled; }
 
-    void Check(bool check) { m_checked = check; m_setChecked = TRUE; }
-    void Enable(bool enable) { m_enabled = enable; m_setEnabled = TRUE; }
-    void SetText(const wxString& text) { m_text = text; m_setText = TRUE; }
+    void Check(bool check) { m_checked = check; m_setChecked = true; }
+    void Enable(bool enable) { m_enabled = enable; m_setEnabled = true; }
+    void SetText(const wxString& text) { m_text = text; m_setText = true; }
 
     // Sets the interval between updates in milliseconds.
     // Set to -1 to disable updates, or to 0 to update as frequently as possible.
 
     // Sets the interval between updates in milliseconds.
     // Set to -1 to disable updates, or to 0 to update as frequently as possible.
@@ -1578,7 +1698,7 @@ public:
     // time we should update
     static void ResetUpdateTime();
 
     // time we should update
     static void ResetUpdateTime();
 
-    // Specify how wxWindows will send update events: to
+    // Specify how wxWidgets will send update events: to
     // all windows, or only to those which specify that they
     // will process the events.
     static void SetMode(wxUpdateUIMode mode) { sm_updateMode = mode; }
     // all windows, or only to those which specify that they
     // will process the events.
     static void SetMode(wxUpdateUIMode mode) { sm_updateMode = mode; }
@@ -1707,7 +1827,7 @@ class WXDLLIMPEXP_CORE wxQueryNewPaletteEvent : public wxEvent
 public:
     wxQueryNewPaletteEvent(wxWindowID winid = 0)
         : wxEvent(winid, wxEVT_QUERY_NEW_PALETTE),
 public:
     wxQueryNewPaletteEvent(wxWindowID winid = 0)
         : wxEvent(winid, wxEVT_QUERY_NEW_PALETTE),
-          m_paletteRealized(FALSE)
+          m_paletteRealized(false)
         { }
     wxQueryNewPaletteEvent(const wxQueryNewPaletteEvent & event)
         : wxEvent(event),
         { }
     wxQueryNewPaletteEvent(const wxQueryNewPaletteEvent & event)
         : wxEvent(event),
@@ -1767,11 +1887,14 @@ public:
     wxWindow* GetCurrentFocus() const { return m_focus; }
     void SetCurrentFocus(wxWindow *win) { m_focus = win; }
 
     wxWindow* GetCurrentFocus() const { return m_focus; }
     void SetCurrentFocus(wxWindow *win) { m_focus = win; }
 
+    // Set flags
+    void SetFlags(long flags) { m_flags = flags; }
+
     virtual wxEvent *Clone() const { return new wxNavigationKeyEvent(*this); }
 
     virtual wxEvent *Clone() const { return new wxNavigationKeyEvent(*this); }
 
-private:
     enum
     {
     enum
     {
+        IsBackward = 0x0000,
         IsForward = 0x0001,
         WinChange = 0x0002
     };
         IsForward = 0x0001,
         WinChange = 0x0002
     };
@@ -1923,19 +2046,19 @@ class WXDLLIMPEXP_CORE wxIdleEvent : public wxEvent
 public:
     wxIdleEvent()
         : wxEvent(0, wxEVT_IDLE),
 public:
     wxIdleEvent()
         : wxEvent(0, wxEVT_IDLE),
-          m_requestMore(FALSE)
+          m_requestMore(false)
         { }
     wxIdleEvent(const wxIdleEvent & event)
         : wxEvent(event),
           m_requestMore(event.m_requestMore)
     { }
 
         { }
     wxIdleEvent(const wxIdleEvent & event)
         : wxEvent(event),
           m_requestMore(event.m_requestMore)
     { }
 
-    void RequestMore(bool needMore = TRUE) { m_requestMore = needMore; }
+    void RequestMore(bool needMore = true) { m_requestMore = needMore; }
     bool MoreRequested() const { return m_requestMore; }
 
     virtual wxEvent *Clone() const { return new wxIdleEvent(*this); }
 
     bool MoreRequested() const { return m_requestMore; }
 
     virtual wxEvent *Clone() const { return new wxIdleEvent(*this); }
 
-    // Specify how wxWindows will send idle events: to
+    // Specify how wxWidgets will send idle events: to
     // all windows, or only to those which specify that they
     // will process the events.
     static void SetMode(wxIdleMode mode) { sm_idleMode = mode; }
     // all windows, or only to those which specify that they
     // will process the events.
     static void SetMode(wxIdleMode mode) { sm_idleMode = mode; }
@@ -2149,7 +2272,7 @@ protected:
 };
 
 // ----------------------------------------------------------------------------
 };
 
 // ----------------------------------------------------------------------------
-// wxEvtHandler: the base class for all objects handling wxWindows events
+// wxEvtHandler: the base class for all objects handling wxWidgets events
 // ----------------------------------------------------------------------------
 
 class WXDLLIMPEXP_BASE wxEvtHandler : public wxObject
 // ----------------------------------------------------------------------------
 
 class WXDLLIMPEXP_BASE wxEvtHandler : public wxObject
@@ -2323,6 +2446,7 @@ typedef void (wxEvtHandler::*wxScrollWinEventFunction)(wxScrollWinEvent&);
 typedef void (wxEvtHandler::*wxSizeEventFunction)(wxSizeEvent&);
 typedef void (wxEvtHandler::*wxMoveEventFunction)(wxMoveEvent&);
 typedef void (wxEvtHandler::*wxPaintEventFunction)(wxPaintEvent&);
 typedef void (wxEvtHandler::*wxSizeEventFunction)(wxSizeEvent&);
 typedef void (wxEvtHandler::*wxMoveEventFunction)(wxMoveEvent&);
 typedef void (wxEvtHandler::*wxPaintEventFunction)(wxPaintEvent&);
+typedef void (wxEvtHandler::*wxNcPaintEventFunction)(wxNcPaintEvent&);
 typedef void (wxEvtHandler::*wxEraseEventFunction)(wxEraseEvent&);
 typedef void (wxEvtHandler::*wxMouseEventFunction)(wxMouseEvent&);
 typedef void (wxEvtHandler::*wxCharEventFunction)(wxKeyEvent&);
 typedef void (wxEvtHandler::*wxEraseEventFunction)(wxEraseEvent&);
 typedef void (wxEvtHandler::*wxMouseEventFunction)(wxMouseEvent&);
 typedef void (wxEvtHandler::*wxCharEventFunction)(wxKeyEvent&);
@@ -2389,16 +2513,23 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC
 #define EVT_CUSTOM(event, winid, func) DECLARE_EVENT_TABLE_ENTRY( event, winid, wxID_ANY, (wxObjectEventFunction)  wxStaticCastEvent( wxEventFunction, & func ), (wxObject *) NULL ),
 #define EVT_CUSTOM_RANGE(event, id1, id2, func) DECLARE_EVENT_TABLE_ENTRY( event, id1, id2, (wxObjectEventFunction)  wxStaticCastEvent( wxEventFunction, & func ), (wxObject *) NULL ),
 
 #define EVT_CUSTOM(event, winid, func) DECLARE_EVENT_TABLE_ENTRY( event, winid, wxID_ANY, (wxObjectEventFunction)  wxStaticCastEvent( wxEventFunction, & func ), (wxObject *) NULL ),
 #define EVT_CUSTOM_RANGE(event, id1, id2, func) DECLARE_EVENT_TABLE_ENTRY( event, id1, id2, (wxObjectEventFunction)  wxStaticCastEvent( wxEventFunction, & func ), (wxObject *) NULL ),
 
+// EVT_COMMAND
+#define EVT_COMMAND(winid, event, fn)  DECLARE_EVENT_TABLE_ENTRY( event, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),
+#define EVT_COMMAND_RANGE(id1, id2, event, fn)  DECLARE_EVENT_TABLE_ENTRY( event, id1, id2, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),
+
+#define EVT_NOTIFY(event, winid, func) DECLARE_EVENT_TABLE_ENTRY( event, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction)  wxStaticCastEvent( wxNotifyFunction, & func ), (wxObject *) NULL ),
+#define EVT_NOTIFY_RANGE(event, id1, id2, func) DECLARE_EVENT_TABLE_ENTRY( event, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction)  wxStaticCastEvent( wxNotifyFunction, & func ), (wxObject *) NULL ),
+
 // Miscellaneous
 #define EVT_SIZE(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_SIZE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxSizeEventFunction, & func ), (wxObject *) NULL ),
 // Miscellaneous
 #define EVT_SIZE(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_SIZE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxSizeEventFunction, & func ), (wxObject *) NULL ),
-#define EVT_SIZING(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_SIZING, -1, -1, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxSizeEventFunction, & func ), (wxObject *) NULL ),
+#define EVT_SIZING(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_SIZING, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxSizeEventFunction, & func ), (wxObject *) NULL ),
 #define EVT_MOVE(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_MOVE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxMoveEventFunction, & func ), (wxObject *) NULL ),
 #define EVT_MOVE(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_MOVE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxMoveEventFunction, & func ), (wxObject *) NULL ),
-#define EVT_MOVING(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_MOVING, -1, -1, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxMoveEventFunction, & func ), (wxObject *) NULL ),
+#define EVT_MOVING(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_MOVING, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxMoveEventFunction, & func ), (wxObject *) NULL ),
 #define EVT_CLOSE(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_CLOSE_WINDOW, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCloseEventFunction, & func ), (wxObject *) NULL ),
 #define EVT_END_SESSION(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_END_SESSION, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCloseEventFunction, & func ), (wxObject *) NULL ),
 #define EVT_QUERY_END_SESSION(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_QUERY_END_SESSION, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCloseEventFunction, & func ), (wxObject *) NULL ),
 #define EVT_PAINT(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_PAINT, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxPaintEventFunction, & func ), (wxObject *) NULL ),
 #define EVT_CLOSE(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_CLOSE_WINDOW, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCloseEventFunction, & func ), (wxObject *) NULL ),
 #define EVT_END_SESSION(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_END_SESSION, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCloseEventFunction, & func ), (wxObject *) NULL ),
 #define EVT_QUERY_END_SESSION(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_QUERY_END_SESSION, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCloseEventFunction, & func ), (wxObject *) NULL ),
 #define EVT_PAINT(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_PAINT, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxPaintEventFunction, & func ), (wxObject *) NULL ),
-#define EVT_NC_PAINT(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_NC_PAINT, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxPaintEventFunction, & func ), (wxObject *) NULL ),
+#define EVT_NC_PAINT(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_NC_PAINT, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxNcPaintEventFunction, & func ), (wxObject *) NULL ),
 #define EVT_ERASE_BACKGROUND(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_ERASE_BACKGROUND, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxEraseEventFunction, & func ), (wxObject *) NULL ),
 #define EVT_CHAR(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_CHAR, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCharEventFunction, & func ), (wxObject *) NULL ),
 #define EVT_KEY_DOWN(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_KEY_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCharEventFunction, & func ), (wxObject *) NULL ),
 #define EVT_ERASE_BACKGROUND(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_ERASE_BACKGROUND, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxEraseEventFunction, & func ), (wxObject *) NULL ),
 #define EVT_CHAR(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_CHAR, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCharEventFunction, & func ), (wxObject *) NULL ),
 #define EVT_KEY_DOWN(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_KEY_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCharEventFunction, & func ), (wxObject *) NULL ),
@@ -2464,10 +2595,6 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC
  DECLARE_EVENT_TABLE_ENTRY( wxEVT_LEAVE_WINDOW, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxMouseEventFunction, & func ), (wxObject *) NULL ),\
  DECLARE_EVENT_TABLE_ENTRY( wxEVT_MOUSEWHEEL, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxMouseEventFunction, & func ), (wxObject *) NULL ),
 
  DECLARE_EVENT_TABLE_ENTRY( wxEVT_LEAVE_WINDOW, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxMouseEventFunction, & func ), (wxObject *) NULL ),\
  DECLARE_EVENT_TABLE_ENTRY( wxEVT_MOUSEWHEEL, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxMouseEventFunction, & func ), (wxObject *) NULL ),
 
-// EVT_COMMAND
-#define EVT_COMMAND(winid, event, fn)  DECLARE_EVENT_TABLE_ENTRY( event, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),
-#define EVT_COMMAND_RANGE(id1, id2, event, fn)  DECLARE_EVENT_TABLE_ENTRY( event, id1, id2, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),
-
 // Scrolling from wxWindow (sent to wxScrolledWindow)
 #define EVT_SCROLLWIN(func) \
   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_TOP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxScrollWinEventFunction, & func ), (wxObject *) NULL ),\
 // Scrolling from wxWindow (sent to wxScrolledWindow)
 #define EVT_SCROLLWIN(func) \
   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_TOP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxScrollWinEventFunction, & func ), (wxObject *) NULL ),\
@@ -2533,13 +2660,17 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC
 #define EVT_COMMAND_SCROLL_ENDSCROLL(winid, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_ENDSCROLL, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxScrollEventFunction, & func ), (wxObject *) NULL ),
 
 // Convenience macros for commonly-used commands
 #define EVT_COMMAND_SCROLL_ENDSCROLL(winid, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_ENDSCROLL, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxScrollEventFunction, & func ), (wxObject *) NULL ),
 
 // Convenience macros for commonly-used commands
-#define EVT_BUTTON(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_BUTTON_CLICKED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),
 #define EVT_CHECKBOX(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_CHECKBOX_CLICKED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),
 #define EVT_CHOICE(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_CHOICE_SELECTED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),
 #define EVT_LISTBOX(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LISTBOX_SELECTED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),
 #define EVT_LISTBOX_DCLICK(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),
 #define EVT_MENU(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_MENU_SELECTED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),
 #define EVT_MENU_RANGE(id1, id2, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_MENU_SELECTED, id1, id2, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),
 #define EVT_CHECKBOX(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_CHECKBOX_CLICKED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),
 #define EVT_CHOICE(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_CHOICE_SELECTED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),
 #define EVT_LISTBOX(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LISTBOX_SELECTED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),
 #define EVT_LISTBOX_DCLICK(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),
 #define EVT_MENU(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_MENU_SELECTED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),
 #define EVT_MENU_RANGE(id1, id2, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_MENU_SELECTED, id1, id2, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),
+#if defined(__SMARTPHONE__)
+#  define EVT_BUTTON(winid, fn) EVT_MENU(winid, fn)
+#else
+#  define EVT_BUTTON(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_BUTTON_CLICKED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),
+#endif
 #define EVT_SLIDER(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_SLIDER_UPDATED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),
 #define EVT_RADIOBOX(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RADIOBOX_SELECTED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),
 #define EVT_RADIOBUTTON(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RADIOBUTTON_SELECTED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),
 #define EVT_SLIDER(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_SLIDER_UPDATED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),
 #define EVT_RADIOBOX(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RADIOBOX_SELECTED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),
 #define EVT_RADIOBUTTON(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RADIOBUTTON_SELECTED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),