BALL  1.4.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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_CONCEPT_PREFERENCESOBJECT_H
6 #endif
7 
8 #include <QtCore/QString>
9 #include <QtCore/QHash>
10 #include <QtCore/QMutex>
11 #include <QtCore/QReadWriteLock>
12 
13 #include <boost/shared_ptr.hpp>
14 
15 #include <list>
16 #include <map>
17 
18 class QPluginLoader;
19 class QObject;
20 
21 namespace BALL
22 {
23  class BALLPlugin;
24  class PluginHandler;
25 
34  : public PreferencesObject
35  {
36  public:
37 
38  virtual ~PluginManager();
39 
45  static PluginManager& instance();
46 
53  void addPluginDirectory(const QString& dir, bool autoactivate = false);
54 
61  bool removePluginDirectory(const QString& dir);
62 
65  vector<QString> getPluginDirectories() const;
66 
75  BALLPlugin* loadPlugin(const QString& plugin_name);
76 
82  bool unloadPlugin(const QString& plugin);
83 
93  QObject* getPluginInstance(const QString& plugin);
94 
104  QObject* getPluginInstance(int pos);
105 
109  bool startPlugin(int plugin);
110 
114  bool startPlugin(const QString& plugin);
115 
125  bool startPlugin(BALLPlugin* plugin);
126 
130  bool stopPlugin(int plugin);
131 
135  bool stopPlugin(const QString& plugin);
136 
146  bool stopPlugin(BALLPlugin* plugin);
147 
150  void unloadAllPlugins();
151 
155  int getPluginCount() const;
156 
161  void registerHandler(PluginHandler* h);
162 
163  // needed for storing this classes' preferences
164  virtual bool getValue(String&) const;
165  virtual bool setValue(const String&);
166 
167  protected:
168  static const char* BETWEEN_PLUGINDIR_SEPERATOR;
169 
170  PluginManager();
172  PluginManager& operator=(const PluginManager&);
173 
174  std::map<QString, vector<BALLPlugin*> > loaded_plugin_dirs_;
175 
176  QHash<QString, QPluginLoader*> loaders_;
177  std::list<PluginHandler*> handlers_;
178 
179  static boost::shared_ptr<PluginManager> manager_;
180 
181  //This mutex is used in the creation of the singleton
182  static QMutex mutex_;
183  //This mutex guards the handlers_ list
184  mutable QReadWriteLock handler_mutex_;
185  //This mutex guards the loaders_ list
186  mutable QReadWriteLock loader_mutex_;
187  };
188 }
189 
190 #endif //BALL_PLUGIN_PLUGINMANAGER_H