fix #278120: Fix reading/writing slur/tie segments

This commit is contained in:
Dmitri Ovodok 2018-11-25 23:16:32 +02:00
parent f42943e90b
commit acb225d1e2
5 changed files with 5 additions and 52 deletions

View file

@ -1330,28 +1330,5 @@ void Slur::setTrack(int n)
for (SpannerSegment* ss : spannerSegments())
ss->setTrack(n);
}
//---------------------------------------------------------
// readProperties
//---------------------------------------------------------
bool Slur::readProperties(XmlReader& e)
{
const QStringRef& tag(e.name());
if (tag == "SlurSegment") {
int idx = e.intAttribute("no", 0);
int n = spannerSegments().size();
for (int i = n; i < idx; ++i)
add(new SlurSegment(score()));
SlurSegment* segment = new SlurSegment(score());
segment->read(e);
add(segment);
}
else if (!SlurTie::readProperties(e))
return false;
return true;
}
}

View file

@ -67,8 +67,6 @@ class Slur final : public SlurTie {
virtual void setTrack(int val) override;
virtual void slurPos(SlurPos*) override;
bool readProperties(XmlReader&);
SlurSegment* frontSegment() { return toSlurSegment(Spanner::frontSegment()); }
const SlurSegment* frontSegment() const { return toSlurSegment(Spanner::frontSegment()); }
SlurSegment* backSegment() { return toSlurSegment(Spanner::backSegment()); }

View file

@ -280,7 +280,7 @@ void SlurTieSegment::reset()
void SlurTieSegment::writeSlur(XmlWriter& xml, int no) const
{
if (visible()
if (visible() && autoplace()
&& (color() == Qt::black)
&& ups(Grip::START).off.isNull()
&& ups(Grip::BEZIER1).off.isNull()
@ -416,6 +416,10 @@ bool SlurTie::readProperties(XmlReader& e)
else if (tag == "lineType")
_lineType = e.readInt();
else if (tag == "SlurSegment" || tag == "TieSegment") {
const int idx = e.intAttribute("no", 0);
const int n = int(spannerSegments().size());
for (int i = n; i < idx; ++i)
add(newSlurTieSegment());
SlurTieSegment* s = newSlurTieSegment();
s->read(e);
add(s);

View file

@ -739,29 +739,5 @@ Note* Tie::endNote() const
{
return toNote(endElement());
}
//---------------------------------------------------------
// readProperties
//---------------------------------------------------------
bool Tie::readProperties(XmlReader& e)
{
const QStringRef& tag(e.name());
if (tag == "TieSegment") {
int idx = e.intAttribute("no", 0);
int n = spannerSegments().size();
for (int i = n; i < idx; ++i)
add(new TieSegment(score()));
TieSegment* segment = new TieSegment(score());
segment->read(e);
add(segment);
}
else if (!SlurTie::readProperties(e))
return false;
return true;
}
}

View file

@ -80,8 +80,6 @@ class Tie final : public SlurTie {
TieSegment* layoutFor(System*);
TieSegment* layoutBack(System*);
bool readProperties(XmlReader&);
TieSegment* frontSegment() { return toTieSegment(Spanner::frontSegment()); }
const TieSegment* frontSegment() const { return toTieSegment(Spanner::frontSegment()); }
TieSegment* backSegment() { return toTieSegment(Spanner::backSegment()); }