##// END OF EJS Templates
Fix the cosinus bug....
Fix the cosinus bug. The provider now works on the variable controller thread instead of the main thread. That means the visu is still usable during zoom operation

File last commit:

r222:76c2d7a04a27
r298:3a08c66e4df2
Show More
GenerateVariableMenuOperation.cpp
130 lines | 4.2 KiB | text/x-c | CppLexer
/ gui / src / Visualization / operations / GenerateVariableMenuOperation.cpp
Alexandre Leroux
Creates the visitor that generates a hierarchical menu associated with a variable....
r210 #include "Visualization/operations/GenerateVariableMenuOperation.h"
Alexandre Leroux
Moves MenuBuilder in a new class
r222 #include "Visualization/operations/MenuBuilder.h"
Alexandre Leroux
Creates the visitor that generates a hierarchical menu associated with a variable....
r210
#include "Visualization/VisualizationGraphWidget.h"
#include "Visualization/VisualizationTabWidget.h"
#include "Visualization/VisualizationZoneWidget.h"
#include <Variable/Variable.h>
#include <QMenu>
Alexandre Leroux
Defines a menu builder...
r211 #include <QStack>
Q_LOGGING_CATEGORY(LOG_GenerateVariableMenuOperation, "GenerateVariableMenuOperation")
Alexandre Leroux
Creates the visitor that generates a hierarchical menu associated with a variable....
r210 struct GenerateVariableMenuOperation::GenerateVariableMenuOperationPrivate {
explicit GenerateVariableMenuOperationPrivate(QMenu *menu, std::shared_ptr<Variable> variable)
Alexandre Leroux
Defines a menu builder...
r211 : m_Variable{variable}, m_MenuBuilder{menu}
Alexandre Leroux
Creates the visitor that generates a hierarchical menu associated with a variable....
r210 {
}
Alexandre Leroux
Implements visit of tab and zone...
r212 void visitNodeEnter(const IVisualizationWidget &container)
{
// Opens a new menu associated to the node
m_MenuBuilder.addMenu(container.name());
}
template <typename ActionFun>
Alexandre Leroux
Completes visit of tab and zone...
r214 void visitNodeLeave(const IVisualizationWidget &container, const QString &actionName,
ActionFun actionFunction)
Alexandre Leroux
Implements visit of tab and zone...
r212 {
Alexandre Leroux
Completes visit of tab and zone...
r214 if (m_Variable && container.canDrop(*m_Variable)) {
m_MenuBuilder.addSeparator();
m_MenuBuilder.addAction(actionName, actionFunction);
}
Alexandre Leroux
Implements visit of tab and zone...
r212 // Closes the menu associated to the node
m_MenuBuilder.closeMenu();
}
Alexandre Leroux
Implements visit of graph...
r213 template <typename ActionFun>
void visitLeaf(const IVisualizationWidget &container, const QString &actionName,
ActionFun actionFunction)
{
if (m_Variable && container.canDrop(*m_Variable)) {
m_MenuBuilder.addAction(actionName, actionFunction);
}
}
Alexandre Leroux
Creates the visitor that generates a hierarchical menu associated with a variable....
r210 std::shared_ptr<Variable> m_Variable;
Alexandre Leroux
Defines a menu builder...
r211 MenuBuilder m_MenuBuilder;
Alexandre Leroux
Creates the visitor that generates a hierarchical menu associated with a variable....
r210 };
GenerateVariableMenuOperation::GenerateVariableMenuOperation(QMenu *menu,
std::shared_ptr<Variable> variable)
: impl{spimpl::make_unique_impl<GenerateVariableMenuOperationPrivate>(menu, variable)}
{
}
void GenerateVariableMenuOperation::visitEnter(VisualizationWidget *widget)
{
// VisualizationWidget is not intended to accommodate a variable
Q_UNUSED(widget)
}
void GenerateVariableMenuOperation::visitLeave(VisualizationWidget *widget)
{
// VisualizationWidget is not intended to accommodate a variable
Q_UNUSED(widget)
}
void GenerateVariableMenuOperation::visitEnter(VisualizationTabWidget *tabWidget)
{
Alexandre Leroux
Implements visit of tab and zone...
r212 if (tabWidget) {
impl->visitNodeEnter(*tabWidget);
}
Alexandre Leroux
Adds comments
r221 else {
qCCritical(LOG_GenerateVariableMenuOperation(),
"Can't visit enter VisualizationTabWidget : the widget is null");
}
Alexandre Leroux
Creates the visitor that generates a hierarchical menu associated with a variable....
r210 }
void GenerateVariableMenuOperation::visitLeave(VisualizationTabWidget *tabWidget)
{
Alexandre Leroux
Implements visit of tab and zone...
r212 if (tabWidget) {
Alexandre Leroux
Completes visit of tab and zone...
r214 impl->visitNodeLeave(
*tabWidget, QObject::tr("Open in a new zone"),
[ var = impl->m_Variable, tabWidget ]() { tabWidget->createZone(var); });
Alexandre Leroux
Implements visit of tab and zone...
r212 }
Alexandre Leroux
Adds comments
r221 else {
qCCritical(LOG_GenerateVariableMenuOperation(),
"Can't visit leave VisualizationTabWidget : the widget is null");
}
Alexandre Leroux
Creates the visitor that generates a hierarchical menu associated with a variable....
r210 }
void GenerateVariableMenuOperation::visitEnter(VisualizationZoneWidget *zoneWidget)
{
Alexandre Leroux
Implements visit of tab and zone...
r212 if (zoneWidget) {
impl->visitNodeEnter(*zoneWidget);
}
Alexandre Leroux
Adds comments
r221 else {
qCCritical(LOG_GenerateVariableMenuOperation(),
"Can't visit enter VisualizationZoneWidget : the widget is null");
}
Alexandre Leroux
Creates the visitor that generates a hierarchical menu associated with a variable....
r210 }
void GenerateVariableMenuOperation::visitLeave(VisualizationZoneWidget *zoneWidget)
{
Alexandre Leroux
Implements visit of tab and zone...
r212 if (zoneWidget) {
Alexandre Leroux
Completes visit of tab and zone...
r214 impl->visitNodeLeave(
*zoneWidget, QObject::tr("Open in a new graph"),
[ var = impl->m_Variable, zoneWidget ]() { zoneWidget->createGraph(var); });
Alexandre Leroux
Implements visit of tab and zone...
r212 }
Alexandre Leroux
Adds comments
r221 else {
qCCritical(LOG_GenerateVariableMenuOperation(),
"Can't visit leave VisualizationZoneWidget : the widget is null");
}
Alexandre Leroux
Creates the visitor that generates a hierarchical menu associated with a variable....
r210 }
void GenerateVariableMenuOperation::visit(VisualizationGraphWidget *graphWidget)
{
Alexandre Leroux
Implements visit of graph...
r213 if (graphWidget) {
impl->visitLeaf(
*graphWidget, QObject::tr("Open in %1").arg(graphWidget->name()),
[ var = impl->m_Variable, graphWidget ]() { graphWidget->addVariable(var); });
}
Alexandre Leroux
Adds comments
r221 else {
qCCritical(LOG_GenerateVariableMenuOperation(),
"Can't visit VisualizationGraphWidget : the widget is null");
}
Alexandre Leroux
Creates the visitor that generates a hierarchical menu associated with a variable....
r210 }