From 6da30b7eabc0414edb791b4f2d07eb4367d2ba62 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <svechnikovmv@gmail.com> Date: Mon, 13 Feb 2023 12:15:38 +0100 Subject: [PATCH] moving projection switches tab --- .../IntensityDataProjectionsWidget.cpp | 18 +++++++------ .../Projection/ProjectionsEditorCanvas.cpp | 25 +++++++++++-------- GUI/View/Projection/ProjectionsEditorCanvas.h | 3 +++ 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/GUI/View/Projection/IntensityDataProjectionsWidget.cpp b/GUI/View/Projection/IntensityDataProjectionsWidget.cpp index 423dfcc30a0..b6111069bbc 100644 --- a/GUI/View/Projection/IntensityDataProjectionsWidget.cpp +++ b/GUI/View/Projection/IntensityDataProjectionsWidget.cpp @@ -114,7 +114,7 @@ void IntensityDataProjectionsWidget::setup_connections() { // tool panel request is propagated from editorActions to this MaskEditor connect(m_editorActions, &ProjectionsEditorActions::resetViewRequest, m_projectionsCanvas, - &ProjectionsEditorCanvas::onResetViewRequest); + &ProjectionsEditorCanvas::onResetViewRequest, Qt::UniqueConnection); // tool panel request is propagated from editorActions to this MaskEditor connect(m_editorActions, &ProjectionsEditorActions::propertyPanelRequest, @@ -122,27 +122,31 @@ void IntensityDataProjectionsWidget::setup_connections() // selection/drawing activity is propagated from Toolbar to graphics scene connect(m_toolbar, &ProjectionsToolbar::activityModeChanged, m_projectionsCanvas, - &ProjectionsEditorCanvas::onActivityModeChanged); + &ProjectionsEditorCanvas::onActivityModeChanged, Qt::UniqueConnection); // selection/drawing activity is propagated from Toolbar to Projections Widget connect(m_toolbar, &ProjectionsToolbar::activityModeChanged, m_projectionsWidget, - &ProjectionsWidget::onActivityModeChanged); + &ProjectionsWidget::onActivityModeChanged, Qt::UniqueConnection); // click on projections tab is propagated to tool bar connect(m_projectionsWidget, &ProjectionsWidget::changeActivityRequest, m_toolbar, - &ProjectionsToolbar::onProjectionTabChange); + &ProjectionsToolbar::onProjectionTabChange, Qt::UniqueConnection); // Delete request is propagated from canvas to actions connect(m_projectionsCanvas, &ProjectionsEditorCanvas::deleteSelectedRequest, m_editorActions, - &ProjectionsEditorActions::onDeleteAction); + &ProjectionsEditorActions::onDeleteAction, Qt::UniqueConnection); + + // moving projection automatically switches projections tab + connect(m_projectionsCanvas, &ProjectionsEditorCanvas::changeProjectionsTabRequest, m_projectionsWidget, + &ProjectionsWidget::onActivityModeChanged, Qt::UniqueConnection); // space bar push (request for zoom mode) is propagated from graphics view to Toolbar connect(m_projectionsCanvas, &ProjectionsEditorCanvas::changeActivityRequest, m_toolbar, - &ProjectionsToolbar::onChangeActivityRequest); + &ProjectionsToolbar::onChangeActivityRequest, Qt::UniqueConnection); // ColorMap margins changed, canvas -> projection widget connect(m_projectionsCanvas, &ProjectionsEditorCanvas::marginsChanged, m_projectionsWidget, - &ProjectionsWidget::onMarginsChanged); + &ProjectionsWidget::onMarginsChanged, Qt::UniqueConnection); m_toolbar->onChangeActivityRequest(MaskEditorFlags::HORIZONTAL_LINE_MODE); } diff --git a/GUI/View/Projection/ProjectionsEditorCanvas.cpp b/GUI/View/Projection/ProjectionsEditorCanvas.cpp index 3c80a1703fc..4782eec59be 100644 --- a/GUI/View/Projection/ProjectionsEditorCanvas.cpp +++ b/GUI/View/Projection/ProjectionsEditorCanvas.cpp @@ -47,6 +47,10 @@ ProjectionsEditorCanvas::ProjectionsEditorCanvas(QWidget* parent) &ProjectionsEditorCanvas::changeActivityRequest); connect(m_view, &MaskGraphicsView::deleteSelectedRequest, this, &ProjectionsEditorCanvas::deleteSelectedRequest); + + // automatically switch to the appropriate projection tab + connect(m_scene, &MaskGraphicsScene::lineItemMoved, this, + &ProjectionsEditorCanvas::onLineItemMoved, Qt::UniqueConnection); } void ProjectionsEditorCanvas::setContext(IntensityDataItem* intensityItem) @@ -64,9 +68,9 @@ void ProjectionsEditorCanvas::setContext(IntensityDataItem* intensityItem) // notify ProjectionPlot about the changes connect(m_scene, &MaskGraphicsScene::lineItemProcessed, intensityItem, - &IntensityDataItem::projectionCreated, Qt::UniqueConnection); + &IntensityDataItem::projectionCreated, Qt::UniqueConnection); connect(m_scene, &MaskGraphicsScene::lineItemMoved, intensityItem, - &IntensityDataItem::projectionPositionChanged, Qt::UniqueConnection); + &IntensityDataItem::projectionPositionChanged, Qt::UniqueConnection); connect(m_scene, &MaskGraphicsScene::lineItemDeleted, intensityItem, &IntensityDataItem::projectionGone, Qt::UniqueConnection); @@ -109,10 +113,6 @@ void ProjectionsEditorCanvas::onEnteringColorMap() m_liveProjection->setIsVisibleValue(false); m_liveProjection->setParent(this); - // TODO: correct this vvv - // m_liveProjection->setParentAndModel( - // this, m_intensityDataItem->projectionContainerItem()->model()); - // notify ProjectionPlot about the changes connect(m_liveProjection, &MaskItem::maskGeometryChanged, m_intensityDataItem, &IntensityDataItem::projectionPositionChanged, Qt::UniqueConnection); @@ -131,11 +131,6 @@ void ProjectionsEditorCanvas::onLeavingColorMap() if (m_liveProjection) { disconnect(m_liveProjection, nullptr, m_intensityDataItem, nullptr); emit m_intensityDataItem->projectionGone(m_liveProjection); - - // TODO: check if calling these SessionItem method is necessary - // m_liveProjection->itemParent()->takeRow( - - // m_liveProjection->itemParent()->rowOfChild(m_liveProjection)); delete m_liveProjection; m_liveProjection = nullptr; } @@ -174,6 +169,14 @@ void ProjectionsEditorCanvas::onActivityModeChanged(MaskEditorFlags::Activity va onLeavingColorMap(); } +void ProjectionsEditorCanvas::onLineItemMoved(MaskItemObject* sender) +{ + if(dynamic_cast<HorizontalLineItem*>(sender) && (m_currentActivity != MaskEditorFlags::VERTICAL_LINE_MODE)) + emit changeProjectionsTabRequest(MaskEditorFlags::HORIZONTAL_LINE_MODE); + if(dynamic_cast<VerticalLineItem*>(sender) && (m_currentActivity != MaskEditorFlags::HORIZONTAL_LINE_MODE)) + emit changeProjectionsTabRequest(MaskEditorFlags::VERTICAL_LINE_MODE); +} + void ProjectionsEditorCanvas::setColorMap(ColorMap* colorMap) { ASSERT(colorMap); diff --git a/GUI/View/Projection/ProjectionsEditorCanvas.h b/GUI/View/Projection/ProjectionsEditorCanvas.h index a051176b84b..ff675f21e38 100644 --- a/GUI/View/Projection/ProjectionsEditorCanvas.h +++ b/GUI/View/Projection/ProjectionsEditorCanvas.h @@ -27,6 +27,7 @@ class IntensityDataItem; class ColorMap; class PlotStatusLabel; class MaskItem; +class MaskItemObject; //! Holds a graphics scene to draw projections on top of ColorMap. Being a part //! of ProjectionEditor, provides interaction logic between graphics scene and ProjectionsWidget. @@ -46,6 +47,7 @@ public: void setSelectionModel(QItemSelectionModel* model); signals: + void changeProjectionsTabRequest(MaskEditorFlags::Activity); void changeActivityRequest(MaskEditorFlags::Activity); void deleteSelectedRequest(); void marginsChanged(double left, double right); @@ -58,6 +60,7 @@ public slots: void onActivityModeChanged(MaskEditorFlags::Activity value); private: + void onLineItemMoved(MaskItemObject *sender); void setColorMap(ColorMap* colorMap); void setConnected(bool isConnected); -- GitLab