]> git.saurik.com Git - wxWidgets.git/commitdiff
implement a runtime check to test if wxEvent::Clone is implemented correctly for...
authorFrancesco Montorsi <f18m_cpp217828@yahoo.it>
Sat, 27 Dec 2008 13:38:40 +0000 (13:38 +0000)
committerFrancesco Montorsi <f18m_cpp217828@yahoo.it>
Sat, 27 Dec 2008 13:38:40 +0000 (13:38 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57587 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/init.cpp

index ee3847634f00efa2d81bcb31d09d7ec3d8b9f54c..5154c1afd7947c7e03beb8fb2ac833d6c2c4296f 100644 (file)
@@ -249,6 +249,37 @@ static bool DoCommonPostInit()
         return false;
     }
 
+#if defined(__WXDEBUG__)
+    // 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
+    //       wxWidgets event classes.
+    const wxClassInfo *ci = wxClassInfo::GetFirst();
+    while (ci)
+    {
+        // is this class derived from wxEvent?
+        if (ci->IsKindOf(CLASSINFO(wxEvent)) && wxString(ci->GetClassName()) != "wxEvent")
+        {
+            if (!ci->IsDynamic())
+                wxLogWarning("The event class '%s' should have a DECLARE_DYNAMIC_CLASS macro!",
+                             ci->GetClassName());
+
+            // yes; test if it implements Clone() correctly
+            wxEvent* test = dynamic_cast<wxEvent*>(ci->CreateObject());
+            wxASSERT_MSG(test, "The event class should have a DECLARE_DYNAMIC_CLASS macro!");
+
+            wxEvent* cloned = test->Clone();
+            if (!cloned || cloned->GetClassInfo() != ci)
+                wxLogWarning("The event class '%s' does not correctly implements wxEvent::Clone()!",
+                             ci->GetClassName());
+
+            delete test;
+        }
+
+        ci = ci->GetNext();
+    }
+#endif
+
     return true;
 }