diff --git a/gui/include/Visualization/VisualizationGraphWidget.h b/gui/include/Visualization/VisualizationGraphWidget.h index 56ba511..8f97ea9 100644 --- a/gui/include/Visualization/VisualizationGraphWidget.h +++ b/gui/include/Visualization/VisualizationGraphWidget.h @@ -19,6 +19,7 @@ class SqpRange; class Variable; class VisualizationWidget; class VisualizationZoneWidget; +class VisualizationSelectionZoneItem; namespace Ui { class VisualizationGraphWidget; @@ -56,11 +57,13 @@ public: SqpRange graphRange() const noexcept; void setGraphRange(const SqpRange &range); + // Zones /// Returns the ranges of all the selection zones on the graph QVector selectionZoneRanges() const; - /// Adds new selection zones in the graph void addSelectionZones(const QVector &ranges); + /// Removes the specified selection zone + void removeSelectionZone(VisualizationSelectionZoneItem *selectionZone); /// Undo the last zoom done with a zoom box void undoZoom(); diff --git a/gui/include/Visualization/VisualizationSelectionZoneItem.h b/gui/include/Visualization/VisualizationSelectionZoneItem.h index 2bc3c93..0629ddd 100644 --- a/gui/include/Visualization/VisualizationSelectionZoneItem.h +++ b/gui/include/Visualization/VisualizationSelectionZoneItem.h @@ -5,12 +5,16 @@ #include #include +class VisualizationGraphWidget; + class VisualizationSelectionZoneItem : public QCPItemRect { public: VisualizationSelectionZoneItem(QCustomPlot *plot); virtual ~VisualizationSelectionZoneItem(); + VisualizationGraphWidget *parentGraphWidget() const noexcept; + void setName(const QString &name); QString name() const; diff --git a/gui/src/Visualization/VisualizationActionManager.cpp b/gui/src/Visualization/VisualizationActionManager.cpp index aa109eb..fbdbed1 100644 --- a/gui/src/Visualization/VisualizationActionManager.cpp +++ b/gui/src/Visualization/VisualizationActionManager.cpp @@ -1,4 +1,6 @@ #include "Visualization/VisualizationActionManager.h" +#include "Visualization/VisualizationGraphWidget.h" +#include "Visualization/VisualizationSelectionZoneItem.h" #include #include @@ -8,7 +10,13 @@ VisualizationActionManager::VisualizationActionManager() {} void VisualizationActionManager::installSelectionZoneActions() { auto &actionController = sqpApp->actionsGuiController(); - actionController.addSectionZoneAction("Remove Selected Zone(s)", [](auto &zone) {}); - actionController.addSectionZoneAction("Align Left", [](auto &zone) {}); - actionController.addSectionZoneAction("Align Right", [](auto &zone) {}); + actionController.addSectionZoneAction("Remove Selected Zone(s)", [](auto &zones) { + for (auto selectionZone : zones) { + if (auto graph = selectionZone->parentGraphWidget()) { + graph->removeSelectionZone(selectionZone); + } + } + }); + actionController.addSectionZoneAction("Align Left", [](auto &zones) {}); + actionController.addSectionZoneAction("Align Right", [](auto &zones) {}); } diff --git a/gui/src/Visualization/VisualizationGraphWidget.cpp b/gui/src/Visualization/VisualizationGraphWidget.cpp index 96b96ba..43ff586 100644 --- a/gui/src/Visualization/VisualizationGraphWidget.cpp +++ b/gui/src/Visualization/VisualizationGraphWidget.cpp @@ -378,6 +378,14 @@ void VisualizationGraphWidget::addSelectionZones(const QVector &ranges plot().replot(QCustomPlot::rpQueuedReplot); } +void VisualizationGraphWidget::removeSelectionZone(VisualizationSelectionZoneItem *selectionZone) +{ + impl->m_SelectionZones.removeAll(selectionZone); + plot().removeItem(selectionZone); + plot().replot(QCustomPlot::rpQueuedReplot); + parentVisualizationWidget()->selectionZoneManager().setSelected(selectionZone, false); +} + void VisualizationGraphWidget::undoZoom() { auto zoom = impl->m_ZoomStack.pop(); diff --git a/gui/src/Visualization/VisualizationSelectionZoneItem.cpp b/gui/src/Visualization/VisualizationSelectionZoneItem.cpp index c29e8fc..fa67517 100644 --- a/gui/src/Visualization/VisualizationSelectionZoneItem.cpp +++ b/gui/src/Visualization/VisualizationSelectionZoneItem.cpp @@ -1,4 +1,5 @@ #include "Visualization/VisualizationSelectionZoneItem.h" +#include "Visualization/VisualizationGraphWidget.h" const QString &DEFAULT_COLOR = QStringLiteral("#E79D41"); @@ -98,6 +99,16 @@ VisualizationSelectionZoneItem::~VisualizationSelectionZoneItem() impl->m_Plot->removeItem(impl->m_LeftLine); } +VisualizationGraphWidget *VisualizationSelectionZoneItem::parentGraphWidget() const noexcept +{ + auto parent = impl->m_Plot->parentWidget(); + while (parent != nullptr && !qobject_cast(parent)) { + parent = parent->parentWidget(); + } + + return qobject_cast(parent); +} + void VisualizationSelectionZoneItem::setName(const QString &name) { if (name.isEmpty() && impl->m_NameLabelItem) {