Skip to content

Commit 31a4bf5

Browse files
committed
Fix #29716 adding fret diagram to harmony with parts and simplify code
We can use Score::undoChangeParent instead of FretLinkHarmony
1 parent f1545c7 commit 31a4bf5

File tree

4 files changed

+4
-66
lines changed

4 files changed

+4
-66
lines changed

src/engraving/dom/edit.cpp

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3980,11 +3980,7 @@ void Score::cmdDeleteSelection()
39803980
FretDiagram* fretDiagram = toFretDiagram(e);
39813981
Harmony* harmony = fretDiagram->harmony();
39823982
if (harmony) {
3983-
for (EngravingObject* o: fretDiagram->linkList()) {
3984-
FretDiagram* linkedDiagram = toFretDiagram(o);
3985-
Harmony* linkedHarmony = linkedDiagram->harmony();
3986-
undo(new FretLinkHarmony(linkedDiagram, linkedHarmony, true /* unlink */));
3987-
}
3983+
undoChangeParent(harmony, fretDiagram->segment(), track2staff(fretDiagram->track()));
39883984
elSelectedAfterDeletion = harmony;
39893985
}
39903986
} else if (e->isHarmony()) {
@@ -6987,21 +6983,7 @@ void Score::undoAddElement(EngravingItem* element, bool addToLinkedStaves, bool
69876983
ne->setTrack(linkedTrack);
69886984
ne->setParent(seg);
69896985

6990-
// make harmony child of fret diagram if possible
6991-
if (ne->isHarmony()) {
6992-
for (EngravingItem* segel : segment->annotations()) {
6993-
if (segel && segel->isFretDiagram() && segel->track() == linkedTrack && !toFretDiagram(segel)->harmony()) {
6994-
segel->add(ne);
6995-
break;
6996-
}
6997-
}
6998-
} else if (ne->isFretDiagram()) {
6999-
// update track of child harmony
7000-
FretDiagram* fd = toFretDiagram(ne);
7001-
if (fd->harmony()) {
7002-
fd->harmony()->setTrack(linkedTrack);
7003-
}
7004-
} else if (ne->isStringTunings()) {
6986+
if (ne->isStringTunings()) {
70056987
StringTunings* stringTunings = toStringTunings(ne);
70066988
if (stringTunings->stringData()->isNull()) {
70076989
const StringData* stringData = stringTunings->part()->stringData(tick, staff->idx());

src/engraving/dom/undo.cpp

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3557,31 +3557,6 @@ void ChangeTieJumpPointActive::flip(EditData*)
35573557
m_active = oldActive;
35583558
}
35593559

3560-
FretLinkHarmony::FretLinkHarmony(FretDiagram* diagram, Harmony* harmony, bool unlink)
3561-
{
3562-
m_fretDiagram = diagram;
3563-
m_harmony = harmony;
3564-
m_unlink = unlink;
3565-
}
3566-
3567-
void FretLinkHarmony::undo(EditData*)
3568-
{
3569-
if (m_unlink) {
3570-
m_fretDiagram->linkHarmony(m_harmony);
3571-
} else {
3572-
m_fretDiagram->unlinkHarmony();
3573-
}
3574-
}
3575-
3576-
void FretLinkHarmony::redo(EditData*)
3577-
{
3578-
if (m_unlink) {
3579-
m_fretDiagram->unlinkHarmony();
3580-
} else {
3581-
m_fretDiagram->linkHarmony(m_harmony);
3582-
}
3583-
}
3584-
35853560
RemoveFretDiagramFromFretBox::RemoveFretDiagramFromFretBox(FretDiagram* f)
35863561
: m_fretDiagram(f)
35873562
{

src/engraving/dom/undo.h

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1806,25 +1806,6 @@ class FretClear : public UndoCommand
18061806
UNDO_CHANGED_OBJECTS({ diagram })
18071807
};
18081808

1809-
class FretLinkHarmony : public UndoCommand
1810-
{
1811-
OBJECT_ALLOCATOR(engraving, FretLinkHarmony)
1812-
1813-
FretDiagram* m_fretDiagram = nullptr;
1814-
Harmony* m_harmony = nullptr;
1815-
bool m_unlink = false;
1816-
1817-
void undo(EditData*) override;
1818-
void redo(EditData*) override;
1819-
1820-
public:
1821-
FretLinkHarmony(FretDiagram*, Harmony*, bool unlink = false);
1822-
1823-
UNDO_TYPE(CommandType::FretLinkHarmony)
1824-
UNDO_NAME("FretLinkHarmony")
1825-
UNDO_CHANGED_OBJECTS({ m_fretDiagram })
1826-
};
1827-
18281809
class RemoveFretDiagramFromFretBox : public UndoCommand
18291810
{
18301811
OBJECT_ALLOCATOR(engraving, RemoveFretDiagramFromFretBox)

src/notation/internal/notationinteraction.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7856,11 +7856,11 @@ void NotationInteraction::addFretboardDiagram()
78567856
diagram->setTrack(element->track());
78577857

78587858
Harmony* harmony = toHarmony(element);
7859-
78607859
diagram->updateDiagram(harmony->harmonyName());
7861-
score->undo(new FretLinkHarmony(diagram, harmony));
78627860

7861+
diagram->setParent(harmony->parent());
78637862
score->undoAddElement(diagram);
7863+
score->undoChangeParent(harmony, diagram, track2staff(element->track()));
78647864

78657865
lastAddedDiagram = diagram;
78667866
}

0 commit comments

Comments
 (0)