Skip to content

Commit

Permalink
fix #28501
Browse files Browse the repository at this point in the history
  • Loading branch information
wschweer committed Jul 30, 2014
1 parent 868c389 commit 61ba89d
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 4 deletions.
32 changes: 32 additions & 0 deletions libmscore/chordrest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,22 @@ bool ChordRest::readProperties(XmlReader& e)
//spanner was added in read114 with wrong tick
score()->removeSpanner(slur);
score()->addSpanner(slur);
if (e.pasteMode()) {
for (Element* e : slur->linkList()) {
if (e == slur)
continue;
Slur* ls = static_cast<Slur*>(e);
ls->setTick(slur->tick());
for (Element* ee : linkList()) {
ChordRest* cr = static_cast<ChordRest*>(ee);
if (cr->score() == ee->score() && cr->staffIdx() == ls->staffIdx()) {
ls->setTrack(cr->track());
ls->setStartElement(cr);
break;
}
}
}
}
}
else if (atype == "stop") {
slur->setTick2(e.tick());
Expand All @@ -333,6 +349,22 @@ bool ChordRest::readProperties(XmlReader& e)
Chord* start = static_cast<Chord*>(slur->startElement());
if (start)
slur->setTrack(start->track());
if (e.pasteMode()) {
for (Element* e : slur->linkList()) {
if (e == slur)
continue;
Slur* ls = static_cast<Slur*>(e);
ls->setTick2(slur->tick2());
for (Element* ee : linkList()) {
ChordRest* cr = static_cast<ChordRest*>(ee);
if (cr->score() == ee->score() && cr->staffIdx() == ls->staffIdx()) {
ls->setTrack2(cr->track());
ls->setEndElement(cr);
break;
}
}
}
}
}
else
qDebug("ChordRest::read(): unknown Slur type <%s>", qPrintable(atype));
Expand Down
1 change: 1 addition & 0 deletions libmscore/paste.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -749,6 +749,7 @@ PasteStatus Score::cmdPaste(const QMimeData* ms, MuseScoreView* view)
QByteArray data(ms->data(mimeStaffListFormat));
qDebug("paste <%s>", data.data());
XmlReader e(data);
e.setPasteMode(true);
if (!pasteStaff(e, cr->segment(),cr->staffIdx())) {
return PasteStatus::TUPLET_CROSSES_BAR;
}
Expand Down
12 changes: 8 additions & 4 deletions libmscore/xml.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,11 @@ class XmlReader : public XmlStreamReader {
QString docName; // used for error reporting

// Score read context (for read optimizations):
int _tick = 0;
int _tickOffset = 0;
int _track = 0;
Measure* _lastMeasure = 0;
int _tick { 0 };
int _tickOffset { 0 };
int _track { 0 };
bool _pasteMode { false }; // modifies read behaviour on paste operation
Measure* _lastMeasure { nullptr };
QList<Beam*> _beams;
QList<Tuplet*> _tuplets;
QList<SpannerValues> _spannerValues;
Expand Down Expand Up @@ -95,6 +96,9 @@ class XmlReader : public XmlStreamReader {
void setTickOffset(int val) { _tickOffset = val; }
int track() const { return _track; }
void setTrack(int val) { _track = val; }
bool pasteMode() const { return _pasteMode; }
void setPasteMode(bool v) { _pasteMode = v; }

void addTuplet(Tuplet* s);
void addBeam(Beam* s) { _beams.append(s); }

Expand Down

0 comments on commit 61ba89d

Please sign in to comment.