X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7309deeafcab43d8e9fc1b8a8901d9ad79d3b251..981a6271009dbf06a78440f70ffb433a4e9bcedb:/include/wx/event.h diff --git a/include/wx/event.h b/include/wx/event.h index 17d67521a9..5ce6242d57 100644 --- a/include/wx/event.h +++ b/include/wx/event.h @@ -5,7 +5,7 @@ // Modified by: // Created: 01/02/97 // RCS-ID: $Id$ -// Copyright: (c) wxWindows team +// Copyright: (c) wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -57,23 +57,19 @@ typedef int wxEventType; // this is used to make the event table entry type safe, so that for an event // handler only a function with proper parameter list can be given. -#ifdef HAVE_STATIC_CAST - #define wxStaticCastEvent(type, val) static_cast(val) -#else - #define wxStaticCastEvent(type, val) ((type)(val)) -#endif +#define wxStaticCastEvent(type, val) wx_static_cast(type, val) -// in previous versions of wxWindows the event types used to be constants +// in previous versions of wxWidgets the event types used to be constants // which created difficulties with custom/user event types definition // -// starting from wxWindows 2.4 the event types are now dynamically assigned +// starting from wxWidgets 2.4 the event types are now dynamically assigned // using wxNewEventType() which solves this problem, however at price of // several incompatibilities: // // a) event table macros declaration changed, it now uses wxEventTableEntry // ctor instead of initialisation from an agregate - the macro // DECLARE_EVENT_TABLE_ENTRY may be used to write code which can compile -// with all versions of wxWindows +// with all versions of wxWidgets // // b) event types can't be used as switch() cases as they're not really // constant any more - there is no magic solution here, you just have to @@ -274,7 +270,7 @@ BEGIN_DECLARE_EVENT_TYPES() DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_IDLE, 439) DECLARE_EVENT_TYPE(wxEVT_UPDATE_UI, 440) DECLARE_EVENT_TYPE(wxEVT_SIZING, 441) - DECLARE_EVENT_TYPE(wxEVT_MOVING, 4442) + DECLARE_EVENT_TYPE(wxEVT_MOVING, 442) // Generic command events // Note: a click is a higher-level event than button down/up @@ -319,7 +315,7 @@ enum Propagation_state }; /* - * wxWindows events, covering all interesting things that might happen + * wxWidgets events, covering all interesting things that might happen * (button clicking, resizing, setting text in widgets, etc.). * * For each completely new event type, derive a new event class. @@ -362,7 +358,7 @@ public: // for them wouldn't work (it needs to do a copy of the event) virtual wxEvent *Clone() const = 0; - // Implementation only: this test is explicitlty anti OO and this functions + // Implementation only: this test is explicitly anti OO and this function // exists only for optimization purposes. bool IsCommandEvent() const { return m_isCommandEvent; } @@ -502,7 +498,7 @@ public: // Set/Get client object from controls void SetClientObject(wxClientData* clientObject) { m_clientObject = clientObject; } - void *GetClientObject() const { return m_clientObject; } + wxClientData *GetClientObject() const { return m_clientObject; } // Get listbox selection if single-choice int GetSelection() const { return m_commandInt; } @@ -707,6 +703,14 @@ public: bool MetaDown() const { return m_metaDown; } bool AltDown() const { return m_altDown; } bool ShiftDown() const { return m_shiftDown; } + bool CmdDown() const + { +#if defined(__WXMAC__) || defined(__WXCOCOA__) + return MetaDown(); +#else + return ControlDown(); +#endif + } // Find which event was just generated bool LeftDown() const { return (m_eventType == wxEVT_LEFT_DOWN); } @@ -754,7 +758,6 @@ public: *ypos = m_y; } -#ifndef __WIN16__ void GetPosition(long *xpos, long *ypos) const { if (xpos) @@ -762,7 +765,6 @@ public: if (ypos) *ypos = (long)m_y; } -#endif // Find the position of the event wxPoint GetPosition() const { return wxPoint(m_x, m_y); } @@ -884,6 +886,20 @@ public: bool AltDown() const { return m_altDown; } bool ShiftDown() const { return m_shiftDown; } + // "Cmd" is a pseudo key which is Control for PC and Unix platforms but + // Apple ("Command") key under Macs: it makes often sense to use it instead + // of, say, ControlDown() because Cmd key is used for the same thing under + // Mac as Ctrl elsewhere (but Ctrl still exists, just not used for this + // purpose under Mac) + bool CmdDown() const + { +#if defined(__WXMAC__) || defined(__WXCOCOA__) + return MetaDown(); +#else + return ControlDown(); +#endif + } + // exclude MetaDown() from HasModifiers() because NumLock under X is often // configured as mod2 modifier, yet the key events even when it is pressed // should be processed normally, not like Ctrl- or Alt-key @@ -892,6 +908,11 @@ public: // get the key code: an ASCII7 char or an element of wxKeyCode enum int GetKeyCode() const { return (int)m_keyCode; } +#if wxUSE_UNICODE + // get the Unicode character corresponding to this key + wxChar GetUnicodeKey() const { return m_uniChar; } +#endif // wxUSE_UNICODE + // get the raw key code (platform-dependent) wxUint32 GetRawKeyCode() const { return m_rawCode; } @@ -905,13 +926,11 @@ public: if (ypos) *ypos = m_y; } -#ifndef __WIN16__ void GetPosition(long *xpos, long *ypos) const { if (xpos) *xpos = (long)m_x; if (ypos) *ypos = (long)m_y; } -#endif wxPoint GetPosition() const { return wxPoint(m_x, m_y); } @@ -1582,7 +1601,7 @@ public: // time we should update static void ResetUpdateTime(); - // Specify how wxWindows will send update events: to + // Specify how wxWidgets will send update events: to // all windows, or only to those which specify that they // will process the events. static void SetMode(wxUpdateUIMode mode) { sm_updateMode = mode; } @@ -1771,11 +1790,14 @@ public: wxWindow* GetCurrentFocus() const { return m_focus; } void SetCurrentFocus(wxWindow *win) { m_focus = win; } + // Set flags + void SetFlags(long flags) { m_flags = flags; } + virtual wxEvent *Clone() const { return new wxNavigationKeyEvent(*this); } -private: enum { + IsBackward = 0x0000, IsForward = 0x0001, WinChange = 0x0002 }; @@ -1939,7 +1961,7 @@ public: virtual wxEvent *Clone() const { return new wxIdleEvent(*this); } - // Specify how wxWindows will send idle events: to + // Specify how wxWidgets will send idle events: to // all windows, or only to those which specify that they // will process the events. static void SetMode(wxIdleMode mode) { sm_idleMode = mode; } @@ -2153,7 +2175,7 @@ protected: }; // ---------------------------------------------------------------------------- -// wxEvtHandler: the base class for all objects handling wxWindows events +// wxEvtHandler: the base class for all objects handling wxWidgets events // ---------------------------------------------------------------------------- class WXDLLIMPEXP_BASE wxEvtHandler : public wxObject @@ -2538,13 +2560,17 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC #define EVT_COMMAND_SCROLL_ENDSCROLL(winid, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_ENDSCROLL, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxScrollEventFunction, & func ), (wxObject *) NULL ), // Convenience macros for commonly-used commands -#define EVT_BUTTON(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_BUTTON_CLICKED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ), #define EVT_CHECKBOX(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_CHECKBOX_CLICKED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ), #define EVT_CHOICE(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_CHOICE_SELECTED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ), #define EVT_LISTBOX(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LISTBOX_SELECTED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ), #define EVT_LISTBOX_DCLICK(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ), #define EVT_MENU(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_MENU_SELECTED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ), #define EVT_MENU_RANGE(id1, id2, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_MENU_SELECTED, id1, id2, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ), +#if defined(__SMARTPHONE__) +# define EVT_BUTTON(winid, fn) EVT_MENU(winid, fn) +#else +# define EVT_BUTTON(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_BUTTON_CLICKED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ), +#endif #define EVT_SLIDER(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_SLIDER_UPDATED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ), #define EVT_RADIOBOX(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RADIOBOX_SELECTED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ), #define EVT_RADIOBUTTON(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RADIOBUTTON_SELECTED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxCommandEventFunction, & fn ), (wxObject *) NULL ),