From 768151594917aa3e33d35599ffd061bc6992a7c5 2017-07-04 07:37:12 From: Alexandre Leroux Date: 2017-07-04 07:37:12 Subject: [PATCH] Variable deletion (4) Creates operation to remove a variable from visualization when it is deleted --- diff --git a/gui/include/Visualization/operations/RemoveVariableOperation.h b/gui/include/Visualization/operations/RemoveVariableOperation.h new file mode 100644 index 0000000..055e1cf --- /dev/null +++ b/gui/include/Visualization/operations/RemoveVariableOperation.h @@ -0,0 +1,41 @@ +#ifndef SCIQLOP_REMOVEVARIABLEOPERATION_H +#define SCIQLOP_REMOVEVARIABLEOPERATION_H + +#include "Visualization/IVisualizationWidgetVisitor.h" + +#include + +#include + +#include + +class Variable; + +Q_DECLARE_LOGGING_CATEGORY(LOG_RemoveVariableOperation) + +/** + * @brief The RemoveVariableOperation class defines an operation that traverses all of visualization + * widgets to remove a variable if they contain it + */ +class RemoveVariableOperation : public IVisualizationWidgetVisitor { +public: + /** + * Ctor + * @param variable the variable to remove from widgets + */ + explicit RemoveVariableOperation(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 RemoveVariableOperationPrivate; + spimpl::unique_impl_ptr impl; +}; + +#endif // SCIQLOP_REMOVEVARIABLEOPERATION_H diff --git a/gui/src/Visualization/operations/RemoveVariableOperation.cpp b/gui/src/Visualization/operations/RemoveVariableOperation.cpp new file mode 100644 index 0000000..1196957 --- /dev/null +++ b/gui/src/Visualization/operations/RemoveVariableOperation.cpp @@ -0,0 +1,70 @@ +#include "Visualization/operations/RemoveVariableOperation.h" +#include "Visualization/VisualizationGraphWidget.h" + +#include + +Q_LOGGING_CATEGORY(LOG_RemoveVariableOperation, "RemoveVariableOperation") + +struct RemoveVariableOperation::RemoveVariableOperationPrivate { + explicit RemoveVariableOperationPrivate(std::shared_ptr variable) + : m_Variable(variable) + { + } + + std::shared_ptr m_Variable; +}; + +RemoveVariableOperation::RemoveVariableOperation(std::shared_ptr variable) + : impl{spimpl::make_unique_impl(variable)} +{ +} + +void RemoveVariableOperation::visitEnter(VisualizationWidget *widget) +{ + // VisualizationWidget is not intended to contain a variable + Q_UNUSED(widget) +} + +void RemoveVariableOperation::visitLeave(VisualizationWidget *widget) +{ + // VisualizationWidget is not intended to contain a variable + Q_UNUSED(widget) +} + +void RemoveVariableOperation::visitEnter(VisualizationTabWidget *tabWidget) +{ + // VisualizationTabWidget is not intended to contain a variable + Q_UNUSED(tabWidget) +} + +void RemoveVariableOperation::visitLeave(VisualizationTabWidget *tabWidget) +{ + // VisualizationTabWidget is not intended to contain a variable + Q_UNUSED(tabWidget) +} + +void RemoveVariableOperation::visitEnter(VisualizationZoneWidget *zoneWidget) +{ + // VisualizationZoneWidget is not intended to contain a variable + Q_UNUSED(zoneWidget) +} + +void RemoveVariableOperation::visitLeave(VisualizationZoneWidget *zoneWidget) +{ + // VisualizationZoneWidget is not intended to contain a variable + Q_UNUSED(zoneWidget) +} + +void RemoveVariableOperation::visit(VisualizationGraphWidget *graphWidget) +{ + if (graphWidget) { + // If the widget contains the variable, removes it + if (impl->m_Variable && graphWidget->contains(*impl->m_Variable)) { + graphWidget->removeVariable(impl->m_Variable); + } + } + else { + qCCritical(LOG_RemoveVariableOperation(), + "Can't visit VisualizationGraphWidget : the widget is null"); + } +}