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>
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& pluginInformation(
const std::string& name);
174 static _DEPRECATED
const Plugin& pluginInformations(
const std::string& name);
182 static bool pluginExists(
const std::string& pluginName);
190 static const ParameterDescriptionList& getPluginParameters(
const std::string& name);
198 static const std::list<tlp::Dependency>& getPluginDependencies(
const std::string& name);
206 static std::string getPluginLibrary(
const std::string& name);
215 static void removePlugin(
const std::string& name);
223 static void registerPlugin(FactoryInterface* objectFactory);
228 void sendPluginAddedEvent(
const std::string &pluginName);
229 void sendPluginRemovedEvent(
const std::string &pluginName);
231 static PluginLister* _instance;
236 std::map<std::string , PluginDescription>
_plugins;
244 static std::string getPluginRelease(
const std::string& name);
247 class TLP_SCOPE PluginEvent :
public Event {
250 enum PluginEventType {
252 TLP_REMOVE_PLUGIN = 1
256 PluginEvent(PluginEventType pluginEvtType,
const std::string& pluginName)
257 : Event(*(tlp::PluginLister::instance()), Event::TLP_MODIFICATION),
258 evtType(pluginEvtType), pluginName(pluginName) {}
260 PluginEventType getType()
const {
264 std::string getPluginName()
const {
270 PluginEventType evtType;
271 std::string pluginName;
277 #endif //TULIP_PLUGINLISTER_H
std::map< std::string, PluginDescription > _plugins
Stores the factory, dependencies, and parameters of all the plugins that register into this factory...
The PluginLister class is a singleton used to list plugins currently loaded into Tulip and retrieve i...
Event is the base class for all events used in the Observation mechanism.
Contains runtime parameters for a plugin.
Top-level interface for plug-ins.
The base class for plugin factories.
PluginType * getPluginObject(const std::string &name, tlp::PluginContext *context)
Similar to tlp::PluginLister::getPluginObject() but returns a typed instance.
The Observable class is the base of Tulip's observation system.
bool pluginExists(const std::string &pluginName)
Checks if a plugin of a given type is loaded This method checks the plugin "pluginName" is currentl...
A callback class when loading plugins into Tulip.