]> git.saurik.com Git - wxWidgets.git/blob - src/common/module.cpp
5a65c70b940e411664d506e19ed5f185de2f2eaf
[wxWidgets.git] / src / common / module.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: module.cpp
3 // Purpose: Modules initialization/destruction
4 // Author: Wolfram Gloger/adapted by Guilhem Lavaux
5 // Modified by:
6 // Created: 04/11/98
7 // RCS-ID: $Id$
8 // Copyright: (c) Wolfram Gloger and Guilhem Lavaux
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifdef __GNUG__
13 #pragma implementation "module.h"
14 #endif
15
16 // For compilers that support precompilation, includes "wx.h".
17 #include "wx/wxprec.h"
18
19 #ifdef __BORLANDC__
20 #pragma hdrstop
21 #endif
22
23 #include "wx/module.h"
24 #include "wx/hash.h"
25 #include "wx/listimpl.cpp"
26
27 WX_DEFINE_LIST(wxModuleList);
28
29 IMPLEMENT_CLASS(wxModule, wxObject)
30
31 wxModuleList wxModule::m_modules;
32
33 void wxModule::RegisterModule(wxModule* module)
34 {
35 m_modules.Append(module);
36 }
37
38 // Collect up all module-derived classes, create an instance of each,
39 // and register them.
40 void wxModule::RegisterModules()
41 {
42 wxNode *node;
43 wxClassInfo* classInfo;
44
45 wxClassInfo::sm_classTable->BeginFind();
46 node = wxClassInfo::sm_classTable->Next();
47 while (node)
48 {
49 classInfo = (wxClassInfo *)node->Data();
50 if ( classInfo->IsKindOf(CLASSINFO(wxModule)) &&
51 (classInfo != (& (wxModule::sm_classwxModule))) )
52 {
53 wxModule* module = (wxModule *)classInfo->CreateObject();
54 RegisterModule(module);
55 }
56 node = wxClassInfo::sm_classTable->Next();
57 }
58 }
59
60 bool wxModule::InitializeModules()
61 {
62 // Initialize user-defined modules
63 wxModuleList::Node *node;
64 for ( node = m_modules.GetFirst(); node; node = node->GetNext() )
65 {
66 if ( !node->GetData()->Init() )
67 {
68 // clean up already initialized modules - process in reverse order
69 wxModuleList::Node *n;
70 for ( n = node->GetPrevious(); n; n = n->GetPrevious() )
71 {
72 n->GetData()->OnExit();
73 }
74
75 return FALSE;
76 }
77 }
78
79 return TRUE;
80 }
81
82 void wxModule::CleanUpModules()
83 {
84 // Cleanup user-defined modules
85 wxModuleList::Node *node;
86 for ( node = m_modules.GetFirst(); node; node = node->GetNext() )
87 {
88 node->GetData()->Exit();
89 }
90
91 m_modules.DeleteContents(TRUE);
92 m_modules.Clear();
93 }
94