Remove wxTimerEvent default constructor
This ctor just created unusable wxTimerEvent objects (all of the methods
specific to this class would just crash if called on them) and doesn't
seem to be useful at all.
It was added in e47859daeb
apparently only
in order to allow using wxIMPLEMENT_DYNAMIC_CLASS() instead of the
previously used wxIMPLEMENT_ABSTRACT_CLASS() for wxTimerEvent, but there
doesn't seem to be any reason to prefer macro over another, and there
are good reasons to not allow creating objects in an invalid state.
The only place where we relied on having default ctor for this event was
in wxEvent::Clone() unit test, so update it to handle wxTimerEvent
specially now that this ctor doesn't exist any longer.
This commit is contained in:
@@ -159,26 +159,23 @@ private:
|
|||||||
class WXDLLIMPEXP_BASE wxTimerEvent : public wxEvent
|
class WXDLLIMPEXP_BASE wxTimerEvent : public wxEvent
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
wxTimerEvent()
|
|
||||||
: wxEvent(wxID_ANY, wxEVT_TIMER) { m_timer=NULL; }
|
|
||||||
|
|
||||||
wxTimerEvent(wxTimer& timer)
|
wxTimerEvent(wxTimer& timer)
|
||||||
: wxEvent(timer.GetId(), wxEVT_TIMER),
|
: wxEvent(timer.GetId(), wxEVT_TIMER),
|
||||||
m_timer(&timer)
|
m_timer(timer)
|
||||||
{
|
{
|
||||||
SetEventObject(timer.GetOwner());
|
SetEventObject(timer.GetOwner());
|
||||||
}
|
}
|
||||||
|
|
||||||
// accessors
|
// accessors
|
||||||
int GetInterval() const { return m_timer->GetInterval(); }
|
int GetInterval() const { return m_timer.GetInterval(); }
|
||||||
wxTimer& GetTimer() const { return *m_timer; }
|
wxTimer& GetTimer() const { return m_timer; }
|
||||||
|
|
||||||
// implement the base class pure virtual
|
// implement the base class pure virtual
|
||||||
virtual wxEvent *Clone() const wxOVERRIDE { return new wxTimerEvent(*this); }
|
virtual wxEvent *Clone() const wxOVERRIDE { return new wxTimerEvent(*this); }
|
||||||
virtual wxEventCategory GetEventCategory() const wxOVERRIDE { return wxEVT_CATEGORY_TIMER; }
|
virtual wxEventCategory GetEventCategory() const wxOVERRIDE { return wxEVT_CATEGORY_TIMER; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
wxTimer* m_timer;
|
wxTimer& m_timer;
|
||||||
|
|
||||||
wxDECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxTimerEvent);
|
wxDECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxTimerEvent);
|
||||||
};
|
};
|
||||||
|
@@ -38,7 +38,9 @@
|
|||||||
// wxWin macros
|
// wxWin macros
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
wxIMPLEMENT_DYNAMIC_CLASS(wxTimerEvent, wxEvent);
|
// This class is not really abstract, but this macro has to be used because it
|
||||||
|
// doesn't have a default ctor.
|
||||||
|
wxIMPLEMENT_ABSTRACT_CLASS(wxTimerEvent, wxEvent);
|
||||||
|
|
||||||
wxDEFINE_EVENT(wxEVT_TIMER, wxTimerEvent);
|
wxDEFINE_EVENT(wxEVT_TIMER, wxTimerEvent);
|
||||||
|
|
||||||
|
@@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
#ifndef WX_PRECOMP
|
#ifndef WX_PRECOMP
|
||||||
#include "wx/event.h"
|
#include "wx/event.h"
|
||||||
|
#include "wx/timer.h"
|
||||||
#endif // WX_PRECOMP
|
#endif // WX_PRECOMP
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
@@ -47,6 +48,9 @@ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( EventCloneTestCase, "EventCloneTestCase"
|
|||||||
|
|
||||||
void EventCloneTestCase::CheckAll()
|
void EventCloneTestCase::CheckAll()
|
||||||
{
|
{
|
||||||
|
// Dummy timer needed just to create a wxTimerEvent.
|
||||||
|
wxTimer dummyTimer;
|
||||||
|
|
||||||
// check if event classes implement Clone() correctly
|
// check if event classes implement Clone() correctly
|
||||||
// NOTE: the check is done against _all_ event classes which are linked to
|
// NOTE: the check is done against _all_ event classes which are linked to
|
||||||
// the executable currently running, which are not necessarily all
|
// the executable currently running, which are not necessarily all
|
||||||
@@ -61,20 +65,30 @@ void EventCloneTestCase::CheckAll()
|
|||||||
cn == "wxEvent" )
|
cn == "wxEvent" )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const std::string
|
INFO("Event class \"" << cn << "\"");
|
||||||
msg = std::string("Event class \"") +
|
|
||||||
std::string(cn.c_str()) + "\"";
|
|
||||||
|
|
||||||
CPPUNIT_ASSERT_MESSAGE( msg, ci->IsDynamic() );
|
wxEvent* test;
|
||||||
|
if ( ci->IsDynamic() )
|
||||||
|
{
|
||||||
|
test = wxDynamicCast(ci->CreateObject(),wxEvent);
|
||||||
|
}
|
||||||
|
else if ( cn == "wxTimerEvent" )
|
||||||
|
{
|
||||||
|
test = new wxTimerEvent(dummyTimer);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FAIL("Can't create objects of type " + cn);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
wxEvent * const test = wxDynamicCast(ci->CreateObject(),wxEvent);
|
REQUIRE( test );
|
||||||
CPPUNIT_ASSERT_MESSAGE( msg, test );
|
|
||||||
|
|
||||||
wxEvent * const cloned = test->Clone();
|
wxEvent * const cloned = test->Clone();
|
||||||
delete test;
|
delete test;
|
||||||
|
|
||||||
CPPUNIT_ASSERT_MESSAGE( msg, cloned );
|
REQUIRE( cloned );
|
||||||
CPPUNIT_ASSERT_MESSAGE( msg, cloned->GetClassInfo() == ci );
|
CHECK( cloned->GetClassInfo() == ci );
|
||||||
|
|
||||||
delete cloned;
|
delete cloned;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user