20 #ifndef TULIP_PLUGINLISTER_H
21 #define TULIP_PLUGINLISTER_H
27 #include <tulip/Plugin.h>
28 #include <tulip/PluginLoader.h>
29 #include <tulip/Observable.h>
62 struct PluginDescription {
67 PluginDescription(): factory(NULL), infos(NULL) {}
68 ~PluginDescription() {
107 template<
typename PluginType>
109 std::map<std::string, PluginDescription>::const_iterator it =
110 _plugins.find(pluginName);
111 return (it != _plugins.end() &&
112 (
dynamic_cast<const PluginType*
>(it->second.infos) != NULL));
125 template<
typename PluginType>
126 PluginType* getPluginObject(
const std::string& name,
128 std::map<std::string, PluginDescription>::const_iterator it =
130 return (it != _plugins.end() &&
131 (
dynamic_cast<const PluginType*
>(it->second.infos) != NULL))
132 ? static_cast<PluginType*>(it->second.factory->createPluginObject(context))
141 static std::list<std::string> availablePlugins();
144 template<
typename PluginType>
145 std::list<std::string> availablePlugins() {
146 std::list<std::string> keys;
148 for(std::map<std::string, PluginDescription>::const_iterator it = _plugins.begin(); it != _plugins.end(); ++it) {
149 PluginType* plugin =
dynamic_cast<PluginType*
>(it->second.infos);
152 keys.push_back(it->first);
165 static const Plugin& pluginInformations(
const std::string& name);
173 static bool pluginExists(
const std::string& pluginName);
181 static const ParameterDescriptionList& getPluginParameters(
const std::string& name);
189 static const std::list<tlp::Dependency>& getPluginDependencies(
const std::string& name);
197 static std::string getPluginLibrary(
const std::string& name);
206 static void removePlugin(
const std::string& name);
214 static void registerPlugin(FactoryInterface* objectFactory);
219 void sendPluginAddedEvent(
const std::string &pluginName);
220 void sendPluginRemovedEvent(
const std::string &pluginName);
222 static PluginLister* _instance;
227 std::map<std::string , PluginDescription>
_plugins;
235 static std::string getPluginRelease(
const std::string& name);
238 class TLP_SCOPE PluginEvent :
public Event {
241 enum PluginEventType {
243 TLP_REMOVE_PLUGIN = 1
247 PluginEvent(PluginEventType pluginEvtType, std::string pluginName)
248 : Event(*(tlp::PluginLister::instance()), Event::TLP_MODIFICATION),
249 evtType(pluginEvtType), pluginName(pluginName) {}
251 PluginEventType getType()
const {
255 std::string getPluginName()
const {
261 PluginEventType evtType;
262 std::string pluginName;
268 #endif //TULIP_PLUGINLISTER_H