diff --git a/GUI/View/Mask/MaskGraphicsScene.cpp b/GUI/View/Mask/MaskGraphicsScene.cpp index f732881e94d338da81bf975fd07d4c20395ab2d3..e34396bbac6a93f4b07c82c919c47b7babf384fe 100644 --- a/GUI/View/Mask/MaskGraphicsScene.cpp +++ b/GUI/View/Mask/MaskGraphicsScene.cpp @@ -153,7 +153,7 @@ void MaskGraphicsScene::cancelCurrentDrawing() { if (m_drawing_in_progress) { ASSERT(m_currentItem); - m_maskContainerModel->removeMask(dynamic_cast<MaskItem*>(m_currentItem)); + m_maskContainerModel->removeMask(m_currentItem.get()); m_drawing_in_progress = false; } } @@ -297,7 +297,7 @@ void MaskGraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent* event) clearSelection(); if (m_currentItem) { // drawing ended up with item drawn, let's make it selected - if (IShapeDisplay* view = m_ItemToView[m_currentItem]) + if (IShapeDisplay* view = m_ItemToView[m_currentItem.get()]) view->setSelected(true); } else { // drawing ended without item to be draw (too short mouse move) @@ -565,7 +565,7 @@ void MaskGraphicsScene::setDrawingInProgress(bool value) if (value) gProjectDocument.value()->setModified(); // manual mask creation else - m_currentItem = nullptr; + m_currentItem.release(); } //! Sets the state of all views in pan&zoom mode. @@ -631,10 +631,10 @@ void MaskGraphicsScene::processRectangleOrEllipseItem(QGraphicsSceneMouseEvent* ASSERT_NEVER; m_maskContainerModel->insertMask(0, newMaskItem); - m_currentItem = newMaskItem; // downcast MaskItem* -> MaskRoot* + m_currentItem.reset(newMaskItem); if (m_activity != MaskEditorFlags::ROI_MODE) - dynamic_cast<MaskItem*>(m_currentItem)->setMaskValue(m_mask_value); + dynamic_cast<MaskItem*>(m_currentItem.get())->setMaskValue(m_mask_value); m_maskContainerModel->maskContItem()->updateMaskNames(); } @@ -646,13 +646,13 @@ void MaskGraphicsScene::processRectangleOrEllipseItem(QGraphicsSceneMouseEvent* const qreal ymin = m_adaptor->fromSceneY(std::min(click_pos.y(), mouse_pos.y())); const qreal ymax = m_adaptor->fromSceneY(std::max(click_pos.y(), mouse_pos.y())); - if (auto* rectItem = dynamic_cast<RectangleItem*>(m_currentItem)) { + if (auto* rectItem = dynamic_cast<RectangleItem*>(m_currentItem.get())) { // RectangleItem or RegionOfInterestItem rectItem->setXLow(xmin); rectItem->setYLow(ymax); rectItem->setXUp(xmax); rectItem->setYUp(ymin); - } else if (auto* ellItem = dynamic_cast<EllipseItem*>(m_currentItem)) { + } else if (auto* ellItem = dynamic_cast<EllipseItem*>(m_currentItem.get())) { ellItem->setXCenter((xmax + xmin) / 2); ellItem->setYCenter((ymax + ymin) / 2); ellItem->setXRadius((xmax - xmin) / 2); @@ -672,13 +672,13 @@ void MaskGraphicsScene::processPolygonItem(QGraphicsSceneMouseEvent* event) PolygonItem* new_poly = new PolygonItem; m_maskContainerModel->insertMask(0, new_poly); new_poly->setMaskValue(m_mask_value); - m_currentItem = new_poly; + m_currentItem.reset(new_poly); m_selectionModel->clearSelection(); - m_selectionModel->select(m_maskContainerModel->indexOfItem(m_currentItem), + m_selectionModel->select(m_maskContainerModel->indexOfItem(m_currentItem.get()), QItemSelectionModel::Select); m_maskContainerModel->maskContItem()->updateMaskNames(); } - ASSERT(dynamic_cast<PolygonItem*>(m_currentItem)); + ASSERT(dynamic_cast<PolygonItem*>(m_currentItem.get())); if (PolygonDisplay* polygon = currentPolygon()) { if (polygon->closePolygonIfNecessary()) { @@ -691,7 +691,7 @@ void MaskGraphicsScene::processPolygonItem(QGraphicsSceneMouseEvent* event) const QPointF click_pos = event->buttonDownScenePos(Qt::LeftButton); const double x = m_adaptor->fromSceneX(click_pos.x()); const double y = m_adaptor->fromSceneY(click_pos.y()); - dynamic_cast<PolygonItem*>(m_currentItem)->addPoint(x, y); + dynamic_cast<PolygonItem*>(m_currentItem.get())->addPoint(x, y); updateScene(); } @@ -707,10 +707,10 @@ void MaskGraphicsScene::processLineItem(QGraphicsSceneMouseEvent* event) processHorizontalLineItem(click_pos); m_selectionModel->clearSelection(); - m_selectionModel->select(m_maskContainerModel->indexOfItem(m_currentItem), + m_selectionModel->select(m_maskContainerModel->indexOfItem(m_currentItem.get()), QItemSelectionModel::Select); m_maskContainerModel->maskContItem()->updateMaskNames(); - dynamic_cast<MaskItem*>(m_currentItem)->setMaskValue(m_mask_value); + dynamic_cast<MaskItem*>(m_currentItem.get())->setMaskValue(m_mask_value); emit lineItemProcessed(); @@ -721,7 +721,7 @@ void MaskGraphicsScene::processVerticalLineItem(const QPointF& pos) { VerticalLineItem* item = new VerticalLineItem; m_maskContainerModel->insertMask(0, item); - m_currentItem = item; + m_currentItem.reset(item); item->setPosX(m_adaptor->fromSceneX(pos.x())); } @@ -729,7 +729,7 @@ void MaskGraphicsScene::processHorizontalLineItem(const QPointF& pos) { HorizontalLineItem* item = new HorizontalLineItem; m_maskContainerModel->insertMask(0, item); - m_currentItem = dynamic_cast<MaskRoot*>(item); + m_currentItem.reset(item); item->setPosY(m_adaptor->fromSceneY(pos.y())); } @@ -740,7 +740,7 @@ void MaskGraphicsScene::processMaskAllItem(QGraphicsSceneMouseEvent* event) setDrawingInProgress(true); MaskAllItem* item = new MaskAllItem; m_maskContainerModel->insertMask(0, item); - m_currentItem = item; + m_currentItem.reset(item); m_selectionModel->clearSelection(); setDrawingInProgress(false); } @@ -778,6 +778,6 @@ void MaskGraphicsScene::setZValues() PolygonDisplay* MaskGraphicsScene::currentPolygon() const { if (m_drawing_in_progress && m_activity == MaskEditorFlags::POLYGON_MODE && m_currentItem) - return dynamic_cast<PolygonDisplay*>(m_ItemToView[m_currentItem]); + return dynamic_cast<PolygonDisplay*>(m_ItemToView[m_currentItem.get()]); return nullptr; } diff --git a/GUI/View/Mask/MaskGraphicsScene.h b/GUI/View/Mask/MaskGraphicsScene.h index 6fc929e6f4f0dee0e0cf1dd42feb7e5d60cb7876..7279ec8b18041105a4e1c0e35064ae726cbd9a84 100644 --- a/GUI/View/Mask/MaskGraphicsScene.h +++ b/GUI/View/Mask/MaskGraphicsScene.h @@ -119,7 +119,7 @@ private: bool m_block_selection = false; bool m_mouse_is_pressed = false; Data2DItem* m_data2DItem = nullptr; - MaskRoot* m_currentItem = nullptr; + std::unique_ptr<MaskItem> m_currentItem; QPointF m_mouse_position; bool m_drawing_in_progress; MaskEditorFlags::MaskValue m_mask_value;