add ugly macros to abstract the difference between Bind() and Connect() -- this is still less ugly than having #ifs everywhere

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59262 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2009-03-02 12:10:40 +00:00
parent 9fa83f9318
commit 231728361c
2 changed files with 38 additions and 17 deletions

View File

@ -3804,6 +3804,41 @@ typedef void (wxEvtHandler::*wxClipboardTextEventFunction)(wxClipboardTextEvent&
// Helper functions
// ----------------------------------------------------------------------------
// This is an ugly hack to allow the use of Bind() instead of Connect() inside
// the library code if the library was built with support for it, here is how
// it is used:
//
// class SomeEventHandlingClass : wxBIND_OR_CONNECT_HACK_BASE_CLASS
// public SomeBaseClass
// {
// public:
// SomeEventHandlingClass(wxWindow *win)
// {
// // connect to the event for the given window
// wxBIND_OR_CONNECT_HACK(win, wxEVT_SOMETHING, wxSomeEventHandler,
// SomeEventHandlingClass::OnSomeEvent, this);
// }
//
// private:
// void OnSomeEvent(wxSomeEvent&) { ... }
// };
//
// This is *not* meant to be used by library users, it is only defined here
// (and not in a private header) because the base class must be visible from
// other public headers, please do NOT use this in your code, it will be
// removed from future wx versions without warning.
#if wxEVENTS_COMPATIBILITY_2_8
#define wxBIND_OR_CONNECT_HACK_BASE_CLASS public wxEvtHandler,
#define wxBIND_OR_CONNECT_HACK_ONLY_BASE_CLASS : public wxEvtHandler
#define wxBIND_OR_CONNECT_HACK(w, evt, handler, func, obj) \
win->Connect(evt, handler(func), NULL, obj)
#else // wxEVENTS_COMPATIBILITY_2_8
#define wxBIND_OR_CONNECT_HACK_BASE_CLASS
#define wxBIND_OR_CONNECT_HACK_ONLY_BASE_CLASS
#define wxBIND_OR_CONNECT_HACK(w, evt, handler, func, obj) \
win->Bind(evt, &func, obj)
#endif // wxEVENTS_COMPATIBILITY_2_8/!wxEVENTS_COMPATIBILITY_2_8
#if wxUSE_GUI
// Find a window with the focus, that is also a descendant of the given window.

View File

@ -23,29 +23,15 @@
// type-independent part of wxPersistentWindow
class wxPersistentWindowBase :
#if wxEVENTS_COMPATIBILITY_2_8
// in compatibility mode we need to derive from wxEvtHandler to be able to
// handle events
public wxEvtHandler ,
#endif
wxBIND_OR_CONNECT_HACK_BASE_CLASS
public wxPersistentObject
{
public:
wxPersistentWindowBase(wxWindow *win)
: wxPersistentObject(win)
{
#if wxEVENTS_COMPATIBILITY_2_8
win->Connect
(
wxEVT_DESTROY,
wxWindowDestroyEventHandler(
wxPersistentWindowBase::HandleDestroy),
NULL,
this
);
#else // !wxEVENTS_COMPATIBILITY_2_8
win->Bind(wxEVT_DESTROY, &wxPersistentWindowBase::HandleDestroy, this);
#endif // wxEVENTS_COMPATIBILITY_2_8/!wxEVENTS_COMPATIBILITY_2_8
wxBIND_OR_CONNECT_HACK(win, wxEVT_DESTROY, wxWindowDestroyEventHandler,
wxPersistentWindowBase::HandleDestroy, this);
}
virtual wxString GetName() const