#ifndef PLUGIN_SUPPORTPLUGINMODULE_H #define PLUGIN_SUPPORTPLUGINMODULE_H #include "ModuleActionParameters.h" #include "MenuAction.h" #include "PluginRegister.h" #include #include #include #include class QAction; class IPluginContentWidgetContext; class PluginModule: public QObject { Q_OBJECT public: using MenuActionList = std::vector; using ModuleAction = std::function; using ModuleActionMap = std::map; PluginModule(QString name, QString ident); virtual void init() {}; const QString& name() const { return m_name; } const QString& identifier() const { return m_ident; } const QString& displayCategory() const { return m_displayCategory; } void setDisplayCategory(QString category); /// registers an action that should always be accessible from the menu void registerMenuAction(MenuAction action); const MenuActionList& menuActions() const; void registerModuleAction(QString module_action, ModuleAction action); /// Searches for and returns a pointer to the requested module action. /// When the action is not found nullptr is returned. const ModuleAction* findModuleAction(const QString &module_action) const; private: /// Name shown to end users QString m_name; /// Unique identifier QString m_ident; QString m_displayCategory; MenuActionList m_menuActions; ModuleActionMap m_moduleActions; }; template std::shared_ptr createPluginModule(QString name, QString ident) { auto module = std::make_shared(std::move(name), std::move(ident)); PluginRegister::getInstance()->registerModule(module); return std::move(module); } #define REGISTER_PLUGIN_MODULE(module, name, ident) \ namespace {\ std::weak_ptr register_variable = createPluginModule\ (#name, #ident);} #endif // PLUGIN_SUPPORTPLUGINMODULE_H