X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c57e33394ca152e6e13f10363b76aef6e74a4705..4660d7e5d656bd63c6ba410e6bf36486e7a77d4e:/include/wx/event.h diff --git a/include/wx/event.h b/include/wx/event.h index 92f344d41c..760e675e55 100644 --- a/include/wx/event.h +++ b/include/wx/event.h @@ -18,6 +18,7 @@ #include "wx/defs.h" #include "wx/object.h" +#include "wx/clntdata.h" #if wxUSE_GUI #include "wx/gdicmn.h" @@ -33,7 +34,6 @@ class WXDLLEXPORT wxList; #if wxUSE_GUI - class WXDLLEXPORT wxClientData; class WXDLLEXPORT wxDC; class WXDLLEXPORT wxMenu; class WXDLLEXPORT wxWindow; @@ -76,6 +76,7 @@ typedef int wxEventType; #define DECLARE_EVENT_TYPE(name, value) name = wxEVT_FIRST + value, #define DECLARE_LOCAL_EVENT_TYPE(name, value) name = wxEVT_FIRST + value, #define DEFINE_EVENT_TYPE(name) +#define DEFINE_LOCAL_EVENT_TYPE(name) #else // !WXWIN_COMPATIBILITY_EVENT_TYPES @@ -89,6 +90,7 @@ typedef int wxEventType; extern const wxEventType WXDLLEXPORT name; #define DECLARE_LOCAL_EVENT_TYPE(name, value) extern const wxEventType name; #define DEFINE_EVENT_TYPE(name) const wxEventType name = wxNewEventType(); +#define DEFINE_LOCAL_EVENT_TYPE(name) const wxEventType name = wxNewEventType(); // generate a new unique event type extern WXDLLEXPORT wxEventType wxNewEventType(); @@ -115,10 +117,13 @@ BEGIN_DECLARE_EVENT_TYPES() DECLARE_EVENT_TYPE(wxEVT_COMMAND_LISTBOX_SELECTED, 4) DECLARE_EVENT_TYPE(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, 5) DECLARE_EVENT_TYPE(wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, 6) - /* now in wx/textctrl.h + // now they are in wx/textctrl.h +#if WXWIN_COMPATIBILITY_EVENT_TYPES DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_UPDATED, 7) DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_ENTER, 8) - */ + DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_URL, 13) + DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_MAXLEN, 14) +#endif // WXWIN_COMPATIBILITY_EVENT_TYPES DECLARE_EVENT_TYPE(wxEVT_COMMAND_MENU_SELECTED, 9) DECLARE_EVENT_TYPE(wxEVT_COMMAND_SLIDER_UPDATED, 10) DECLARE_EVENT_TYPE(wxEVT_COMMAND_RADIOBOX_SELECTED, 11) @@ -153,7 +158,8 @@ BEGIN_DECLARE_EVENT_TYPES() DECLARE_EVENT_TYPE(wxEVT_RIGHT_DCLICK, 111) DECLARE_EVENT_TYPE(wxEVT_SET_FOCUS, 112) DECLARE_EVENT_TYPE(wxEVT_KILL_FOCUS, 113) - DECLARE_EVENT_TYPE(wxEVT_MOUSEWHEEL, 114) + DECLARE_EVENT_TYPE(wxEVT_CHILD_FOCUS, 114) + DECLARE_EVENT_TYPE(wxEVT_MOUSEWHEEL, 115) // Non-client mouse events DECLARE_EVENT_TYPE(wxEVT_NC_LEFT_DOWN, 200) @@ -258,7 +264,17 @@ END_DECLARE_EVENT_TYPES() // these 2 events are the same #define wxEVT_COMMAND_TOOL_CLICKED wxEVT_COMMAND_MENU_SELECTED +// ---------------------------------------------------------------------------- // Compatibility +// ---------------------------------------------------------------------------- + +// this event is also used by wxComboBox and wxSpinCtrl which don't include +// wx/textctrl.h in all ports [yet], so declare it here as well +// +// 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; +#endif #if WXWIN_COMPATIBILITY @@ -766,7 +782,10 @@ public: bool AltDown() const { return m_altDown; } bool ShiftDown() const { return m_shiftDown; } - bool HasModifiers() const { return ControlDown() || AltDown() || MetaDown(); } + // exclude MetaDown() from HasModifiers() because NumLock under X is often + // configured as mod2 modifier, yet the key events even when it is pressed + // should be processed normally, not like Ctrl- or Alt-key + bool HasModifiers() const { return ControlDown() || AltDown(); } // get the key code: an ASCII7 char or an element of wxKeyCode enum int GetKeyCode() const { return (int)m_keyCode; } @@ -947,6 +966,18 @@ private: DECLARE_DYNAMIC_CLASS(wxFocusEvent) }; +// 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 +{ +public: + wxChildFocusEvent(wxWindow *win = NULL); + + wxWindow *GetWindow() const { return (wxWindow *)GetEventObject(); } + + DECLARE_DYNAMIC_CLASS(wxChildFocusEvent) +}; + // Activate event class /* wxEVT_ACTIVATE @@ -1487,8 +1518,6 @@ private: DECLARE_DYNAMIC_CLASS(wxContextMenuEvent) }; -#endif // wxUSE_GUI - // Idle event /* wxEVT_IDLE @@ -1511,6 +1540,8 @@ protected: bool m_requestMore; }; +#endif // wxUSE_GUI + /* TODO wxEVT_POWER, wxEVT_MOUSE_CAPTURE_CHANGED, @@ -1522,6 +1553,7 @@ protected: wxEVT_COMPARE_ITEM */ + // ============================================================================ // event handler and related classes // ============================================================================ @@ -1671,6 +1703,15 @@ public: wxObject *userData = (wxObject *) NULL ) { return Disconnect(id, -1, eventType, func, userData); } + + // User data can be associated with each wxEvtHandler + void SetClientObject( wxClientData *data ) { DoSetClientObject(data); } + wxClientData *GetClientObject() const { return DoGetClientObject(); } + + void SetClientData( void *data ) { DoSetClientData(data); } + void *GetClientData() const { return DoGetClientData(); } + + // implementation from now on virtual bool SearchEventTable(wxEventTable& table, wxEvent& event); bool SearchDynamicEventTable( wxEvent& event ); @@ -1731,6 +1772,29 @@ protected: // Is event handler enabled? bool m_enabled; + + // The user data: either an object which will be deleted by the container + // when it's deleted or some raw pointer which we do nothing with - only + // one type of data can be used with the given window (i.e. you cannot set + // the void data and then associate the container with wxClientData or vice + // versa) + union + { + wxClientData *m_clientObject; + void *m_clientData; + }; + + // what kind of data do we have? + wxClientDataType m_clientDataType; + + // client data accessors + virtual void DoSetClientObject( wxClientData *data ); + virtual wxClientData *DoGetClientObject() const; + + virtual void DoSetClientData( void *data ); + virtual void *DoGetClientData() const; + + private: DECLARE_DYNAMIC_CLASS(wxEvtHandler) }; @@ -1747,6 +1811,7 @@ typedef void (wxEvtHandler::*wxEraseEventFunction)(wxEraseEvent&); typedef void (wxEvtHandler::*wxMouseEventFunction)(wxMouseEvent&); typedef void (wxEvtHandler::*wxCharEventFunction)(wxKeyEvent&); typedef void (wxEvtHandler::*wxFocusEventFunction)(wxFocusEvent&); +typedef void (wxEvtHandler::*wxChildFocusEventFunction)(wxChildFocusEvent&); typedef void (wxEvtHandler::*wxActivateEventFunction)(wxActivateEvent&); typedef void (wxEvtHandler::*wxMenuEventFunction)(wxMenuEvent&); typedef void (wxEvtHandler::*wxJoystickEventFunction)(wxJoystickEvent&); @@ -1814,6 +1879,7 @@ typedef void (wxEvtHandler::*wxContextMenuEventFunction)(wxContextMenuEvent&); #define EVT_MENU_HIGHLIGHT_ALL(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MENU_HIGHLIGHT, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMenuEventFunction) & func, (wxObject *) NULL ), #define EVT_SET_FOCUS(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SET_FOCUS, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxFocusEventFunction) & func, (wxObject *) NULL ), #define EVT_KILL_FOCUS(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_KILL_FOCUS, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxFocusEventFunction) & func, (wxObject *) NULL ), +#define EVT_CHILD_FOCUS(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_CHILD_FOCUS, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxChildFocusEventFunction) & func, (wxObject *) NULL ), #define EVT_ACTIVATE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_ACTIVATE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxActivateEventFunction) & func, (wxObject *) NULL ), #define EVT_ACTIVATE_APP(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_ACTIVATE_APP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxActivateEventFunction) & func, (wxObject *) NULL ), #define EVT_END_SESSION(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_END_SESSION, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxCloseEventFunction) & func, (wxObject *) NULL ),