diff --git a/gui/include/Visualization/operations/GenerateVariableMenuOperation.h b/gui/include/Visualization/operations/GenerateVariableMenuOperation.h new file mode 100644 index 0000000..6bba41c --- /dev/null +++ b/gui/include/Visualization/operations/GenerateVariableMenuOperation.h @@ -0,0 +1,38 @@ +#ifndef SCIQLOP_GENERATEVARIABLEMENUOPERATION_H +#define SCIQLOP_GENERATEVARIABLEMENUOPERATION_H + +#include "Visualization/IVisualizationWidgetVisitor.h" + +#include + +class QMenu; +class Variable; + +/** + * @brief The GenerateVariableMenuOperation class defines an operation that traverses all of + * visualization widgets to determine which can accommodate a variable. The result of the operation + * is a menu that contains actions to add the variable into the containers. + */ +class GenerateVariableMenuOperation : public IVisualizationWidgetVisitor { +public: + /** + * Ctor + * @param menu the menu to which to attach the generated menu + * @param variable the variable for which to generate the menu + */ + explicit GenerateVariableMenuOperation(QMenu *menu, std::shared_ptr variable); + + void visitEnter(VisualizationWidget *widget) override final; + void visitLeave(VisualizationWidget *widget) override final; + void visitEnter(VisualizationTabWidget *tabWidget) override final; + void visitLeave(VisualizationTabWidget *tabWidget) override final; + void visitEnter(VisualizationZoneWidget *zoneWidget) override final; + void visitLeave(VisualizationZoneWidget *zoneWidget) override final; + void visit(VisualizationGraphWidget *graphWidget) override final; + +private: + class GenerateVariableMenuOperationPrivate; + spimpl::unique_impl_ptr impl; +}; + +#endif // SCIQLOP_GENERATEVARIABLEMENUOPERATION_H diff --git a/gui/src/Visualization/operations/GenerateVariableMenuOperation.cpp b/gui/src/Visualization/operations/GenerateVariableMenuOperation.cpp new file mode 100644 index 0000000..6a36b22 --- /dev/null +++ b/gui/src/Visualization/operations/GenerateVariableMenuOperation.cpp @@ -0,0 +1,61 @@ +#include "Visualization/operations/GenerateVariableMenuOperation.h" + +#include "Visualization/VisualizationGraphWidget.h" +#include "Visualization/VisualizationTabWidget.h" +#include "Visualization/VisualizationZoneWidget.h" + +#include + +#include + +struct GenerateVariableMenuOperation::GenerateVariableMenuOperationPrivate { + explicit GenerateVariableMenuOperationPrivate(QMenu *menu, std::shared_ptr variable) + : m_Variable{variable} + { + } + + std::shared_ptr m_Variable; +}; + +GenerateVariableMenuOperation::GenerateVariableMenuOperation(QMenu *menu, + std::shared_ptr variable) + : impl{spimpl::make_unique_impl(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) +{ + /// @todo ALX +} + +void GenerateVariableMenuOperation::visitLeave(VisualizationTabWidget *tabWidget) +{ + /// @todo ALX +} + +void GenerateVariableMenuOperation::visitEnter(VisualizationZoneWidget *zoneWidget) +{ + /// @todo ALX +} + +void GenerateVariableMenuOperation::visitLeave(VisualizationZoneWidget *zoneWidget) +{ + /// @todo ALX +} + +void GenerateVariableMenuOperation::visit(VisualizationGraphWidget *graphWidget) +{ + /// @todo ALX +}