]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/common/module.cpp
Warning fixes, source cleaning.
[wxWidgets.git] / src / common / module.cpp
... / ...
CommitLineData
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#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
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
27WX_DEFINE_LIST(wxModuleList);
28
29IMPLEMENT_CLASS(wxModule, wxObject)
30
31wxModuleList wxModule::m_modules;
32
33void wxModule::RegisterModule(wxModule* module)
34{
35 m_modules.Append(module);
36}
37
38void wxModule::UnregisterModule(wxModule* module)
39{
40 m_modules.DeleteObject(module);
41 delete module;
42}
43
44// Collect up all module-derived classes, create an instance of each,
45// and register them.
46void wxModule::RegisterModules()
47{
48 wxHashTable::compatibility_iterator node;
49 wxClassInfo* classInfo;
50
51 wxClassInfo::sm_classTable->BeginFind();
52 node = wxClassInfo::sm_classTable->Next();
53 while (node)
54 {
55 classInfo = (wxClassInfo *)node->GetData();
56 if ( classInfo->IsKindOf(CLASSINFO(wxModule)) &&
57 (classInfo != (& (wxModule::ms_classInfo))) )
58 {
59 wxModule* module = (wxModule *)classInfo->CreateObject();
60 RegisterModule(module);
61 }
62 node = wxClassInfo::sm_classTable->Next();
63 }
64}
65
66bool wxModule::InitializeModules()
67{
68 // Initialize user-defined modules
69 wxModuleList::compatibility_iterator node;
70 for ( node = m_modules.GetFirst(); node; node = node->GetNext() )
71 {
72 if ( !node->GetData()->Init() )
73 {
74 // clean up already initialized modules - process in reverse order
75 wxModuleList::compatibility_iterator n;
76 for ( n = node->GetPrevious(); n; n = n->GetPrevious() )
77 {
78 n->GetData()->OnExit();
79 }
80
81 return false;
82 }
83 }
84
85 return true;
86}
87
88void wxModule::CleanUpModules()
89{
90 // Cleanup user-defined modules
91 wxModuleList::compatibility_iterator node;
92 for ( node = m_modules.GetFirst(); node; node = node->GetNext() )
93 {
94 node->GetData()->Exit();
95 }
96
97 WX_CLEAR_LIST(wxModuleList, m_modules);
98}
99