#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; }; } // namespace LtsPluginManager