Merge branch 'timerevent-no-def-ctor'

Remove wxTimerEvent default constructor.

See https://github.com/wxWidgets/wxWidgets/pull/1409
This commit is contained in:
Vadim Zeitlin
2019-07-15 13:18:27 +02:00
3 changed files with 29 additions and 41 deletions

View File

@@ -159,26 +159,23 @@ private:
class WXDLLIMPEXP_BASE wxTimerEvent : public wxEvent
{
public:
wxTimerEvent()
: wxEvent(wxID_ANY, wxEVT_TIMER) { m_timer=NULL; }
wxTimerEvent(wxTimer& timer)
: wxEvent(timer.GetId(), wxEVT_TIMER),
m_timer(&timer)
m_timer(timer)
{
SetEventObject(timer.GetOwner());
}
// accessors
int GetInterval() const { return m_timer->GetInterval(); }
wxTimer& GetTimer() const { return *m_timer; }
int GetInterval() const { return m_timer.GetInterval(); }
wxTimer& GetTimer() const { return m_timer; }
// implement the base class pure virtual
virtual wxEvent *Clone() const wxOVERRIDE { return new wxTimerEvent(*this); }
virtual wxEventCategory GetEventCategory() const wxOVERRIDE { return wxEVT_CATEGORY_TIMER; }
private:
wxTimer* m_timer;
wxTimer& m_timer;
wxDECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxTimerEvent);
};

View File

@@ -38,7 +38,9 @@
// 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);

View File

@@ -18,35 +18,14 @@
#ifndef WX_PRECOMP
#include "wx/event.h"
#include "wx/timer.h"
#endif // WX_PRECOMP
// --------------------------------------------------------------------------
// test class
// --------------------------------------------------------------------------
class EventCloneTestCase : public CppUnit::TestCase
TEST_CASE("EventClone", "[wxEvent][clone]")
{
public:
EventCloneTestCase() {}
// Dummy timer needed just to create a wxTimerEvent.
wxTimer dummyTimer;
private:
CPPUNIT_TEST_SUITE( EventCloneTestCase );
CPPUNIT_TEST( CheckAll );
CPPUNIT_TEST_SUITE_END();
void CheckAll();
wxDECLARE_NO_COPY_CLASS(EventCloneTestCase);
};
// register in the unnamed registry so that these tests are run by default
CPPUNIT_TEST_SUITE_REGISTRATION( EventCloneTestCase );
// also include in its own registry so that these tests can be run alone
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( EventCloneTestCase, "EventCloneTestCase" );
void EventCloneTestCase::CheckAll()
{
// check if event classes implement Clone() correctly
// NOTE: the check is done against _all_ event classes which are linked to
// the executable currently running, which are not necessarily all
@@ -61,20 +40,30 @@ void EventCloneTestCase::CheckAll()
cn == "wxEvent" )
continue;
const std::string
msg = std::string("Event class \"") +
std::string(cn.c_str()) + "\"";
INFO("Event class \"" << cn << "\"");
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);
CPPUNIT_ASSERT_MESSAGE( msg, test );
REQUIRE( test );
wxEvent * const cloned = test->Clone();
delete test;
CPPUNIT_ASSERT_MESSAGE( msg, cloned );
CPPUNIT_ASSERT_MESSAGE( msg, cloned->GetClassInfo() == ci );
REQUIRE( cloned );
CHECK( cloned->GetClassInfo() == ci );
delete cloned;
}