diff --git a/gui/include/Actions/SelectionZoneAction.h b/gui/include/Actions/SelectionZoneAction.h index dffc079..4e83c2e 100644 --- a/gui/include/Actions/SelectionZoneAction.h +++ b/gui/include/Actions/SelectionZoneAction.h @@ -40,6 +40,11 @@ public: /// Sets the function which determine if the action should be enabled or disabled void setEnableFunction(EnableFunction fun); + /// Sets the shortcut displayed by the action. + /// Note: The shortcut is only displayed and not active because it is not permanently stored + void setDisplayedShortcut(const QKeySequence &shortcut); + QKeySequence displayedShortcut() const; + /// The name of the action QString name() const noexcept; diff --git a/gui/src/Actions/SelectionZoneAction.cpp b/gui/src/Actions/SelectionZoneAction.cpp index 26cf825..b16ae98 100644 --- a/gui/src/Actions/SelectionZoneAction.cpp +++ b/gui/src/Actions/SelectionZoneAction.cpp @@ -11,6 +11,7 @@ struct SelectionZoneAction::SelectionZoneActionPrivate { } QString m_Name; + QKeySequence m_DisplayedShortcut; SelectionZoneAction::ExecuteFunction m_Fun; SelectionZoneAction::EnableFunction m_EnableFun = [](auto zones) { return true; }; }; @@ -25,6 +26,16 @@ void SelectionZoneAction::setEnableFunction(EnableFunction fun) impl->m_EnableFun = std::move(fun); } +void SelectionZoneAction::setDisplayedShortcut(const QKeySequence &shortcut) +{ + impl->m_DisplayedShortcut = shortcut; +} + +QKeySequence SelectionZoneAction::displayedShortcut() const +{ + return impl->m_DisplayedShortcut; +} + QString SelectionZoneAction::name() const noexcept { return impl->m_Name; diff --git a/gui/src/Visualization/VisualizationActionManager.cpp b/gui/src/Visualization/VisualizationActionManager.cpp index 5639d6d..e1d6a08 100644 --- a/gui/src/Visualization/VisualizationActionManager.cpp +++ b/gui/src/Visualization/VisualizationActionManager.cpp @@ -11,13 +11,15 @@ void VisualizationActionManager::installSelectionZoneActions() { auto &actionController = sqpApp->actionsGuiController(); - actionController.addSectionZoneAction("Remove Selected Zone(s)", [](auto zones) { - for (auto selectionZone : zones) { - if (auto graph = selectionZone->parentGraphWidget()) { - graph->removeSelectionZone(selectionZone); - } - } - }); + auto removeZonesAction + = actionController.addSectionZoneAction("Remove Selected Zone(s)", [](auto zones) { + for (auto selectionZone : zones) { + if (auto graph = selectionZone->parentGraphWidget()) { + graph->removeSelectionZone(selectionZone); + } + } + }); + removeZonesAction->setDisplayedShortcut(QKeySequence::Delete); auto alignEnableFuntion = [](auto items) { return items.count() > 1; }; diff --git a/gui/src/Visualization/VisualizationGraphWidget.cpp b/gui/src/Visualization/VisualizationGraphWidget.cpp index 4f13be3..b7d5b46 100644 --- a/gui/src/Visualization/VisualizationGraphWidget.cpp +++ b/gui/src/Visualization/VisualizationGraphWidget.cpp @@ -380,10 +380,16 @@ void VisualizationGraphWidget::addSelectionZones(const QVector &ranges void VisualizationGraphWidget::removeSelectionZone(VisualizationSelectionZoneItem *selectionZone) { + parentVisualizationWidget()->selectionZoneManager().setSelected(selectionZone, false); + + if (impl->m_HoveredZone == selectionZone) { + impl->m_HoveredZone = nullptr; + setCursor(Qt::ArrowCursor); + } + impl->m_SelectionZones.removeAll(selectionZone); plot().removeItem(selectionZone); plot().replot(QCustomPlot::rpQueuedReplot); - parentVisualizationWidget()->selectionZoneManager().setSelected(selectionZone, false); } void VisualizationGraphWidget::undoZoom() @@ -625,6 +631,7 @@ void VisualizationGraphWidget::onGraphMenuRequested(const QPoint &pos) noexcept for (auto zoneAction : zoneActions) { auto action = graphMenu.addAction(zoneAction->name()); action->setEnabled(zoneAction->isEnabled(selectedItems)); + action->setShortcut(zoneAction->displayedShortcut()); QObject::connect(action, &QAction::triggered, [zoneAction, selectedItems]() { zoneAction->execute(selectedItems); }); } diff --git a/gui/src/Visualization/VisualizationSelectionZoneManager.cpp b/gui/src/Visualization/VisualizationSelectionZoneManager.cpp index f90009b..0d7d8bd 100644 --- a/gui/src/Visualization/VisualizationSelectionZoneManager.cpp +++ b/gui/src/Visualization/VisualizationSelectionZoneManager.cpp @@ -24,7 +24,7 @@ void VisualizationSelectionZoneManager::setSelected(VisualizationSelectionZoneIt { if (value != item->selected()) { item->setSelected(value); - item->parentPlot()->replot(); + item->parentPlot()->replot(QCustomPlot::rpQueuedReplot); } if (!value && impl->m_SelectedItems.contains(item)) { diff --git a/gui/src/Visualization/VisualizationWidget.cpp b/gui/src/Visualization/VisualizationWidget.cpp index d7be09f..f406a0e 100644 --- a/gui/src/Visualization/VisualizationWidget.cpp +++ b/gui/src/Visualization/VisualizationWidget.cpp @@ -2,6 +2,7 @@ #include "Visualization/IVisualizationWidgetVisitor.h" #include "Visualization/VisualizationActionManager.h" #include "Visualization/VisualizationGraphWidget.h" +#include "Visualization/VisualizationSelectionZoneItem.h" #include "Visualization/VisualizationSelectionZoneManager.h" #include "Visualization/VisualizationTabWidget.h" #include "Visualization/VisualizationZoneWidget.h" @@ -88,8 +89,21 @@ VisualizationWidget::VisualizationWidget(QWidget *parent) sqpApp->dragDropGuiController().addDragDropTabBar(ui->tabWidget->tabBar()); + // Actions impl->m_ActionManager.installSelectionZoneActions(); + auto removeZoneAction = new QAction("Remove selected zone(s)"); + removeZoneAction->setShortcut(QKeySequence::Delete); + connect(removeZoneAction, &QAction::triggered, [this]() { + auto selection = impl->m_ZoneSelectionManager->selectedItems(); + for (auto selectionZone : selection) { + if (auto graph = selectionZone->parentGraphWidget()) { + graph->removeSelectionZone(selectionZone); + } + } + }); + addAction(removeZoneAction); + // Adds default tab addTabView(); }