20 #ifndef TULIP_PLUGINLISTER_H
21 #define TULIP_PLUGINLISTER_H
27 #include <tulip/Plugin.h>
28 #include <tulip/TlpTools.h>
29 #include <tulip/PluginLibraryLoader.h>
30 #include <tulip/Observable.h>
62 struct PluginDescription {
67 PluginDescription(): factory(NULL), infos(NULL) {}
68 ~PluginDescription() {
108 template<
typename PluginType>
110 std::map<std::string, PluginDescription>::const_iterator it =
111 _plugins.find(pluginName);
112 return (it != _plugins.end() &&
113 (
dynamic_cast<const PluginType*
>(it->second.infos) != NULL));
126 template<
typename PluginType>
127 PluginType* getPluginObject(
const std::string& name,
129 std::map<std::string, PluginDescription>::const_iterator it =
131 return (it != _plugins.end() &&
132 (
dynamic_cast<const PluginType*
>(it->second.infos) != NULL))
133 ? static_cast<PluginType*>(it->second.factory->createPluginObject(context))
143 static std::list<std::string> availablePlugins();
145 template<
typename PluginType>
146 std::list<std::string> availablePlugins() {
147 std::list<std::string> keys;
149 for(std::map<std::string, PluginDescription>::const_iterator it = _plugins.begin(); it != _plugins.end(); ++it) {
150 PluginType* plugin =
dynamic_cast<PluginType*
>(it->second.infos);
153 keys.push_back(it->first);
166 static const Plugin& pluginInformations(
const std::string& name);
174 static bool pluginExists(
const std::string& pluginName);
182 static const ParameterDescriptionList& getPluginParameters(
const std::string& name);
190 static const std::list<tlp::Dependency>& getPluginDependencies(
const std::string& name);
198 static std::string getPluginLibrary(
const std::string& name);
207 static void removePlugin(
const std::string& name);
215 static void registerPlugin(FactoryInterface* objectFactory);
220 void sendPluginAddedEvent(
const std::string &pluginName);
221 void sendPluginRemovedEvent(
const std::string &pluginName);
223 static PluginLister* _instance;
228 std::map<std::string , PluginDescription>
_plugins;
236 static std::string getPluginRelease(
const std::string& name);
239 class TLP_SCOPE PluginEvent :
public Event {
242 enum PluginEventType {
244 TLP_REMOVE_PLUGIN = 1
248 PluginEvent(PluginEventType pluginEvtType, std::string pluginName)
249 : Event(*(tlp::PluginLister::instance()), Event::TLP_MODIFICATION),
250 evtType(pluginEvtType), pluginName(pluginName) {}
252 PluginEventType getType()
const {
256 std::string getPluginName()
const {
262 PluginEventType evtType;
263 std::string pluginName;
269 #endif //TULIP_PLUGINLISTER_H