home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / src / common / module.cpp < prev    next >
C/C++ Source or Header  |  2001-12-19  |  3KB  |  107 lines

  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: module.cpp,v 1.6 2001/12/19 07:09:55 RL Exp $
  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. #ifdef __SALFORDC__
  28. void wxwxModuleListNode::DeleteData()
  29. {
  30.     delete (_WX_LIST_ITEM_TYPE_wxModuleList *)GetData();
  31. }
  32. #else
  33. WX_DEFINE_LIST(wxModuleList);
  34. #endif
  35.  
  36. IMPLEMENT_CLASS(wxModule, wxObject)
  37.  
  38. wxModuleList wxModule::m_modules;
  39.  
  40. void wxModule::RegisterModule(wxModule* module)
  41. {
  42.     m_modules.Append(module);
  43. }
  44.  
  45. void wxModule::UnregisterModule(wxModule* module)
  46. {
  47.     m_modules.DeleteObject(module);
  48. }
  49.  
  50. // Collect up all module-derived classes, create an instance of each,
  51. // and register them.
  52. void wxModule::RegisterModules()
  53. {
  54.     wxNode *node;
  55.     wxClassInfo* classInfo;
  56.  
  57.     wxClassInfo::sm_classTable->BeginFind();
  58.     node = wxClassInfo::sm_classTable->Next();
  59.     while (node)
  60.     {
  61.         classInfo = (wxClassInfo *)node->Data();
  62.         if ( classInfo->IsKindOf(CLASSINFO(wxModule)) &&
  63.             (classInfo != (& (wxModule::sm_classwxModule))) )
  64.         {
  65.             wxModule* module = (wxModule *)classInfo->CreateObject();
  66.             RegisterModule(module);
  67.         }
  68.         node = wxClassInfo::sm_classTable->Next();
  69.     }
  70. }
  71.  
  72. bool wxModule::InitializeModules()
  73. {
  74.     // Initialize user-defined modules
  75.     wxModuleList::Node *node;
  76.     for ( node = m_modules.GetFirst(); node; node = node->GetNext() )
  77.     {
  78.         if ( !node->GetData()->Init() )
  79.         {
  80.             // clean up already initialized modules - process in reverse order
  81.             wxModuleList::Node *n;
  82.             for ( n = node->GetPrevious(); n; n = n->GetPrevious() )
  83.             {
  84.                 n->GetData()->OnExit();
  85.             }
  86.  
  87.             return FALSE;
  88.         }
  89.     }
  90.  
  91.     return TRUE;
  92. }
  93.  
  94. void wxModule::CleanUpModules()
  95. {
  96.     // Cleanup user-defined modules
  97.     wxModuleList::Node *node;
  98.     for ( node = m_modules.GetFirst(); node; node = node->GetNext() )
  99.     {
  100.         node->GetData()->Exit();
  101.     }
  102.  
  103.     m_modules.DeleteContents(TRUE);
  104.     m_modules.Clear();
  105. }
  106.  
  107.