// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifndef __MODULEH__
-#define __MODULEH__
+#ifndef _WX_MODULEH__
+#define _WX_MODULEH__
-#ifdef __GNUG__
-#pragma interface "module.h"
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
+ #pragma interface "module.h"
#endif
#include "wx/object.h"
#include "wx/list.h"
-#include "wx/setup.h"
-class WXDLLEXPORT wxModule: public wxObject
+// declare a linked list of modules
+class wxModule;
+WX_DECLARE_USER_EXPORTED_LIST(wxModule, wxModuleList, 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(void) {}
- ~wxModule(void) {}
+ wxModule() {}
+ virtual ~wxModule() {}
+
+ // if module init routine returns FALSE application
+ // will fail to startup
+
+ bool Init() { return OnInit(); }
+ void Exit() { OnExit(); }
+
+ // Override both of these
+ // called on program startup
- // If returns FALSE, quits the application immediately.
- bool Init(void) { return OnInit(); }
- void Exit(void) { OnExit(); }
+ virtual bool OnInit() = 0;
- // Override both of these
- virtual bool OnInit(void) = 0;
- virtual void OnExit(void) = 0;
+ // called just before program termination, but only if OnInit()
+ // succeeded
+
+ virtual void OnExit() = 0;
static void RegisterModule(wxModule* module);
- static bool RegisterModules(void);
- static bool InitializeModules(void);
- static void CleanUpModules(void);
+ static void RegisterModules();
+ static bool InitializeModules();
+ static void CleanUpModules();
+
+ // used by wxObjectLoader when unloading shared libs's
+
+ static void UnregisterModule(wxModule* module);
protected:
- static wxList m_modules;
+ static wxModuleList m_modules;
-DECLARE_CLASS(wxModule)
+ DECLARE_CLASS(wxModule)
};
-#endif
+#endif // _WX_MODULEH__