From 9d134f431ab3c79d1991f8153a4d03085fec7bfb Mon Sep 17 00:00:00 2001 From: Werner Schweer Date: Thu, 17 Aug 2017 13:47:39 +0200 Subject: [PATCH] fix regression creating slurs & parts --- mscore/scoreview.cpp | 65 +++++++++++++------------------------------- 1 file changed, 19 insertions(+), 46 deletions(-) diff --git a/mscore/scoreview.cpp b/mscore/scoreview.cpp index 88d743f26465..fba319df27e3 100644 --- a/mscore/scoreview.cpp +++ b/mscore/scoreview.cpp @@ -3125,54 +3125,27 @@ void ScoreView::cmdAddSlur(ChordRest* cr1, ChordRest* cr2) startEditMode = true; // start slur in edit mode if last chord is not given } - auto l1 = cr1->linkList(); - auto l2 = cr2->linkList(); // QList linkList() const; - - SlurSegment* ss = 0; - Slur* slur = 0; - Slur* lSlur = 0; _score->startCmd(); - for (ScoreElement* se1 : l1) { - ChordRest* _cr1 = toChordRest(se1); - ChordRest* _cr2 = 0; - // search corresponding _cr2 for _cr1 - for (ScoreElement* se2 : l2) { - ChordRest* cr = toChordRest(se2); - if (_cr1->score() == cr->score() && _cr1->staffIdx() == cr->staffIdx()) { - _cr2 = cr; - break; - } - } - if (!_cr2) - qFatal("link not found"); - Slur* _slur = new Slur(_cr1->score()); - if (lSlur) - lSlur->linkTo(_slur); - else - lSlur = _slur; - _slur->setTick(_cr1->tick()); - _slur->setTick2(_cr2->tick()); - _slur->setTrack(_cr1->track()); - if (_cr2->staff()->part() == _cr1->staff()->part() && !_cr2->staff()->isLinked(_cr1->staff())) - _slur->setTrack2(_cr2->track()); - else - _slur->setTrack2(_cr1->track()); - _slur->setStartElement(_cr1); - _slur->setEndElement(_cr2); - - _cr1->score()->undoAddElement(_slur); - SlurSegment* _ss = new SlurSegment(_cr1->score()); - _ss->setSpannerSegmentType(SpannerSegmentType::SINGLE); - if (_cr1 == _cr2) - _ss->setSlurOffset(Grip::END, QPointF(3.0 * _cr1->score()->spatium(), 0.0)); - _ss->setAutoplace(false); - _slur->add(_ss); - if (_cr1 == cr1) { - ss = _ss; - slur = _slur; - } - } + Slur* slur = new Slur(cr1->score()); + slur->setTick(cr1->tick()); + slur->setTick2(cr2->tick()); + slur->setTrack(cr1->track()); + if (cr2->staff()->part() == cr1->staff()->part() && !cr2->staff()->isLinked(cr1->staff())) + slur->setTrack2(cr2->track()); + else + slur->setTrack2(cr1->track()); + slur->setStartElement(cr1); + slur->setEndElement(cr2); + + cr1->score()->undoAddElement(slur); + SlurSegment* ss = new SlurSegment(cr1->score()); + ss->setSpannerSegmentType(SpannerSegmentType::SINGLE); + if (cr1 == cr2) + ss->setSlurOffset(Grip::END, QPointF(3.0 * cr1->score()->spatium(), 0.0)); + ss->setAutoplace(false); + slur->add(ss); + _score->endCmd(); if (noteEntryMode()) {