#pragma once #include #include "views/view.hpp" #include "providers/provider.hpp" #include namespace hex { class Plugin { public: Plugin(std::string_view path); ~Plugin(); void initializePlugin(SharedData &sharedData) const; View* createView() const; void drawToolsEntry() const; private: using InitializePluginFunc = void(*)(SharedData &sharedData); using CreateViewFunc = View*(*)(); using DrawToolsEntryFunc = void(*)(); void *m_handle = nullptr; InitializePluginFunc m_initializePluginFunction = nullptr; CreateViewFunc m_createViewFunction = nullptr; DrawToolsEntryFunc m_drawToolsEntryFunction = nullptr; }; class PluginHandler { public: PluginHandler() = delete; static void load(std::string_view pluginFolder); static void unload(); static void reload(); static const auto& getPlugins() { return PluginHandler::s_plugins; } private: static inline std::string s_pluginFolder; static inline std::vector s_plugins; }; }