diff --git a/libmscore/chord.cpp b/libmscore/chord.cpp index 3d4f9ff25b..a15fde1cd2 100644 --- a/libmscore/chord.cpp +++ b/libmscore/chord.cpp @@ -252,12 +252,9 @@ Chord::Chord(const Chord& c, bool link) if (link) a->linkTo(c._arpeggio); } - if (c._tremolo - && (!c._tremolo->twoNotes() || c._tremolo->chord1() == &c)) { + if (c._tremolo && !c._tremolo->twoNotes()) { Tremolo* t = new Tremolo(*(c._tremolo)); - t->setChords(this,0); - //add(t); - _tremolo = t; + add(t); if (link) t->linkTo(c._tremolo); } diff --git a/libmscore/layout.cpp b/libmscore/layout.cpp index 7cf090825c..de5a43848a 100644 --- a/libmscore/layout.cpp +++ b/libmscore/layout.cpp @@ -2365,10 +2365,6 @@ void Score::connectTies() else { nc->setTremolo(tremolo); tremolo->setChords(c, nc); - // remove 2 note tremolos - // which have chords in two different measures - if(c->measure() != nc->measure()) - c->remove(tremolo); } break; } diff --git a/libmscore/select.cpp b/libmscore/select.cpp index a6134fffb7..fa80ca716a 100644 --- a/libmscore/select.cpp +++ b/libmscore/select.cpp @@ -521,62 +521,6 @@ QByteArray Selection::mimeData() const return a; } -QList cloneRange(Segment* fs, Segment* ls) - { - QList segments; - Segment* prev = 0; - for (Segment* segment = fs; segment && segment != ls; segment = segment->next1()) { - Segment* newSegment = segment->clone(); - newSegment->setPrev(prev); - if(prev != 0) - prev->setNext(newSegment); - segments.append(newSegment); - prev = newSegment; - } - segments.last()->setNext(ls); //HACK - return segments; - } - -std::multimap spannerMapCopy(Segment* seg1, Segment* seg2, Segment* destSegment, std::multimap scoreSpannerMap) - { - // pairing up elements with clones - std::map paired_elements; - for (Segment* sourceSegment = seg1; sourceSegment && sourceSegment != seg2; sourceSegment = sourceSegment->next1()) { - if (sourceSegment->segmentType() == Segment::Type::ChordRest) { - for (int i = 0; i < sourceSegment->elist().size(); i++) { - if (sourceSegment->element(i) != 0) { - paired_elements.insert(std::pair(sourceSegment->element(i),destSegment->element(i))); - if (sourceSegment->element(i)->type() == Element::Type::CHORD) { - Chord* schord = static_cast(sourceSegment->element(i)); - Chord* dchord = static_cast(destSegment->element(i)); - QList& graceNotes = schord->graceNotes(); - for (int i = 0; i < graceNotes.size(); i++) { - paired_elements.insert(std::pair(graceNotes.at(i),dchord->graceNotes().at(i))); - } - } - } - } - } - destSegment = destSegment->next1(); - } - - std::multimap sp_copy; - std::map::iterator it; - - // replace start and end element pointers with clones - for (auto i : scoreSpannerMap) { - Spanner* spanner = i.second; - Spanner* spannerCopy = static_cast(spanner->clone()); - sp_copy.insert(std::pair(i.first,spannerCopy)); - - it = paired_elements.find(spanner->startElement()); - if (it != paired_elements.end()) spannerCopy->setStartElement(paired_elements[spanner->startElement()]); - it = paired_elements.find(spanner->endElement()); - if (it != paired_elements.end()) spannerCopy->setEndElement(paired_elements[spanner->endElement()]); - } - return sp_copy; - } - //--------------------------------------------------------- // staffMimeData //--------------------------------------------------------- @@ -595,23 +539,6 @@ QByteArray Selection::staffMimeData() const Segment* seg1 = _startSegment; Segment* seg2 = _endSegment; - QList segments = cloneRange(seg1, seg2); - - //Remove 2-note tremolo if at last segment - Segment* last = segments.last(); - if (last->segmentType() == Segment::Type::ChordRest) { - foreach (Element* e, last->elist()) { - if(e && e->type() == Element::Type::CHORD) { - Chord* c = static_cast(e); - if (c->tremolo() && c->tremolo()->twoNotes()) - c->remove(c->tremolo()); - } - } - } - - std::multimap sp_copy = spannerMapCopy(seg1,seg2,segments.first(),score()->spanner()); - sp_copy.swap(score()->spannerMap().mapModify()); - for (int staffIdx = staffStart(); staffIdx < staffEnd(); ++staffIdx) { xml.stag(QString("Staff id=\"%1\"").arg(staffIdx)); int startTrack = staffIdx * VOICES; @@ -623,17 +550,10 @@ QByteArray Selection::staffMimeData() const xml.tag("transposeChromatic", interval.chromatic); if (interval.diatonic) xml.tag("transposeDiatonic", interval.diatonic); - - score()->writeSegments(xml, startTrack, endTrack, segments.first(), seg2, false, true, true); - //score()->writeSegments(xml, startTrack, endTrack, seg1, seg2, false, true, true); + score()->writeSegments(xml, startTrack, endTrack, seg1, seg2, false, true, true); xml.etag(); } - sp_copy.swap(score()->spannerMap().mapModify()); - for (auto i : sp_copy) { - delete i.second; - } - xml.etag(); buffer.close(); return buffer.buffer(); diff --git a/libmscore/spannermap.h b/libmscore/spannermap.h index 959d318ac0..3cf2b54866 100644 --- a/libmscore/spannermap.h +++ b/libmscore/spannermap.h @@ -36,7 +36,6 @@ class SpannerMap : std::multimap { const std::vector< ::Interval >& findContained(int start, int stop); const std::vector< ::Interval >& findOverlapping(int start, int stop); const std::multimap& map() const { return *this; } - std::multimap& mapModify() { return *this; } std::multimap::const_reverse_iterator crbegin() const { return std::multimap::crbegin(); } std::multimap::const_reverse_iterator crend() const { return std::multimap::crend(); } std::multimap::const_iterator cbegin() const { return std::multimap::cbegin(); } diff --git a/mtest/libmscore/copypaste/copypaste13-ref.mscx b/mtest/libmscore/copypaste/copypaste13-ref.mscx deleted file mode 100644 index 3218c66dd0..0000000000 --- a/mtest/libmscore/copypaste/copypaste13-ref.mscx +++ /dev/null @@ -1,188 +0,0 @@ - - - - - 0 - 480 - - 1 - 1 - 1 - 0 - - - - - - - - - - - copypaste13 - - - - - - - - - - - - Standard - - - - Violin - - Violin - Vln. - Violin - 55 - 103 - 55 - 88 - - 24 - 55 - 62 - 69 - 76 - - - 100 - 100 - - - 100 - 50 - - - 100 - 100 - - - 120 - 100 - - - - - - - - - - - - - - - 10 - - - copypaste13 - - - - - G - G - - - 0 - - - 4 - 4 - 1 - - - half - - - 72 - 14 - - - c16 - - - - half - - - 74 - 16 - - - - half - - - normal - 1 - - - - - quarter - - 72 - 14 - - - - quarter - - - half - - - normal - 1 - - - - - measure - - - - normal - 1 - - - - - measure - - - - end - 1 - - - - - diff --git a/mtest/libmscore/copypaste/copypaste13.mscx b/mtest/libmscore/copypaste/copypaste13.mscx deleted file mode 100644 index 431bda105c..0000000000 --- a/mtest/libmscore/copypaste/copypaste13.mscx +++ /dev/null @@ -1,179 +0,0 @@ - - - - - 0 - 480 - - 1 - 1 - 1 - 0 - - - - - - - - - - - copypaste13 - - - - - - - - - - - - Standard - - - - Violin - - Violin - Vln. - Violin - 55 - 103 - 55 - 88 - - 24 - 55 - 62 - 69 - 76 - - - 100 - 100 - - - 100 - 50 - - - 100 - 100 - - - 120 - 100 - - - - - - - - - - - - - - - 10 - - - copypaste13 - - - - - G - G - - - 0 - - - 4 - 4 - 1 - - - half - - - 72 - 14 - - - c16 - - - - half - - - 74 - 16 - - - - half - - - normal - 1 - - - - - measure - - - - normal - 1 - - - - - measure - - - - normal - 1 - - - - - measure - - - - end - 1 - - - - - diff --git a/mtest/libmscore/copypaste/copypaste14-ref.mscx b/mtest/libmscore/copypaste/copypaste14-ref.mscx deleted file mode 100644 index b9677972ca..0000000000 --- a/mtest/libmscore/copypaste/copypaste14-ref.mscx +++ /dev/null @@ -1,222 +0,0 @@ - - - - - 0 - 480 - - 1 - 1 - 1 - 0 - - - - - - - - - - - copypaste14 - - - - - - - - - - - - Standard - - - - Violin - - Violin - Vln. - Violin - 55 - 103 - 55 - 88 - - 24 - 55 - 62 - 69 - 76 - - - 100 - 100 - - - 100 - 50 - - - 100 - 100 - - - 120 - 100 - - - - - - - - - - - - - - - 10 - - - copypaste14 - - - - - G - G - - - 0 - - - 4 - 4 - 1 - - - half - - - 72 - 14 - - - c16 - - - - half - - - 74 - 16 - - - - half - - - normal - 1 - - - - - quarter - - 72 - 14 - - - - quarter - - 74 - 16 - - - - quarter - - 76 - 18 - - - - quarter - - 72 - 14 - - - - normal - 1 - - - - - quarter - - 74 - 16 - - - - quarter - - - half - - - normal - 1 - - - - - measure - - - - normal - 1 - - - - - measure - - - - end - 1 - - - - - diff --git a/mtest/libmscore/copypaste/copypaste14.mscx b/mtest/libmscore/copypaste/copypaste14.mscx deleted file mode 100644 index c567037e47..0000000000 --- a/mtest/libmscore/copypaste/copypaste14.mscx +++ /dev/null @@ -1,209 +0,0 @@ - - - - - 0 - 480 - - 1 - 1 - 1 - 0 - - - - - - - - - - - copypaste14 - - - - - - - - - - - - Standard - - - - Violin - - Violin - Vln. - Violin - 55 - 103 - 55 - 88 - - 24 - 55 - 62 - 69 - 76 - - - 100 - 100 - - - 100 - 50 - - - 100 - 100 - - - 120 - 100 - - - - - - - - - - - - - - - 10 - - - copypaste14 - - - - - G - G - - - 0 - - - 4 - 4 - 1 - - - half - - - 72 - 14 - - - c16 - - - - half - - - 74 - 16 - - - - half - - - normal - 1 - - - - - quarter - - 72 - 14 - - - - quarter - - 74 - 16 - - - - quarter - - 76 - 18 - - - - quarter - - - normal - 1 - - - - - measure - - - - normal - 1 - - - - - measure - - - - normal - 1 - - - - - measure - - - - end - 1 - - - - - diff --git a/mtest/libmscore/copypaste/tst_copypaste.cpp b/mtest/libmscore/copypaste/tst_copypaste.cpp index 369e64fd64..d185dd645c 100644 --- a/mtest/libmscore/copypaste/tst_copypaste.cpp +++ b/mtest/libmscore/copypaste/tst_copypaste.cpp @@ -50,9 +50,6 @@ class TestCopyPaste : public QObject, public MTest void copypaste11() { copypaste("11"); } // grace notes void copypaste12() { copypaste("12"); } // voices - void copyPaste2NoteTremolo(); - void copyPaste2NoteTremolo2(); - void copypastestaff50() { copypastestaff("50"); } // staff & slurs void copyPastePartial(); @@ -176,87 +173,6 @@ void TestCopyPaste::copyPastePartial() { delete score; } -//--------------------------------------------------------- -// copypaste -// copy first note which has a 2 note tremolo after into measure 2 -//--------------------------------------------------------- - -void TestCopyPaste::copyPaste2NoteTremolo() - { - Score* score = readScore(DIR + QString("copypaste13.mscx")); - score->doLayout(); - Measure* m1 = score->firstMeasure(); - Measure* m2 = m1->nextMeasure(); - - QVERIFY(m1 != 0); - QVERIFY(m2 != 0); - - Segment* s = m1->first(Segment::Type::ChordRest); - score->select(s->element(0)); - - QVERIFY(score->selection().canCopy()); - QString mimeType = score->selection().mimeType(); - QVERIFY(!mimeType.isEmpty()); - QMimeData* mimeData = new QMimeData; - mimeData->setData(mimeType, score->selection().mimeData()); - QApplication::clipboard()->setMimeData(mimeData); - - score->select(m2->first(Segment::Type::ChordRest)->element(0)); - - score->startCmd(); - score->cmdPaste(mimeData,0); - score->endCmd(); - - score->doLayout(); - - QVERIFY(saveCompareScore(score, QString("copypaste13.mscx"), - DIR + QString("copypaste13-ref.mscx"))); - delete score; - } - -//--------------------------------------------------------- -// copypaste -// copy 2 chords with a 2 note tremolo to the end of measure 2 -//--------------------------------------------------------- - -void TestCopyPaste::copyPaste2NoteTremolo2() - { - Score* score = readScore(DIR + QString("copypaste14.mscx")); - score->doLayout(); - Measure* m1 = score->firstMeasure(); - Measure* m2 = m1->nextMeasure(); - - QVERIFY(m1 != 0); - QVERIFY(m2 != 0); - - // select 2 chord rests with a 2 note tremolo inbetween - Segment* s = m1->first(Segment::Type::ChordRest); - score->select(static_cast(s->element(0))->notes().at(0)); - s = s->next(Segment::Type::ChordRest); - score->select(s->element(0), SelectType::RANGE); - - QVERIFY(score->selection().canCopy()); - QString mimeType = score->selection().mimeType(); - QVERIFY(!mimeType.isEmpty()); - QMimeData* mimeData = new QMimeData; - mimeData->setData(mimeType, score->selection().mimeData()); - QApplication::clipboard()->setMimeData(mimeData); - - // paste into last CR of second measure - Segment* lastCRSeg = m2->last()->prev1(Segment::Type::ChordRest); - score->select(lastCRSeg->element(0)); - - score->startCmd(); - score->cmdPaste(mimeData,0); - score->endCmd(); - - score->doLayout(); - - QVERIFY(saveCompareScore(score, QString("copypaste14.mscx"), - DIR + QString("copypaste14-ref.mscx"))); - delete score; - } - QTEST_MAIN(TestCopyPaste) #include "tst_copypaste.moc"