X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/55f9eba3b20310441e9e02f59a67eb3d2e4d748b..5b36366c59ea68056ba07a3ca1c2cd6022a59735:/include/wx/event.h diff --git a/include/wx/event.h b/include/wx/event.h index ec45c09279..a4d7b5685a 100644 --- a/include/wx/event.h +++ b/include/wx/event.h @@ -9,10 +9,10 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifndef _WX_EVENTH__ -#define _WX_EVENTH__ +#ifndef _WX_EVENT_H__ +#define _WX_EVENT_H__ -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(__APPLE__) #pragma interface "event.h" #endif @@ -27,16 +27,18 @@ #include "wx/thread.h" +#include "wx/dynarray.h" + // ---------------------------------------------------------------------------- // forward declarations // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxList; +class WXDLLIMPEXP_BASE wxList; #if wxUSE_GUI - class WXDLLEXPORT wxDC; - class WXDLLEXPORT wxMenu; - class WXDLLEXPORT wxWindow; + class WXDLLIMPEXP_CORE wxDC; + class WXDLLIMPEXP_CORE wxMenu; + class WXDLLIMPEXP_CORE wxWindow; #endif // wxUSE_GUI // ---------------------------------------------------------------------------- @@ -68,33 +70,39 @@ typedef int wxEventType; #if WXWIN_COMPATIBILITY_EVENT_TYPES -#define DECLARE_EVENT_TABLE_ENTRY(type, id, idLast, fn, obj) \ - { type, id, idLast, fn, obj } +#define DECLARE_EVENT_TABLE_ENTRY(type, winid, idLast, fn, obj) \ + { type, winid, idLast, fn, obj } #define BEGIN_DECLARE_EVENT_TYPES() enum { #define END_DECLARE_EVENT_TYPES() }; #define DECLARE_EVENT_TYPE(name, value) name = wxEVT_FIRST + value, -#define DECLARE_LOCAL_EVENT_TYPE(name, value) name = wxEVT_FIRST + value, +#define DECLARE_LOCAL_EVENT_TYPE(name, value) name = wxEVT_USER_FIRST + value, +#define DECLARE_EXPORTED_EVENT_TYPE(expdecl, name, value) \ + DECLARE_LOCAL_EVENT_TYPE(name, value) #define DEFINE_EVENT_TYPE(name) #define DEFINE_LOCAL_EVENT_TYPE(name) #else // !WXWIN_COMPATIBILITY_EVENT_TYPES -#define DECLARE_EVENT_TABLE_ENTRY(type, id, idLast, fn, obj) \ - wxEventTableEntry(type, id, idLast, fn, obj) +#define DECLARE_EVENT_TABLE_ENTRY(type, winid, idLast, fn, obj) \ + wxEventTableEntry(type, winid, idLast, fn, obj) + +#define EMPTY_PARAMETER_VALUE /* Fake macro parameter value */ #define BEGIN_DECLARE_EVENT_TYPES() #define END_DECLARE_EVENT_TYPES() +#define DECLARE_EXPORTED_EVENT_TYPE(expdecl, name, value) \ + extern expdecl const wxEventType name; #define DECLARE_EVENT_TYPE(name, value) \ - extern const wxEventType WXDLLEXPORT name; -#define DECLARE_LOCAL_EVENT_TYPE(name, value) extern const wxEventType name; -#define DECLARE_EXPORTED_LOCAL_EVENT_TYPE(usergoo, name, value) extern const wxEventType usergoo name; + DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_CORE, name, value) +#define DECLARE_LOCAL_EVENT_TYPE(name, value) \ + DECLARE_EXPORTED_EVENT_TYPE(EMPTY_PARAMETER_VALUE, name, value) #define DEFINE_EVENT_TYPE(name) const wxEventType name = wxNewEventType(); -#define DEFINE_LOCAL_EVENT_TYPE(name) const wxEventType name = wxNewEventType(); +#define DEFINE_LOCAL_EVENT_TYPE(name) DEFINE_EVENT_TYPE(name) // generate a new unique event type -extern WXDLLEXPORT wxEventType wxNewEventType(); +extern WXDLLIMPEXP_BASE wxEventType wxNewEventType(); #endif // WXWIN_COMPATIBILITY_EVENT_TYPES/!WXWIN_COMPATIBILITY_EVENT_TYPES @@ -107,9 +115,9 @@ BEGIN_DECLARE_EVENT_TYPES() #else // !WXWIN_COMPATIBILITY_EVENT_TYPES // it is important to still have these as constants to avoid // initialization order related problems - DECLARE_EVENT_TYPE(wxEVT_NULL,0); - const wxEventType wxEVT_FIRST = 10000; - const wxEventType wxEVT_USER_FIRST = wxEVT_FIRST + 2000; + DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_NULL, 0) + DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_FIRST, 10000) + DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_USER_FIRST, wxEVT_FIRST + 2000) #endif // WXWIN_COMPATIBILITY_EVENT_TYPES/!WXWIN_COMPATIBILITY_EVENT_TYPES DECLARE_EVENT_TYPE(wxEVT_COMMAND_BUTTON_CLICKED, 1) @@ -141,7 +149,7 @@ BEGIN_DECLARE_EVENT_TYPES() DECLARE_EVENT_TYPE(wxEVT_COMMAND_SPINCTRL_UPDATED, 18) // Sockets and timers send events, too - DECLARE_EVENT_TYPE(wxEVT_SOCKET, 50) + DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_SOCKET, 50) DECLARE_EVENT_TYPE(wxEVT_TIMER , 80) // Mouse event types @@ -182,7 +190,9 @@ BEGIN_DECLARE_EVENT_TYPES() DECLARE_EVENT_TYPE(wxEVT_NAVIGATION_KEY, 214) DECLARE_EVENT_TYPE(wxEVT_KEY_DOWN, 215) DECLARE_EVENT_TYPE(wxEVT_KEY_UP, 216) - +#if wxUSE_HOTKEY + DECLARE_EVENT_TYPE(wxEVT_HOTKEY, 217) +#endif // Set cursor event DECLARE_EVENT_TYPE(wxEVT_SET_CURSOR, 230) @@ -245,8 +255,10 @@ BEGIN_DECLARE_EVENT_TYPES() DECLARE_EVENT_TYPE(wxEVT_MEASURE_ITEM, 436) DECLARE_EVENT_TYPE(wxEVT_COMPARE_ITEM, 437) DECLARE_EVENT_TYPE(wxEVT_INIT_DIALOG, 438) - DECLARE_EVENT_TYPE(wxEVT_IDLE, 439) + 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) // Generic command events // Note: a click is a higher-level event than button down/up @@ -276,7 +288,7 @@ END_DECLARE_EVENT_TYPES() // // still, any new code using it should include wx/textctrl.h explicitly #if !WXWIN_COMPATIBILITY_EVENT_TYPES - extern const wxEventType WXDLLEXPORT wxEVT_COMMAND_TEXT_UPDATED; + extern const wxEventType WXDLLIMPEXP_CORE wxEVT_COMMAND_TEXT_UPDATED; #endif #if WXWIN_COMPATIBILITY @@ -323,6 +335,17 @@ END_DECLARE_EVENT_TYPES() #endif // WXWIN_COMPATIBILITY +// the predefined constants for the number of times we propagate event +// upwards window child-parent chain +enum Propagation_state +{ + // don't propagate it at all + wxEVENT_PROPAGATE_NONE = 0, + + // propagate it until it is processed + wxEVENT_PROPAGATE_MAX = INT_MAX +}; + /* * wxWindows events, covering all interesting things that might happen * (button clicking, resizing, setting text in widgets, etc.). @@ -335,7 +358,7 @@ END_DECLARE_EVENT_TYPES() * */ -class WXDLLEXPORT wxEvent : public wxObject +class WXDLLIMPEXP_BASE wxEvent : public wxObject { private: wxEvent& operator=(const wxEvent&); @@ -344,7 +367,7 @@ protected: wxEvent(const wxEvent&); // for implementing Clone() public: - wxEvent(int id = 0, wxEventType commandType = wxEVT_NULL ); + wxEvent(int winid = 0, wxEventType commandType = wxEVT_NULL ); void SetEventType(wxEventType typ) { m_eventType = typ; } wxEventType GetEventType() const { return m_eventType; } @@ -362,30 +385,108 @@ public: void Skip(bool skip = TRUE) { m_skipped = skip; } bool GetSkipped() const { return m_skipped; }; - // Implementation only: this test is explicitlty anti OO and this functions - // exists only for optimization purposes. - bool IsCommandEvent() const { return m_isCommandEvent; } - // this function is used to create a copy of the event polymorphically and // all derived classes must implement it because otherwise wxPostEvent() // 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 + // exists only for optimization purposes. + bool IsCommandEvent() const { return m_isCommandEvent; } + + // Determine if this event should be propagating to the parent window. + bool ShouldPropagate() const + { return m_propagationLevel != wxEVENT_PROPAGATE_NONE; } + + // Stop an event from propagating to its parent window, returns the old + // propagation level value + int StopPropagation() + { + int propagationLevel = m_propagationLevel; + m_propagationLevel = wxEVENT_PROPAGATE_NONE; + return propagationLevel; + } + + // Resume the event propagation by restoring the propagation level + // (returned by StopPropagation()) + void ResumePropagation(int propagationLevel) + { + m_propagationLevel = propagationLevel; + } + public: wxObject* m_eventObject; wxEventType m_eventType; long m_timeStamp; int m_id; wxObject* m_callbackUserData; + +protected: + // the propagation level: while it is positive, we propagate the event to + // the parent window (if any) + // + // this one doesn't have to be public, we don't have to worry about + // backwards compatibility as it is new + int m_propagationLevel; + +public: bool m_skipped; bool m_isCommandEvent; - + private: + // it needs to access our m_propagationLevel + friend class WXDLLIMPEXP_BASE wxPropagateOnce; + DECLARE_ABSTRACT_CLASS(wxEvent) }; +/* + * Helper class to temporarily change an event not to propagate. + */ +class WXDLLIMPEXP_BASE wxPropagationDisabler +{ +public: + wxPropagationDisabler(wxEvent& event) : m_event(event) + { + m_propagationLevelOld = m_event.StopPropagation(); + } + + ~wxPropagationDisabler() + { + m_event.ResumePropagation(m_propagationLevelOld); + } + +private: + wxEvent& m_event; + int m_propagationLevelOld; +}; + +/* + * Another one to temporarily lower propagation level. + */ +class WXDLLIMPEXP_BASE wxPropagateOnce +{ +public: + wxPropagateOnce(wxEvent& event) : m_event(event) + { + wxASSERT_MSG( m_event.m_propagationLevel > 0, + _T("shouldn't be used unless ShouldPropagate()!") ); + + m_event.m_propagationLevel--; + } + + ~wxPropagateOnce() + { + m_event.m_propagationLevel++; + } + +private: + wxEvent& m_event; +}; + #if wxUSE_GUI + // Item or menu event class /* wxEVT_COMMAND_BUTTON_CLICKED @@ -405,13 +506,13 @@ private: wxEVT_COMMAND_TOGGLEBUTTON_CLICKED */ -class WXDLLEXPORT wxCommandEvent : public wxEvent +class WXDLLIMPEXP_CORE wxCommandEvent : public wxEvent { private: wxCommandEvent& operator=(const wxCommandEvent& event); public: - wxCommandEvent(wxEventType commandType = wxEVT_NULL, int id = 0); + wxCommandEvent(wxEventType commandType = wxEVT_NULL, int winid = 0); wxCommandEvent(const wxCommandEvent& event) : wxEvent(event), @@ -468,11 +569,11 @@ private: // this class adds a possibility to react (from the user) code to a control // notification: allow or veto the operation being reported. -class WXDLLEXPORT wxNotifyEvent : public wxCommandEvent +class WXDLLIMPEXP_CORE wxNotifyEvent : public wxCommandEvent { public: - wxNotifyEvent(wxEventType commandType = wxEVT_NULL, int id = 0) - : wxCommandEvent(commandType, id) + wxNotifyEvent(wxEventType commandType = wxEVT_NULL, int winid = 0) + : wxCommandEvent(commandType, winid) { m_bAllow = TRUE; } wxNotifyEvent(const wxNotifyEvent& event) @@ -511,11 +612,11 @@ private: wxEVT_SCROLL_ENDSCROLL */ -class WXDLLEXPORT wxScrollEvent : public wxCommandEvent +class WXDLLIMPEXP_CORE wxScrollEvent : public wxCommandEvent { public: wxScrollEvent(wxEventType commandType = wxEVT_NULL, - int id = 0, int pos = 0, int orient = 0); + int winid = 0, int pos = 0, int orient = 0); int GetOrientation() const { return (int) m_extraLong ; } int GetPosition() const { return m_commandInt ; } @@ -541,14 +642,14 @@ private: wxEVT_SCROLLWIN_THUMBRELEASE */ -class WXDLLEXPORT wxScrollWinEvent : public wxEvent +class WXDLLIMPEXP_CORE wxScrollWinEvent : public wxEvent { public: wxScrollWinEvent(wxEventType commandType = wxEVT_NULL, int pos = 0, int orient = 0); - wxScrollWinEvent(const wxScrollWinEvent & event) : wxEvent(event) - { m_commandInt = event.m_commandInt; - m_extraLong = event.m_extraLong; } + wxScrollWinEvent(const wxScrollWinEvent & event) : wxEvent(event) + { m_commandInt = event.m_commandInt; + m_extraLong = event.m_extraLong; } int GetOrientation() const { return (int) m_extraLong ; } int GetPosition() const { return m_commandInt ; } @@ -604,12 +705,12 @@ enum wxMOUSE_BTN_RIGHT = 2 }; -class WXDLLEXPORT wxMouseEvent : public wxEvent +class WXDLLIMPEXP_CORE wxMouseEvent : public wxEvent { public: wxMouseEvent(wxEventType mouseType = wxEVT_NULL); - wxMouseEvent(const wxMouseEvent& event) : wxEvent(event) - { Assign(event); } + wxMouseEvent(const wxMouseEvent& event) : wxEvent(event) + { Assign(event); } // Was it a button event? (*doesn't* mean: is any button *down*?) bool IsButton() const { return Button(wxMOUSE_BTN_ANY); } @@ -774,7 +875,7 @@ private: wxEVT_SET_CURSOR */ -class WXDLLEXPORT wxSetCursorEvent : public wxEvent +class WXDLLIMPEXP_CORE wxSetCursorEvent : public wxEvent { public: wxSetCursorEvent(wxCoord x = 0, wxCoord y = 0) @@ -782,10 +883,12 @@ public: m_x(x), m_y(y), m_cursor() { } - wxSetCursorEvent(const wxSetCursorEvent & event) : wxEvent(event) - { m_x = event.m_x; - m_y = event.m_y; - m_cursor = event.m_cursor; } + wxSetCursorEvent(const wxSetCursorEvent & event) + : wxEvent(event), + m_x(event.m_x), + m_y(event.m_y), + m_cursor(event.m_cursor) + { } wxCoord GetX() const { return m_x; } wxCoord GetY() const { return m_y; } @@ -811,28 +914,14 @@ private: wxEVT_CHAR_HOOK wxEVT_KEY_DOWN wxEVT_KEY_UP + wxEVT_HOTKEY */ -class WXDLLEXPORT wxKeyEvent : public wxEvent +class WXDLLIMPEXP_CORE wxKeyEvent : public wxEvent { public: wxKeyEvent(wxEventType keyType = wxEVT_NULL); - wxKeyEvent(const wxKeyEvent& evt) : wxEvent(evt) - { - m_x = evt.m_x; - m_y = evt.m_y; - - m_keyCode = evt.m_keyCode; - - m_controlDown = evt.m_controlDown; - m_shiftDown = evt.m_shiftDown; - m_altDown = evt.m_altDown; - m_metaDown = evt.m_metaDown; - m_scanCode = evt.m_scanCode; - m_rawCode = evt.m_rawCode; - m_rawFlags = evt.m_rawFlags; - } - + wxKeyEvent(const wxKeyEvent& evt); // Find state of shift/control keys bool ControlDown() const { return m_controlDown; } @@ -878,8 +967,8 @@ public: // Get Y position wxCoord GetY() const { return m_y; } - // deprecated - long KeyCode() const { return m_keyCode; } + // deprecated, Use GetKeyCode instead. + wxDEPRECATED( long KeyCode() const ); virtual wxEvent *Clone() const { return new wxKeyEvent(*this); } @@ -914,8 +1003,14 @@ public: bool m_metaDown; bool m_scanCode; - // these fields contain the platform-specific information about the pressed - // key +#if wxUSE_UNICODE + // This contains the full Unicode character + // in a character events in Unicode mode + wxChar m_uniChar; +#endif + + // these fields contain the platform-specific information about + // key that was pressed wxUint32 m_rawCode; wxUint32 m_rawFlags; @@ -928,26 +1023,32 @@ private: wxEVT_SIZE */ -class WXDLLEXPORT wxSizeEvent : public wxEvent +class WXDLLIMPEXP_CORE wxSizeEvent : public wxEvent { public: wxSizeEvent() : wxEvent(0, wxEVT_SIZE) { } - wxSizeEvent(const wxSize& sz, int id = 0) - : wxEvent(id, wxEVT_SIZE), + wxSizeEvent(const wxSize& sz, int winid = 0) + : wxEvent(winid, wxEVT_SIZE), m_size(sz) { } wxSizeEvent(const wxSizeEvent & event) - : wxEvent(event), - m_size(event.m_size) - { } + : wxEvent(event), + m_size(event.m_size), m_rect(event.m_rect) + { } + wxSizeEvent(const wxRect& rect, int id = 0) + : m_size(rect.GetSize()), m_rect(rect) + { m_eventType = wxEVT_SIZING; m_id = id; } wxSize GetSize() const { return m_size; } + wxRect GetRect() const { return m_rect; } + void SetRect(wxRect rect) { m_rect = rect; } virtual wxEvent *Clone() const { return new wxSizeEvent(*this); } public: wxSize m_size; + wxRect m_rect; // Used for wxEVT_SIZING private: DECLARE_DYNAMIC_CLASS(wxSizeEvent) @@ -959,26 +1060,32 @@ private: wxEVT_MOVE */ -class WXDLLEXPORT wxMoveEvent : public wxEvent +class WXDLLIMPEXP_CORE wxMoveEvent : public wxEvent { public: wxMoveEvent() : wxEvent(0, wxEVT_MOVE) { } - wxMoveEvent(const wxPoint& pos, int id = 0) - : wxEvent(id, wxEVT_MOVE), + wxMoveEvent(const wxPoint& pos, int winid = 0) + : wxEvent(winid, wxEVT_MOVE), m_pos(pos) { } wxMoveEvent(const wxMoveEvent& event) : wxEvent(event), - m_pos(event.m_pos) - { } + m_pos(event.m_pos) + { } + wxMoveEvent(const wxRect& rect, int id = 0) + : m_pos(rect.GetPosition()), m_rect(rect) + { m_eventType = wxEVT_MOVING; m_id = id; } wxPoint GetPosition() const { return m_pos; } + wxRect GetRect() const { return m_rect; } + void SetRect(wxRect rect) { m_rect = rect; } virtual wxEvent *Clone() const { return new wxMoveEvent(*this); } wxPoint m_pos; + wxRect m_rect; private: DECLARE_DYNAMIC_CLASS(wxMoveEvent) @@ -993,10 +1100,10 @@ private: #if defined(__WXDEBUG__) && (defined(__WXMSW__) || defined(__WXPM__)) // see comments in src/msw|os2/dcclient.cpp where g_isPainting is defined - extern WXDLLEXPORT int g_isPainting; + extern WXDLLIMPEXP_CORE int g_isPainting; #endif // debug -class WXDLLEXPORT wxPaintEvent : public wxEvent +class WXDLLIMPEXP_CORE wxPaintEvent : public wxEvent { public: wxPaintEvent(int Id = 0) @@ -1021,11 +1128,11 @@ private: DECLARE_DYNAMIC_CLASS(wxPaintEvent) }; -class WXDLLEXPORT wxNcPaintEvent : public wxEvent +class WXDLLIMPEXP_CORE wxNcPaintEvent : public wxEvent { public: - wxNcPaintEvent(int id = 0) - : wxEvent(id, wxEVT_NC_PAINT) + wxNcPaintEvent(int winid = 0) + : wxEvent(winid, wxEVT_NC_PAINT) { } virtual wxEvent *Clone() const { return new wxNcPaintEvent(*this); } @@ -1039,7 +1146,7 @@ private: wxEVT_ERASE_BACKGROUND */ -class WXDLLEXPORT wxEraseEvent : public wxEvent +class WXDLLIMPEXP_CORE wxEraseEvent : public wxEvent { private: wxEraseEvent& operator=(const wxEraseEvent& event); @@ -1071,14 +1178,14 @@ private: wxEVT_KILL_FOCUS */ -class WXDLLEXPORT wxFocusEvent : public wxEvent +class WXDLLIMPEXP_CORE wxFocusEvent : public wxEvent { private: wxFocusEvent& operator=(const wxFocusEvent& event); public: - wxFocusEvent(wxEventType type = wxEVT_NULL, int id = 0) - : wxEvent(id, type) + wxFocusEvent(wxEventType type = wxEVT_NULL, int winid = 0) + : wxEvent(winid, type) { m_win = NULL; } wxFocusEvent(const wxFocusEvent& event) @@ -1101,8 +1208,8 @@ private: }; // wxChildFocusEvent notifies the parent that a child has got the focus: unlike -// wxFocusEvent it is propgated upwards the window chain -class WXDLLEXPORT wxChildFocusEvent : public wxCommandEvent +// wxFocusEvent it is propagated upwards the window chain +class WXDLLIMPEXP_CORE wxChildFocusEvent : public wxCommandEvent { public: wxChildFocusEvent(wxWindow *win = NULL); @@ -1121,7 +1228,7 @@ private: wxEVT_ACTIVATE_APP */ -class WXDLLEXPORT wxActivateEvent : public wxEvent +class WXDLLIMPEXP_CORE wxActivateEvent : public wxEvent { public: wxActivateEvent(wxEventType type = wxEVT_NULL, bool active = TRUE, int Id = 0) @@ -1129,7 +1236,7 @@ public: { m_active = active; } wxActivateEvent(const wxActivateEvent& event) : wxEvent(event) - { m_active = event.m_active; } + { m_active = event.m_active; } bool GetActive() const { return m_active; } @@ -1147,7 +1254,7 @@ private: wxEVT_INIT_DIALOG */ -class WXDLLEXPORT wxInitDialogEvent : public wxEvent +class WXDLLIMPEXP_CORE wxInitDialogEvent : public wxEvent { public: wxInitDialogEvent(int Id = 0) @@ -1167,15 +1274,15 @@ private: wxEVT_MENU_HIGHLIGHT, */ -class WXDLLEXPORT wxMenuEvent : public wxEvent +class WXDLLIMPEXP_CORE wxMenuEvent : public wxEvent { public: - wxMenuEvent(wxEventType type = wxEVT_NULL, int id = 0) - : wxEvent(id, type) - { m_menuId = id; } + wxMenuEvent(wxEventType type = wxEVT_NULL, int winid = 0, wxMenu* menu = NULL) + : wxEvent(winid, type) + { m_menuId = winid; m_menu = NULL; } wxMenuEvent(const wxMenuEvent & event) : wxEvent(event) - { m_menuId = event.m_menuId; } + { m_menuId = event.m_menuId; m_menu = event.m_menu; } // only for wxEVT_MENU_HIGHLIGHT int GetMenuId() const { return m_menuId; } @@ -1183,10 +1290,14 @@ public: // only for wxEVT_MENU_OPEN/CLOSE bool IsPopup() const { return m_menuId == -1; } + // only for wxEVT_MENU_OPEN/CLOSE + wxMenu* GetMenu() const { return m_menu; } + virtual wxEvent *Clone() const { return new wxMenuEvent(*this); } private: - int m_menuId; + int m_menuId; + wxMenu* m_menu; DECLARE_DYNAMIC_CLASS(wxMenuEvent) }; @@ -1198,11 +1309,11 @@ private: wxEVT_QUERY_END_SESSION */ -class WXDLLEXPORT wxCloseEvent : public wxEvent +class WXDLLIMPEXP_CORE wxCloseEvent : public wxEvent { public: - wxCloseEvent(wxEventType type = wxEVT_NULL, int id = 0) - : wxEvent(id, type), + 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) @@ -1213,14 +1324,14 @@ public: } wxCloseEvent(const wxCloseEvent & event) : wxEvent(event), - m_loggingOff(event.m_loggingOff), - m_veto(event.m_veto), - m_canVeto(event.m_canVeto) + m_loggingOff(event.m_loggingOff), + m_veto(event.m_veto), + m_canVeto(event.m_canVeto) { #if WXWIN_COMPATIBILITY m_force = event.m_force; #endif // WXWIN_COMPATIBILITY - } + } void SetLoggingOff(bool logOff) { m_loggingOff = logOff; } bool GetLoggingOff() const { return m_loggingOff; } @@ -1265,15 +1376,15 @@ private: wxEVT_SHOW */ -class WXDLLEXPORT wxShowEvent : public wxEvent +class WXDLLIMPEXP_CORE wxShowEvent : public wxEvent { public: - wxShowEvent(int id = 0, bool show = FALSE) - : wxEvent(id, wxEVT_SHOW) + wxShowEvent(int winid = 0, bool show = FALSE) + : wxEvent(winid, wxEVT_SHOW) { m_show = show; } wxShowEvent(const wxShowEvent & event) : wxEvent(event) - { m_show = event.m_show; } + { m_show = event.m_show; } void SetShow(bool show) { m_show = show; } bool GetShow() const { return m_show; } @@ -1291,15 +1402,15 @@ private: wxEVT_ICONIZE */ -class WXDLLEXPORT wxIconizeEvent : public wxEvent +class WXDLLIMPEXP_CORE wxIconizeEvent : public wxEvent { public: - wxIconizeEvent(int id = 0, bool iconized = TRUE) - : wxEvent(id, wxEVT_ICONIZE) + wxIconizeEvent(int winid = 0, bool iconized = TRUE) + : wxEvent(winid, wxEVT_ICONIZE) { m_iconized = iconized; } wxIconizeEvent(const wxIconizeEvent & event) : wxEvent(event) - { m_iconized = event.m_iconized; } + { m_iconized = event.m_iconized; } // return true if the frame was iconized, false if restored bool Iconized() const { return m_iconized; } @@ -1316,11 +1427,11 @@ private: wxEVT_MAXIMIZE */ -class WXDLLEXPORT wxMaximizeEvent : public wxEvent +class WXDLLIMPEXP_CORE wxMaximizeEvent : public wxEvent { public: - wxMaximizeEvent(int id = 0) - : wxEvent(id, wxEVT_MAXIMIZE) + wxMaximizeEvent(int winid = 0) + : wxEvent(winid, wxEVT_MAXIMIZE) { } virtual wxEvent *Clone() const { return new wxMaximizeEvent(*this); } @@ -1354,7 +1465,7 @@ enum wxJOY_BUTTON4 = 8 }; -class WXDLLEXPORT wxJoystickEvent : public wxEvent +class WXDLLIMPEXP_CORE wxJoystickEvent : public wxEvent { public: wxPoint m_pos; @@ -1376,12 +1487,12 @@ public: { } wxJoystickEvent(const wxJoystickEvent & event) - : wxEvent(event), - m_pos(event.m_pos), - m_zPosition(event.m_zPosition), - m_buttonChange(event.m_buttonChange), - m_buttonState(event.m_buttonState), - m_joyStick(event.m_joyStick) + : wxEvent(event), + m_pos(event.m_pos), + m_zPosition(event.m_zPosition), + m_buttonChange(event.m_buttonChange), + m_buttonState(event.m_buttonState), + m_joyStick(event.m_joyStick) { } wxPoint GetPosition() const { return m_pos; } @@ -1432,7 +1543,7 @@ private: wxEVT_DROP_FILES */ -class WXDLLEXPORT wxDropFilesEvent : public wxEvent +class WXDLLIMPEXP_CORE wxDropFilesEvent : public wxEvent { private: wxDropFilesEvent& operator=(const wxDropFilesEvent& event); @@ -1485,7 +1596,21 @@ private: wxEVT_UPDATE_UI */ -class WXDLLEXPORT wxUpdateUIEvent : public wxCommandEvent +// Whether to always send update events to windows, or +// to only send update events to those with the +// wxWS_EX_PROCESS_UI_UPDATES style. + +enum wxUpdateUIMode +{ + // Send UI update events to all windows + wxUPDATE_UI_PROCESS_ALL, + + // Send UI update events to windows that have + // the wxWS_EX_PROCESS_UI_UPDATES flag specified + wxUPDATE_UI_PROCESS_SPECIFIED +}; + +class WXDLLIMPEXP_CORE wxUpdateUIEvent : public wxCommandEvent { public: wxUpdateUIEvent(wxWindowID commandId = 0) @@ -1499,13 +1624,13 @@ public: } wxUpdateUIEvent(const wxUpdateUIEvent & event) : wxCommandEvent(event), - m_checked(event.m_checked), - m_enabled(event.m_enabled), - m_setEnabled(event.m_setEnabled), - m_setText(event.m_setText), - m_setChecked(event.m_setChecked), - m_text(event.m_text) - { } + m_checked(event.m_checked), + m_enabled(event.m_enabled), + m_setEnabled(event.m_setEnabled), + m_setText(event.m_setText), + m_setChecked(event.m_setChecked), + m_text(event.m_text) + { } bool GetChecked() const { return m_checked; } bool GetEnabled() const { return m_enabled; } @@ -1518,6 +1643,28 @@ public: 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. + static void SetUpdateInterval(long updateInterval) { sm_updateInterval = updateInterval; } + + // Returns the current interval between updates in milliseconds + static long GetUpdateInterval() { return sm_updateInterval ; } + + // Can we update this window? + static bool CanUpdate(wxWindow* win) ; + + // Reset the update time to provide a delay until the next + // time we should update + static void ResetUpdateTime() ; + + // Specify how wxWindows 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; } + + // Returns the UI update mode + static wxUpdateUIMode GetMode() { return sm_updateMode ; } + virtual wxEvent *Clone() const { return new wxUpdateUIEvent(*this); } protected: @@ -1527,6 +1674,11 @@ protected: bool m_setText; bool m_setChecked; wxString m_text; +#if wxUSE_LONGLONG + static wxLongLong sm_lastUpdate; +#endif + static long sm_updateInterval; + static wxUpdateUIMode sm_updateMode; private: DECLARE_DYNAMIC_CLASS(wxUpdateUIEvent) @@ -1537,7 +1689,7 @@ private: */ // TODO: shouldn't all events record the window ID? -class WXDLLEXPORT wxSysColourChangedEvent : public wxEvent +class WXDLLIMPEXP_CORE wxSysColourChangedEvent : public wxEvent { public: wxSysColourChangedEvent() @@ -1556,14 +1708,14 @@ private: (even if it released the capture itself). */ -class WXDLLEXPORT wxMouseCaptureChangedEvent : public wxEvent +class WXDLLIMPEXP_CORE wxMouseCaptureChangedEvent : public wxEvent { private: wxMouseCaptureChangedEvent operator=(const wxMouseCaptureChangedEvent& event); public: - wxMouseCaptureChangedEvent(wxWindowID id = 0, wxWindow* gainedCapture = NULL) - : wxEvent(id, wxEVT_MOUSE_CAPTURE_CHANGED), + wxMouseCaptureChangedEvent(wxWindowID winid = 0, wxWindow* gainedCapture = NULL) + : wxEvent(winid, wxEVT_MOUSE_CAPTURE_CHANGED), m_gainedCapture(gainedCapture) { } @@ -1584,7 +1736,7 @@ private: /* wxEVT_DISPLAY_CHANGED */ -class WXDLLEXPORT wxDisplayChangedEvent : public wxEvent +class WXDLLIMPEXP_CORE wxDisplayChangedEvent : public wxEvent { private: DECLARE_DYNAMIC_CLASS(wxDisplayChangedEvent) @@ -1601,14 +1753,14 @@ public: wxEVT_PALETTE_CHANGED */ -class WXDLLEXPORT wxPaletteChangedEvent : public wxEvent +class WXDLLIMPEXP_CORE wxPaletteChangedEvent : public wxEvent { private: wxPaletteChangedEvent& operator=(const wxPaletteChangedEvent& event); public: - wxPaletteChangedEvent(wxWindowID id = 0) - : wxEvent(id, wxEVT_PALETTE_CHANGED), + wxPaletteChangedEvent(wxWindowID winid = 0) + : wxEvent(winid, wxEVT_PALETTE_CHANGED), m_changedWindow((wxWindow *) NULL) { } @@ -1634,17 +1786,17 @@ private: Indicates the window is getting keyboard focus and should re-do its palette. */ -class WXDLLEXPORT wxQueryNewPaletteEvent : public wxEvent +class WXDLLIMPEXP_CORE wxQueryNewPaletteEvent : public wxEvent { public: - wxQueryNewPaletteEvent(wxWindowID id = 0) - : wxEvent(id, wxEVT_QUERY_NEW_PALETTE), + wxQueryNewPaletteEvent(wxWindowID winid = 0) + : wxEvent(winid, wxEVT_QUERY_NEW_PALETTE), m_paletteRealized(FALSE) { } wxQueryNewPaletteEvent(const wxQueryNewPaletteEvent & event) : wxEvent(event), - m_paletteRealized(event.m_paletteRealized) - { } + m_paletteRealized(event.m_paletteRealized) + { } // App sets this if it changes the palette. void SetPaletteRealized(bool realized) { m_paletteRealized = realized; } @@ -1664,7 +1816,7 @@ private: wxEVT_NAVIGATION_KEY */ // NB: don't derive from command event to avoid being propagated to the parent -class WXDLLEXPORT wxNavigationKeyEvent : public wxEvent +class WXDLLIMPEXP_CORE wxNavigationKeyEvent : public wxEvent { private: wxNavigationKeyEvent& operator=(const wxNavigationKeyEvent& event); @@ -1735,7 +1887,7 @@ private: wxEVT_DESTROY */ -class WXDLLEXPORT wxWindowCreateEvent : public wxCommandEvent +class WXDLLIMPEXP_CORE wxWindowCreateEvent : public wxCommandEvent { public: wxWindowCreateEvent(wxWindow *win = NULL); @@ -1748,7 +1900,7 @@ private: DECLARE_DYNAMIC_CLASS(wxWindowCreateEvent) }; -class WXDLLEXPORT wxWindowDestroyEvent : public wxCommandEvent +class WXDLLIMPEXP_CORE wxWindowDestroyEvent : public wxCommandEvent { public: wxWindowDestroyEvent(wxWindow *win = NULL); @@ -1767,20 +1919,20 @@ private: wxEVT_DETAILED_HELP */ -class WXDLLEXPORT wxHelpEvent : public wxCommandEvent +class WXDLLIMPEXP_CORE wxHelpEvent : public wxCommandEvent { public: wxHelpEvent(wxEventType type = wxEVT_NULL, - wxWindowID id = 0, + wxWindowID winid = 0, const wxPoint& pt = wxDefaultPosition) - : wxCommandEvent(type, id), + : wxCommandEvent(type, winid), m_pos(pt), m_target(), m_link() { } wxHelpEvent(const wxHelpEvent & event) : wxCommandEvent(event), - m_pos(event.m_pos), - m_target(event.m_target), - m_link(event.m_link) + m_pos(event.m_pos), + m_target(event.m_target), + m_link(event.m_link) { } // Position of event (in screen coordinates) @@ -1814,18 +1966,18 @@ private: wxEVT_CONTEXT_MENU */ -class WXDLLEXPORT wxContextMenuEvent : public wxCommandEvent +class WXDLLIMPEXP_CORE wxContextMenuEvent : public wxCommandEvent { public: wxContextMenuEvent(wxEventType type = wxEVT_NULL, - wxWindowID id = 0, + wxWindowID winid = 0, const wxPoint& pt = wxDefaultPosition) - : wxCommandEvent(type, id), + : wxCommandEvent(type, winid), m_pos(pt) { } wxContextMenuEvent(const wxContextMenuEvent & event) : wxCommandEvent(event), - m_pos(event.m_pos) + m_pos(event.m_pos) { } // Position of event (in screen coordinates) @@ -1846,7 +1998,21 @@ private: wxEVT_IDLE */ -class WXDLLEXPORT wxIdleEvent : public wxEvent +// Whether to always send idle events to windows, or +// to only send update events to those with the +// wxWS_EX_PROCESS_IDLE style. + +enum wxIdleMode +{ + // Send idle events to all windows + wxIDLE_PROCESS_ALL, + + // Send idle events to windows that have + // the wxWS_EX_PROCESS_IDLE flag specified + wxIDLE_PROCESS_SPECIFIED +}; + +class WXDLLIMPEXP_CORE wxIdleEvent : public wxEvent { public: wxIdleEvent() @@ -1855,16 +2021,28 @@ public: { } wxIdleEvent(const wxIdleEvent & event) : wxEvent(event), - m_requestMore(event.m_requestMore) - { } + m_requestMore(event.m_requestMore) + { } void RequestMore(bool needMore = TRUE) { m_requestMore = needMore; } bool MoreRequested() const { return m_requestMore; } virtual wxEvent *Clone() const { return new wxIdleEvent(*this); } + // Specify how wxWindows 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; } + + // Returns the idle event mode + static wxIdleMode GetMode() { return sm_idleMode ; } + + // Can we send an idle event? + static bool CanSend(wxWindow* win) ; + protected: bool m_requestMore; + static wxIdleMode sm_idleMode; private: DECLARE_DYNAMIC_CLASS(wxIdleEvent) @@ -1895,7 +2073,7 @@ typedef void (wxObject::*wxObjectEventFunction)(wxEvent&); // we have to keep both versions #if WXWIN_COMPATIBILITY_EVENT_TYPES -struct WXDLLEXPORT wxEventTableEntry +struct WXDLLIMPEXP_BASE wxEventTableEntry { // For some reason, this can't be wxEventType, or VC++ complains. int m_eventType; // main event type @@ -1911,15 +2089,15 @@ struct WXDLLEXPORT wxEventTableEntry // struct containing the members common to static and dynamic event tables // entries -struct WXDLLEXPORT wxEventTableEntryBase +struct WXDLLIMPEXP_BASE wxEventTableEntryBase { private: wxEventTableEntryBase& operator=(const wxEventTableEntryBase& event); public: - wxEventTableEntryBase(int id, int idLast, + wxEventTableEntryBase(int winid, int idLast, wxObjectEventFunction fn, wxObject *data) - : m_id(id), + : m_id(winid), m_lastId(idLast), m_fn(fn), m_callbackUserData(data) @@ -1945,11 +2123,11 @@ public: }; // an entry from a static event table -struct WXDLLEXPORT wxEventTableEntry : public wxEventTableEntryBase +struct WXDLLIMPEXP_BASE wxEventTableEntry : public wxEventTableEntryBase { - wxEventTableEntry(const int& evType, int id, int idLast, + wxEventTableEntry(const int& evType, int winid, int idLast, wxObjectEventFunction fn, wxObject *data) - : wxEventTableEntryBase(id, idLast, fn, data), + : wxEventTableEntryBase(winid, idLast, fn, data), m_eventType(evType) { } @@ -1962,19 +2140,27 @@ struct WXDLLEXPORT wxEventTableEntry : public wxEventTableEntryBase const int& m_eventType; }; +class WXDLLIMPEXP_BASE wxEvtHandler; + // an entry used in dynamic event table managed by wxEvtHandler::Connect() -struct WXDLLEXPORT wxDynamicEventTableEntry : public wxEventTableEntryBase +struct WXDLLIMPEXP_BASE wxDynamicEventTableEntry : public wxEventTableEntryBase { - wxDynamicEventTableEntry(int evType, int id, int idLast, - wxObjectEventFunction fn, wxObject *data) - : wxEventTableEntryBase(id, idLast, fn, data), - m_eventType(evType) + wxDynamicEventTableEntry(int evType, int winid, int idLast, + wxObjectEventFunction fn, wxObject *data, wxEvtHandler* eventSink) + : wxEventTableEntryBase(winid, idLast, fn, data), + m_eventType(evType), + m_eventSink(eventSink) { } // not a reference here as we can't keep a reference to a temporary int // created to wrap the constant value typically passed to Connect() - nor // do we need it int m_eventType; + + // Pointer to object whose function is fn - so we don't assume the + // EventFunction is always a member of the EventHandler receiving the + // message + wxEvtHandler* m_eventSink; }; #endif // !WXWIN_COMPATIBILITY_EVENT_TYPES @@ -1982,17 +2168,68 @@ struct WXDLLEXPORT wxDynamicEventTableEntry : public wxEventTableEntryBase // ---------------------------------------------------------------------------- // wxEventTable: an array of event entries terminated with {0, 0, 0, 0, 0} // ---------------------------------------------------------------------------- -struct WXDLLEXPORT wxEventTable + +struct WXDLLIMPEXP_BASE wxEventTable { const wxEventTable *baseTable; // base event table (next in chain) const wxEventTableEntry *entries; // bottom of entry array }; +// ---------------------------------------------------------------------------- +// wxEventHashTable: a helper of wxEvtHandler to speed up wxEventTable lookups. +// ---------------------------------------------------------------------------- + +WX_DEFINE_ARRAY_NO_PTR(const wxEventTableEntry*, wxEventTableEntryPointerArray); +class WXDLLIMPEXP_BASE wxEvtHandler; + +class WXDLLIMPEXP_BASE wxEventHashTable +{ +private: + // Internal data structs + struct EventTypeTable + { + wxEventType eventType; + wxEventTableEntryPointerArray eventEntryTable; + }; + typedef EventTypeTable* EventTypeTablePointer; + +public: + // Constructor, needs the event table it needs to hash later on. + // Note: hashing of the event table is not done in the constructor as it + // can be that the event table is not yet full initialize, the hash + // will gets initialized when handling the first event look-up request. + wxEventHashTable(const wxEventTable &table); + // Destructor. + ~wxEventHashTable(); + + // Handle the given event, in other words search the event table hash + // and call self->ProcessEvent() if a match was found. + bool HandleEvent(wxEvent &event, wxEvtHandler *self); + +protected: + // Init the hash table with the entries of the static event table. + void InitHashTable(); + // Helper funtion of InitHashTable() to insert 1 entry into the hash table. + void AddEntry(const wxEventTableEntry &entry); + // Allocate and init with null pointers the base hash table. + void AllocEventTypeTable(size_t size); + // Grow the hash table in size and transfer all items currently + // in the table to the correct location in the new table. + void GrowEventTypeTable(); + +protected: + const wxEventTable &m_table; + bool m_rebuildHash; + + size_t m_size; + EventTypeTablePointer *m_eventTypeTable; +}; + // ---------------------------------------------------------------------------- // wxEvtHandler: the base class for all objects handling wxWindows events // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxEvtHandler : public wxObject +class WXDLLIMPEXP_BASE wxEvtHandler : public wxObject { public: wxEvtHandler(); @@ -2021,26 +2258,30 @@ public: #endif // Dynamic association of a member function handler with the event handler, - // id and event type - void Connect( int id, int lastId, int eventType, + // winid and event type + void Connect( int winid, int lastId, int eventType, wxObjectEventFunction func, - wxObject *userData = (wxObject *) NULL ); + wxObject *userData = (wxObject *) NULL, + wxEvtHandler *eventSink = (wxEvtHandler *) NULL ); // Convenience function: take just one id - void Connect( int id, int eventType, + void Connect( int winid, int eventType, wxObjectEventFunction func, - wxObject *userData = (wxObject *) NULL ) - { Connect(id, wxID_ANY, eventType, func, userData); } + wxObject *userData = (wxObject *) NULL, + wxEvtHandler *eventSink = (wxEvtHandler *) NULL ) + { Connect(winid, wxID_ANY, eventType, func, userData, eventSink); } - bool Disconnect( int id, int lastId, wxEventType eventType, + bool Disconnect( int winid, int lastId, wxEventType eventType, wxObjectEventFunction func = NULL, - wxObject *userData = (wxObject *) NULL ); + wxObject *userData = (wxObject *) NULL, + wxEvtHandler *eventSink = (wxEvtHandler *) NULL ); // Convenience function: take just one id - bool Disconnect( int id, wxEventType eventType = wxEVT_NULL, + bool Disconnect( int winid, wxEventType eventType = wxEVT_NULL, wxObjectEventFunction func = NULL, - wxObject *userData = (wxObject *) NULL ) - { return Disconnect(id, wxID_ANY, eventType, func, userData); } + wxObject *userData = (wxObject *) NULL, + wxEvtHandler *eventSink = (wxEvtHandler *) NULL ) + { return Disconnect(winid, wxID_ANY, eventType, func, userData, eventSink); } // User data can be associated with each wxEvtHandler @@ -2087,10 +2328,28 @@ private: static const wxEventTableEntry sm_eventTableEntries[]; protected: - static const wxEventTable sm_eventTable; + // hooks for wxWindow used by ProcessEvent() + // ----------------------------------------- + + // this one is called before trying our own event table to allow plugging + // in the validators +#if wxUSE_VALIDATORS + virtual bool TryValidator(wxEvent& WXUNUSED(event)) { return false; } +#endif // wxUSE_VALIDATORS + + // this one is called after failing to find the event handle in our own + // table to give a chance to the other windows to process it + // + // base class implementation passes the event to wxTheApp + virtual bool TryParent(wxEvent& event); + + static const wxEventTable sm_eventTable; virtual const wxEventTable *GetEventTable() const; + static wxEventHashTable sm_eventHashTable; + virtual wxEventHashTable& GetEventHashTable() const; + wxEvtHandler* m_nextHandler; wxEvtHandler* m_previousHandler; wxList* m_dynamicEvents; @@ -2104,10 +2363,6 @@ protected: # endif #endif - // optimization: instead of using costly IsKindOf() to decide whether we're - // a window (which is true in 99% of cases), use this flag - bool m_isWindow; - // Is event handler enabled? bool m_enabled; @@ -2138,6 +2393,15 @@ private: DECLARE_DYNAMIC_CLASS(wxEvtHandler) }; +// Post a message to the given eventhandler which will be processed during the +// next event loop iteration +inline void wxPostEvent(wxEvtHandler *dest, wxEvent& event) +{ + wxCHECK_RET( dest, wxT("need an object to post event to in wxPostEvent") ); + + dest->AddPendingEvent(event); +} + typedef void (wxEvtHandler::*wxEventFunction)(wxEvent&); #if wxUSE_GUI typedef void (wxEvtHandler::*wxCommandEventFunction)(wxCommandEvent&); @@ -2162,8 +2426,8 @@ typedef void (wxEvtHandler::*wxUpdateUIEventFunction)(wxUpdateUIEvent&); typedef void (wxEvtHandler::*wxIdleEventFunction)(wxIdleEvent&); typedef void (wxEvtHandler::*wxCloseEventFunction)(wxCloseEvent&); typedef void (wxEvtHandler::*wxShowEventFunction)(wxShowEvent&); -typedef void (wxEvtHandler::*wxIconizeEventFunction)(wxShowEvent&); -typedef void (wxEvtHandler::*wxMaximizeEventFunction)(wxShowEvent&); +typedef void (wxEvtHandler::*wxIconizeEventFunction)(wxIconizeEvent&); +typedef void (wxEvtHandler::*wxMaximizeEventFunction)(wxMaximizeEvent&); typedef void (wxEvtHandler::*wxNavigationKeyEventFunction)(wxNavigationKeyEvent&); typedef void (wxEvtHandler::*wxPaletteChangedEventFunction)(wxPaletteChangedEvent&); typedef void (wxEvtHandler::*wxQueryNewPaletteEventFunction)(wxQueryNewPaletteEvent&); @@ -2184,13 +2448,22 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC static const wxEventTableEntry sm_eventTableEntries[]; \ protected: \ static const wxEventTable sm_eventTable; \ - virtual const wxEventTable* GetEventTable() const; + virtual const wxEventTable* GetEventTable() const; \ + static wxEventHashTable sm_eventHashTable; \ + virtual wxEventHashTable& GetEventHashTable() const; + +// N.B.: when building DLL with Borland C++ 5.5 compiler, you must initialize +// sm_eventTable before using it in GetEventTable() or the compiler gives +// E2233 (see http://groups.google.com/groups?selm=397dcc8a%241_2%40dnews) #define BEGIN_EVENT_TABLE(theClass, baseClass) \ - const wxEventTable *theClass::GetEventTable() const \ - { return &theClass::sm_eventTable; } \ const wxEventTable theClass::sm_eventTable = \ { &baseClass::sm_eventTable, &theClass::sm_eventTableEntries[0] }; \ + const wxEventTable *theClass::GetEventTable() const \ + { return &theClass::sm_eventTable; } \ + wxEventHashTable theClass::sm_eventHashTable(theClass::sm_eventTable); \ + wxEventHashTable &theClass::GetEventHashTable() const \ + { return theClass::sm_eventHashTable; } \ const wxEventTableEntry theClass::sm_eventTableEntries[] = { \ #define END_EVENT_TABLE() DECLARE_EVENT_TABLE_ENTRY( wxEVT_NULL, 0, 0, 0, 0 ) }; @@ -2200,12 +2473,14 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC */ // Generic events -#define EVT_CUSTOM(event, id, func) DECLARE_EVENT_TABLE_ENTRY( event, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) & func, (wxObject *) NULL ), +#define EVT_CUSTOM(event, winid, func) DECLARE_EVENT_TABLE_ENTRY( event, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) & func, (wxObject *) NULL ), #define EVT_CUSTOM_RANGE(event, id1, id2, func) DECLARE_EVENT_TABLE_ENTRY( event, id1, id2, (wxObjectEventFunction) (wxEventFunction) & func, (wxObject *) NULL ), // Miscellaneous #define EVT_SIZE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SIZE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxSizeEventFunction) & func, (wxObject *) NULL ), +#define EVT_SIZING(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SIZING, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxSizeEventFunction) & func, (wxObject *) NULL ), #define EVT_MOVE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MOVE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMoveEventFunction) & func, (wxObject *) NULL ), +#define EVT_MOVING(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MOVING, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMoveEventFunction) & func, (wxObject *) NULL ), #define EVT_CLOSE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_CLOSE_WINDOW, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCloseEventFunction) & func, (wxObject *) NULL ), #define EVT_END_SESSION(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_END_SESSION, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCloseEventFunction) & func, (wxObject *) NULL ), #define EVT_QUERY_END_SESSION(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_QUERY_END_SESSION, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCloseEventFunction) & func, (wxObject *) NULL ), @@ -2215,10 +2490,13 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC #define EVT_CHAR(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_CHAR, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCharEventFunction) & func, (wxObject *) NULL ), #define EVT_KEY_DOWN(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_KEY_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCharEventFunction) & func, (wxObject *) NULL ), #define EVT_KEY_UP(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_KEY_UP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCharEventFunction) & func, (wxObject *) NULL ), +#if wxUSE_HOTKEY +#define EVT_HOTKEY(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_HOTKEY, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCharEventFunction) & func, (wxObject *) NULL ), +#endif #define EVT_CHAR_HOOK(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_CHAR_HOOK, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCharEventFunction) & func, NULL ), #define EVT_MENU_OPEN(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MENU_OPEN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMenuEventFunction) & func, (wxObject *) NULL ), #define EVT_MENU_CLOSE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MENU_CLOSE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMenuEventFunction) & func, (wxObject *) NULL ), -#define EVT_MENU_HIGHLIGHT(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MENU_HIGHLIGHT, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMenuEventFunction) & func, (wxObject *) NULL ), +#define EVT_MENU_HIGHLIGHT(winid, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MENU_HIGHLIGHT, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMenuEventFunction) & func, (wxObject *) NULL ), #define EVT_MENU_HIGHLIGHT_ALL(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MENU_HIGHLIGHT, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMenuEventFunction) & func, (wxObject *) NULL ), #define EVT_SET_FOCUS(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SET_FOCUS, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxFocusEventFunction) & func, (wxObject *) NULL ), #define EVT_KILL_FOCUS(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_KILL_FOCUS, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxFocusEventFunction) & func, (wxObject *) NULL ), @@ -2274,7 +2552,7 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC DECLARE_EVENT_TABLE_ENTRY( wxEVT_MOUSEWHEEL, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ), // EVT_COMMAND -#define EVT_COMMAND(id, event, fn) DECLARE_EVENT_TABLE_ENTRY( event, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_COMMAND(winid, event, fn) DECLARE_EVENT_TABLE_ENTRY( event, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), #define EVT_COMMAND_RANGE(id1, id2, event, fn) DECLARE_EVENT_TABLE_ENTRY( event, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), // Scrolling from wxWindow (sent to wxScrolledWindow) @@ -2320,68 +2598,75 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC #define EVT_SCROLL_ENDSCROLL(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_ENDSCROLL, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), // Scrolling from wxSlider and wxScrollBar, with an id -#define EVT_COMMAND_SCROLL(id, func) \ - DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_TOP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ - DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_BOTTOM, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ - DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEUP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ - DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEDOWN, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ - DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEUP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ - DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEDOWN, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ - DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBTRACK, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ - DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBRELEASE, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), \ - DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_ENDSCROLL, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), - -#define EVT_COMMAND_SCROLL_TOP(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_TOP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), -#define EVT_COMMAND_SCROLL_BOTTOM(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_BOTTOM, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), -#define EVT_COMMAND_SCROLL_LINEUP(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEUP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), -#define EVT_COMMAND_SCROLL_LINEDOWN(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEDOWN, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), -#define EVT_COMMAND_SCROLL_PAGEUP(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEUP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), -#define EVT_COMMAND_SCROLL_PAGEDOWN(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEDOWN, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), -#define EVT_COMMAND_SCROLL_THUMBTRACK(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBTRACK, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), -#define EVT_COMMAND_SCROLL_THUMBRELEASE(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBRELEASE, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), -#define EVT_COMMAND_SCROLL_ENDSCROLL(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_ENDSCROLL, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), +#define EVT_COMMAND_SCROLL(winid, func) \ + DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_TOP, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ + DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_BOTTOM, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ + DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEUP, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ + DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEDOWN, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ + DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEUP, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ + DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEDOWN, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ + DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBTRACK, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ + DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBRELEASE, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), \ + DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_ENDSCROLL, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), + +#define EVT_COMMAND_SCROLL_TOP(winid, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_TOP, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), +#define EVT_COMMAND_SCROLL_BOTTOM(winid, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_BOTTOM, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), +#define EVT_COMMAND_SCROLL_LINEUP(winid, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEUP, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), +#define EVT_COMMAND_SCROLL_LINEDOWN(winid, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEDOWN, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), +#define EVT_COMMAND_SCROLL_PAGEUP(winid, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEUP, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), +#define EVT_COMMAND_SCROLL_PAGEDOWN(winid, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEDOWN, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), +#define EVT_COMMAND_SCROLL_THUMBTRACK(winid, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBTRACK, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), +#define EVT_COMMAND_SCROLL_THUMBRELEASE(winid, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBRELEASE, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), +#define EVT_COMMAND_SCROLL_ENDSCROLL(winid, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_ENDSCROLL, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), // Convenience macros for commonly-used commands -#define EVT_BUTTON(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_BUTTON_CLICKED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), -#define EVT_CHECKBOX(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_CHECKBOX_CLICKED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), -#define EVT_CHOICE(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_CHOICE_SELECTED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), -#define EVT_LISTBOX(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LISTBOX_SELECTED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), -#define EVT_LISTBOX_DCLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), -#define EVT_MENU(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_MENU_SELECTED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_BUTTON(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_BUTTON_CLICKED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_CHECKBOX(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_CHECKBOX_CLICKED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_CHOICE(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_CHOICE_SELECTED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_LISTBOX(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LISTBOX_SELECTED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_LISTBOX_DCLICK(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_MENU(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_MENU_SELECTED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), #define EVT_MENU_RANGE(id1, id2, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_MENU_SELECTED, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), -#define EVT_SLIDER(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_SLIDER_UPDATED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), -#define EVT_RADIOBOX(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RADIOBOX_SELECTED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), -#define EVT_RADIOBUTTON(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RADIOBUTTON_SELECTED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_SLIDER(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_SLIDER_UPDATED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_RADIOBOX(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RADIOBOX_SELECTED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_RADIOBUTTON(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RADIOBUTTON_SELECTED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), // EVT_SCROLLBAR is now obsolete since we use EVT_COMMAND_SCROLL... events -#define EVT_SCROLLBAR(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_SCROLLBAR_UPDATED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), -#define EVT_VLBOX(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_VLBOX_SELECTED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), -#define EVT_COMBOBOX(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_COMBOBOX_SELECTED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), -#define EVT_TOOL(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TOOL_CLICKED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_SCROLLBAR(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_SCROLLBAR_UPDATED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_VLBOX(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_VLBOX_SELECTED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_COMBOBOX(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_COMBOBOX_SELECTED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_TOOL(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TOOL_CLICKED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), #define EVT_TOOL_RANGE(id1, id2, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TOOL_CLICKED, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), -#define EVT_TOOL_RCLICKED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TOOL_RCLICKED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_TOOL_RCLICKED(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TOOL_RCLICKED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), #define EVT_TOOL_RCLICKED_RANGE(id1, id2, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TOOL_RCLICKED, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), -#define EVT_TOOL_ENTER(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TOOL_ENTER, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), -#define EVT_CHECKLISTBOX(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_TOOL_ENTER(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TOOL_ENTER, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_CHECKLISTBOX(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), // Generic command events -#define EVT_COMMAND_LEFT_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LEFT_CLICK, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), -#define EVT_COMMAND_LEFT_DCLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LEFT_DCLICK, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), -#define EVT_COMMAND_RIGHT_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RIGHT_CLICK, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), -#define EVT_COMMAND_RIGHT_DCLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RIGHT_DCLICK, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), -#define EVT_COMMAND_SET_FOCUS(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_SET_FOCUS, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), -#define EVT_COMMAND_KILL_FOCUS(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_KILL_FOCUS, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), -#define EVT_COMMAND_ENTER(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_ENTER, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_COMMAND_LEFT_CLICK(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LEFT_CLICK, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_COMMAND_LEFT_DCLICK(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LEFT_DCLICK, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_COMMAND_RIGHT_CLICK(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RIGHT_CLICK, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_COMMAND_RIGHT_DCLICK(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RIGHT_DCLICK, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_COMMAND_SET_FOCUS(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_SET_FOCUS, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_COMMAND_KILL_FOCUS(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_KILL_FOCUS, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), +#define EVT_COMMAND_ENTER(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_ENTER, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), // Joystick events -#define EVT_JOY_DOWN(func) \ + +#define EVT_JOY_BUTTON_DOWN(func) \ DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_BUTTON_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ), -#define EVT_JOY_UP(func) \ +#define EVT_JOY_BUTTON_UP(func) \ DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_BUTTON_UP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ), #define EVT_JOY_MOVE(func) \ DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_MOVE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ), #define EVT_JOY_ZMOVE(func) \ DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_ZMOVE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ), +// These are obsolete, see _BUTTON_ events +#define EVT_JOY_DOWN(func) \ + DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_BUTTON_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ), +#define EVT_JOY_UP(func) \ + DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_BUTTON_UP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ), + // All joystick events #define EVT_JOYSTICK_EVENTS(func) \ DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_BUTTON_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ),\ @@ -2394,20 +2679,20 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC DECLARE_EVENT_TABLE_ENTRY( wxEVT_IDLE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxIdleEventFunction) & func, (wxObject *) NULL ), // Update UI event -#define EVT_UPDATE_UI(id, func) \ - DECLARE_EVENT_TABLE_ENTRY( wxEVT_UPDATE_UI, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxUpdateUIEventFunction) & func, (wxObject *) NULL ), +#define EVT_UPDATE_UI(winid, func) \ + DECLARE_EVENT_TABLE_ENTRY( wxEVT_UPDATE_UI, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxUpdateUIEventFunction) & func, (wxObject *) NULL ), #define EVT_UPDATE_UI_RANGE(id1, id2, func) \ DECLARE_EVENT_TABLE_ENTRY( wxEVT_UPDATE_UI, id1, id2, (wxObjectEventFunction)(wxEventFunction)(wxUpdateUIEventFunction)&func, (wxObject *) NULL ), // Help events -#define EVT_HELP(id, func) \ - DECLARE_EVENT_TABLE_ENTRY( wxEVT_HELP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxHelpEventFunction) & func, (wxObject *) NULL ), +#define EVT_HELP(winid, func) \ + DECLARE_EVENT_TABLE_ENTRY( wxEVT_HELP, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxHelpEventFunction) & func, (wxObject *) NULL ), #define EVT_HELP_RANGE(id1, id2, func) \ DECLARE_EVENT_TABLE_ENTRY( wxEVT_HELP, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxHelpEventFunction) & func, (wxObject *) NULL ), -#define EVT_DETAILED_HELP(id, func) \ - DECLARE_EVENT_TABLE_ENTRY( wxEVT_DETAILED_HELP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxHelpEventFunction) & func, (wxObject *) NULL ), +#define EVT_DETAILED_HELP(winid, func) \ + DECLARE_EVENT_TABLE_ENTRY( wxEVT_DETAILED_HELP, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxHelpEventFunction) & func, (wxObject *) NULL ), #define EVT_DETAILED_HELP_RANGE(id1, id2, func) \ DECLARE_EVENT_TABLE_ENTRY( wxEVT_DETAILED_HELP, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxHelpEventFunction) & func, (wxObject *) NULL ), @@ -2422,9 +2707,9 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC // for pending event processing - notice that there is intentionally no // WXDLLEXPORT here -extern wxList *wxPendingEvents; +extern WXDLLIMPEXP_BASE wxList *wxPendingEvents; #if wxUSE_THREADS - extern wxCriticalSection *wxPendingEventsLocker; + extern WXDLLIMPEXP_BASE wxCriticalSection *wxPendingEventsLocker; #endif // ---------------------------------------------------------------------------- @@ -2439,5 +2724,5 @@ wxWindow* wxFindFocusDescendant(wxWindow* ancestor); #endif // wxUSE_GUI -#endif - // _WX_EVENTH__ +#endif // _WX_EVENT_H__ +