Skip to content

Commit

Permalink
fix #36601: Add time signature from palette does not preserve text pr…
Browse files Browse the repository at this point in the history
…operty
  • Loading branch information
wschweer committed Jan 22, 2015
1 parent d7ea1a3 commit 2a48a78
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 4 deletions.
17 changes: 13 additions & 4 deletions libmscore/edit.cpp
Expand Up @@ -542,10 +542,7 @@ void Score::cmdAddTimeSig(Measure* fm, int staffIdx, TimeSig* ts, bool local)
// ignore if there is already a timesig
// with same values
//
if ((ots->timeSigType() == ts->timeSigType())
&& (ots->sig().identical(ns))
&& (ots->stretch() == ts->stretch())
&& ots->groups() == ts->groups()) {
if (*ots == *ts) {
delete ts;
return;
}
Expand All @@ -564,6 +561,10 @@ void Score::cmdAddTimeSig(Measure* fm, int staffIdx, TimeSig* ts, bool local)
if (ots && ots->sig() == ns && ots->stretch() == ts->stretch()) {
ots->undoChangeProperty(P_ID::TIMESIG, QVariant::fromValue(ns));
ots->undoChangeProperty(P_ID::GROUPS, QVariant::fromValue(ts->groups()));
if (ts->hasCustomText()) {
ots->undoChangeProperty(P_ID::NUMERATOR_STRING, ts->numeratorString());
ots->undoChangeProperty(P_ID::DENOMINATOR_STRING, ts->denominatorString());
}
foreach (Score* score, scoreList()) {
Measure* fm = score->tick2measure(tick);
for (Measure* m = fm; m; m = m->nextMeasure()) {
Expand All @@ -580,6 +581,10 @@ void Score::cmdAddTimeSig(Measure* fm, int staffIdx, TimeSig* ts, bool local)
for (int staffIdx = 0; staffIdx < n; ++staffIdx) {
TimeSig* nsig = static_cast<TimeSig*>(seg->element(staffIdx * VOICES));
undoChangeProperty(nsig, P_ID::TIMESIG_TYPE, int(ts->timeSigType()));
if (ts->hasCustomText()) {
nsig->undoChangeProperty(P_ID::NUMERATOR_STRING, ts->numeratorString());
nsig->undoChangeProperty(P_ID::DENOMINATOR_STRING, ts->denominatorString());
}
}
}
else {
Expand Down Expand Up @@ -618,6 +623,10 @@ void Score::cmdAddTimeSig(Measure* fm, int staffIdx, TimeSig* ts, bool local)
nsig->setParent(seg);
nsig->setSig(ns, ts->timeSigType());
nsig->setGroups(ts->groups());
if (ts->hasCustomText()) {
nsig->undoChangeProperty(P_ID::NUMERATOR_STRING, ts->numeratorString());
nsig->undoChangeProperty(P_ID::DENOMINATOR_STRING, ts->denominatorString());
}
undoAddElement(nsig);
}
else {
Expand Down
15 changes: 15 additions & 0 deletions libmscore/timesig.cpp
Expand Up @@ -590,5 +590,20 @@ QString TimeSig::accessibleInfo()
return QString("%1: %2").arg(Element::accessibleInfo()).arg(timeSigString);
}

//---------------------------------------------------------
// operator==
//---------------------------------------------------------

bool TimeSig::operator==(const TimeSig& ts) const
{
return (timeSigType() == ts.timeSigType())
&& (sig().identical(ts.sig()))
&& (stretch() == ts.stretch())
&& (groups() == ts.groups())
&& (customText == ts.customText)
&& (!customText || (_numeratorString == ts._numeratorString && _denominatorString == ts._denominatorString))
;
}

}

5 changes: 5 additions & 0 deletions libmscore/timesig.h
Expand Up @@ -81,6 +81,8 @@ class TimeSig : public Element {

TimeSigType timeSigType() const { return _timeSigType; }

bool operator==(const TimeSig&) const;

virtual qreal mag() const override;
void draw(QPainter*) const;
void write(Xml& xml) const;
Expand Down Expand Up @@ -124,6 +126,9 @@ class TimeSig : public Element {
QVariant getProperty(P_ID propertyId) const;
bool setProperty(P_ID propertyId, const QVariant&);
QVariant propertyDefault(P_ID id) const;

bool hasCustomText() const { return customText; }

virtual void spatiumChanged(qreal /*oldValue*/, qreal /*newValue*/);

void setNeedLayout(bool nl) { _needLayout = nl; }
Expand Down

0 comments on commit 2a48a78

Please sign in to comment.