fixes needed for separate DLL build to work
[wxWidgets.git] / include / wx / module.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: module.h
3 // Purpose: Modules handling
4 // Author: Wolfram Gloger/adapted by Guilhem Lavaux
5 // Modified by:
6 // Created: 04/11/98
7 // RCS-ID: $Id$
8 // Copyright: (c) Wolfram Gloger and Guilhem Lavaux
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifndef _WX_MODULEH__
13 #define _WX_MODULEH__
14
15 #if defined(__GNUG__) && !defined(__APPLE__)
16 #pragma interface "module.h"
17 #endif
18
19 #include "wx/object.h"
20 #include "wx/list.h"
21
22 // declare a linked list of modules
23 class wxModule;
24 WX_DECLARE_EXPORTED_LIST(wxModule, wxModuleList);
25
26 // declaring a class derived from wxModule will automatically create an
27 // instance of this class on program startup, call its OnInit() method and call
28 // OnExit() on program termination (but only if OnInit() succeeded)
29 class WXDLLEXPORT_BASE wxModule : public wxObject
30 {
31 public:
32 wxModule() {}
33 virtual ~wxModule() {}
34
35 // if module init routine returns FALSE application
36 // will fail to startup
37
38 bool Init() { return OnInit(); }
39 void Exit() { OnExit(); }
40
41 // Override both of these
42 // called on program startup
43
44 virtual bool OnInit() = 0;
45
46 // called just before program termination, but only if OnInit()
47 // succeeded
48
49 virtual void OnExit() = 0;
50
51 static void RegisterModule(wxModule* module);
52 static void RegisterModules();
53 static bool InitializeModules();
54 static void CleanUpModules();
55
56 // used by wxObjectLoader when unloading shared libs's
57
58 static void UnregisterModule(wxModule* module);
59
60 protected:
61 static wxModuleList m_modules;
62
63 DECLARE_CLASS(wxModule)
64 };
65
66 #endif // _WX_MODULEH__
67