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
This commit is contained in:
Vadim Zeitlin
2009-05-31 14:43:01 +00:00
parent 0598625cb2
commit 4b14a2f79b
3 changed files with 39 additions and 7 deletions

View File

@@ -34,8 +34,11 @@ class WXDLLIMPEXP_CORE wxMouseEventsManager : public wxEvtHandler
{ {
public: public:
// a mouse event manager is always associated with a window and must be // a mouse event manager is always associated with a window and must be
// deleted by the window when it is destroyed // deleted by the window when it is destroyed so if it is created using the
wxMouseEventsManager(wxWindow *win); // default ctor Create() must be called later
wxMouseEventsManager() { Init(); }
wxMouseEventsManager(wxWindow *win) { Init(); Create(win); }
bool Create(wxWindow *win);
virtual ~wxMouseEventsManager(); virtual ~wxMouseEventsManager();
@@ -113,6 +116,8 @@ private:
State_Dragging // the item is being dragged State_Dragging // the item is being dragged
}; };
// common part of both ctors
void Init();
// various event handlers // various event handlers
void OnCaptureLost(wxMouseCaptureLostEvent& event); void OnCaptureLost(wxMouseCaptureLostEvent& event);
@@ -121,8 +126,9 @@ private:
void OnMove(wxMouseEvent& event); void OnMove(wxMouseEvent& event);
// the associated window, never NULL // the associated window, never NULL except between the calls to the
wxWindow * const m_win; // default ctor and Create()
wxWindow *m_win;
// the current state // the current state
State m_state; State m_state;

View File

@@ -37,6 +37,15 @@
class wxMouseEventsManager : public wxEvtHandler class wxMouseEventsManager : public wxEvtHandler
{ {
public: 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. Constructor creates the manager for the window.
@@ -46,6 +55,14 @@ public:
*/ */
wxMouseEventsManager(wxWindow *win); wxMouseEventsManager(wxWindow *win);
/**
Finishes initialization of the object created using default
constructor.
Currently always returns @true.
*/
bool Create(wxWindow *win);
protected: protected:
/** /**
Must be overridden to return the item at the given position. Must be overridden to return the item at the given position.

View File

@@ -45,18 +45,27 @@ END_EVENT_TABLE()
// wxMouseEventsManager implementation // wxMouseEventsManager implementation
// ============================================================================ // ============================================================================
wxMouseEventsManager::wxMouseEventsManager(wxWindow *win) void wxMouseEventsManager::Init()
: m_win(win)
{ {
m_win = NULL;
m_state = State_Normal; m_state = State_Normal;
m_item = wxNOT_FOUND; 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); win->PushEventHandler(this);
return true;
} }
wxMouseEventsManager::~wxMouseEventsManager() wxMouseEventsManager::~wxMouseEventsManager()
{ {
m_win->RemoveEventHandler(this); if ( m_win )
m_win->RemoveEventHandler(this);
} }
void wxMouseEventsManager::OnCaptureLost(wxMouseCaptureLostEvent& WXUNUSED(event)) void wxMouseEventsManager::OnCaptureLost(wxMouseCaptureLostEvent& WXUNUSED(event))