Keeps custom texts and actual values entered in TimeSig properties dlg box

This commit is contained in:
Maurizio Gavioli 2012-10-11 00:03:23 +02:00
parent 4afe07da6c
commit d133699311
7 changed files with 50 additions and 38 deletions

View file

@ -587,8 +587,8 @@ printf("insert local timesig\n");
undoAddElement(nsig);
}
else {
undo(new ChangeTimesig(nsig, false,
ts->sig(), ts->stretch(), ts->subtype()));
undo(new ChangeTimesig(nsig, false, ts->sig(), ts->stretch(),
ts->numeratorString(), ts->denominatorString(), ts->subtype()));
nsig->setDropTarget(0); // DEBUG
}
}

View file

@ -48,17 +48,11 @@ TimeSig::TimeSig(Score* s)
void TimeSig::setSig(const Fraction& f, TimeSigType st)
{
if (_sig != f) {
customText = false;
// customText = false;
_sig = f;
}
if (st == TSIG_FOUR_FOUR) {
_sig.set(4, 4);
if (st == TSIG_FOUR_FOUR || st == TSIG_ALLA_BREVE)
customText = false;
}
else if (st == TSIG_ALLA_BREVE) {
_sig.set(2, 2);
customText = false;
}
_subtype = st;
layout1();
}
@ -97,7 +91,10 @@ Element* TimeSig::drop(const DropData& data)
void TimeSig::setNumeratorString(const QString& a)
{
_numeratorString = a;
customText = !(_numeratorString.isEmpty() && _denominatorString.isEmpty());
// 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()) );
}
//---------------------------------------------------------
@ -107,7 +104,10 @@ void TimeSig::setNumeratorString(const QString& a)
void TimeSig::setDenominatorString(const QString& a)
{
_denominatorString = a;
customText = !(_numeratorString.isEmpty() && _denominatorString.isEmpty());
// 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()) );
}
//---------------------------------------------------------

View file

@ -96,8 +96,8 @@ class TimeSig : public Element {
Segment* segment() const { return (Segment*)parent(); }
Measure* measure() const { return (Measure*)parent()->parent(); }
bool showCourtesySig() const { return _showCourtesySig; };
void setShowCourtesySig(bool v) { _showCourtesySig = v; };
bool showCourtesySig() const { return _showCourtesySig; }
void setShowCourtesySig(bool v) { _showCourtesySig = v; }
void undoSetShowCourtesySig(bool v);
QString numeratorString() const { return _numeratorString; }

View file

@ -2553,14 +2553,16 @@ void ChangeNoteProperties::flip()
//---------------------------------------------------------
ChangeTimesig::ChangeTimesig(TimeSig * _timesig, bool sc, const Fraction& f1,
const Fraction& f2, TimeSigType st)
const Fraction& f2, QString numStr, QString denStr, TimeSigType st)
{
timesig = _timesig;
showCourtesy = sc;
sig = f1;
stretch = f2;
subtype = st;
};
timesig = _timesig;
showCourtesy = sc;
sig = f1;
stretch = f2;
numeratorString = numStr;
denominatorString = denStr;
subtype = st;
}
//---------------------------------------------------------
// flip
@ -2569,19 +2571,27 @@ ChangeTimesig::ChangeTimesig(TimeSig * _timesig, bool sc, const Fraction& f1,
void ChangeTimesig::flip()
{
timesig->score()->addRefresh(timesig->abbox());
bool sc = timesig->showCourtesySig();
Fraction f1 = timesig->sig();
Fraction f2 = timesig->stretch();
TimeSigType st = timesig->subtype();
// setSubType() must come first, as it also calls setSig() with its own parameters
bool sc = timesig->showCourtesySig();
Fraction f1 = timesig->sig();
Fraction f2 = timesig->stretch();
QString numStr = timesig->numeratorString();
QString denStr = timesig->denominatorString();
TimeSigType st = timesig->subtype();
timesig->setShowCourtesySig(showCourtesy);
timesig->setSig(sig, subtype);
timesig->setStretch(stretch);
showCourtesy = sc;
sig = f1;
stretch = f2;
subtype = st;
timesig->layout();
timesig->setNumeratorString(numeratorString);
timesig->setDenominatorString(denominatorString);
showCourtesy = sc;
sig = f1;
stretch = f2;
numeratorString = numStr;
denominatorString = denStr;
subtype = st;
timesig->layout1();
timesig->score()->addRefresh(timesig->abbox());
}

View file

@ -1019,15 +1019,17 @@ class ChangeTimesig : public UndoCommand {
Fraction sig;
Fraction stretch;
TimeSigType subtype;
QString numeratorString;
QString denominatorString;
void flip();
public:
ChangeTimesig(TimeSig* _timesig, bool sc, const Fraction&,
const Fraction&, TimeSigType subtype);
const Fraction&, QString, QString, TimeSigType subtype);
virtual void undo() { flip(); }
virtual void redo() { flip(); }
UNDO_NAME("ChangeTimesig");
UNDO_NAME("ChangeTimesig")
};
//---------------------------------------------------------

View file

@ -524,8 +524,8 @@ void ScoreView::elementPropertyAction(const QString& cmd, Element* e)
}
if (cmd == "ts-courtesy") {
TimeSig* ts = static_cast<TimeSig*>(e);
score()->undo(new ChangeTimesig(static_cast<TimeSig*>(e),
!ts->showCourtesySig(), ts->sig(), ts->stretch(), ts->subtype()));
score()->undo(new ChangeTimesig(static_cast<TimeSig*>(e), !ts->showCourtesySig(), ts->sig(),
ts->stretch(), ts->numeratorString(), ts->denominatorString(), ts->subtype()));
}
else if (cmd == "ts-props") {
TimeSig* ts = static_cast<TimeSig*>(e);
@ -539,8 +539,8 @@ void ScoreView::elementPropertyAction(const QString& cmd, Element* e)
|| r.sig() != ts->sig()
|| stretchChanged
|| r.subtype() != ts->subtype()) {
score()->undo(new ChangeTimesig(ts,
r.showCourtesySig(), r.sig(), r.stretch(), r.subtype()));
score()->undo(new ChangeTimesig(ts, r.showCourtesySig(), r.sig(), r.stretch(),
r.numeratorString(), r.denominatorString(), r.subtype()));
if (stretchChanged)
score()->timesigStretchChanged(ts, ts->measure(), ts->staffIdx());
}

View file

@ -71,7 +71,7 @@ void TimeSigProperties::accept()
ts = TSIG_ALLA_BREVE;
Fraction actual(zActual->value(), nActual->value());
Fraction nominal(zActual->value(), nActual->value());
Fraction nominal(zNominal->value(), nNominal->value());
timesig->setSig(actual, ts);
timesig->setStretch(nominal / actual);
QDialog::accept();