BALL  1.5.0
pluginManager.h
Go to the documentation of this file.
1 #ifndef BALL_PLUGIN_PLUGINMANAGER_H
2 #define BALL_PLUGIN_PLUGINMANAGER_H
3 
4 #ifndef BALL_COMMON_GLOBAL_H
5 # include <BALL/COMMON/global.h>
6 #endif
7 
8 #ifndef BALL_DATATYPE_STRING_H
9 # include <BALL/DATATYPE/string.h>
10 #endif
11 
12 #include <QtCore/QString>
13 #include <QtCore/QStringList>
14 #include <QtCore/QHash>
15 #include <QtCore/QMutex>
16 #include <QtCore/QReadWriteLock>
17 
18 #include <boost/shared_ptr.hpp>
19 
20 #include <list>
21 #include <map>
22 
23 class QPluginLoader;
24 class QObject;
25 
26 namespace BALL
27 {
28  class BALLPlugin;
29  class PluginHandler;
30 
39  {
40  public:
41 
42  virtual ~PluginManager();
43 
50 
59  bool addPluginDirectory(const QString& dir);
60 
68  bool removePluginDirectory(const QString& dir);
69 
72  std::vector<QString> getPluginDirectories() const;
73 
82  BALLPlugin* loadPlugin(const QString& plugin_name);
83 
89  bool unloadPlugin(const QString& plugin);
90 
100  QObject* getPluginInstance(const QString& plugin);
101 
112 
116  bool startPlugin(int plugin);
117 
121  bool startPlugin(const QString& plugin);
122 
132  bool startPlugin(BALLPlugin* plugin);
133 
137  bool stopPlugin(int plugin);
138 
142  bool stopPlugin(const QString& plugin);
143 
153  bool stopPlugin(BALLPlugin* plugin);
154 
158 
162  int getPluginCount() const;
163 
169 
178  void registerHandler(const boost::shared_ptr<PluginHandler>& h);
179 
199 
200  // needed for storing this classes' preferences
201  virtual bool getPluginDirectories(String& value) const;
202  virtual bool setPluginDirectories(const String&);
203 
204  virtual QString getAutoActivatePlugins() const;
205  virtual bool setAutoActivatePlugins(const QString&);
206 
207  void autoActivatePlugin(const QString& str);
208  void doNotAutoActivatePlugin(const QString& str);
209 
210  protected:
211  static const char* BETWEEN_PLUGINDIR_SEPERATOR;
212 
213  typedef std::map<QString, vector<BALLPlugin*> > PluginDirMap;
214 
218 
219  bool unloadDirectoryPlugins_(PluginDirMap::iterator it);
221 
222  QHash<QString, QPluginLoader*> loaders_;
223  std::list<PluginHandler*> handlers_;
224  std::list<boost::shared_ptr<PluginHandler> > shared_handlers_;
225 
227 
228  static boost::shared_ptr<PluginManager> manager_;
229 
230  //This mutex is used in the creation of the singleton
231  static QMutex mutex_;
232  //This mutex guards the handlers_ list
233  mutable QReadWriteLock handler_mutex_;
234  //This mutex guards the loaders_ list
235  mutable QReadWriteLock loader_mutex_;
236  };
237 }
238 
239 #endif //BALL_PLUGIN_PLUGINMANAGER_H
BALL::PluginManager::removePluginDirectory
bool removePluginDirectory(const QString &dir)
BALL_EXPORT
#define BALL_EXPORT
Definition: COMMON/global.h:50
global.h
BALL::PluginManager::instance
static PluginManager & instance()
BALL::PluginManager::loader_mutex_
QReadWriteLock loader_mutex_
Definition: pluginManager.h:235
BALL::PluginManager::getPluginCount
int getPluginCount() const
BALL::PluginManager::autoactivate_plugins_
QStringList autoactivate_plugins_
Definition: pluginManager.h:226
BALL::PluginManager::setPluginDirectories
virtual bool setPluginDirectories(const String &)
BALL::PluginManager::handlers_
std::list< PluginHandler * > handlers_
Definition: pluginManager.h:223
BALL::PluginManager::registerHandler
void registerHandler(const boost::shared_ptr< PluginHandler > &h)
BALL::PluginManager::doNotAutoActivatePlugin
void doNotAutoActivatePlugin(const QString &str)
BALL::PluginManager::PluginDirMap
std::map< QString, vector< BALLPlugin * > > PluginDirMap
Definition: pluginManager.h:213
BALL::PluginManager::loaders_
QHash< QString, QPluginLoader * > loaders_
Definition: pluginManager.h:222
BALL::PluginManager::mutex_
static QMutex mutex_
Definition: pluginManager.h:231
BALL::PluginManager::getAutoActivatePlugins
virtual QString getAutoActivatePlugins() const
BALL::PluginManager::loadPlugin
BALLPlugin * loadPlugin(const QString &plugin_name)
BALL::BALLPlugin
Definition: BALLPlugin.h:21
BALL::PluginManager::manager_
static boost::shared_ptr< PluginManager > manager_
Definition: pluginManager.h:228
BALL::PluginManager::unloadDirectoryPlugins_
bool unloadDirectoryPlugins_(PluginDirMap::iterator it)
BALL::PluginManager::getPluginDirectories
std::vector< QString > getPluginDirectories() const
BALL::String
Definition: string.h:57
BALL::PluginManager::unregisterHandler
bool unregisterHandler(PluginHandler *h)
BALL::PluginManager::stopPlugin
bool stopPlugin(const QString &plugin)
BALL
Definition: constants.h:13
BALL::PluginManager::getPluginInstance
QObject * getPluginInstance(const QString &plugin)
BALL::PluginManager::~PluginManager
virtual ~PluginManager()
BALL::PluginManager::startPlugin
bool startPlugin(int plugin)
BALL::PluginManager::addPluginDirectory
bool addPluginDirectory(const QString &dir)
BALL::PluginManager::setAutoActivatePlugins
virtual bool setAutoActivatePlugins(const QString &)
BALL::PluginManager::PluginManager
PluginManager()
BALL::PluginHandler
Definition: pluginHandler.h:28
BALL::PluginManager::getPluginInstance
QObject * getPluginInstance(int pos)
BALL::PluginManager::handler_mutex_
QReadWriteLock handler_mutex_
Definition: pluginManager.h:233
BALL::PluginManager::loaded_plugin_dirs_
PluginDirMap loaded_plugin_dirs_
Definition: pluginManager.h:220
BALL::PluginManager::stopPlugin
bool stopPlugin(int plugin)
BALL::PluginManager::unloadPlugin
bool unloadPlugin(const QString &plugin)
string.h
BALL::PluginManager::BETWEEN_PLUGINDIR_SEPERATOR
static const char * BETWEEN_PLUGINDIR_SEPERATOR
Definition: pluginManager.h:211
BALL::PluginManager::shared_handlers_
std::list< boost::shared_ptr< PluginHandler > > shared_handlers_
Definition: pluginManager.h:224
BALL::PluginManager::operator=
PluginManager & operator=(const PluginManager &)
BALL::PluginManager::PluginManager
PluginManager(const PluginManager &)
BALL::PluginManager::registerHandler
void registerHandler(PluginHandler *h)
BALL::Constants::h
BALL_EXTERN_VARIABLE const double h
Definition: constants.h:102
BALL::PluginManager::startPlugin
bool startPlugin(const QString &plugin)
BALL::PluginManager::startPlugin
bool startPlugin(BALLPlugin *plugin)
BALL::PluginManager::unloadAllPlugins
void unloadAllPlugins()
BALL::PluginManager::getPluginDirectories
virtual bool getPluginDirectories(String &value) const
QObject
BALL::PluginManager::autoActivatePlugin
void autoActivatePlugin(const QString &str)
BALL::PluginManager::stopPlugin
bool stopPlugin(BALLPlugin *plugin)
BALL::PluginManager
Definition: pluginManager.h:39