3f66f6a5b3
This keyword is not expanded by Git which means it's not replaced with the correct revision value in the releases made using git-based scripts and it's confusing to have lines with unexpanded "$Id$" in the released files. As expanding them with Git is not that simple (it could be done with git archive and export-subst attribute) and there are not many benefits in having them in the first place, just remove all these lines. If nothing else, this will make an eventual transition to Git simpler. Closes #14487. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74602 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
120 lines
3.7 KiB
C++
120 lines
3.7 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// 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_
|