From 7b134d8b62bb9819ea152e630f1ba0e0e6314760 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Mon, 6 Sep 2021 17:44:27 +0300 Subject: [PATCH] Clear selection when switch active sheet. --- src/app/puzzle/carousel/vpcarrousel.cpp | 6 ++++++ src/app/puzzle/layout/vpsheet.cpp | 22 +++++++++++++++++++++ src/app/puzzle/layout/vpsheet.h | 2 ++ src/app/puzzle/scene/vpmaingraphicsview.cpp | 14 +------------ 4 files changed, 31 insertions(+), 13 deletions(-) diff --git a/src/app/puzzle/carousel/vpcarrousel.cpp b/src/app/puzzle/carousel/vpcarrousel.cpp index 0957edaa0..60e040116 100644 --- a/src/app/puzzle/carousel/vpcarrousel.cpp +++ b/src/app/puzzle/carousel/vpcarrousel.cpp @@ -203,6 +203,12 @@ void VPCarrousel::on_ActivePieceListChanged(int index) if (not sheet.isNull()) { + VPSheetPtr activeSheet = layout->GetFocusedSheet(); + if (not activeSheet.isNull()) + { + activeSheet->ClearSelection(); + } + m_ignoreActiveSheetChange = true; layout->SetFocusedSheet(sheet); m_ignoreActiveSheetChange = false; diff --git a/src/app/puzzle/layout/vpsheet.cpp b/src/app/puzzle/layout/vpsheet.cpp index 7959bc784..c32227a66 100644 --- a/src/app/puzzle/layout/vpsheet.cpp +++ b/src/app/puzzle/layout/vpsheet.cpp @@ -595,6 +595,28 @@ auto VPSheet::SceneData() const -> VPSheetSceneData * return m_sceneData; } +//--------------------------------------------------------------------------------------------------------------------- +void VPSheet::ClearSelection() const +{ + QList selectedPieces = GetSelectedPieces(); + for (const auto& piece : selectedPieces) + { + if (piece->IsSelected()) + { + piece->SetSelected(false); + } + } + + if (not selectedPieces.isEmpty()) + { + VPLayoutPtr layout = GetLayout(); + if (not layout.isNull()) + { + emit GetLayout()->PieceSelectionChanged(VPPiecePtr()); + } + } +} + //--------------------------------------------------------------------------------------------------------------------- auto VPSheet::SheetUnits() const -> Unit { diff --git a/src/app/puzzle/layout/vpsheet.h b/src/app/puzzle/layout/vpsheet.h index 45f60e1ff..1dff2aa9c 100644 --- a/src/app/puzzle/layout/vpsheet.h +++ b/src/app/puzzle/layout/vpsheet.h @@ -255,6 +255,8 @@ public: VPSheetSceneData *SceneData() const; + void ClearSelection() const; + public slots: void CheckPiecePositionValidity(const VPPiecePtr &piece) const; diff --git a/src/app/puzzle/scene/vpmaingraphicsview.cpp b/src/app/puzzle/scene/vpmaingraphicsview.cpp index f5d1f8c90..b72fe81d9 100644 --- a/src/app/puzzle/scene/vpmaingraphicsview.cpp +++ b/src/app/puzzle/scene/vpmaingraphicsview.cpp @@ -457,19 +457,7 @@ void VPMainGraphicsView::on_ItemClicked(QGraphicsItem *item) VPSheetPtr sheet = layout->GetFocusedSheet(); if (not sheet.isNull()) { - QList selectedPieces = sheet->GetSelectedPieces(); - for (const auto& piece : selectedPieces) - { - if (piece->IsSelected()) - { - piece->SetSelected(false); - } - } - - if (not selectedPieces.isEmpty()) - { - emit layout->PieceSelectionChanged(VPPiecePtr()); - } + sheet->ClearSelection(); } } }