From 4b14a2f79bbabc128c72cba399f11e394aa656b2 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 31 May 2009 14:43:01 +0000 Subject: [PATCH] added default ctor to wxMouseEventsManager, this is convenient when deriving window classes (which must provide default ctors to e.g. allow loading them from XRC) from it git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60839 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/mousemanager.h | 14 ++++++++++---- interface/wx/mousemanager.h | 17 +++++++++++++++++ src/common/mousemanager.cpp | 15 ++++++++++++--- 3 files changed, 39 insertions(+), 7 deletions(-) diff --git a/include/wx/mousemanager.h b/include/wx/mousemanager.h index 75c8920df9..408209301b 100644 --- a/include/wx/mousemanager.h +++ b/include/wx/mousemanager.h @@ -34,8 +34,11 @@ class WXDLLIMPEXP_CORE wxMouseEventsManager : public wxEvtHandler { public: // a mouse event manager is always associated with a window and must be - // deleted by the window when it is destroyed - wxMouseEventsManager(wxWindow *win); + // deleted by the window when it is destroyed so if it is created using the + // default ctor Create() must be called later + wxMouseEventsManager() { Init(); } + wxMouseEventsManager(wxWindow *win) { Init(); Create(win); } + bool Create(wxWindow *win); virtual ~wxMouseEventsManager(); @@ -113,6 +116,8 @@ private: State_Dragging // the item is being dragged }; + // common part of both ctors + void Init(); // various event handlers void OnCaptureLost(wxMouseCaptureLostEvent& event); @@ -121,8 +126,9 @@ private: void OnMove(wxMouseEvent& event); - // the associated window, never NULL - wxWindow * const m_win; + // the associated window, never NULL except between the calls to the + // default ctor and Create() + wxWindow *m_win; // the current state State m_state; diff --git a/interface/wx/mousemanager.h b/interface/wx/mousemanager.h index 2c8b05a1ae..154f390643 100644 --- a/interface/wx/mousemanager.h +++ b/interface/wx/mousemanager.h @@ -37,6 +37,15 @@ class wxMouseEventsManager : public wxEvtHandler { public: + /** + Default constructor. + + You must call Create() to finish initializing the mouse events manager. + If possible, avoid the use of this constructor in favour of the other + one which fully initializes the mouse events manager immediately. + */ + wxMouseEventsManager(); + /** Constructor creates the manager for the window. @@ -46,6 +55,14 @@ public: */ wxMouseEventsManager(wxWindow *win); + /** + Finishes initialization of the object created using default + constructor. + + Currently always returns @true. + */ + bool Create(wxWindow *win); + protected: /** Must be overridden to return the item at the given position. diff --git a/src/common/mousemanager.cpp b/src/common/mousemanager.cpp index b05922e3f7..0e9475f580 100644 --- a/src/common/mousemanager.cpp +++ b/src/common/mousemanager.cpp @@ -45,18 +45,27 @@ END_EVENT_TABLE() // wxMouseEventsManager implementation // ============================================================================ -wxMouseEventsManager::wxMouseEventsManager(wxWindow *win) - : m_win(win) +void wxMouseEventsManager::Init() { + m_win = NULL; m_state = State_Normal; m_item = wxNOT_FOUND; +} + +bool wxMouseEventsManager::Create(wxWindow *win) +{ + wxASSERT_MSG( !m_win, "Create() must not be called twice" ); + m_win = win; win->PushEventHandler(this); + + return true; } wxMouseEventsManager::~wxMouseEventsManager() { - m_win->RemoveEventHandler(this); + if ( m_win ) + m_win->RemoveEventHandler(this); } void wxMouseEventsManager::OnCaptureLost(wxMouseCaptureLostEvent& WXUNUSED(event)) -- 2.47.2