| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/module.h
- // Purpose: Modules handling
- // Author: Wolfram Gloger/adapted by Guilhem Lavaux
- // Modified by:
- // Created: 04/11/98
- // Copyright: (c) Wolfram Gloger and Guilhem Lavaux
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_MODULE_H_
- #define _WX_MODULE_H_
- #include "wx/object.h"
- #include "wx/list.h"
- #include "wx/arrstr.h"
- #include "wx/dynarray.h"
- // declare a linked list of modules
- class WXDLLIMPEXP_FWD_BASE wxModule;
- WX_DECLARE_USER_EXPORTED_LIST(wxModule, wxModuleList, WXDLLIMPEXP_BASE);
- // and an array of class info objects
- WX_DEFINE_USER_EXPORTED_ARRAY_PTR(wxClassInfo *, wxArrayClassInfo,
- class WXDLLIMPEXP_BASE);
- // declaring a class derived from wxModule will automatically create an
- // instance of this class on program startup, call its OnInit() method and call
- // OnExit() on program termination (but only if OnInit() succeeded)
- class WXDLLIMPEXP_BASE wxModule : public wxObject
- {
- public:
- wxModule() {}
- virtual ~wxModule() {}
- // if module init routine returns false the application
- // will fail to startup
- bool Init() { return OnInit(); }
- void Exit() { OnExit(); }
- // Override both of these
- // called on program startup
- virtual bool OnInit() = 0;
- // called just before program termination, but only if OnInit()
- // succeeded
- virtual void OnExit() = 0;
- static void RegisterModule(wxModule *module);
- static void RegisterModules();
- static bool InitializeModules();
- static void CleanUpModules() { DoCleanUpModules(m_modules); }
- // used by wxObjectLoader when unloading shared libs's
- static void UnregisterModule(wxModule *module);
- protected:
- static wxModuleList m_modules;
- // the function to call from constructor of a deriving class add module
- // dependency which will be initialized before the module and unloaded
- // after that
- void AddDependency(wxClassInfo *dep)
- {
- wxCHECK_RET( dep, wxT("NULL module dependency") );
- m_dependencies.Add(dep);
- }
- // same as the version above except it will look up wxClassInfo by name on
- // its own
- void AddDependency(const char *className)
- {
- m_namedDependencies.Add(className);
- }
- private:
- // initialize module and Append it to initializedModules list recursively
- // calling itself to satisfy module dependencies if needed
- static bool
- DoInitializeModule(wxModule *module, wxModuleList &initializedModules);
- // cleanup the modules in the specified list (which may not contain all
- // modules if we're called during initialization because not all modules
- // could be initialized) and also empty m_modules itself
- static void DoCleanUpModules(const wxModuleList& modules);
- // resolve all named dependencies and add them to the normal m_dependencies
- bool ResolveNamedDependencies();
- // module dependencies: contains wxClassInfo pointers for all modules which
- // must be initialized before this one
- wxArrayClassInfo m_dependencies;
- // and the named dependencies: those will be resolved during run-time and
- // added to m_dependencies
- wxArrayString m_namedDependencies;
- // used internally while initializing/cleaning up modules
- enum
- {
- State_Registered, // module registered but not initialized yet
- State_Initializing, // we're initializing this module but not done yet
- State_Initialized // module initialized successfully
- } m_state;
- DECLARE_CLASS(wxModule)
- };
- #endif // _WX_MODULE_H_
|