00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __MYGUI_PLUGIN_MANAGER_H__
00024 #define __MYGUI_PLUGIN_MANAGER_H__
00025
00026 #include "MyGUI_Prerequest.h"
00027 #include "MyGUI_Instance.h"
00028 #include "MyGUI_Plugin.h"
00029 #include "MyGUI_XmlDocument.h"
00030 #include "MyGUI_Version.h"
00031 #include <set>
00032
00033 namespace MyGUI
00034 {
00035
00038 class MYGUI_EXPORT PluginManager
00039 {
00040 MYGUI_INSTANCE_HEADER( PluginManager )
00041
00042 public:
00043 typedef void (*DLL_START_PLUGIN)(void);
00044 typedef void (*DLL_STOP_PLUGIN)(void);
00045
00046 public:
00047 void initialise();
00048 void shutdown();
00049
00050 public:
00052 bool loadPlugin(const std::string& _file);
00053
00055 void unloadPlugin(const std::string& _file);
00056
00058 bool load(const std::string& _file);
00059 void _load(xml::ElementPtr _node, const std::string& _file, Version _version);
00060
00064 void installPlugin(IPlugin* _plugin);
00065
00069 void uninstallPlugin(IPlugin* _plugin);
00070
00072 void unloadAllPlugins();
00073
00074 private:
00076 typedef std::map <std::string, DynLib*> DynLibList;
00077
00079 typedef std::set <IPlugin*> PluginList;
00080
00082 DynLibList mLibs;
00083
00085 PluginList mPlugins;
00086
00087 };
00088
00089 }
00090
00091 #endif // __MYGUI_PLUGIN_MANAGER_H__