#ifndef PLUGIN_SUPPORTPLUGINMODULE_H #define PLUGIN_SUPPORTPLUGINMODULE_H #include "MenuLocation.h" #include "ToolbarLocation.h" #include "ModuleActionParameters.h" #include "PluginRegister.h" #include #include #include class QAction; class IPluginContentWidgetContext; class PluginModule: public QObject { Q_OBJECT public: using ModuleAction = std::function; using ModuleActionMap = std::map; PluginModule(QString name, QString ident); 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); void registerAction(QAction *action, MenuLocation menu_location, ToolbarLocation toolbar_location); 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; ModuleActionMap m_moduleActions; }; template std::shared_ptr createPluginModule(QString name, QString ident) { auto module = std::make_shared(std::move(name), std::move(ident)); module->init(); PluginRegister::getInstance()->registerModule(module); return std::move(module); } #endif // PLUGIN_SUPPORTPLUGINMODULE_H