Skip to content

Commit

Permalink
fix #14548
Browse files Browse the repository at this point in the history
  • Loading branch information
wschweer committed Oct 9, 2014
1 parent abf6441 commit f17a96d
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 26 deletions.
14 changes: 8 additions & 6 deletions libmscore/edit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -525,7 +525,7 @@ void Score::cmdAddTimeSig(Measure* fm, int staffIdx, TimeSig* ts, bool local)
// with same values
//
if ((ots->timeSigType() == ts->timeSigType())
&& (ots->sig().identical(ts->sig()))
&& (ots->sig().identical(ns))
&& (ots->stretch() == ts->stretch())
&& ots->groups() == ts->groups()) {
delete ts;
Expand All @@ -543,7 +543,9 @@ void Score::cmdAddTimeSig(Measure* fm, int staffIdx, TimeSig* ts, bool local)
return;
}

if (ots && ots->sig() == ts->sig() && ots->stretch() == ts->stretch()) {
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()));
foreach (Score* score, scoreList()) {
Measure* fm = score->tick2measure(tick);
for (Measure* m = fm; m; m = m->nextMeasure()) {
Expand All @@ -553,7 +555,7 @@ void Score::cmdAddTimeSig(Measure* fm, int staffIdx, TimeSig* ts, bool local)
undoChangeProperty(m, P_ID::TIMESIG_NOMINAL, QVariant::fromValue(ns));
if (changeActual)
undoChangeProperty(m, P_ID::TIMESIG_ACTUAL, QVariant::fromValue(ns));
undoChangeProperty(ots, P_ID::GROUPS, QVariant::fromValue(ts->groups()));
// undoChangeProperty(ots, P_ID::GROUPS, QVariant::fromValue(ts->groups()));
}
}
int n = nstaves();
Expand All @@ -576,7 +578,7 @@ void Score::cmdAddTimeSig(Measure* fm, int staffIdx, TimeSig* ts, bool local)
fm = s ? 0 : fm->nextMeasure();
}
else {
if (sigmap()->timesig(seg->tick()).timesig() == ts->sig())
if (sigmap()->timesig(seg->tick()).timesig().identical(ns))
fm = 0;
}
if (fm) {
Expand All @@ -596,12 +598,12 @@ void Score::cmdAddTimeSig(Measure* fm, int staffIdx, TimeSig* ts, bool local)
nsig = new TimeSig(score);
nsig->setTrack(staffIdx * VOICES);
nsig->setParent(seg);
nsig->setSig(ts->sig(), ts->timeSigType());
nsig->setSig(ns, ts->timeSigType());
nsig->setGroups(ts->groups());
undoAddElement(nsig);
}
else {
undo(new ChangeTimesig(nsig, false, ts->sig(), ts->stretch(),
undo(new ChangeTimesig(nsig, false, ns, ts->stretch(),
ts->numeratorString(), ts->denominatorString(), ts->timeSigType()));
nsig->setSelected(false);
nsig->setDropTarget(0); // DEBUG
Expand Down
34 changes: 17 additions & 17 deletions libmscore/timesig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ TimeSig::TimeSig(Score* s)
_sig.set(0, 1); // initialize to invalid
_timeSigType = TimeSigType::NORMAL;
_largeParentheses = false;
customText = false;
_needLayout = true;
}

Expand All @@ -65,20 +64,20 @@ qreal TimeSig::mag() const

//---------------------------------------------------------
// setSig
// custom text has to be set after setSig()
//---------------------------------------------------------

void TimeSig::setSig(const Fraction& f, TimeSigType st)
{
if (_sig != f) {
if (!_sig.identical(f)) {
_sig = f;
_needLayout = true;
}
if (_timeSigType != st) {
_timeSigType = st;
_needLayout = true;
}
if (st == TimeSigType::FOUR_FOUR || st == TimeSigType::ALLA_BREVE)
customText = false;
customText = false;
_largeParentheses = false;
}

Expand Down Expand Up @@ -111,30 +110,32 @@ Element* TimeSig::drop(const DropData& data)

//---------------------------------------------------------
// setNumeratorString
// setSig() has to be called first
//---------------------------------------------------------

void TimeSig::setNumeratorString(const QString& a)
{
_numeratorString = a;
// text is custom if only one string is present or if either string is not the default string
customText = _numeratorString.isEmpty() != _denominatorString.isEmpty()
|| ( !_numeratorString.isEmpty() && _numeratorString != QString::number(_sig.numerator()) )
|| ( !_denominatorString.isEmpty() && _denominatorString != QString::number(_sig.denominator()) );
_needLayout = true;
if (_timeSigType == TimeSigType::NORMAL) {
_numeratorString = a;
customText = (_denominatorString != QString::number(_sig.denominator()))
|| (_numeratorString != QString::number(_sig.numerator()));
_needLayout = true;
}
}

//---------------------------------------------------------
// setDenominatorString
// setSig() has to be called first
//---------------------------------------------------------

void TimeSig::setDenominatorString(const QString& a)
{
_denominatorString = a;
// text is custom if only one string is present or if either string is not the default string
customText = _numeratorString.isEmpty() != _denominatorString.isEmpty()
|| ( !_numeratorString.isEmpty() && _numeratorString != QString::number(_sig.numerator()) )
|| ( !_denominatorString.isEmpty() && _denominatorString != QString::number(_sig.denominator()) );
_needLayout = true;
if (_timeSigType == TimeSigType::NORMAL) {
_denominatorString = a;
customText = (_denominatorString != QString::number(_sig.denominator()))
|| (_numeratorString != QString::number(_sig.numerator()));
_needLayout = true;
}
}

//---------------------------------------------------------
Expand Down Expand Up @@ -352,7 +353,6 @@ void TimeSig::layout1()
}

_needLayout = false;
// adjustReadPos();
}

//---------------------------------------------------------
Expand Down
2 changes: 1 addition & 1 deletion libmscore/timesig.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ class TimeSig : public Element {
Fraction _sig;
Fraction _stretch; // localSig / globalSig
bool _showCourtesySig;
bool customText; // if false, sz and sn are calculated from actualSig()
bool customText; // if false, sz and sn are calculated from _sig
bool _needLayout;
bool _largeParentheses;
Groups _groups;
Expand Down
5 changes: 3 additions & 2 deletions mscore/timesigproperties.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,9 @@ TimeSigProperties::TimeSigProperties(TimeSig* t, QWidget* parent)
nominal.reduce();
zNominal->setValue(nominal.numerator());
nNominal->setValue(nominal.denominator());
zActual->setValue(timesig->sig().numerator());
nActual->setValue(timesig->sig().denominator());
Fraction sig(timesig->sig());
zActual->setValue(sig.numerator());
nActual->setValue(sig.denominator());
switch (timesig->timeSigType()) {
case TimeSigType::NORMAL:
textButton->setChecked(true);
Expand Down

0 comments on commit f17a96d

Please sign in to comment.