1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/common/module.cpp
3 // Purpose: Modules initialization/destruction
4 // Author: Wolfram Gloger/adapted by Guilhem Lavaux
8 // Copyright: (c) Wolfram Gloger and Guilhem Lavaux
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 // For compilers that support precompilation, includes "wx.h".
13 #include "wx/wxprec.h"
23 #include "wx/module.h"
26 #include "wx/listimpl.cpp"
28 #define TRACE_MODULE _T("module")
30 WX_DEFINE_LIST(wxModuleList
)
32 IMPLEMENT_CLASS(wxModule
, wxObject
)
34 wxModuleList
wxModule::m_modules
;
36 void wxModule::RegisterModule(wxModule
* module)
38 m_modules
.Append(module);
41 void wxModule::UnregisterModule(wxModule
* module)
43 m_modules
.DeleteObject(module);
47 // Collect up all module-derived classes, create an instance of each,
49 void wxModule::RegisterModules()
51 wxHashTable::compatibility_iterator node
;
52 wxClassInfo
* classInfo
;
54 wxClassInfo::sm_classTable
->BeginFind();
55 node
= wxClassInfo::sm_classTable
->Next();
58 classInfo
= (wxClassInfo
*)node
->GetData();
59 if ( classInfo
->IsKindOf(CLASSINFO(wxModule
)) &&
60 (classInfo
!= (& (wxModule::ms_classInfo
))) )
62 wxLogTrace(TRACE_MODULE
, wxT("Registering module %s"),
63 classInfo
->GetClassName());
64 wxModule
* module = (wxModule
*)classInfo
->CreateObject();
65 RegisterModule(module);
67 node
= wxClassInfo::sm_classTable
->Next();
71 bool wxModule::InitializeModules()
73 // Initialize user-defined modules
74 wxModuleList::compatibility_iterator node
;
75 for ( node
= m_modules
.GetFirst(); node
; node
= node
->GetNext() )
77 wxModule
*module = node
->GetData();
78 if ( !module->Init() )
80 wxLogError(_("Module \"%s\" initialization failed"),
81 module->GetClassInfo()->GetClassName());
83 // clean up already initialized modules - process in reverse order
84 wxModuleList::compatibility_iterator n
;
85 for ( n
= node
->GetPrevious(); n
; n
= n
->GetPrevious() )
87 n
->GetData()->OnExit();
97 void wxModule::CleanUpModules()
99 // Cleanup user-defined modules
100 wxModuleList::compatibility_iterator node
;
101 for ( node
= m_modules
.GetFirst(); node
; node
= node
->GetNext() )
103 wxLogTrace(TRACE_MODULE
, wxT("Cleanup module %s"),
104 node
->GetData()->GetClassInfo()->GetClassName());
105 node
->GetData()->Exit();
108 WX_CLEAR_LIST(wxModuleList
, m_modules
);