roviz  0.7
Code Documentation of roviz
plugin_manager.h
1 #ifndef PLUGINMANAGER_H
2 #define PLUGINMANAGER_H
3 #include "appcore.h"
4 #include "helper/singleton.h"
5 #include <QObject>
6 #include <QMetaObject>
7 
9 class PluginMetaData;
10 
14 class ITEMFRAMEWORK_EXPORT PluginManager : public QObject, public Singleton<PluginManager>
15 {
16 
17  //*****************************************************************************
18  // Singleton
19  //*****************************************************************************
20  Q_OBJECT
21  Q_INTERFACES(AbstractSingleton)
22 public:
23  Q_INVOKABLE PluginManager();
24  ~PluginManager();
25 protected:
26  bool postInit();
27  bool preDestroy();
28  //*****************************************************************************
29 
30  //*****************************************************************************
31  // PluginManager public interface
32  //*****************************************************************************
33 public:
38  QStringList const& pluginPath();
39 
44  void setPluginPath(const QStringList &directory);
45 
50  QString const& lastError();
51 
56  QList<PluginMetaData*> pluginMetaDataList();
57 
63  template<class Derived, class Base> void addPluginComponent()
64  {
65  appendPluginComponentHelper(Derived::staticMetaObject, Base::staticMetaObject);
66  }
67 
73  template<class T> QVector<T*> createInstances()
74  {
75  QVector<T*> outVec;
76  QVectorIterator<QObject*> it(createInstancesHelper(T::staticMetaObject));
77 
78  while (it.hasNext()) {
79  T* obj = (T*)qobject_cast<T*>(it.next());
80 
81  if (obj == nullptr) {
82  qWarning() << "Create Instances, cast failed";
83  } else {
84  outVec.append(obj);
85  }
86  }
87 
88  return outVec;
89  }
90 
96  template<class T> T* createInstance(QString const& className)
97  {
98  QObject* obj = createInstanceHelper(className);
99  T* ret = (T*)qobject_cast<T*>(obj);
100 
101  if (ret == nullptr) {
102  qWarning() << "Create instance, cast failed for type: " << className;
103  }
104 
105  return ret;
106  }
107  //*****************************************************************************
108 
109 public slots:
114  void serializePluginMetaData(PluginMetaData* metaData);
115 
116 private:
117 
118  QVector<QObject*> createInstancesHelper(QMetaObject interfaceObject);
119  void appendPluginComponentHelper(QMetaObject derivedMeta, QMetaObject baseMeta);
120  QObject* createInstanceHelper(QString className);
121 
122  PluginManagerPrivate* const d_ptr;
123  Q_DECLARE_PRIVATE(PluginManager)
124 
125 };
126 
127 #endif // PLUGINMANAGER_H
The PluginManager class.
Definition: plugin_manager.h:14
virtual bool postInit()=0
postInit will be called after all components and singletons have been constructed/initialized ...
Definition: plugin_meta_data.h:7
void addPluginComponent()
addPluginComponent adds a plugin component to internal list from where it can be instantiated later ...
Definition: plugin_manager.h:63
The AbstractSingleton class defines functions that every singleton must implement Every Singleton mus...
Definition: singleton.h:12
T * createInstance(QString const &className)
createInstance creates a single instance of a class from a given className
Definition: plugin_manager.h:96
virtual bool preDestroy()=0
preDestroy will be called before any of the components and singletons will be destructed/deinitailize...
The Singleton Template figures as baseclass for all Singletons. It provides a instance() functions wh...
Definition: singleton.h:54
Definition: plugin_manager_p.h:12
QVector< T * > createInstances()
createInstances creates all instances of a plugin and returns them in a vector
Definition: plugin_manager.h:73