X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ae3c17b4013e80b99976c750c19fca47729517f6..4e621d24713f971d1a2d440f79ccc4593aede4b6:/interface/wx/module.h diff --git a/interface/wx/module.h b/interface/wx/module.h index ec801b608e..66b4140fc8 100644 --- a/interface/wx/module.h +++ b/interface/wx/module.h @@ -3,59 +3,58 @@ // Purpose: interface of wxModule // Author: wxWidgets team // RCS-ID: $Id$ -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// /** @class wxModule - @wxheader{module.h} The module system is a very simple mechanism to allow applications (and parts of wxWidgets itself) to define initialization and cleanup functions that are automatically called on wxWidgets startup and exit. To define a new kind of module, derive a class from wxModule, override the - wxModule::OnInit and wxModule::OnExit - functions, and add the DECLARE_DYNAMIC_CLASS and IMPLEMENT_DYNAMIC_CLASS to - header and implementation files (which can be the same file). On - initialization, wxWidgets will find all classes derived from wxModule, create - an instance of each, and call each OnInit function. On exit, wxWidgets will - call the OnExit function for each module instance. + wxModule::OnInit and wxModule::OnExit functions, and add the + wxDECLARE_DYNAMIC_CLASS and wxIMPLEMENT_DYNAMIC_CLASS to header and implementation + files (which can be the same file). + On initialization, wxWidgets will find all classes derived from wxModule, create + an instance of each, and call each wxModule::OnInit function. On exit, wxWidgets + will call the wxModule::OnExit function for each module instance. Note that your module class does not have to be in a header file. For example: @code - // A module to allow DDE initialization/cleanup + // A module to allow DDE initialization/cleanup // without calling these functions from app.cpp or from // the user's application. class wxDDEModule: public wxModule { public: wxDDEModule() { } - virtual bool OnInit() { wxDDEInitialize(); return @true; }; + virtual bool OnInit() { wxDDEInitialize(); return true; }; virtual void OnExit() { wxDDECleanUp(); }; private: - DECLARE_DYNAMIC_CLASS(wxDDEModule) + wxDECLARE_DYNAMIC_CLASS(wxDDEModule); }; - IMPLEMENT_DYNAMIC_CLASS(wxDDEModule, wxModule) + wxIMPLEMENT_DYNAMIC_CLASS(wxDDEModule, wxModule); // Another module which uses DDE in its OnInit() class MyModule: public wxModule { public: - MyModule() { AddDependency(CLASSINFO(wxDDEModule)); } + MyModule() { AddDependency(wxCLASSINFO(wxDDEModule)); } virtual bool OnInit() { ... code using DDE ... } virtual void OnExit() { ... } private: - DECLARE_DYNAMIC_CLASS(MyModule) + wxDECLARE_DYNAMIC_CLASS(MyModule); }; - IMPLEMENT_DYNAMIC_CLASS(MyModule, wxModule) + wxIMPLEMENT_DYNAMIC_CLASS(MyModule, wxModule); // Another module which uses DDE in its OnInit() // but uses a named dependency @@ -67,14 +66,14 @@ virtual void OnExit() { ... } private: - DECLARE_DYNAMIC_CLASS(MyModule2) + wxDECLARE_DYNAMIC_CLASS(MyModule2) }; - IMPLEMENT_DYNAMIC_CLASS(MyModule2, wxModule) + wxIMPLEMENT_DYNAMIC_CLASS(MyModule2, wxModule) @endcode @library{wxbase} - @category{FIXME} + @category{appmanagement} */ class wxModule : public wxObject { @@ -87,40 +86,46 @@ public: /** Destructor. */ - ~wxModule(); + virtual ~wxModule(); - //@{ /** - Call this function from the constructor of the derived class. @a dep must be - the CLASSINFO() of a wxModule-derived class and the - corresponding module will be loaded before and unloaded after - this module. - The second version of this function allows a dependency to be added by - name without access to the class info. This is useful when a module is - declared entirely in a source file and there is no header for the declaration - of the module needed by CLASSINFO(), however errors are - not detected until run-time, instead of compile-time, then. - Note that circular dependencies are detected and result in a fatal error. + Provide this function with appropriate cleanup for your module. + */ + virtual void OnExit() = 0; + + /** + Provide this function with appropriate initialization for your module. + If the function returns @false, wxWidgets will exit immediately. + */ + virtual bool OnInit() = 0; + +protected: + + /** + Call this function from the constructor of the derived class. + + @a dep must be the wxCLASSINFO() of a wxModule-derived class and the + corresponding module will be loaded before and unloaded after this module. @param dep The class information object for the dependent module. - @param classname - The class name of the dependent module. */ void AddDependency(wxClassInfo* dep); - void AddDependency(const char* classname); - //@} /** - Provide this function with appropriate cleanup for your module. - */ - virtual void OnExit(); + Call this function from the constructor of the derived class. - /** - Provide this function with appropriate initialization for your module. If the - function - returns @false, wxWidgets will exit immediately. + This overload allows a dependency to be added by name without access to + the class info. + + This is useful when a module is declared entirely in a source file and + there is no header for the declaration of the module needed by wxCLASSINFO(), + however errors are not detected until run-time, instead of compile-time, then. + Note that circular dependencies are detected and result in a fatal error. + + @param classname + The class name of the dependent module. */ - virtual bool OnInit(); + void AddDependency(const char* classname); };