From 8d8098157264a20c01d1cd4d307289bcaa3c8386 Mon Sep 17 00:00:00 2001 From: Marc Sabatella Date: Fri, 9 Jun 2017 20:15:16 -0600 Subject: [PATCH] fix #198486: copy fretboard list --- libmscore/paste.cpp | 42 +++++++++++++++++++++++++++--------------- libmscore/select.cpp | 9 ++++++++- 2 files changed, 35 insertions(+), 16 deletions(-) diff --git a/libmscore/paste.cpp b/libmscore/paste.cpp index 89d108e8ae2a8..8a88dcab2dc2a 100644 --- a/libmscore/paste.cpp +++ b/libmscore/paste.cpp @@ -16,6 +16,7 @@ #include "staff.h" #include "measure.h" #include "harmony.h" +#include "fret.h" #include "breath.h" #include "beam.h" #include "figuredbass.h" @@ -634,10 +635,11 @@ void Score::pasteSymbols(XmlReader& e, ChordRest* dst) segDelta = e.readInt(); else { - if (tag == "Harmony") { + if (tag == "Harmony" || tag == "FretDiagram") { // // Harmony elements (= chord symbols) are positioned respecting // the original tickOffset: advance to destTick (or near) + // same for FretDiagram elements // Segment* harmSegm; for (harmSegm = startSegm; harmSegm && (harmSegm->tick() < destTick); @@ -656,21 +658,31 @@ void Score::pasteSymbols(XmlReader& e, ChordRest* dst) e.skipCurrentElement(); // ignore continue; } - Harmony* el = new Harmony(this); - el->setTrack(trackZeroVoice(destTrack)); - el->read(e); - el->setTrack(trackZeroVoice(destTrack)); - // transpose - Part* partDest = staff(track2staff(destTrack))->part(); - Interval interval = partDest->instrument(destTick)->transpose(); - if (!styleB(StyleIdx::concertPitch) && !interval.isZero()) { - interval.flip(); - int rootTpc = transposeTpc(el->rootTpc(), interval, true); - int baseTpc = transposeTpc(el->baseTpc(), interval, true); - undoTransposeHarmony(el, rootTpc, baseTpc); + if (tag == "Harmony") { + Harmony* el = new Harmony(this); + el->setTrack(trackZeroVoice(destTrack)); + el->read(e); + el->setTrack(trackZeroVoice(destTrack)); + // transpose + Part* partDest = staff(track2staff(destTrack))->part(); + Interval interval = partDest->instrument(destTick)->transpose(); + if (!styleB(StyleIdx::concertPitch) && !interval.isZero()) { + interval.flip(); + int rootTpc = transposeTpc(el->rootTpc(), interval, true); + int baseTpc = transposeTpc(el->baseTpc(), interval, true); + undoTransposeHarmony(el, rootTpc, baseTpc); + } + el->setParent(harmSegm); + undoAddElement(el); + } + else if (tag == "FretDiagram") { + FretDiagram* el = new FretDiagram(this); + el->setTrack(trackZeroVoice(destTrack)); + el->read(e); + el->setTrack(trackZeroVoice(destTrack)); + el->setParent(harmSegm); + undoAddElement(el); } - el->setParent(harmSegm); - undoAddElement(el); } else { // diff --git a/libmscore/select.cpp b/libmscore/select.cpp index e701e0caa010d..05469631772c4 100644 --- a/libmscore/select.cpp +++ b/libmscore/select.cpp @@ -24,6 +24,7 @@ #include "figuredbass.h" #include "glissando.h" #include "harmony.h" +#include "fret.h" #include "hook.h" #include "input.h" #include "limits.h" @@ -780,7 +781,6 @@ Enabling copying of more element types requires enabling pasting in Score::paste case Element::Type::STAFF_TEXT: case Element::Type::REHEARSAL_MARK: case Element::Type::INSTRUMENT_CHANGE: - case Element::Type::FRET_DIAGRAM: case Element::Type::BEND: case Element::Type::TREMOLOBAR: case Element::Type::VOLTA: @@ -853,6 +853,13 @@ Enabling copying of more element types requires enabling pasting in Score::paste break; } continue; + case Element::Type::FRET_DIAGRAM: + // ignore fret diagrams not attached to segment + if (e->parent()->type() == Element::Type::SEGMENT) { + seg = static_cast( (static_cast(e))->parent() ); + break; + } + continue; case Element::Type::LYRICS: seg = (static_cast(e))->segment(); break;