diff --git a/src/instrumentsscene/view/layoutpaneltreemodel.cpp b/src/instrumentsscene/view/layoutpaneltreemodel.cpp index f82063ff42fb8..e6e8c2d67e12f 100644 --- a/src/instrumentsscene/view/layoutpaneltreemodel.cpp +++ b/src/instrumentsscene/view/layoutpaneltreemodel.cpp @@ -989,7 +989,8 @@ void LayoutPanelTreeModel::updateSystemObjectLayers() m_shouldUpdateSystemObjectLayers = false; // Create copy, because we're going to modify them - std::vector newSystemObjectStaves = m_masterNotation->notation()->parts()->systemObjectStaves(); + const INotationPartsPtr notationParts = m_masterNotation->notation()->parts(); + std::vector newSystemObjectStaves = notationParts->systemObjectStaves(); QList children = m_rootItem->childItems(); // Remove old system object layers @@ -1016,6 +1017,8 @@ void LayoutPanelTreeModel::updateSystemObjectLayers() endRemoveRows(); } + SystemObjectGroupsByStaff systemObjects = collectSystemObjectGroups(notationParts->systemObjectStaves()); + // Update position of existing layers if changed for (SystemObjectsLayerTreeItem* layerItem : existingSystemObjectLayers) { const PartTreeItem* partItem = findPartItemByStaff(layerItem->staff()); @@ -1032,16 +1035,10 @@ void LayoutPanelTreeModel::updateSystemObjectLayers() endMoveRows(); } - layerItem->updateSystemObjects(); - } - - if (newSystemObjectStaves.empty()) { - return; + layerItem->setSystemObjects(systemObjects[layerItem->staff()]); } // Create new system object layers - SystemObjectGroupsByStaff systemObjects = collectSystemObjectGroups(newSystemObjectStaves); - for (const Staff* staff : newSystemObjectStaves) { for (const PartTreeItem* partItem : partItems) { if (staff->part() != partItem->part()) { diff --git a/src/instrumentsscene/view/systemobjectslayertreeitem.cpp b/src/instrumentsscene/view/systemobjectslayertreeitem.cpp index a4b7d21a7944e..78979da7ff34b 100644 --- a/src/instrumentsscene/view/systemobjectslayertreeitem.cpp +++ b/src/instrumentsscene/view/systemobjectslayertreeitem.cpp @@ -88,16 +88,13 @@ SystemObjectsLayerTreeItem::SystemObjectsLayerTreeItem(IMasterNotationPtr master void SystemObjectsLayerTreeItem::init(const Staff* staff, const SystemObjectGroups& systemObjects) { - m_systemObjectGroups = systemObjects; - setStaff(staff); + setSystemObjects(systemObjects); bool isTopLayer = staff->score()->staff(0) == staff; setIsRemovable(!isTopLayer); setIsSelectable(!isTopLayer); - updateState(); - connect(this, &AbstractLayoutPanelTreeItem::isVisibleChanged, this, [this](bool isVisible) { onVisibleChanged(isVisible); }); @@ -123,9 +120,9 @@ void SystemObjectsLayerTreeItem::setStaff(const Staff* staff) } } -void SystemObjectsLayerTreeItem::updateSystemObjects() +void SystemObjectsLayerTreeItem::setSystemObjects(const SystemObjectGroups& systemObjects) { - m_systemObjectGroups = collectSystemObjectGroups(m_staff); + m_systemObjectGroups = systemObjects; updateState(); } diff --git a/src/instrumentsscene/view/systemobjectslayertreeitem.h b/src/instrumentsscene/view/systemobjectslayertreeitem.h index bbff05ca6d5fd..ad6beefc1d51a 100644 --- a/src/instrumentsscene/view/systemobjectslayertreeitem.h +++ b/src/instrumentsscene/view/systemobjectslayertreeitem.h @@ -40,7 +40,7 @@ class SystemObjectsLayerTreeItem : public AbstractLayoutPanelTreeItem const mu::engraving::Staff* staff() const; void setStaff(const mu::engraving::Staff* staff); - void updateSystemObjects(); + void setSystemObjects(const SystemObjectGroups& systemObjects); Q_INVOKABLE QString staffId() const; Q_INVOKABLE bool canAcceptDrop(const QVariant& item) const override;