X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6eabf58cec014c6f85348b8d1ad26c0814123968..bda3d86af93436fb611948634cf77035a1bc417c:/include/wx/event.h diff --git a/include/wx/event.h b/include/wx/event.h index 33523b8875..884475de28 100644 --- a/include/wx/event.h +++ b/include/wx/event.h @@ -12,7 +12,14 @@ #ifndef _WX_EVENT_H__ #define _WX_EVENT_H__ -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) +#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 @@ -292,50 +299,6 @@ 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 @@ -433,7 +396,7 @@ protected: public: bool m_skipped; bool m_isCommandEvent; - + private: // it needs to access our m_propagationLevel friend class WXDLLIMPEXP_BASE wxPropagateOnce; @@ -554,10 +517,6 @@ public: 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; @@ -801,22 +760,6 @@ public: // 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 - // Get X position wxCoord GetX() const { return m_x; } @@ -1312,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; } @@ -1345,24 +1279,12 @@ 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_NO_ASSIGN(wxCloseEvent) @@ -2146,7 +2068,7 @@ 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; @@ -2185,17 +2107,23 @@ 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); + // Clear table + void Clear(); + + // Clear all tables + static void ClearAll(); + protected: // Init the hash table with the entries of the static event table. void InitHashTable(); @@ -2203,7 +2131,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(); @@ -2214,6 +2142,10 @@ protected: size_t m_size; EventTypeTablePointer *m_eventTypeTable; + static wxEventHashTable* sm_first; + wxEventHashTable* m_previous; + wxEventHashTable* m_next; + DECLARE_NO_COPY_CLASS(wxEventHashTable) }; @@ -2244,7 +2176,6 @@ public: // process all pending events void ProcessPendingEvents(); - // add a #if wxUSE_THREADS bool ProcessThreadEvent(wxEvent& event); #endif @@ -2284,38 +2215,25 @@ 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 + void ClearEventLocker(); +#endif // wxUSE_THREADS -#if WXWIN_COMPATIBILITY - virtual bool OnClose(); -#endif + // Avoid problems at exit by cleaning up static hash table gracefully + void ClearEventHashTable() { GetEventHashTable().Clear(); } private: static const wxEventTableEntry sm_eventTableEntries[]; @@ -2326,7 +2244,7 @@ protected: // 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 @@ -2341,7 +2259,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;