From fdc228d1e62595e5d8bbfbc950a6b25028f97214 2017-07-20 09:56:15 From: mperrinel Date: 2017-07-20 09:56:15 Subject: [PATCH] Add rescale operation to permit to rescale axe widget --- diff --git a/gui/include/Visualization/operations/RescaleAxeOperation.h b/gui/include/Visualization/operations/RescaleAxeOperation.h new file mode 100644 index 0000000..5e348bb --- /dev/null +++ b/gui/include/Visualization/operations/RescaleAxeOperation.h @@ -0,0 +1,42 @@ +#ifndef SCIQLOP_RESCALEAXEOPERATION_H +#define SCIQLOP_RESCALEAXEOPERATION_H + +#include "Visualization/IVisualizationWidgetVisitor.h" +#include + +#include + +#include + +#include + +class Variable; + +Q_DECLARE_LOGGING_CATEGORY(LOG_RescaleAxeOperation) + +/** + * @brief The RescaleAxeOperation class defines an operation that traverses all of visualization + * widgets to remove a variable if they contain it + */ +class RescaleAxeOperation : public IVisualizationWidgetVisitor { +public: + /** + * Ctor + * @param variable the variable to remove from widgets + */ + explicit RescaleAxeOperation(std::shared_ptr variable, const SqpDateTime &range); + + 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 RescaleAxeOperationPrivate; + spimpl::unique_impl_ptr impl; +}; + +#endif // SCIQLOP_RESCALEAXEOPERATION_H diff --git a/gui/src/Visualization/operations/RescaleAxeOperation.cpp b/gui/src/Visualization/operations/RescaleAxeOperation.cpp new file mode 100644 index 0000000..7145109 --- /dev/null +++ b/gui/src/Visualization/operations/RescaleAxeOperation.cpp @@ -0,0 +1,71 @@ +#include "Visualization/operations/RescaleAxeOperation.h" +#include "Visualization/VisualizationGraphWidget.h" + +Q_LOGGING_CATEGORY(LOG_RescaleAxeOperation, "RescaleAxeOperation") + +struct RescaleAxeOperation::RescaleAxeOperationPrivate { + explicit RescaleAxeOperationPrivate(std::shared_ptr variable, + const SqpDateTime &range) + : m_Variable(variable), m_Range(range) + { + } + + std::shared_ptr m_Variable; + SqpDateTime m_Range; +}; + +RescaleAxeOperation::RescaleAxeOperation(std::shared_ptr variable, + const SqpDateTime &range) + : impl{spimpl::make_unique_impl(variable, range)} +{ +} + +void RescaleAxeOperation::visitEnter(VisualizationWidget *widget) +{ + // VisualizationWidget is not intended to contain a variable + Q_UNUSED(widget) +} + +void RescaleAxeOperation::visitLeave(VisualizationWidget *widget) +{ + // VisualizationWidget is not intended to contain a variable + Q_UNUSED(widget) +} + +void RescaleAxeOperation::visitEnter(VisualizationTabWidget *tabWidget) +{ + // VisualizationTabWidget is not intended to contain a variable + Q_UNUSED(tabWidget) +} + +void RescaleAxeOperation::visitLeave(VisualizationTabWidget *tabWidget) +{ + // VisualizationTabWidget is not intended to contain a variable + Q_UNUSED(tabWidget) +} + +void RescaleAxeOperation::visitEnter(VisualizationZoneWidget *zoneWidget) +{ + // VisualizationZoneWidget is not intended to contain a variable + Q_UNUSED(zoneWidget) +} + +void RescaleAxeOperation::visitLeave(VisualizationZoneWidget *zoneWidget) +{ + // VisualizationZoneWidget is not intended to contain a variable + Q_UNUSED(zoneWidget) +} + +void RescaleAxeOperation::visit(VisualizationGraphWidget *graphWidget) +{ + if (graphWidget) { + // If the widget contains the variable, removes it + if (impl->m_Variable && graphWidget->contains(*impl->m_Variable)) { + graphWidget->setRange(impl->m_Variable, impl->m_Range); + } + } + else { + qCCritical(LOG_RescaleAxeOperation(), + "Can't visit VisualizationGraphWidget : the widget is null"); + } +}