Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/braille/internal/braille.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -822,7 +822,7 @@ bool Braille::write(QIODevice& device)
// we write the measure number
if (currentLineLength == 0) {
TextToUEBBraille textToBraille;
QString measureNumber = textToBraille.braille(QString::number(m->no() + 1)).remove(0, 1) + " ";
QString measureNumber = textToBraille.braille(QString::number(m->measureNumber() + 1)).remove(0, 1) + " ";
int measureNumberLen = measureNumber.size();
line[0] += measureNumber;
for (size_t i = 1; i < nrStaves; i++) {
Expand All @@ -836,7 +836,7 @@ bool Braille::write(QIODevice& device)
}

for (size_t i = 0; i < nrStaves; ++i) {
BRAILLE_TRACE() << "Measure " << mb->no() + 1 << " Staff " << i;
BRAILLE_TRACE() << "Measure " << m->measureNumber() + 1 << " Staff " << i;

measureBraille[i] = brailleMeasure(m, static_cast<int>(i)).toUtf8();

Expand Down
2 changes: 1 addition & 1 deletion src/engraving/api/v1/cursor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -534,7 +534,7 @@ void Cursor::addTuplet(Fraction* ratio, Fraction* duration)
if (tupletTick + fDuration > tupletMeasure->endTick()) {
LOGW(
"Cursor::addTuplet: cannot add cross-measure tuplet (measure %d, rel.tick %s, duration %s)",
tupletMeasure->no() + 1, qPrintable(segment()->rtick().toString()), qPrintable(fDuration.toString()));
tupletMeasure->measureNumber() + 1, qPrintable(segment()->rtick().toString()), qPrintable(fDuration.toString()));

return;
}
Expand Down
48 changes: 31 additions & 17 deletions src/engraving/api/v1/elements.h
Original file line number Diff line number Diff line change
Expand Up @@ -1904,22 +1904,7 @@ class MeasureBase : public EngravingItem
API_PROPERTY_T(bool, repeatStart, REPEAT_START)
/// Whether this measureBase contaions a jump.
API_PROPERTY_T(bool, repeatJump, REPEAT_JUMP)
/// The measure number offset of this measureBase.
API_PROPERTY_T(int, noOffset, NO_OFFSET)
/// Whether this measureBase is included in the measure count.
API_PROPERTY_T(bool, irregular, IRREGULAR)

/// \brief Measure number, counting from 1.
/// Number of this measure in the score counting from 1, i.e.
/// for the first measure its \p no value will be equal to 1.
/// User-visible measure number can be calculated as
/// \code
/// measure.no + measure.noOffset
/// \endcode
/// where \p measure is the relevant \ref Measure object.
/// \since MuseScore 4.6
/// \see ScoreElement::noOffset
Q_PROPERTY(int no READ no)
/// \brief Current tick for this measure
/// \returns Tick of this measure, i.e. number of ticks from the beginning
/// of the score to this measure, as a fraction.
Expand Down Expand Up @@ -1976,8 +1961,6 @@ class MeasureBase : public EngravingItem
mu::engraving::MeasureBase* measureBase() { return toMeasureBase(e); }
const mu::engraving::MeasureBase* measureBase() const { return toMeasureBase(e); }

int no() { return measureBase()->no(); }

Fraction* tick() const;
Fraction* ticks() const;

Expand Down Expand Up @@ -2048,6 +2031,35 @@ class Measure : public MeasureBase
/// The actual time signature / duration of this measure.
API_PROPERTY(timesigActual, TIMESIG_ACTUAL)

/// \brief Measure number, counting from 1.
/// Number of this measure in the score counting from 1, i.e.
/// for the first measure its \p measureNumber value will be equal to 1.
/// User-visible measure number can be calculated as
/// \code
/// measure.measureNumber + measure.measureNumberOffset
/// \endcode
/// where \p measure is the relevant \ref Measure object.
/// \since MuseScore 5.0
/// \see Measure::measureNumberOffset
Q_PROPERTY(int measureNumber READ measureNumber)
/// \brief Compatibility alias for \ref measureNumber. Do not use in new code.
/// \since MuseScore 4.6
Q_PROPERTY(int no READ measureNumber)

/// \brief The measure number offset of this measure.
/// \since MuseScore 5.0
API_PROPERTY_T(int, measureNumberOffset, MEASURE_NUMBER_OFFSET)
/// \brief Compatibility alias for \ref measureNumberOffset. Do not use in new code.
/// \since MuseScore 4.6
API_PROPERTY_T(int, noOffset, MEASURE_NUMBER_OFFSET)

/// \brief Whether this measure is excluded from measure numbering.
/// \since MuseScore 5.0
API_PROPERTY_T(bool, excludeFromNumbering, EXCLUDE_FROM_NUMBERING)
/// \brief Compatibility alias for \ref measureNumberOffset. Do not use in new code.
/// \since MuseScore 4.6
API_PROPERTY_T(bool, irregular, EXCLUDE_FROM_NUMBERING)

/// Controls whether this measure displays a measure number,
/// one of PluginAPI::PluginAPI::MeasureNumberMode values.
/// \since MuseScore 4.6
Expand Down Expand Up @@ -2086,6 +2098,8 @@ class Measure : public MeasureBase
mu::engraving::Measure* measure() { return toMeasure(e); }
const mu::engraving::Measure* measure() const { return toMeasure(e); }

int measureNumber() { return measure()->measureNumber(); }

bool showsMeasureNumberInAutoMode() { return measure()->showMeasureNumberInAutoMode(); }

Segment* firstSegment() { return wrap<Segment>(measure()->firstEnabled(), Ownership::SCORE); }
Expand Down
7 changes: 4 additions & 3 deletions src/engraving/dom/check.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,11 +85,12 @@ void Score::checkScore()
Fraction timeStretch = st->timeStretch(lcr->tick());
Fraction f = cr->globalTicks() * timeStretch;
LOGD() << "Chord/Rest gap at tick " << tick.ticks() << "(" << lcr->typeName() << "+" << f.ticks() << ")-"
<< s->tick().ticks() << "(" << cr->typeName() << ") staffIdx " << staffIdx << " measure " << cr->measure()->no()
<< s->tick().ticks() << "(" << cr->typeName() << ") staffIdx " << staffIdx
<< " measure " << cr->measure()->measureNumber()
<< " (len = " << (cr->tick() - tick).ticks() << ")";
} else {
LOGD() << "Chord/Rest gap at tick " << tick.ticks() << "-" << s->tick().ticks() << "(" << cr->typeName() << ") "
<< "staffIdx " << staffIdx << " measure " << cr->measure()->no()
<< "staffIdx " << staffIdx << " measure " << cr->measure()->measureNumber()
<< " (len = " << (cr->tick() - tick).ticks() << ")";
}
tick = s->tick();
Expand Down Expand Up @@ -247,7 +248,7 @@ bool Score::checkKeys()
}
}
if (staff(i)->key(m->tick()) != k) {
LOGD("measure %d (tick %d) : key %d, map %d", m->no(), m->tick().ticks(), int(k),
LOGD("measure %d (tick %d) : key %d, map %d", m->measureNumber(), m->tick().ticks(), int(k),
int(staff(i)->key(m->tick())));
rc = false;
}
Expand Down
4 changes: 2 additions & 2 deletions src/engraving/dom/engravingitem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2521,11 +2521,11 @@ EngravingItem::BarBeat EngravingItem::barbeat() const
ticksB = ticks_beat(timeSigMap->timesig(segment->tick().ticks()).timesig().denominator());
measure = segment->findMeasure();
if (measure) {
displayedBar = measure->no();
displayedBar = measure->measureNumber();
}
} else if (parent->isMeasure()) {
measure = toMeasure(parent);
bar = measure->no();
bar = measure->measureNumber();
displayedBar = bar;
beat = -1;
ticks = 0;
Expand Down
2 changes: 1 addition & 1 deletion src/engraving/dom/engravingitem.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ enum class ElementFlag {
REPEAT_END = 0x00001000,
REPEAT_START = 0x00002000,
REPEAT_JUMP = 0x00004000,
IRREGULAR = 0x00008000,
EXCLUDE_FROM_NUMBERING = 0x00008000,
LINE_BREAK = 0x00010000,
PAGE_BREAK = 0x00020000,
SECTION_BREAK = 0x00040000,
Expand Down
6 changes: 3 additions & 3 deletions src/engraving/dom/excerpt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -919,9 +919,9 @@ static MeasureBase* cloneMeasure(MeasureBase* mb, Score* score, const Score* osc
nm->setRepeatEnd(m->repeatEnd());
nm->setRepeatJump(m->repeatJump());

nm->setIrregular(m->irregular());
nm->setNo(m->no());
nm->setNoOffset(m->noOffset());
nm->setExcludeFromNumbering(m->excludeFromNumbering());
nm->setMeasureNumber(m->measureNumber());
nm->setMeasureNumberOffset(m->measureNumberOffset());
nm->setBreakMultiMeasureRest(m->breakMultiMeasureRest());

for (staff_idx_t dstStaffIdx = 0; dstStaffIdx < sourceStavesIndexes.size(); ++dstStaffIdx) {
Expand Down
73 changes: 54 additions & 19 deletions src/engraving/dom/measure.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -189,8 +189,8 @@ Measure::Measure(System* parent)
ms->lines()->setVisible(!staff->isLinesInvisible(tick()));
m_mstaves.push_back(ms);
}
setIrregular(false);
m_measureNumberMode = MeasureNumberMode::AUTO;
setExcludeFromNumbering(false);
m_measureNumberMode = MeasureNumberMode::AUTO;
m_userStretch = 1.0;
m_breakMultiMeasureRest = false;
m_mmRest = nullptr;
Expand All @@ -207,9 +207,11 @@ Measure::Measure(const Measure& m)
{
m_segments = m.m_segments.clone();
m_timesig = m.m_timesig;
m_len = m.m_len;
m_len = m.m_len;
m_repeatCount = m.m_repeatCount;
m_measureNumberMode = m.m_measureNumberMode;
m_measureNumber = m.m_measureNumber;
m_measureNumberOffset = m.m_measureNumberOffset;
m_measureNumberMode = m.m_measureNumberMode;
m_userStretch = m.m_userStretch;

m_mstaves.reserve(m.m_mstaves.size());
Expand Down Expand Up @@ -564,8 +566,8 @@ bool Measure::showMeasureNumberInAutoMode() const
return false;
}

// Measure numbers should not be shown on irregular measures.
if (irregular()) {
// Measure numbers should not be shown on measures excluded from numbering.
if (excludeFromNumbering()) {
return false;
}

Expand All @@ -574,16 +576,16 @@ bool Measure::showMeasureNumberInAutoMode() const

// Measure numbers should not show on first measure unless specified with Sid::showMeasureNumberOne
// except, when showing numbers on each measure, and first measure is after anacrusis - then show always
if (isFirstInSection() || (prevMeasure->irregular() && prevMeasure->isFirstInSection() && interval != 1)) {
if (isFirstInSection() || (prevMeasure->excludeFromNumbering() && prevMeasure->isFirstInSection() && interval != 1)) {
return style().styleB(Sid::showMeasureNumberOne);
}

if (style().styleB(Sid::measureNumberSystem)) {
// Show either if
// 1) This is the first measure of the system OR
// 2) The previous measure in the system is the first, and is irregular.
// 2) The previous measure in the system is the first, and is excluded from numbering.
return isFirstInSystem()
|| (prevMeasure && prevMeasure->irregular() && prevMeasure->isFirstInSystem());
|| (prevMeasure && prevMeasure->excludeFromNumbering() && prevMeasure->isFirstInSystem());
} else {
// In the case of an interval, we should show the measure number either if:
// 1) We should show them every measure
Expand All @@ -594,7 +596,7 @@ bool Measure::showMeasureNumberInAutoMode() const
// 2) (measureNumber + 1) % interval == 0 (or 1 if measure number one is numbered.)
// If measure number 1 is numbered, and the interval is let's say 5, then we should number #1, 6, 11, 16, etc.
// If measure number 1 is not numbered, with the same interval (5), then we should number #5, 10, 15, 20, etc.
return ((no() + 1) % interval) == (style().styleB(Sid::showMeasureNumberOne) ? 1 : 0);
return ((measureNumber() + 1) % interval) == (style().styleB(Sid::showMeasureNumberOne) ? 1 : 0);
}
}

Expand Down Expand Up @@ -2102,7 +2104,7 @@ bool Measure::isAnacrusis() const
{
const MeasureBase* pm = prev();

if (irregular() || !pm || pm->isBox() || pm->lineBreak() || pm->pageBreak() || pm->sectionBreak()) {
if (excludeFromNumbering() || !pm || pm->isBox() || pm->lineBreak() || pm->pageBreak() || pm->sectionBreak()) {
if (timesig() - ticks() > Fraction(0, 1)) {
return true;
}
Expand Down Expand Up @@ -2584,7 +2586,7 @@ bool Measure::isFullMeasureRest() const

bool Measure::empty() const
{
if (irregular()) {
if (excludeFromNumbering()) {
return false;
}
int n = 0;
Expand Down Expand Up @@ -2673,9 +2675,9 @@ Measure* Measure::cloneMeasure(Score* sc, const Fraction& tick, TieMap* tieMap)

assert(sc->staves().size() >= m_mstaves.size()); // destination score we're cloning into must have at least as many staves as measure being cloned

m->setNo(no());
m->setNoOffset(noOffset());
m->setIrregular(irregular());
m->setMeasureNumber(measureNumber());
m->setMeasureNumberOffset(measureNumberOffset());
m->setExcludeFromNumbering(excludeFromNumbering());
m->m_userStretch = m_userStretch;
m->m_breakMultiMeasureRest = m_breakMultiMeasureRest;
m->m_playbackCount = m_playbackCount;
Expand Down Expand Up @@ -2886,6 +2888,10 @@ PropertyValue Measure::getProperty(Pid propertyId) const
return PropertyValue::fromValue(m_timesig);
case Pid::TIMESIG_ACTUAL:
return PropertyValue::fromValue(m_len);
case Pid::EXCLUDE_FROM_NUMBERING:
return excludeFromNumbering();
case Pid::MEASURE_NUMBER_OFFSET:
return measureNumberOffset();
case Pid::MEASURE_NUMBER_MODE:
return int(measureNumberMode());
case Pid::BREAK_MMR:
Expand All @@ -2894,6 +2900,12 @@ PropertyValue Measure::getProperty(Pid propertyId) const
return repeatCount();
case Pid::USER_STRETCH:
return userStretch();
case Pid::REPEAT_END:
return repeatEnd();
case Pid::REPEAT_START:
return repeatStart();
case Pid::REPEAT_JUMP:
return repeatJump();
default:
return MeasureBase::getProperty(propertyId);
}
Expand All @@ -2912,6 +2924,16 @@ bool Measure::setProperty(Pid propertyId, const PropertyValue& value)
case Pid::TIMESIG_ACTUAL:
m_len = value.value<Fraction>();
break;
case Pid::EXCLUDE_FROM_NUMBERING:
setExcludeFromNumbering(value.toBool());
triggerLayoutAll();
score()->setPlaylistDirty();
return true;
case Pid::MEASURE_NUMBER_OFFSET:
setMeasureNumberOffset(value.toInt());
triggerLayoutAll();
score()->setPlaylistDirty();
return true;
case Pid::MEASURE_NUMBER_MODE:
setMeasureNumberMode(MeasureNumberMode(value.toInt()));
break;
Expand All @@ -2925,6 +2947,15 @@ bool Measure::setProperty(Pid propertyId, const PropertyValue& value)
case Pid::USER_STRETCH:
setUserStretch(value.toDouble());
break;
case Pid::REPEAT_END:
setRepeatEnd(value.toBool());
break;
case Pid::REPEAT_START:
setRepeatStart(value.toBool());
break;
case Pid::REPEAT_JUMP:
setRepeatJump(value.toBool());
break;
default:
return MeasureBase::setProperty(propertyId, value);
}
Expand All @@ -2942,6 +2973,10 @@ PropertyValue Measure::propertyDefault(Pid propertyId) const
case Pid::TIMESIG_NOMINAL:
case Pid::TIMESIG_ACTUAL:
return PropertyValue();
case Pid::EXCLUDE_FROM_NUMBERING:
return false;
case Pid::MEASURE_NUMBER_OFFSET:
return 0;
case Pid::MEASURE_NUMBER_MODE:
return int(MeasureNumberMode::AUTO);
case Pid::BREAK_MMR:
Expand All @@ -2950,9 +2985,9 @@ PropertyValue Measure::propertyDefault(Pid propertyId) const
return 2;
case Pid::USER_STRETCH:
return 1.0;
case Pid::NO_OFFSET:
return 0;
case Pid::IRREGULAR:
case Pid::REPEAT_END:
case Pid::REPEAT_START:
case Pid::REPEAT_JUMP:
return false;
default:
break;
Expand Down Expand Up @@ -3403,7 +3438,7 @@ double Measure::endingXForOpenEndedLines() const

String Measure::accessibleInfo() const
{
return String(u"%1: %2").arg(EngravingItem::accessibleInfo(), String::number(no() + 1));
return String(u"%1: %2").arg(EngravingItem::accessibleInfo(), String::number(measureNumber() + 1));
}

void Measure::styleChanged()
Expand Down
Loading
Loading