Skip to content

Commit 3392cdf

Browse files
Merge pull request #27801 from RomanPudashkin/eye_button_fix
Fix #27791: Hide instrument and undo does not open "eye" icon
1 parent 2258c1b commit 3392cdf

File tree

4 files changed

+37
-13
lines changed

4 files changed

+37
-13
lines changed

src/instrumentsscene/view/layoutpaneltreemodel.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ void LayoutPanelTreeModel::setupNotationConnections()
312312

313313
m_notation->undoStack()->changesChannel().onReceive(this, [this](const mu::engraving::ScoreChangesRange& changes) {
314314
if (!m_layoutPanelVisible) {
315-
m_shouldUpdateSystemObjectLayers = true;
315+
m_scoreChanged = true;
316316
return;
317317
}
318318

@@ -360,6 +360,8 @@ void LayoutPanelTreeModel::onScoreChanged(const mu::engraving::ScoreChangesRange
360360
for (AbstractLayoutPanelTreeItem* item : m_rootItem->childItems()) {
361361
item->onScoreChanged(changes);
362362
}
363+
364+
m_scoreChanged = false;
363365
}
364366

365367
void LayoutPanelTreeModel::clear()
@@ -464,7 +466,12 @@ void LayoutPanelTreeModel::setLayoutPanelVisible(bool visible)
464466

465467
if (visible) {
466468
updateSelectedRows();
467-
updateSystemObjectLayers();
469+
470+
if (m_scoreChanged) {
471+
onScoreChanged();
472+
m_shouldUpdateSystemObjectLayers = true;
473+
updateSystemObjectLayers();
474+
}
468475
}
469476
}
470477

src/instrumentsscene/view/layoutpaneltreemodel.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ private slots:
146146
void setupNotationConnections();
147147

148148
void updateSelectedRows();
149-
void onScoreChanged(const mu::engraving::ScoreChangesRange& changes);
149+
void onScoreChanged(const mu::engraving::ScoreChangesRange& changes = {});
150150

151151
void clear();
152152
void deleteItems();
@@ -191,6 +191,7 @@ private slots:
191191
QHash<NotationKey, QList<muse::ID> > m_sortedPartIdList;
192192

193193
bool m_layoutPanelVisible = true;
194+
bool m_scoreChanged = false;
194195
bool m_shouldUpdateSystemObjectLayers = false;
195196

196197
bool m_dragInProgress = false;

src/instrumentsscene/view/parttreeitem.cpp

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,34 +42,47 @@ void PartTreeItem::init(const notation::Part* masterPart)
4242
}
4343

4444
const Part* part = notation()->parts()->part(masterPart->id());
45-
bool partExists = part != nullptr;
46-
bool visible = partExists && part->show();
45+
m_partExists = part != nullptr;
46+
bool visible = m_partExists && part->show();
4747

48-
if (!partExists) {
48+
if (!m_partExists) {
4949
part = masterPart;
5050
}
5151

5252
setId(part->id());
5353
setTitle(part->instrument()->nameAsPlainText());
5454
setIsVisible(visible);
55-
setSettingsAvailable(partExists);
56-
setSettingsEnabled(partExists);
57-
setIsExpandable(partExists);
58-
setIsRemovable(partExists);
55+
setSettingsAvailable(m_partExists);
56+
setSettingsEnabled(m_partExists);
57+
setIsExpandable(m_partExists);
58+
setIsRemovable(m_partExists);
5959

6060
m_part = part;
61-
m_isInited = true;
61+
m_ignoreVisibilityChange = false;
6262
}
6363

6464
const Part* PartTreeItem::part() const
6565
{
6666
return m_part;
6767
}
6868

69+
void PartTreeItem::onScoreChanged(const mu::engraving::ScoreChangesRange&)
70+
{
71+
if (!m_part) {
72+
return;
73+
}
74+
75+
setTitle(m_part->instrument()->nameAsPlainText());
76+
77+
m_ignoreVisibilityChange = true;
78+
setIsVisible(m_partExists && m_part->show());
79+
m_ignoreVisibilityChange = false;
80+
}
81+
6982
void PartTreeItem::listenVisibilityChanged()
7083
{
7184
connect(this, &AbstractLayoutPanelTreeItem::isVisibleChanged, this, [this](bool isVisible) {
72-
if (!m_isInited) {
85+
if (m_ignoreVisibilityChange) {
7386
return;
7487
}
7588

src/instrumentsscene/view/parttreeitem.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,15 @@ class PartTreeItem : public AbstractLayoutPanelTreeItem, public muse::Injectable
5959
Q_INVOKABLE void resetAllFormatting();
6060

6161
private:
62+
void onScoreChanged(const mu::engraving::ScoreChangesRange& changes) override;
63+
6264
void listenVisibilityChanged();
6365
void createAndAddPart(const muse::ID& masterPartId);
6466

6567
size_t resolveNewPartIndex(const muse::ID& partId) const;
6668

6769
const notation::Part* m_part = nullptr;
68-
bool m_isInited = false;
70+
bool m_ignoreVisibilityChange = true;
71+
bool m_partExists = false;
6972
};
7073
}

0 commit comments

Comments
 (0)