commit
931ea7b92b
6 changed files with 87 additions and 59 deletions
|
@ -1217,7 +1217,9 @@ void Score::addElement(Element* element)
|
|||
|
||||
case Element::Type::TEMPO_TEXT:
|
||||
{
|
||||
TempoText* tt = static_cast<TempoText*>(element);
|
||||
TempoText* tt = toTempoText(element);
|
||||
if (tt->isRelative())
|
||||
tt->updateRelative();
|
||||
setTempo(tt->segment(), tt->tempo());
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -97,31 +97,25 @@ struct TempoPattern {
|
|||
// note: findTempoDuration requires the longer patterns to be before the shorter patterns in tp
|
||||
|
||||
static const TempoPattern tp[] = {
|
||||
TempoPattern("<sym>metNoteWhole</sym><sym>space</sym><sym>metAugmentationDot</sym>", 1.5/15.0, TDuration::DurationType::V_WHOLE, 1), // dotted whole
|
||||
TempoPattern("<sym>metNoteWhole</sym>\\s*<sym>metAugmentationDot</sym>", 1.5/15.0, TDuration::DurationType::V_WHOLE, 1), // dotted whole
|
||||
TempoPattern("<sym>metNoteHalfUp</sym><sym>space</sym><sym>metAugmentationDot</sym><sym>space</sym><sym>metAugmentationDot</sym>", 1.75/30.0, TDuration::DurationType::V_HALF, 2), // double dotted 1/2
|
||||
TempoPattern("<sym>metNoteHalfUp</sym>\\s*<sym>metAugmentationDot</sym>\\s*<sym>metAugmentationDot</sym>", 1.75/30.0, TDuration::DurationType::V_HALF, 2), // double dotted 1/2
|
||||
TempoPattern("<sym>metNoteHalfUp</sym><sym>space</sym><sym>metAugmentationDot</sym>", 1.5/30.0, TDuration::DurationType::V_HALF, 1), // dotted 1/2
|
||||
TempoPattern("<sym>metNoteHalfUp</sym>\\s*<sym>metAugmentationDot</sym>", 1.5/30.0, TDuration::DurationType::V_HALF, 1), // dotted 1/2
|
||||
TempoPattern("<sym>metNoteQuarterUp</sym><sym>space</sym><sym>metAugmentationDot</sym><sym>space</sym><sym>metAugmentationDot</sym>", 1.75/60.0, TDuration::DurationType::V_QUARTER, 2), // double dotted 1/4
|
||||
TempoPattern("<sym>metNoteQuarterUp</sym>\\s*<sym>metAugmentationDot</sym>\\s*<sym>metAugmentationDot</sym>", 1.75/60.0, TDuration::DurationType::V_QUARTER, 2), // double dotted 1/4
|
||||
TempoPattern("<sym>metNoteQuarterUp</sym><sym>space</sym><sym>metAugmentationDot</sym>", 1.5/60.0, TDuration::DurationType::V_QUARTER, 1), // dotted 1/4
|
||||
TempoPattern("<sym>metNoteQuarterUp</sym>\\s*<sym>metAugmentationDot</sym>", 1.5/60.0, TDuration::DurationType::V_QUARTER, 1), // dotted 1/4
|
||||
TempoPattern("<sym>metNote8thUp</sym><sym>metAugmentationDot</sym><sym>space</sym><sym>metAugmentationDot</sym>", 1.75/120.0, TDuration::DurationType::V_EIGHTH, 2), // double dotted 1/8
|
||||
TempoPattern("<sym>metNote8thUp</sym>\\s*<sym>metAugmentationDot</sym>\\s*<sym>metAugmentationDot</sym>", 1.75/120.0, TDuration::DurationType::V_EIGHTH, 2), // double dotted 1/8
|
||||
TempoPattern("<sym>metNote8thUp</sym><sym>space</sym><sym>metAugmentationDot</sym>", 1.5/120.0, TDuration::DurationType::V_EIGHTH, 1), // dotted 1/8
|
||||
TempoPattern("<sym>metNote8thUp</sym>\\s*<sym>metAugmentationDot</sym>", 1.5/120.0, TDuration::DurationType::V_EIGHTH, 1), // dotted 1/8
|
||||
TempoPattern("<sym>metNote16thUp</sym><sym>space</sym><sym>metAugmentationDot</sym>", 1.5/240.0, TDuration::DurationType::V_16TH, 1), // dotted 1/16
|
||||
TempoPattern("<sym>metNote16thUp</sym>\\s*<sym>metAugmentationDot</sym>", 1.5/240.0, TDuration::DurationType::V_16TH, 1), // dotted 1/16
|
||||
TempoPattern("<sym>metNote32ndUp</sym><sym>space</sym><sym>metAugmentationDot</sym>", 1.5/480.0, TDuration::DurationType::V_32ND, 1), // dotted 1/32
|
||||
TempoPattern("<sym>metNote32ndUp</sym>\\s*<sym>metAugmentationDot</sym>", 1.5/480.0, TDuration::DurationType::V_32ND, 1), // dotted 1/32
|
||||
TempoPattern("<sym>metNoteWhole</sym>", 1.0/15.0, TDuration::DurationType::V_WHOLE), // whole
|
||||
TempoPattern("<sym>metNoteHalfUp</sym>", 1.0/30.0, TDuration::DurationType::V_HALF), // 1/2
|
||||
TempoPattern("<sym>metNoteQuarterUp</sym>", 1.0/60.0, TDuration::DurationType::V_QUARTER), // 1/4
|
||||
TempoPattern("<sym>metNoteHalfUp</sym>\\s*<sym>metAugmentationDot</sym>\\s*<sym>metAugmentationDot</sym>", 1.75/30.0, TDuration::DurationType::V_HALF, 2), // double dotted 1/2
|
||||
TempoPattern("<sym>metNoteHalfUp</sym>\\s*<sym>metAugmentationDot</sym>", 1.5/30.0, TDuration::DurationType::V_HALF, 1), // dotted 1/2
|
||||
TempoPattern("<sym>metNoteHalfUp</sym>", 1.0/30.0, TDuration::DurationType::V_HALF), // 1/2
|
||||
TempoPattern("<sym>metNote8thUp</sym>\\s*<sym>metAugmentationDot</sym>\\s*<sym>metAugmentationDot</sym>", 1.75/120.0, TDuration::DurationType::V_EIGHTH, 2), // double dotted 1/8
|
||||
TempoPattern("<sym>metNote8thUp</sym>\\s*<sym>metAugmentationDot</sym>", 1.5/120.0, TDuration::DurationType::V_EIGHTH, 1), // dotted 1/8
|
||||
TempoPattern("<sym>metNote8thUp</sym>", 1.0/120.0, TDuration::DurationType::V_EIGHTH), // 1/8
|
||||
TempoPattern("<sym>metNoteWhole</sym>\\s*<sym>metAugmentationDot</sym>", 1.5/15.0, TDuration::DurationType::V_WHOLE, 1), // dotted whole
|
||||
TempoPattern("<sym>metNoteWhole</sym>", 1.0/15.0, TDuration::DurationType::V_WHOLE), // whole
|
||||
TempoPattern("<sym>metNote16thUp</sym>\\s*<sym>metAugmentationDot</sym>", 1.5/240.0, TDuration::DurationType::V_16TH, 1), // dotted 1/16
|
||||
TempoPattern("<sym>metNote16thUp</sym>", 1.0/240.0, TDuration::DurationType::V_16TH), // 1/16
|
||||
TempoPattern("<sym>metNote32ndUp</sym>\\s*<sym>metAugmentationDot</sym>", 1.5/480.0, TDuration::DurationType::V_32ND, 1), // dotted 1/32
|
||||
TempoPattern("<sym>metNote32ndUp</sym>", 1.0/480.0, TDuration::DurationType::V_32ND), // 1/32
|
||||
TempoPattern("<sym>metNoteDoubleWholeSquare</sym>", 1.0/7.5, TDuration::DurationType::V_BREVE), // longa
|
||||
TempoPattern("<sym>metNoteDoubleWhole</sym>", 1.0/7.5, TDuration::DurationType::V_BREVE), // double whole
|
||||
TempoPattern("<sym>metNote64thUp</sym>", 1.0/960.0, TDuration::DurationType::V_64TH), // 1/64
|
||||
TempoPattern("<sym>metNote128thUp</sym>", 1.0/1920.0,TDuration::DurationType::V_128TH), // 1/128
|
||||
};
|
||||
|
||||
//---------------------------------------------------------
|
||||
|
@ -196,6 +190,7 @@ void TempoText::textChanged()
|
|||
return;
|
||||
QString s = plainText();
|
||||
s.replace(",", ".");
|
||||
s.replace("<sym>space</sym>"," ");
|
||||
for (const TempoPattern& pa : tp) {
|
||||
QRegExp re(QString(pa.pattern)+"\\s*=\\s*(\\d+[.]{0,1}\\d*)\\s*");
|
||||
if (re.indexIn(s) != -1) {
|
||||
|
@ -338,33 +333,51 @@ void TempoText::layout()
|
|||
adjustReadPos();
|
||||
}
|
||||
|
||||
QString TempoText::duration2userName(const TDuration t)
|
||||
{
|
||||
QString dots;
|
||||
switch (t.dots()) {
|
||||
case 1: dots = tr("Dotted %1").arg(t.durationTypeUserName());
|
||||
break;
|
||||
case 2: dots = tr("Double dotted %1").arg(t.durationTypeUserName());
|
||||
break;
|
||||
case 3: dots = tr("Triple dotted %1").arg(t.durationTypeUserName());
|
||||
break;
|
||||
default:
|
||||
dots = t.durationTypeUserName();
|
||||
break;
|
||||
}
|
||||
return dots;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// accessibleInfo
|
||||
//---------------------------------------------------------
|
||||
|
||||
QString TempoText::accessibleInfo() const
|
||||
{
|
||||
TDuration t;
|
||||
int len;
|
||||
int x = findTempoDuration(plainText(), len, t);
|
||||
if (x != -1) {
|
||||
QString dots;
|
||||
TDuration t1;
|
||||
TDuration t2;
|
||||
int len1;
|
||||
int len2;
|
||||
QString text = plainText();
|
||||
QString firstPart = text.split(" = ").first();
|
||||
QString secondPart = text.split(" = ").back();
|
||||
int x1 = findTempoDuration(firstPart, len1, t1);
|
||||
int x2 = -1;
|
||||
if (_relative)
|
||||
x2 = findTempoDuration(secondPart, len2, t2);
|
||||
|
||||
switch (t.dots()) {
|
||||
case 1: dots = tr("Dotted %1").arg(t.durationTypeUserName());
|
||||
break;
|
||||
case 2: dots = tr("Double dotted %1").arg(t.durationTypeUserName());
|
||||
break;
|
||||
case 3: dots = tr("Triple dotted %1").arg(t.durationTypeUserName());
|
||||
break;
|
||||
default:
|
||||
dots = t.durationTypeUserName();
|
||||
break;
|
||||
if (x1 != -1) {
|
||||
QString dots1;
|
||||
QString dots2;
|
||||
dots1 = duration2userName(t1);
|
||||
if (x2 != -1) {
|
||||
dots2 = duration2userName(t2);
|
||||
return QString("%1: %2 %3 = %4 %5").arg(Element::accessibleInfo()).arg(dots1).arg(tr("note")).arg(dots2).arg(tr("note"));
|
||||
}
|
||||
|
||||
QString bpm = plainText().split(" = ").back();
|
||||
|
||||
return QString("%1: %2 %3").arg(Element::accessibleInfo()).arg(dots).arg(tr("note = %1").arg(bpm));
|
||||
else
|
||||
return QString("%1: %2 %3 = %4").arg(Element::accessibleInfo()).arg(dots1).arg(tr("note")).arg(secondPart);
|
||||
}
|
||||
else
|
||||
return Text::accessibleInfo();
|
||||
|
|
|
@ -50,6 +50,7 @@ class TempoText : public Text {
|
|||
void setTempo(qreal v);
|
||||
void undoSetTempo(qreal v);
|
||||
bool isRelative() { return _isRelative; }
|
||||
void setRelative(qreal v) { _isRelative = true; _relative = v; }
|
||||
|
||||
bool followText() const { return _followText; }
|
||||
void setFollowText(bool v) { _followText = v; }
|
||||
|
@ -61,6 +62,7 @@ class TempoText : public Text {
|
|||
|
||||
static int findTempoDuration(const QString& s, int& len, TDuration& dur);
|
||||
static QString duration2tempoTextString(const TDuration dur);
|
||||
static QString duration2userName(const TDuration t);
|
||||
|
||||
QVariant getProperty(P_ID propertyId) const override;
|
||||
bool setProperty(P_ID propertyId, const QVariant&) override;
|
||||
|
|
|
@ -174,7 +174,7 @@ MasterPalette::MasterPalette(QWidget* parent)
|
|||
addPalette(MuseScore::newNoteHeadsPalette());
|
||||
addPalette(MuseScore::newTremoloPalette());
|
||||
addPalette(MuseScore::newRepeatsPalette());
|
||||
addPalette(MuseScore::newTempoPalette());
|
||||
addPalette(MuseScore::newTempoPalette(false));
|
||||
addPalette(MuseScore::newTextPalette());
|
||||
addPalette(MuseScore::newBreaksPalette());
|
||||
addPalette(MuseScore::newBagpipeEmbellishmentPalette());
|
||||
|
|
|
@ -992,15 +992,16 @@ void MuseScore::showPalette(bool visible)
|
|||
struct TempoPattern {
|
||||
QString pattern;
|
||||
double f;
|
||||
bool relative;
|
||||
|
||||
TempoPattern(const QString& s, double v) : pattern(s), f(v) {}
|
||||
TempoPattern(const QString& s, double v, bool relative) : pattern(s), f(v), relative(relative) {}
|
||||
};
|
||||
|
||||
//---------------------------------------------------------
|
||||
// newTempoPalette
|
||||
//---------------------------------------------------------
|
||||
|
||||
Palette* MuseScore::newTempoPalette()
|
||||
Palette* MuseScore::newTempoPalette(bool basic)
|
||||
{
|
||||
Palette* sp = new Palette;
|
||||
sp->setName(QT_TRANSLATE_NOOP("Palette", "Tempo"));
|
||||
|
@ -1008,24 +1009,34 @@ Palette* MuseScore::newTempoPalette()
|
|||
sp->setGrid(60, 30);
|
||||
sp->setDrawGrid(true);
|
||||
|
||||
static const TempoPattern tp[] = {
|
||||
TempoPattern("<sym>metNoteHalfUp</sym> = 80", 80.0/30.0), // 1/2
|
||||
TempoPattern("<sym>metNoteQuarterUp</sym> = 80", 80.0/60.0), // 1/4
|
||||
TempoPattern("<sym>metNote8thUp</sym> = 80", 80.0/120.0), // 1/8
|
||||
TempoPattern("<sym>metNoteHalfUp</sym><sym>space</sym><sym>metAugmentationDot</sym> = 80", 120/30.0), // dotted 1/2
|
||||
TempoPattern("<sym>metNoteQuarterUp</sym><sym>space</sym><sym>metAugmentationDot</sym> = 80", 120/60.0), // dotted 1/4
|
||||
TempoPattern("<sym>metNote8thUp</sym><sym>space</sym><sym>metAugmentationDot</sym> = 80", 120/120.0), // dotted 1/8
|
||||
static const TempoPattern tps[] = {
|
||||
TempoPattern("<sym>metNoteHalfUp</sym> = 80", 80.0/30.0, false), // 1/2
|
||||
TempoPattern("<sym>metNoteQuarterUp</sym> = 80", 80.0/60.0, false), // 1/4
|
||||
TempoPattern("<sym>metNote8thUp</sym> = 80", 80.0/120.0, false), // 1/8
|
||||
TempoPattern("<sym>metNoteHalfUp</sym><sym>space</sym><sym>metAugmentationDot</sym> = 80", 120/30.0, false), // dotted 1/2
|
||||
TempoPattern("<sym>metNoteQuarterUp</sym><sym>space</sym><sym>metAugmentationDot</sym> = 80", 120/60.0, false), // dotted 1/4
|
||||
TempoPattern("<sym>metNote8thUp</sym><sym>space</sym><sym>metAugmentationDot</sym> = 80", 120/120.0, false), // dotted 1/8
|
||||
TempoPattern("<sym>metNoteQuarterUp</sym> = <sym>metNoteQuarterUp</sym><sym>space</sym><sym>metAugmentationDot</sym>", 3.0/2.0, true),
|
||||
TempoPattern("<sym>metNoteQuarterUp</sym><sym>space</sym><sym>metAugmentationDot</sym> = <sym>metNoteQuarterUp</sym>", 2.0/3.0, true),
|
||||
TempoPattern("<sym>metNoteHalfUp</sym> = <sym>metNoteQuarterUp</sym>", 1.0/2.0, true),
|
||||
TempoPattern("<sym>metNoteQuarterUp</sym> = <sym>metNoteHalfUp</sym>", 2.0/1.0, true),
|
||||
TempoPattern("<sym>metNote8thUp</sym> = <sym>metNote8thUp</sym>", 1.0/1.0, true),
|
||||
TempoPattern("<sym>metNoteQuarterUp</sym> = <sym>metNoteQuarterUp</sym>", 1.0/1.0, true),
|
||||
};
|
||||
for (unsigned i = 0; i < sizeof(tp)/sizeof(*tp); ++i) {
|
||||
for (TempoPattern tp : tps) {
|
||||
if (tp.relative && basic)
|
||||
continue;
|
||||
TempoText* tt = new TempoText(gscore);
|
||||
tt->setFollowText(true);
|
||||
// leave track at default (-1) to make it possible
|
||||
// for drop() to tell that this came from palette
|
||||
// (it will then be set to 0 there)
|
||||
//tt->setTrack(0);
|
||||
tt->setTempo(tp[i].f);
|
||||
tt->setXmlText(tp[i].pattern);
|
||||
sp->append(tt, tr("Tempo text"), QString(), 1.5);
|
||||
tt->setXmlText(tp.pattern);
|
||||
if (tp.relative) {
|
||||
tt->setRelative(tp.f);
|
||||
sp->append(tt, tr("Metric modulation"), QString(), 1.5);
|
||||
}
|
||||
else {
|
||||
tt->setTempo(tp.f);
|
||||
sp->append(tt, tr("Tempo text"), QString(), 1.5);
|
||||
}
|
||||
}
|
||||
return sp;
|
||||
}
|
||||
|
@ -1135,7 +1146,7 @@ void MuseScore::setAdvancedPalette()
|
|||
paletteBox->addPalette(newNoteHeadsPalette());
|
||||
paletteBox->addPalette(newTremoloPalette());
|
||||
paletteBox->addPalette(newRepeatsPalette());
|
||||
paletteBox->addPalette(newTempoPalette());
|
||||
paletteBox->addPalette(newTempoPalette(false));
|
||||
paletteBox->addPalette(newTextPalette());
|
||||
paletteBox->addPalette(newBreaksPalette());
|
||||
paletteBox->addPalette(newBagpipeEmbellishmentPalette());
|
||||
|
@ -1258,7 +1269,7 @@ void MuseScore::setBasicPalette()
|
|||
// paletteBox->addPalette(newNoteHeadsPalette());
|
||||
// paletteBox->addPalette(newTremoloPalette());
|
||||
paletteBox->addPalette(newRepeatsPalette());
|
||||
paletteBox->addPalette(newTempoPalette());
|
||||
paletteBox->addPalette(newTempoPalette(true));
|
||||
paletteBox->addPalette(newTextPalette());
|
||||
paletteBox->addPalette(newBreaksPalette());
|
||||
paletteBox->addPalette(newBeamPalette(true));
|
||||
|
|
|
@ -648,7 +648,7 @@ class MuseScore : public QMainWindow, public MuseScoreCore {
|
|||
void allowShowMidiPanel(const QString &file);
|
||||
void setMidiReopenInProgress(const QString &file);
|
||||
|
||||
static Palette* newTempoPalette();
|
||||
static Palette* newTempoPalette(bool basic);
|
||||
static Palette* newTextPalette();
|
||||
static Palette* newTimePalette();
|
||||
static Palette* newRepeatsPalette();
|
||||
|
|
Loading…
Reference in a new issue