X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b5a98acdf25b3d2eae7858d30ac29f629d589703..3684ade82ec6f5fb7ff72341e26060b6ea0793c8:/include/wx/event.h diff --git a/include/wx/event.h b/include/wx/event.h index a6850785f4..9f328e6c51 100644 --- a/include/wx/event.h +++ b/include/wx/event.h @@ -9,10 +9,17 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifndef _WX_EVENTH__ -#define _WX_EVENTH__ - -#if defined(__GNUG__) && !defined(__APPLE__) +#ifndef _WX_EVENT_H__ +#define _WX_EVENT_H__ + +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) && !defined(__EMX__) +// Some older compilers (such as EMX) cannot handle +// #pragma interface/implementation correctly, iff +// #pragma implementation is used in _two_ translation +// units (as created by e.g. event.cpp compiled for +// libwx_base and event.cpp compiled for libwx_gui_core). +// So we must not use those pragmas for those compilers in +// such files. #pragma interface "event.h" #endif @@ -39,6 +46,7 @@ class WXDLLIMPEXP_BASE wxList; class WXDLLIMPEXP_CORE wxDC; class WXDLLIMPEXP_CORE wxMenu; class WXDLLIMPEXP_CORE wxWindow; + class WXDLLIMPEXP_CORE wxWindowBase; #endif // wxUSE_GUI // ---------------------------------------------------------------------------- @@ -291,49 +299,16 @@ END_DECLARE_EVENT_TYPES() extern const wxEventType WXDLLIMPEXP_CORE wxEVT_COMMAND_TEXT_UPDATED; #endif -#if WXWIN_COMPATIBILITY - -#define wxEVENT_TYPE_BUTTON_COMMAND wxEVT_COMMAND_BUTTON_CLICKED -#define wxEVENT_TYPE_CHECKBOX_COMMAND wxEVT_COMMAND_CHECKBOX_CLICKED -#define wxEVENT_TYPE_CHOICE_COMMAND wxEVT_COMMAND_CHOICE_SELECTED -#define wxEVENT_TYPE_LISTBOX_COMMAND wxEVT_COMMAND_LISTBOX_SELECTED -#define wxEVENT_TYPE_LISTBOX_DCLICK_COMMAND wxEVT_COMMAND_LISTBOX_DOUBLECLICKED -#define wxEVENT_TYPE_TEXT_COMMAND wxEVT_COMMAND_TEXT_UPDATED -#define wxEVENT_TYPE_MULTITEXT_COMMAND wxEVT_COMMAND_TEXT_UPDATED -#define wxEVENT_TYPE_MENU_COMMAND wxEVT_COMMAND_MENU_SELECTED -#define wxEVENT_TYPE_SLIDER_COMMAND wxEVT_COMMAND_SLIDER_UPDATED -#define wxEVENT_TYPE_RADIOBOX_COMMAND wxEVT_COMMAND_RADIOBOX_SELECTED -#define wxEVENT_TYPE_RADIOBUTTON_COMMAND wxEVT_COMMAND_RADIOBUTTON_SELECTED -#define wxEVENT_TYPE_TEXT_ENTER_COMMAND wxEVT_COMMAND_TEXT_ENTER -#define wxEVENT_TYPE_SET_FOCUS wxEVT_SET_FOCUS -#define wxEVENT_TYPE_KILL_FOCUS wxEVT_KILL_FOCUS -#define wxEVENT_TYPE_SCROLLBAR_COMMAND wxEVT_COMMAND_SCROLLBAR_UPDATED -#define wxEVENT_TYPE_VIRT_LISTBOX_COMMAND wxEVT_COMMAND_VLBOX_SELECTED -#define wxEVENT_TYPE_COMBOBOX_COMMAND wxEVT_COMMAND_COMBOBOX_SELECTED - -#define wxEVENT_TYPE_LEFT_DOWN wxEVT_LEFT_DOWN -#define wxEVENT_TYPE_LEFT_UP wxEVT_LEFT_UP -#define wxEVENT_TYPE_MIDDLE_DOWN wxEVT_MIDDLE_DOWN -#define wxEVENT_TYPE_MIDDLE_UP wxEVT_MIDDLE_UP -#define wxEVENT_TYPE_RIGHT_DOWN wxEVT_RIGHT_DOWN -#define wxEVENT_TYPE_RIGHT_UP wxEVT_RIGHT_UP -#define wxEVENT_TYPE_MOTION wxEVT_MOTION -#define wxEVENT_TYPE_ENTER_WINDOW wxEVT_ENTER_WINDOW -#define wxEVENT_TYPE_LEAVE_WINDOW wxEVT_LEAVE_WINDOW -#define wxEVENT_TYPE_LEFT_DCLICK wxEVT_LEFT_DCLICK -#define wxEVENT_TYPE_MIDDLE_DCLICK wxEVT_MIDDLE_DCLICK -#define wxEVENT_TYPE_RIGHT_DCLICK wxEVT_RIGHT_DCLICK -#define wxEVENT_TYPE_CHAR wxEVT_CHAR -#define wxEVENT_TYPE_SCROLL_TOP wxEVT_SCROLL_TOP -#define wxEVENT_TYPE_SCROLL_BOTTOM wxEVT_SCROLL_BOTTOM -#define wxEVENT_TYPE_SCROLL_LINEUP wxEVT_SCROLL_LINEUP -#define wxEVENT_TYPE_SCROLL_LINEDOWN wxEVT_SCROLL_LINEDOWN -#define wxEVENT_TYPE_SCROLL_PAGEUP wxEVT_SCROLL_PAGEUP -#define wxEVENT_TYPE_SCROLL_PAGEDOWN wxEVT_SCROLL_PAGEDOWN -#define wxEVENT_TYPE_SCROLL_THUMBTRACK wxEVT_SCROLL_THUMBTRACK -#define wxEVENT_TYPE_SCROLL_ENDSCROLL wxEVT_SCROLL_ENDSCROLL - -#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 @@ -374,30 +349,112 @@ 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; + + DECLARE_NO_COPY_CLASS(wxPropagationDisabler) +}; + +/* + * 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; + + DECLARE_NO_COPY_CLASS(wxPropagateOnce) +}; + #if wxUSE_GUI + // Item or menu event class /* wxEVT_COMMAND_BUTTON_CLICKED @@ -419,9 +476,6 @@ private: class WXDLLIMPEXP_CORE wxCommandEvent : public wxEvent { -private: - wxCommandEvent& operator=(const wxCommandEvent& event); - public: wxCommandEvent(wxEventType commandType = wxEVT_NULL, int winid = 0); @@ -456,17 +510,13 @@ public: bool IsSelection() const { return (m_extraLong != 0); } void SetExtraLong(long extraLong) { m_extraLong = extraLong; } - long GetExtraLong() const { return m_extraLong ; } + long GetExtraLong() const { return m_extraLong; } void SetInt(int i) { m_commandInt = i; } - long GetInt() const { return m_commandInt ; } + long GetInt() const { return m_commandInt; } virtual wxEvent *Clone() const { return new wxCommandEvent(*this); } -#if WXWIN_COMPATIBILITY_2 - bool Checked() const { return IsChecked(); } -#endif // WXWIN_COMPATIBILITY_2 - public: wxString m_commandString; // String event argument int m_commandInt; @@ -475,7 +525,7 @@ public: wxClientData* m_clientObject; // Arbitrary client object private: - DECLARE_DYNAMIC_CLASS(wxCommandEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxCommandEvent) }; // this class adds a possibility to react (from the user) code to a control @@ -506,7 +556,7 @@ private: bool m_bAllow; private: - DECLARE_DYNAMIC_CLASS(wxNotifyEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxNotifyEvent) }; // Scroll event class, derived form wxCommandEvent. wxScrollEvents are @@ -529,15 +579,15 @@ public: wxScrollEvent(wxEventType commandType = wxEVT_NULL, int winid = 0, int pos = 0, int orient = 0); - int GetOrientation() const { return (int) m_extraLong ; } - int GetPosition() const { return m_commandInt ; } + int GetOrientation() const { return (int) m_extraLong; } + int GetPosition() const { return m_commandInt; } void SetOrientation(int orient) { m_extraLong = (long) orient; } void SetPosition(int pos) { m_commandInt = pos; } virtual wxEvent *Clone() const { return new wxScrollEvent(*this); } private: - DECLARE_DYNAMIC_CLASS(wxScrollEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxScrollEvent) }; // ScrollWin event class, derived fom wxEvent. wxScrollWinEvents @@ -562,8 +612,8 @@ public: { m_commandInt = event.m_commandInt; m_extraLong = event.m_extraLong; } - int GetOrientation() const { return (int) m_extraLong ; } - int GetPosition() const { return m_commandInt ; } + int GetOrientation() const { return (int) m_extraLong; } + int GetPosition() const { return m_commandInt; } void SetOrientation(int orient) { m_extraLong = (long) orient; } void SetPosition(int pos) { m_commandInt = pos; } @@ -574,7 +624,7 @@ public: long m_extraLong; private: - DECLARE_DYNAMIC_CLASS(wxScrollWinEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxScrollWinEvent) }; // Mouse event class @@ -708,23 +758,7 @@ public: wxPoint GetPosition() const { return wxPoint(m_x, m_y); } // Find the logical position of the event given the DC - wxPoint GetLogicalPosition(const wxDC& dc) const ; - - // Compatibility -#if WXWIN_COMPATIBILITY - void Position(long *xpos, long *ypos) const - { - if (xpos) - *xpos = (long)m_x; - if (ypos) - *ypos = (long)m_y; - } - - void Position(float *xpos, float *ypos) const - { - *xpos = (float) m_x; *ypos = (float) m_y; - } -#endif // WXWIN_COMPATIBILITY + wxPoint GetLogicalPosition(const wxDC& dc) const; // Get X position wxCoord GetX() const { return m_x; } @@ -815,7 +849,7 @@ private: wxCursor m_cursor; private: - DECLARE_DYNAMIC_CLASS(wxSetCursorEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxSetCursorEvent) }; // Keyboard input event class @@ -962,7 +996,7 @@ public: wxRect m_rect; // Used for wxEVT_SIZING private: - DECLARE_DYNAMIC_CLASS(wxSizeEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxSizeEvent) }; // Move event class @@ -999,7 +1033,7 @@ public: wxRect m_rect; private: - DECLARE_DYNAMIC_CLASS(wxMoveEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxMoveEvent) }; // Paint event class @@ -1036,7 +1070,7 @@ public: virtual wxEvent *Clone() const { return new wxPaintEvent(*this); } private: - DECLARE_DYNAMIC_CLASS(wxPaintEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxPaintEvent) }; class WXDLLIMPEXP_CORE wxNcPaintEvent : public wxEvent @@ -1049,7 +1083,7 @@ public: virtual wxEvent *Clone() const { return new wxNcPaintEvent(*this); } private: - DECLARE_DYNAMIC_CLASS(wxNcPaintEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxNcPaintEvent) }; // Erase background event class @@ -1059,9 +1093,6 @@ private: class WXDLLIMPEXP_CORE wxEraseEvent : public wxEvent { -private: - wxEraseEvent& operator=(const wxEraseEvent& event); - public: wxEraseEvent(int Id = 0, wxDC *dc = (wxDC *) NULL) : wxEvent(Id, wxEVT_ERASE_BACKGROUND), @@ -1080,7 +1111,7 @@ public: wxDC *m_dc; private: - DECLARE_DYNAMIC_CLASS(wxEraseEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxEraseEvent) }; // Focus event class @@ -1091,9 +1122,6 @@ private: class WXDLLIMPEXP_CORE wxFocusEvent : public wxEvent { -private: - wxFocusEvent& operator=(const wxFocusEvent& event); - public: wxFocusEvent(wxEventType type = wxEVT_NULL, int winid = 0) : wxEvent(winid, type) @@ -1115,11 +1143,11 @@ private: wxWindow *m_win; private: - DECLARE_DYNAMIC_CLASS(wxFocusEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxFocusEvent) }; // wxChildFocusEvent notifies the parent that a child has got the focus: unlike -// wxFocusEvent it is propgated upwards the window chain +// wxFocusEvent it is propagated upwards the window chain class WXDLLIMPEXP_CORE wxChildFocusEvent : public wxCommandEvent { public: @@ -1130,7 +1158,7 @@ public: virtual wxEvent *Clone() const { return new wxChildFocusEvent(*this); } private: - DECLARE_DYNAMIC_CLASS(wxChildFocusEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxChildFocusEvent) }; // Activate event class @@ -1157,7 +1185,7 @@ private: bool m_active; private: - DECLARE_DYNAMIC_CLASS(wxActivateEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxActivateEvent) }; // InitDialog event class @@ -1175,7 +1203,7 @@ public: virtual wxEvent *Clone() const { return new wxInitDialogEvent(*this); } private: - DECLARE_DYNAMIC_CLASS(wxInitDialogEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxInitDialogEvent) }; // Miscellaneous menu event class @@ -1190,7 +1218,7 @@ class WXDLLIMPEXP_CORE wxMenuEvent : public wxEvent public: wxMenuEvent(wxEventType type = wxEVT_NULL, int winid = 0, wxMenu* menu = NULL) : wxEvent(winid, type) - { m_menuId = winid; m_menu = NULL; } + { m_menuId = winid; m_menu = menu; } wxMenuEvent(const wxMenuEvent & event) : wxEvent(event) { m_menuId = event.m_menuId; m_menu = event.m_menu; } @@ -1210,7 +1238,7 @@ private: int m_menuId; wxMenu* m_menu; - DECLARE_DYNAMIC_CLASS(wxMenuEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxMenuEvent) }; // Window close or session close event class @@ -1227,22 +1255,13 @@ public: : wxEvent(winid, type), m_loggingOff(TRUE), m_veto(FALSE), // should be FALSE by default - m_canVeto(TRUE) - { -#if WXWIN_COMPATIBILITY - m_force = FALSE; -#endif // WXWIN_COMPATIBILITY - } + m_canVeto(TRUE) {} + wxCloseEvent(const wxCloseEvent & event) : wxEvent(event), 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 - } + m_canVeto(event.m_canVeto) {} void SetLoggingOff(bool logOff) { m_loggingOff = logOff; } bool GetLoggingOff() const { return m_loggingOff; } @@ -1260,26 +1279,14 @@ public: bool CanVeto() const { return m_canVeto; } bool GetVeto() const { return m_canVeto && m_veto; } -#if WXWIN_COMPATIBILITY - // This is probably obsolete now, since we use CanVeto instead, in - // both OnCloseWindow and OnQueryEndSession. - // m_force == ! m_canVeto i.e., can't veto means we must force it to close. - void SetForce(bool force) { m_force = force; } - bool GetForce() const { return m_force; } -#endif - virtual wxEvent *Clone() const { return new wxCloseEvent(*this); } protected: bool m_loggingOff; bool m_veto, m_canVeto; -#if WXWIN_COMPATIBILITY - bool m_force; -#endif - private: - DECLARE_DYNAMIC_CLASS(wxCloseEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxCloseEvent) }; @@ -1306,7 +1313,7 @@ protected: bool m_show; private: - DECLARE_DYNAMIC_CLASS(wxShowEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxShowEvent) }; /* @@ -1332,7 +1339,7 @@ protected: bool m_iconized; private: - DECLARE_DYNAMIC_CLASS(wxIconizeEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxIconizeEvent) }; /* wxEVT_MAXIMIZE @@ -1348,7 +1355,7 @@ public: virtual wxEvent *Clone() const { return new wxMaximizeEvent(*this); } private: - DECLARE_DYNAMIC_CLASS(wxMaximizeEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxMaximizeEvent) }; // Joystick event class @@ -1423,10 +1430,10 @@ public: (GetEventType() == wxEVT_JOY_BUTTON_UP)); } // Was it a move event? - bool IsMove() const { return (GetEventType() == wxEVT_JOY_MOVE) ; } + bool IsMove() const { return (GetEventType() == wxEVT_JOY_MOVE); } // Was it a zmove event? - bool IsZMove() const { return (GetEventType() == wxEVT_JOY_ZMOVE) ; } + bool IsZMove() const { return (GetEventType() == wxEVT_JOY_ZMOVE); } // Was it a down event from button 1, 2, 3, 4 or any? bool ButtonDown(int but = wxJOY_BUTTON_ANY) const @@ -1446,7 +1453,7 @@ public: virtual wxEvent *Clone() const { return new wxJoystickEvent(*this); } private: - DECLARE_DYNAMIC_CLASS(wxJoystickEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxJoystickEvent) }; // Drop files event class @@ -1456,9 +1463,6 @@ private: class WXDLLIMPEXP_CORE wxDropFilesEvent : public wxEvent { -private: - wxDropFilesEvent& operator=(const wxDropFilesEvent& event); - public: int m_noFiles; wxPoint m_pos; @@ -1499,7 +1503,7 @@ public: virtual wxEvent *Clone() const { return new wxDropFilesEvent(*this); } private: - DECLARE_DYNAMIC_CLASS(wxDropFilesEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxDropFilesEvent) }; // Update UI event @@ -1559,14 +1563,14 @@ public: static void SetUpdateInterval(long updateInterval) { sm_updateInterval = updateInterval; } // Returns the current interval between updates in milliseconds - static long GetUpdateInterval() { return sm_updateInterval ; } + static long GetUpdateInterval() { return sm_updateInterval; } // Can we update this window? - static bool CanUpdate(wxWindow* win) ; + static bool CanUpdate(wxWindowBase *win); // Reset the update time to provide a delay until the next // time we should update - static void ResetUpdateTime() ; + static void ResetUpdateTime(); // Specify how wxWindows will send update events: to // all windows, or only to those which specify that they @@ -1574,7 +1578,7 @@ public: static void SetMode(wxUpdateUIMode mode) { sm_updateMode = mode; } // Returns the UI update mode - static wxUpdateUIMode GetMode() { return sm_updateMode ; } + static wxUpdateUIMode GetMode() { return sm_updateMode; } virtual wxEvent *Clone() const { return new wxUpdateUIEvent(*this); } @@ -1592,7 +1596,7 @@ protected: static wxUpdateUIMode sm_updateMode; private: - DECLARE_DYNAMIC_CLASS(wxUpdateUIEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxUpdateUIEvent) }; /* @@ -1610,7 +1614,7 @@ public: virtual wxEvent *Clone() const { return new wxSysColourChangedEvent(*this); } private: - DECLARE_DYNAMIC_CLASS(wxSysColourChangedEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxSysColourChangedEvent) }; /* @@ -1621,9 +1625,6 @@ private: class WXDLLIMPEXP_CORE wxMouseCaptureChangedEvent : public wxEvent { -private: - wxMouseCaptureChangedEvent operator=(const wxMouseCaptureChangedEvent& event); - public: wxMouseCaptureChangedEvent(wxWindowID winid = 0, wxWindow* gainedCapture = NULL) : wxEvent(winid, wxEVT_MOUSE_CAPTURE_CHANGED), @@ -1641,7 +1642,8 @@ public: private: wxWindow* m_gainedCapture; - DECLARE_DYNAMIC_CLASS(wxMouseCaptureChangedEvent) + + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxMouseCaptureChangedEvent) }; /* @@ -1650,7 +1652,7 @@ private: class WXDLLIMPEXP_CORE wxDisplayChangedEvent : public wxEvent { private: - DECLARE_DYNAMIC_CLASS(wxDisplayChangedEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxDisplayChangedEvent) public: wxDisplayChangedEvent() @@ -1666,9 +1668,6 @@ public: class WXDLLIMPEXP_CORE wxPaletteChangedEvent : public wxEvent { -private: - wxPaletteChangedEvent& operator=(const wxPaletteChangedEvent& event); - public: wxPaletteChangedEvent(wxWindowID winid = 0) : wxEvent(winid, wxEVT_PALETTE_CHANGED), @@ -1689,7 +1688,7 @@ protected: wxWindow* m_changedWindow; private: - DECLARE_DYNAMIC_CLASS(wxPaletteChangedEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxPaletteChangedEvent) }; /* @@ -1719,7 +1718,7 @@ protected: bool m_paletteRealized; private: - DECLARE_DYNAMIC_CLASS(wxQueryNewPaletteEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxQueryNewPaletteEvent) }; /* @@ -1729,9 +1728,6 @@ private: // NB: don't derive from command event to avoid being propagated to the parent class WXDLLIMPEXP_CORE wxNavigationKeyEvent : public wxEvent { -private: - wxNavigationKeyEvent& operator=(const wxNavigationKeyEvent& event); - public: wxNavigationKeyEvent() : wxEvent(0, wxEVT_NAVIGATION_KEY), @@ -1785,7 +1781,7 @@ private: wxWindow *m_focus; private: - DECLARE_DYNAMIC_CLASS(wxNavigationKeyEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxNavigationKeyEvent) }; // Window creation/destruction events: the first is sent as soon as window is @@ -1808,7 +1804,7 @@ public: virtual wxEvent *Clone() const { return new wxWindowCreateEvent(*this); } private: - DECLARE_DYNAMIC_CLASS(wxWindowCreateEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxWindowCreateEvent) }; class WXDLLIMPEXP_CORE wxWindowDestroyEvent : public wxCommandEvent @@ -1821,7 +1817,7 @@ public: virtual wxEvent *Clone() const { return new wxWindowDestroyEvent(*this); } private: - DECLARE_DYNAMIC_CLASS(wxWindowDestroyEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxWindowDestroyEvent) }; // A help event is sent when the user clicks on a window in context-help mode. @@ -1866,7 +1862,7 @@ protected: wxString m_link; private: - DECLARE_DYNAMIC_CLASS(wxHelpEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxHelpEvent) }; // A Context event is sent when the user right clicks on a window or @@ -1901,7 +1897,7 @@ protected: wxPoint m_pos; private: - DECLARE_DYNAMIC_CLASS(wxContextMenuEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxContextMenuEvent) }; // Idle event @@ -1946,17 +1942,17 @@ public: static void SetMode(wxIdleMode mode) { sm_idleMode = mode; } // Returns the idle event mode - static wxIdleMode GetMode() { return sm_idleMode ; } + static wxIdleMode GetMode() { return sm_idleMode; } // Can we send an idle event? - static bool CanSend(wxWindow* win) ; + static bool CanSend(wxWindow* win); protected: bool m_requestMore; static wxIdleMode sm_idleMode; private: - DECLARE_DYNAMIC_CLASS(wxIdleEvent) + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxIdleEvent) }; #endif // wxUSE_GUI @@ -2049,6 +2045,9 @@ struct WXDLLIMPEXP_BASE wxEventTableEntry : public wxEventTableEntryBase // objects will have been initialized (including the event type constants) // and so it will have the correct value when it is needed const int& m_eventType; + +private: + wxEventTableEntry& operator=(const wxEventTableEntry&); }; class WXDLLIMPEXP_BASE wxEvtHandler; @@ -2069,9 +2068,11 @@ struct WXDLLIMPEXP_BASE wxDynamicEventTableEntry : public wxEventTableEntryBase 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 + // EventFunction is always a member of the EventHandler receiving the // message wxEvtHandler* m_eventSink; + + DECLARE_NO_COPY_CLASS(wxDynamicEventTableEntry) }; #endif // !WXWIN_COMPATIBILITY_EVENT_TYPES @@ -2090,7 +2091,7 @@ struct WXDLLIMPEXP_BASE wxEventTable // wxEventHashTable: a helper of wxEvtHandler to speed up wxEventTable lookups. // ---------------------------------------------------------------------------- -WX_DEFINE_ARRAY(const wxEventTableEntry*, wxEventTableEntryPointerArray); +WX_DEFINE_ARRAY_NO_PTR(const wxEventTableEntry*, wxEventTableEntryPointerArray); class WXDLLIMPEXP_BASE wxEvtHandler; class WXDLLIMPEXP_BASE wxEventHashTable @@ -2106,14 +2107,14 @@ private: 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 + // 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 + // 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); @@ -2124,7 +2125,7 @@ protected: 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 + // Grow the hash table in size and transfer all items currently // in the table to the correct location in the new table. void GrowEventTypeTable(); @@ -2134,6 +2135,8 @@ protected: size_t m_size; EventTypeTablePointer *m_eventTypeTable; + + DECLARE_NO_COPY_CLASS(wxEventHashTable) }; // ---------------------------------------------------------------------------- @@ -2194,6 +2197,7 @@ public: wxEvtHandler *eventSink = (wxEvtHandler *) NULL ) { return Disconnect(winid, wxID_ANY, eventType, func, userData, eventSink); } + wxList* GetDynamicEventTable() const { return m_dynamicEvents ; } // User data can be associated with each wxEvtHandler void SetClientObject( wxClientData *data ) { DoSetClientObject(data); } @@ -2202,38 +2206,22 @@ public: void SetClientData( void *data ) { DoSetClientData(data); } void *GetClientData() const { return DoGetClientData(); } + // check if the given event table entry matches this event and call the + // handler if it does + // + // return true if the event was processed, false otherwise (no match or the + // handler decided to skip the event) + static bool ProcessEventIfMatches(const wxEventTableEntryBase& tableEntry, + wxEvtHandler *handler, + wxEvent& event); // implementation from now on virtual bool SearchEventTable(wxEventTable& table, wxEvent& event); bool SearchDynamicEventTable( wxEvent& event ); #if wxUSE_THREADS - void ClearEventLocker() - { -# if !defined(__VISAGECPP__) - delete m_eventsLocker; - m_eventsLocker = NULL; -#endif - }; -#endif - - // old stuff - -#if WXWIN_COMPATIBILITY_2 - virtual void OnCommand(wxWindow& WXUNUSED(win), - wxCommandEvent& WXUNUSED(event)) - { - wxFAIL_MSG(wxT("shouldn't be called any more")); - } - - // Called if child control has no callback function - virtual long Default() - { return GetNextHandler() ? GetNextHandler()->Default() : 0; }; -#endif // WXWIN_COMPATIBILITY_2 - -#if WXWIN_COMPATIBILITY - virtual bool OnClose(); -#endif + void ClearEventLocker(); +#endif // wxUSE_THREADS private: static const wxEventTableEntry sm_eventTableEntries[]; @@ -2242,11 +2230,15 @@ protected: // 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 + // This one is called before trying our own event table to allow plugging + // in the validators. + // + // NB: This method is intentionally *not* inside wxUSE_VALIDATORS! + // It is part of wxBase which doesn't use validators and the code + // is compiled out when building wxBase w/o GUI classes, which affects + // binary compatiblity and wxBase library can't be used by GUI + // ports. 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 @@ -2255,7 +2247,7 @@ protected: virtual bool TryParent(wxEvent& event); - static const wxEventTable sm_eventTable; + static const wxEventTable sm_eventTable; virtual const wxEventTable *GetEventTable() const; static wxEventHashTable sm_eventHashTable; @@ -2300,8 +2292,7 @@ protected: virtual void *DoGetClientData() const; private: - DECLARE_NO_COPY_CLASS(wxEvtHandler) - DECLARE_DYNAMIC_CLASS(wxEvtHandler) + DECLARE_DYNAMIC_CLASS_NO_COPY(wxEvtHandler) }; // Post a message to the given eventhandler which will be processed during the @@ -2635,5 +2626,5 @@ wxWindow* wxFindFocusDescendant(wxWindow* ancestor); #endif // wxUSE_GUI -#endif - // _WX_EVENTH__ +#endif // _WX_EVENT_H__ +