X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/24463897d53e1e24414e3ea5c68badf93fcd3903..7b65ea1af911e4ba65c47e2ed4f3138367b2bdbb:/include/wx/event.h diff --git a/include/wx/event.h b/include/wx/event.h index 1eaf95d7f5..1e9f2df629 100644 --- a/include/wx/event.h +++ b/include/wx/event.h @@ -18,16 +18,29 @@ #include "wx/defs.h" #include "wx/object.h" -#include "wx/gdicmn.h" -#if wxUSE_THREADS - #include "wx/thread.h" +#if wxUSE_GUI + #include "wx/gdicmn.h" #endif -/* - * Event types - * - */ +#include "wx/thread.h" + +// ---------------------------------------------------------------------------- +// forward declarations +// ---------------------------------------------------------------------------- + +class WXDLLEXPORT wxList; + +#if wxUSE_GUI + class WXDLLEXPORT wxClientData; + class WXDLLEXPORT wxDC; + class WXDLLEXPORT wxMenu; + class WXDLLEXPORT wxWindow; +#endif // wxUSE_GUI + +// ---------------------------------------------------------------------------- +// Event types +// ---------------------------------------------------------------------------- typedef int wxEventType; @@ -191,6 +204,8 @@ const wxEventType wxEVT_COMMAND_TREE_SEL_CHANGED = wxEVT_FIRST + 611; const wxEventType wxEVT_COMMAND_TREE_SEL_CHANGING = wxEVT_FIRST + 612; const wxEventType wxEVT_COMMAND_TREE_KEY_DOWN = wxEVT_FIRST + 613; const wxEventType wxEVT_COMMAND_TREE_ITEM_ACTIVATED = wxEVT_FIRST + 614; +const wxEventType wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK = wxEVT_FIRST + 615; +const wxEventType wxEVT_COMMAND_TREE_ITEM_MIDDLE_CLICK = wxEVT_FIRST + 616; /* List control event types */ const wxEventType wxEVT_COMMAND_LIST_BEGIN_DRAG = wxEVT_FIRST + 700; @@ -229,6 +244,11 @@ const wxEventType wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING = wxEVT_FIRST + 851; const wxEventType wxEVT_COMMAND_SPLITTER_DOUBLECLICKED = wxEVT_FIRST + 852; const wxEventType wxEVT_COMMAND_SPLITTER_UNSPLIT = wxEVT_FIRST + 853; +/* Wizard events */ +const wxEventType wxEVT_WIZARD_PAGE_CHANGED = wxEVT_FIRST + 900; +const wxEventType wxEVT_WIZARD_PAGE_CHANGING = wxEVT_FIRST + 901; +const wxEventType wxEVT_WIZARD_CANCEL = wxEVT_FIRST + 902; + const wxEventType wxEVT_USER_FIRST = wxEVT_FIRST + 2000; /* Compatibility */ @@ -331,6 +351,8 @@ public: bool m_isCommandEvent; }; +#if wxUSE_GUI + // Item or menu event class /* wxEVT_COMMAND_BUTTON_CLICKED @@ -349,8 +371,6 @@ public: wxEVT_COMMAND_COMBOBOX_SELECTED */ -class WXDLLEXPORT wxClientData; - class WXDLLEXPORT wxCommandEvent : public wxEvent { DECLARE_DYNAMIC_CLASS(wxCommandEvent) @@ -518,7 +538,6 @@ public: wxEVT_NC_RIGHT_DCLICK, */ -class WXDLLEXPORT wxDC; class WXDLLEXPORT wxMouseEvent : public wxEvent { DECLARE_DYNAMIC_CLASS(wxMouseEvent) @@ -586,8 +605,15 @@ public: bool Leaving() const { return (m_eventType == wxEVT_LEAVE_WINDOW); } // Find the position of the event - void GetPosition(long *xpos, long *ypos) const { *xpos = m_x; *ypos = m_y; } - void Position(long *xpos, long *ypos) const { *xpos = m_x; *ypos = m_y; } + void GetPosition(long *xpos, long *ypos) const + { if (xpos) *xpos = m_x; + if (ypos) *ypos = m_y; } + void GetPosition(int *xpos, int *ypos) const + { if (xpos) *xpos = m_x; + if (ypos) *ypos = m_y; } + void Position(long *xpos, long *ypos) const + { if (xpos) *xpos = m_x; + if (ypos) *ypos = m_y; } // Find the position of the event wxPoint GetPosition() const { return wxPoint(m_x, m_y); } @@ -649,7 +675,11 @@ public: // Find the position of the event void GetPosition(long *xpos, long *ypos) const - { *xpos = m_x; *ypos = m_y; } + { if (xpos) *xpos = m_x; + if (ypos) *ypos = m_y; } + void GetPosition(int *xpos, int *ypos) const + { if (xpos) *xpos = m_x; + if (ypos) *ypos = m_y; } wxPoint GetPosition() const { return wxPoint(m_x, m_y); } @@ -759,7 +789,6 @@ public: wxEVT_ERASE_BACKGROUND */ -class WXDLLEXPORT wxDC; class WXDLLEXPORT wxEraseEvent : public wxEvent { DECLARE_DYNAMIC_CLASS(wxEraseEvent) @@ -879,7 +908,7 @@ public: { // GetVeto() will return FALSE anyhow... wxCHECK_RET( m_canVeto, - _T("call to Veto() ignored (can't veto this event)") ); + wxT("call to Veto() ignored (can't veto this event)") ); m_veto = veto; } @@ -1012,7 +1041,7 @@ public: // Was it a button event? (*doesn't* mean: is any button *down*?) bool IsButton() const { return ((GetEventType() == wxEVT_JOY_BUTTON_DOWN) || - (GetEventType() == wxEVT_JOY_BUTTON_DOWN)); } + (GetEventType() == wxEVT_JOY_BUTTON_UP)); } // Was it a move event? bool IsMove() const { return (GetEventType() == wxEVT_JOY_MOVE) ; } @@ -1064,36 +1093,11 @@ public: void CopyObject(wxObject& obj) const; }; -// Idle event -/* - wxEVT_IDLE - */ - -class WXDLLEXPORT wxIdleEvent : public wxEvent -{ - DECLARE_DYNAMIC_CLASS(wxIdleEvent) - -public: - wxIdleEvent() - { m_eventType = wxEVT_IDLE; m_requestMore = FALSE; } - - void RequestMore(bool needMore = TRUE) { m_requestMore = needMore; } - bool MoreRequested() const { return m_requestMore; } - - void CopyObject(wxObject& obj) const; - -protected: - bool m_requestMore; -}; - // Update UI event /* wxEVT_UPDATE_UI */ -class WXDLLEXPORT wxMenu; -class WXDLLEXPORT wxWindow; - class WXDLLEXPORT wxUpdateUIEvent : public wxCommandEvent { DECLARE_DYNAMIC_CLASS(wxUpdateUIEvent) @@ -1251,6 +1255,30 @@ public: wxWindow *GetWindow() const { return (wxWindow *)GetEventObject(); } }; +#endif // wxUSE_GUI + +// Idle event +/* + wxEVT_IDLE + */ + +class WXDLLEXPORT wxIdleEvent : public wxEvent +{ + DECLARE_DYNAMIC_CLASS(wxIdleEvent) + +public: + wxIdleEvent() + { m_eventType = wxEVT_IDLE; m_requestMore = FALSE; } + + void RequestMore(bool needMore = TRUE) { m_requestMore = needMore; } + bool MoreRequested() const { return m_requestMore; } + + void CopyObject(wxObject& obj) const; + +protected: + bool m_requestMore; +}; + /* TODO wxEVT_POWER, wxEVT_MOUSE_CAPTURE_CHANGED, @@ -1262,10 +1290,9 @@ public: wxEVT_COMPARE_ITEM */ -class WXDLLEXPORT wxWindow; -class WXDLLEXPORT wxControl; - -// struct WXDLLEXPORT wxEventTableEntry; +// ============================================================================ +// event handler and related classes +// ============================================================================ typedef void (wxObject::*wxObjectEventFunction)(wxEvent&); @@ -1300,31 +1327,22 @@ public: void SetNextHandler(wxEvtHandler *handler) { m_nextHandler = handler; } void SetPreviousHandler(wxEvtHandler *handler) { m_previousHandler = handler; } - void SetEvtHandlerEnabled(bool en) { m_enabled = en; } + void SetEvtHandlerEnabled(bool enabled) { m_enabled = enabled; } bool GetEvtHandlerEnabled() const { return m_enabled; } -#if WXWIN_COMPATIBILITY_2 - virtual void OnCommand(wxWindow& WXUNUSED(win), - wxCommandEvent& WXUNUSED(event)) - { - wxFAIL_MSG(_T("shouldn't be called any more")); - } + // process an event right now + virtual bool ProcessEvent(wxEvent& event); - // Called if child control has no callback function - virtual long Default() - { return GetNextHandler() ? GetNextHandler()->Default() : 0; }; -#endif // WXWIN_COMPATIBILITY_2 + // add an event to be processed later + void AddPendingEvent(wxEvent& event); -#if WXWIN_COMPATIBILITY - virtual bool OnClose(); -#endif + // process all pending events + void ProcessPendingEvents(); + // add a #if wxUSE_THREADS bool ProcessThreadEvent(wxEvent& event); - void ProcessPendingEvents(); #endif - virtual bool ProcessEvent(wxEvent& event); - virtual bool SearchEventTable(wxEventTable& table, wxEvent& event); // Dynamic association of a member function handler with the event handler, // id and event type @@ -1338,14 +1356,34 @@ public: wxObject *userData = (wxObject *) NULL ) { Connect(id, -1, eventType, func, userData); } + // implementation from now on + virtual bool SearchEventTable(wxEventTable& table, wxEvent& event); bool SearchDynamicEventTable( wxEvent& event ); #if wxUSE_THREADS void ClearEventLocker() { delete m_eventsLocker; m_eventsLocker = NULL; }; #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 + private: - static const wxEventTableEntry sm_eventTableEntries[]; + static const wxEventTableEntry sm_eventTableEntries[]; protected: static const wxEventTable sm_eventTable; @@ -1355,7 +1393,6 @@ protected: protected: wxEvtHandler* m_nextHandler; wxEvtHandler* m_previousHandler; - bool m_enabled; // Is event handler enabled? wxList* m_dynamicEvents; wxList* m_pendingEvents; #if wxUSE_THREADS @@ -1365,9 +1402,13 @@ protected: // 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; }; typedef void (wxEvtHandler::*wxEventFunction)(wxEvent&); +#if wxUSE_GUI typedef void (wxEvtHandler::*wxCommandEventFunction)(wxCommandEvent&); typedef void (wxEvtHandler::*wxScrollEventFunction)(wxScrollEvent&); typedef void (wxEvtHandler::*wxScrollWinEventFunction)(wxScrollWinEvent&); @@ -1393,6 +1434,7 @@ typedef void (wxEvtHandler::*wxMaximizeEventFunction)(wxShowEvent&); typedef void (wxEvtHandler::*wxNavigationKeyEventFunction)(wxNavigationKeyEvent&); typedef void (wxEvtHandler::*wxPaletteChangedEventFunction)(wxPaletteChangedEvent&); typedef void (wxEvtHandler::*wxQueryNewPaletteEventFunction)(wxQueryNewPaletteEvent&); +#endif // wxUSE_GUI // N.B. In GNU-WIN32, you *have* to take the address of a member function // (use &) or the compiler crashes... @@ -1598,13 +1640,28 @@ const wxEventTableEntry theClass::sm_eventTableEntries[] = { \ #define EVT_UPDATE_UI(id, func) \ { wxEVT_UPDATE_UI, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxUpdateUIEventFunction) & func, (wxObject *) NULL },\ -/* - * Helper functions - */ +// ---------------------------------------------------------------------------- +// Global data +// ---------------------------------------------------------------------------- + +// for pending event processing - notice that there is intentionally no +// WXDLLEXPORT here +extern wxList *wxPendingEvents; +#if wxUSE_THREADS + extern wxCriticalSection *wxPendingEventsLocker; +#endif + +// ---------------------------------------------------------------------------- +// Helper functions +// ---------------------------------------------------------------------------- + +#if wxUSE_GUI // Find a window with the focus, that is also a descendant of the given window. // This is used to determine the window to initially send commands to. wxWindow* wxFindFocusDescendant(wxWindow* ancestor); +#endif // wxUSE_GUI + #endif // _WX_EVENTH__