pgLab/pglab/plugin_support/PluginModule.cpp
eelke 601d071d0f Proof of concept for having the context actions statically defined in the module.
Needs work for correctly placing the items in menu and on toolbar.
Old system still needs to be removed left in place to keep app useable.
2019-08-14 09:06:48 +02:00

68 lines
1.8 KiB
C++

#include "plugin_support/PluginModule.h"
#include "PluginContentWidget.h"
#include <QDebug>
#include <typeinfo>
#include <typeindex>
PluginModule::PluginModule(QString name, QString ident)
: m_name(std::move(name))
, m_ident(std::move(ident))
{
}
void PluginModule::setDisplayCategory(QString category)
{
m_displayCategory = std::move(category);
}
void PluginModule::registerStaticAction(StaticAction action)
{
m_menuActions.emplace_back(std::move(action));
}
const PluginModule::StaticActionList& PluginModule::staticActions() const
{
return m_menuActions;
}
void PluginModule::registerModuleAction(QString module_action, ModuleAction action)
{
m_moduleActions.emplace(
std::move(module_action),
std::move(action)
);
}
const PluginModule::ModuleAction* PluginModule::findModuleAction(const QString &module_action) const
{
auto res = m_moduleActions.find(module_action);
if (res == m_moduleActions.end())
return nullptr;
return &res->second;
}
void PluginModule::registerContextAction(std::shared_ptr<ContextBaseAction> action)
{
auto find_result_iter = m_contextMap.find(action->contextTypeIndex());
if (find_result_iter != m_contextMap.end())
find_result_iter->second.push_back(action);
else
m_contextMap.emplace(action->contextTypeIndex(), ContextActionContainer({ action }));
}
const PluginModule::ContextActionContainer &PluginModule::actionsForContext(std::type_index ti)
{
static const ContextActionContainer empty_result;
auto find_result_iter = m_contextMap.find(ti);
if (find_result_iter != m_contextMap.end())
return find_result_iter->second;
return empty_result;
}
const PluginModule::ContextActionContainer& PluginModule::actionsForContext(PluginContentWidget *widget)
{
return actionsForContext(std::type_index(typeid(*widget)));
}