#pragma once #include "OpenRGBPluginInterface.h" #include "ResourceManager.h" #include #include #include #include #include #include typedef struct { OpenRGBPluginInfo info; OpenRGBPluginInterface* plugin; QPluginLoader* loader; bool loaded; QWidget* widget; QMenu* traymenu; std::string path; bool enabled; } OpenRGBPluginEntry; typedef void (*AddPluginCallback)(void *, OpenRGBPluginEntry* plugin); typedef void (*RemovePluginCallback)(void *, OpenRGBPluginEntry* plugin); class PluginManager { public: PluginManager(); void RegisterAddPluginCallback(AddPluginCallback new_callback, void * new_callback_arg); void RegisterRemovePluginCallback(RemovePluginCallback new_callback, void * new_callback_arg); void ScanAndLoadPlugins(); void AddPlugin(std::string path); void RemovePlugin(std::string path); void LoadPlugin(std::string path); void UnloadPlugin(std::string path); void UnloadPlugins(); std::vector ActivePlugins; private: void ScanAndLoadPluginsFrom(QDir plugins_dir); AddPluginCallback AddPluginCallbackVal; void * AddPluginCallbackArg; RemovePluginCallback RemovePluginCallbackVal; void * RemovePluginCallbackArg; const char * plugins_path = "plugins/"; };