X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8aa4edd248534c4c1879c93d363d1b7fb8e8c5c6..6493aacaeb7b22b9fa35c559f7753e9fec0da71f:/src/common/module.cpp diff --git a/src/common/module.cpp b/src/common/module.cpp index 5a65c70b94..2d5df44954 100644 --- a/src/common/module.cpp +++ b/src/common/module.cpp @@ -9,10 +9,6 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "module.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -22,9 +18,13 @@ #include "wx/module.h" #include "wx/hash.h" +#include "wx/intl.h" +#include "wx/log.h" #include "wx/listimpl.cpp" -WX_DEFINE_LIST(wxModuleList); +#define TRACE_MODULE _T("module") + +WX_DEFINE_LIST(wxModuleList) IMPLEMENT_CLASS(wxModule, wxObject) @@ -35,21 +35,29 @@ void wxModule::RegisterModule(wxModule* module) m_modules.Append(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(); node = wxClassInfo::sm_classTable->Next(); while (node) { - classInfo = (wxClassInfo *)node->Data(); + classInfo = (wxClassInfo *)node->GetData(); if ( classInfo->IsKindOf(CLASSINFO(wxModule)) && - (classInfo != (& (wxModule::sm_classwxModule))) ) + (classInfo != (& (wxModule::ms_classInfo))) ) { + wxLogTrace(TRACE_MODULE, wxT("Registering module %s"), + classInfo->GetClassName()); wxModule* module = (wxModule *)classInfo->CreateObject(); RegisterModule(module); } @@ -60,35 +68,40 @@ 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() ) { + wxLogTrace(TRACE_MODULE, wxT("Cleanup module %s"), + node->GetData()->GetClassInfo()->GetClassName()); node->GetData()->Exit(); } - m_modules.DeleteContents(TRUE); - m_modules.Clear(); + WX_CLEAR_LIST(wxModuleList, m_modules); }