#pragma once #define PLUGIN_LOADER_VERSION 3 #include #include #include #include #ifndef LTSPLUGINLOADER_EXPORT # ifdef BUILD_STATIC_LIBRARIES # define LTSPLUGINLOADER_EXPORT # else # if defined(MAKE_LTSPLUGINLOADER_LIB) # define LTSPLUGINLOADER_EXPORT Q_DECL_EXPORT # else # define LTSPLUGINLOADER_EXPORT Q_DECL_IMPORT # endif # endif #endif class QObject; class QPluginLoader; namespace LtsAppDescriptor { struct AppDescription; } namespace LtsPluginManager { enum class PluginType { UNKNOWN = 0, DATA, GUI, TOPIC_TYPE, PROJECT, STYLE, SPECIAL, }; struct PluginInstance { QString pluginName; QString fullFileName; QString fileName; QObject *plugin = nullptr; QPluginLoader *pluginLoader = nullptr; }; class LTSPLUGINLOADER_EXPORT LtsPluginLoader { public: static LtsPluginLoader *getInstance(); void unloadAllPlugins(); void checkPlugins(const QVector &appVector, QStringList &errors ); bool loadPlugins(PluginType requestedPluginType, const std::function &loadPlugin, const QStringList &requiredPlugins = QStringList(), const QString &specialTopicTypeFilter = QString(), const QStringList &optionalPlugins = QStringList()); typedef QPair PluginKey; private: friend struct LtsPluginLoaderHandler; LtsPluginLoader() = default; ~LtsPluginLoader(); QMap m_loadedPlugins; }; }