Skip to content
Snippets Groups Projects
Commit 5061dee7 authored by moenck's avatar moenck
Browse files

Update for BioTracker

parent b9eabf66
Branches
No related tags found
No related merge requests found
Pipeline #12475 passed
......@@ -202,6 +202,12 @@ std::vector<std::string> PluginLoader::searchDirectoriesForPlugins(std::vector<s
PluginLoader::PluginLoader(QObject *parent)
{
m_PluginLoader = new QPluginLoader(this);
m_PluginListModel = new QStringListModel();
}
PluginLoader::~PluginLoader()
{
delete m_PluginLoader;
delete m_PluginListModel;
}
bool PluginLoader::loadPluginFromFilename(QString const& filename)
......@@ -236,6 +242,40 @@ bool PluginLoader::loadPluginFromFilename(QString const& filename)
return retval;
}
bool PluginLoader::loadPluginFromName(QString name) {
QString filename = m_PluginMap.find(name)->second;
return loadPluginFromFilename(filename);
}
void PluginLoader::addToPluginList(QString filename) {
bool isLib = QLibrary::isLibrary(filename);
if (isLib) {
QPluginLoader loader;
loader.setFileName(filename);
QJsonValue pluginMeda(loader.metaData().value("MetaData"));
QJsonObject metaObj = pluginMeda.toObject();
QString mstring = metaObj.value("name").toString();
if (!m_PluginList.contains(mstring))
m_PluginList.append(mstring);
m_PluginListModel->setStringList(m_PluginList);
m_PluginMap.insert(std::pair<QString, QString>(mstring, filename));
}
else {
qWarning() << "Error reading plugin: " << filename;
}
}
QStringListModel* PluginLoader::getPluginList() {
return m_PluginListModel;
}
QObject* PluginLoader::getPluginInstance() {
return (m_PluginLoader->instance());
}
QJsonObject PluginLoader::getPluginMetaData() const
{
return m_MetaData;
......@@ -245,3 +285,18 @@ void PluginLoader::readMetaDataFromPlugin()
{
m_MetaData = m_PluginLoader->metaData().value("MetaData").toObject();
}
bool PluginLoader::getIsPluginLoaded() {
return m_isPluginLoaded;
}
QString PluginLoader::getCurrentPluginName() {
return m_currentPluginName;
}
const std::map<QString, QString> &PluginLoader::getPluginMap() const
{
return m_PluginMap;
}
......@@ -5,28 +5,94 @@
#include "QPluginLoader"
#include "QStringListModel"
#include "QPointer"
#include <map>
class PluginLoader : QObject
{
Q_OBJECT
public:
explicit PluginLoader(QObject *parent = 0);
~PluginLoader();
/**
* Loads a file as a QT plugin and reads it's name from the metadata.
* It will then be added to the stringlist and is selectable via "loadPluginFromName".
* This function does not actually set the plugin instance.
*/
void addToPluginList(QString p);
/**
* Returns a QStrinListModel with the names of all seen Plugins.
*/
QStringListModel* getPluginList();
/**
* Loads a BioTracker Plugin from a filpaht. It returns true if the Plugin could be loaded, otherwise false.
*/
bool loadPluginFromFilename(QString const& filename);
/**
* Loads a plugin from it's name (given in the metadata) instead of the filename.
* Only works if it is already known to the pluginloader, i.e. was loaded manually or automatically before or
* or has been added to the pluginlist via "addToPluginList"
*/
bool loadPluginFromName(QString name);
QJsonObject getPluginMetaData() const;
static std::vector<std::string> queryRegistryBehaviors(std::string path);
static std::vector<std::string> searchDirectoriesForPlugins(std::vector<std::string> list, std::string suffix);
//return oldPath
static const char* addDllPath(std::string file);
static void delDllPath(const char* oldPath);
// Is a plugin loaded or not?
bool getIsPluginLoaded();
// Gets the name of the currently loaded plugin
QString getCurrentPluginName();
/**
* Returns the Instance of the BioTracker Plugin.
*/
QObject *getPluginInstance();
/**
* Returns a map containing the mapping "plugin name -> filename"
*/
std::map<QString, QString> const& getPluginMap() const;
private:
//a map containing the mapping "plugin name -> filename"
std::map<QString, QString> m_PluginMap;
/**
* Gets the metadata from the currently loaded plugin.
* Currently this is nothing but the advertised name of the plugin
*/
void readMetaDataFromPlugin();
// The QT object to actually load the plugins
QPluginLoader *m_PluginLoader;
QJsonObject m_MetaData;
//nomen est omen
bool m_isPluginLoaded;
// List of all available plugins
QStringList m_PluginList;
//Name of the currently loaded plugin
QString m_currentPluginName;
// Entire ListModel of the metadata (actually containing all metadata, not only name)
QStringListModel* m_PluginListModel;
};
#endif // PLUGINLOADER_H
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment