]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/module.cpp
added test for wxScopeGuard
[wxWidgets.git] / src / common / module.cpp
index 8397312756c520a4f07b0ba53c8639d1a719f20b..e4b0ea9afa1d7c5466007c8ac1b2a22edd785223 100644 (file)
@@ -9,7 +9,7 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
 #pragma implementation "module.h"
 #endif
 
@@ -22,6 +22,8 @@
 
 #include "wx/module.h"
 #include "wx/hash.h"
+#include "wx/intl.h"
+#include "wx/log.h"
 #include "wx/listimpl.cpp"
 
 WX_DEFINE_LIST(wxModuleList);
@@ -38,13 +40,14 @@ void wxModule::RegisterModule(wxModule* module)
 void wxModule::UnregisterModule(wxModule* module)
 {
     m_modules.DeleteObject(module);
+    delete module;
 }
 
 // Collect up all module-derived classes, create an instance of each,
 // and register them.
 void wxModule::RegisterModules()
 {
-    wxNode *node;
+    wxHashTable::compatibility_iterator node;
     wxClassInfo* classInfo;
 
     wxClassInfo::sm_classTable->BeginFind();
@@ -53,7 +56,7 @@ void wxModule::RegisterModules()
     {
         classInfo = (wxClassInfo *)node->GetData();
         if ( classInfo->IsKindOf(CLASSINFO(wxModule)) &&
-            (classInfo != (& (wxModule::sm_classwxModule))) )
+            (classInfo != (& (wxModule::ms_classInfo))) )
         {
             wxModule* module = (wxModule *)classInfo->CreateObject();
             RegisterModule(module);
@@ -65,35 +68,38 @@ void wxModule::RegisterModules()
 bool wxModule::InitializeModules()
 {
     // Initialize user-defined modules
-    wxModuleList::Node *node;
+    wxModuleList::compatibility_iterator node;
     for ( node = m_modules.GetFirst(); node; node = node->GetNext() )
     {
-        if ( !node->GetData()->Init() )
+        wxModule *module = node->GetData();
+        if ( !module->Init() )
         {
+            wxLogError(_("Module \"%s\" initialization failed"),
+                       module->GetClassInfo()->GetClassName());
+
             // clean up already initialized modules - process in reverse order
-            wxModuleList::Node *n;
+            wxModuleList::compatibility_iterator n;
             for ( n = node->GetPrevious(); n; n = n->GetPrevious() )
             {
                 n->GetData()->OnExit();
             }
 
-            return FALSE;
+            return false;
         }
     }
 
-    return TRUE;
+    return true;
 }
 
 void wxModule::CleanUpModules()
 {
     // Cleanup user-defined modules
-    wxModuleList::Node *node;
+    wxModuleList::compatibility_iterator node;
     for ( node = m_modules.GetFirst(); node; node = node->GetNext() )
     {
         node->GetData()->Exit();
     }
 
-    m_modules.DeleteContents(TRUE);
-    m_modules.Clear();
+    WX_CLEAR_LIST(wxModuleList, m_modules);
 }