This class is currently very small but the reason of existence is to allow subsurface to be easily extendable via plugins. The current type of plugin that I'm making is Social Network, but another possibilities: - Dive Simulation Algorithm - Import/Export Filters - Profile Overlays Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
44 lines
1.1 KiB
C++
44 lines
1.1 KiB
C++
#include "pluginmanager.h"
|
|
|
|
#include <QApplication>
|
|
#include <QDir>
|
|
#include <QPluginLoader>
|
|
|
|
static QList<ISocialNetworkIntegration*> _socialNetworks;
|
|
|
|
PluginManager& PluginManager::instance() {
|
|
static PluginManager self;
|
|
return self;
|
|
}
|
|
|
|
void PluginManager::loadPlugins() {
|
|
QDir pluginsDir(qApp->applicationDirPath());
|
|
|
|
#if defined(Q_OS_WIN)
|
|
if (pluginsDir.dirName().toLower() == "debug" || pluginsDir.dirName().toLower() == "release")
|
|
pluginsDir.cdUp();
|
|
#elif defined(Q_OS_MAC)
|
|
if (pluginsDir.dirName() == "MacOS") {
|
|
pluginsDir.cdUp();
|
|
pluginsDir.cdUp();
|
|
pluginsDir.cdUp();
|
|
}
|
|
#endif
|
|
pluginsDir.cd("plugins");
|
|
|
|
foreach (const QString& fileName, pluginsDir.entryList(QDir::Files)) {
|
|
QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
|
|
QObject *plugin = loader.instance();
|
|
if(!plugin) {
|
|
continue;
|
|
}
|
|
|
|
if (ISocialNetworkIntegration *social = qobject_cast<ISocialNetworkIntegration*>(plugin)){
|
|
_socialNetworks.push_back(social);
|
|
}
|
|
}
|
|
}
|
|
|
|
QList<ISocialNetworkIntegration*> PluginManager::socialNetworkIntegrationPlugins() const {
|
|
return _socialNetworks;
|
|
} |