##// END OF EJS Templates
It's now possible to create the variable and ask data to be retreived...
It's now possible to create the variable and ask data to be retreived asynchronously

File last commit:

r289:85f427f84e81
r294:c71a61da7f3d
Show More
GenerateVariableMenuOperation.cpp
146 lines | 4.5 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....
r195 #include "Visualization/operations/GenerateVariableMenuOperation.h"
Alexandre Leroux
Moves MenuBuilder in a new class
r207 #include "Visualization/operations/MenuBuilder.h"
Alexandre Leroux
Creates the visitor that generates a hierarchical menu associated with a variable....
r195
#include "Visualization/VisualizationGraphWidget.h"
#include "Visualization/VisualizationTabWidget.h"
#include "Visualization/VisualizationZoneWidget.h"
#include <Variable/Variable.h>
#include <QMenu>
Alexandre Leroux
Defines a menu builder...
r196 #include <QStack>
Q_LOGGING_CATEGORY(LOG_GenerateVariableMenuOperation, "GenerateVariableMenuOperation")
Alexandre Leroux
Creates the visitor that generates a hierarchical menu associated with a variable....
r195 struct GenerateVariableMenuOperation::GenerateVariableMenuOperationPrivate {
explicit GenerateVariableMenuOperationPrivate(QMenu *menu, std::shared_ptr<Variable> variable)
Alexandre Leroux
Defines a menu builder...
r196 : m_Variable{variable}, m_MenuBuilder{menu}
Alexandre Leroux
Creates the visitor that generates a hierarchical menu associated with a variable....
r195 {
}
Alexandre Leroux
Puts hierarchical menu in a 'Plot' menu
r286 void visitRootEnter()
{
// Creates the root menu
m_MenuBuilder.addMenu(QObject::tr("Plot"));
}
void visitRootLeave()
{
// Closes the root menu
m_MenuBuilder.closeMenu();
}
Alexandre Leroux
Implements visit of tab and zone...
r197 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...
r199 void visitNodeLeave(const IVisualizationWidget &container, const QString &actionName,
ActionFun actionFunction)
Alexandre Leroux
Implements visit of tab and zone...
r197 {
Alexandre Leroux
Completes visit of tab and zone...
r199 if (m_Variable && container.canDrop(*m_Variable)) {
m_MenuBuilder.addSeparator();
m_MenuBuilder.addAction(actionName, actionFunction);
}
Alexandre Leroux
Implements visit of tab and zone...
r197 // Closes the menu associated to the node
m_MenuBuilder.closeMenu();
}
Alexandre Leroux
Implements visit of graph...
r198 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....
r195 std::shared_ptr<Variable> m_Variable;
Alexandre Leroux
Defines a menu builder...
r196 MenuBuilder m_MenuBuilder;
Alexandre Leroux
Creates the visitor that generates a hierarchical menu associated with a variable....
r195 };
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)
Alexandre Leroux
Puts hierarchical menu in a 'Plot' menu
r286
impl->visitRootEnter();
Alexandre Leroux
Creates the visitor that generates a hierarchical menu associated with a variable....
r195 }
void GenerateVariableMenuOperation::visitLeave(VisualizationWidget *widget)
{
// VisualizationWidget is not intended to accommodate a variable
Q_UNUSED(widget)
Alexandre Leroux
Puts hierarchical menu in a 'Plot' menu
r286
impl->visitRootLeave();
Alexandre Leroux
Creates the visitor that generates a hierarchical menu associated with a variable....
r195 }
void GenerateVariableMenuOperation::visitEnter(VisualizationTabWidget *tabWidget)
{
Alexandre Leroux
Implements visit of tab and zone...
r197 if (tabWidget) {
impl->visitNodeEnter(*tabWidget);
}
Alexandre Leroux
Adds comments
r206 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....
r195 }
void GenerateVariableMenuOperation::visitLeave(VisualizationTabWidget *tabWidget)
{
Alexandre Leroux
Implements visit of tab and zone...
r197 if (tabWidget) {
Alexandre Leroux
Completes visit of tab and zone...
r199 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...
r197 }
Alexandre Leroux
Adds comments
r206 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....
r195 }
void GenerateVariableMenuOperation::visitEnter(VisualizationZoneWidget *zoneWidget)
{
Alexandre Leroux
Implements visit of tab and zone...
r197 if (zoneWidget) {
impl->visitNodeEnter(*zoneWidget);
}
Alexandre Leroux
Adds comments
r206 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....
r195 }
void GenerateVariableMenuOperation::visitLeave(VisualizationZoneWidget *zoneWidget)
{
Alexandre Leroux
Implements visit of tab and zone...
r197 if (zoneWidget) {
Alexandre Leroux
Completes visit of tab and zone...
r199 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...
r197 }
Alexandre Leroux
Adds comments
r206 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....
r195 }
void GenerateVariableMenuOperation::visit(VisualizationGraphWidget *graphWidget)
{
Alexandre Leroux
Implements visit of graph...
r198 if (graphWidget) {
impl->visitLeaf(
*graphWidget, QObject::tr("Open in %1").arg(graphWidget->name()),
variable time is now set to range graphe displayed when it is displayed...
r289 [ var = impl->m_Variable, graphWidget ]() { graphWidget->addVariableUsingGraph(var); });
Alexandre Leroux
Implements visit of graph...
r198 }
Alexandre Leroux
Adds comments
r206 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....
r195 }