Skip to content

Commit

Permalink
Move ScoreAccessibility::barbeat(Element) to Element::barbeat()
Browse files Browse the repository at this point in the history
Duplicate of musescore#5096
  • Loading branch information
mirabilos authored and Jojo-Schmitz committed Dec 7, 2021
1 parent a540eb0 commit 0e262bb
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 39 deletions.
49 changes: 49 additions & 0 deletions libmscore/element.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2595,4 +2595,53 @@ void Element::autoplaceMeasureElement(bool above, bool add)
setOffsetChanged(false);
}

//---------------------------------------------------------
// barbeat
//---------------------------------------------------------

std::pair<int, float> Element::barbeat() const
{
int bar = 0;
int beat = 0;
int ticks = 0;
TimeSigMap* tsm = this->score()->sigmap();
const Element* p = this;
int ticksB = ticks_beat(tsm->timesig(0).timesig().denominator());
while(p && p->type() != ElementType::SEGMENT && p->type() != ElementType::MEASURE)
p = p->parent();

if (!p) {
return std::pair<int, float>(0, 0.0F);
}
else if (p->type() == ElementType::SEGMENT) {
const Segment* seg = static_cast<const Segment*>(p);
tsm->tickValues(seg->tick().ticks(), &bar, &beat, &ticks);
ticksB = ticks_beat(tsm->timesig(seg->tick().ticks()).timesig().denominator());
}
else if (p->type() == ElementType::MEASURE) {
const Measure* m = static_cast<const Measure*>(p);
bar = m->no();
beat = -1;
ticks = 0;
}
return std::pair<int,float>(bar + 1, beat + 1 + ticks / static_cast<float>(ticksB));
}

//---------------------------------------------------------
// accessibleBarbeat
//---------------------------------------------------------

QString Element::accessibleBarbeat() const
{
QString barsAndBeats = "";
std::pair<int, float>bar_beat = barbeat();
if (bar_beat.first) {
barsAndBeats += "; " + QObject::tr("Measure: %1").arg(QString::number(bar_beat.first));
if (bar_beat.second)
barsAndBeats += "; " + QObject::tr("Beat: %1").arg(QString::number(bar_beat.second));
}
if (staffIdx() + 1)
barsAndBeats += "; " + QObject::tr("Staff: %1").arg(QString::number(staffIdx() + 1));
return barsAndBeats;
}
}
2 changes: 2 additions & 0 deletions libmscore/element.h
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,8 @@ class Element : public ScoreElement {
virtual bool isElement() const override { return true; }

qreal spatium() const;
std::pair<int, float>barbeat() const;
QString accessibleBarbeat() const;

inline void setFlag(ElementFlag f, bool v) { if (v) _flags |= f; else _flags &= ~ElementFlags(f); }
inline void setFlag(ElementFlag f, bool v) const { if (v) _flags |= f; else _flags &= ~ElementFlags(f); }
Expand Down
44 changes: 6 additions & 38 deletions mscore/scoreaccessibility.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -244,8 +244,8 @@ void ScoreAccessibility::currentInfoChanged()
QString optimizedBarsAndBeats = "";
if (el->isSpanner()) {
Spanner* s = static_cast<Spanner*>(el);
std::pair<int, float> bar_beat = barbeat(s->startSegment());
barsAndBeats += tr("Start Measure: %1; Start Beat: %2").arg(QString::number(bar_beat.first)).arg(QString::number(bar_beat.second));
std::pair<int, float> bar_beat = s->startSegment()->barbeat();
barsAndBeats += " " + tr("Start Measure: %1; Start Beat: %2").arg(QString::number(bar_beat.first)).arg(QString::number(bar_beat.second));
Segment* seg = s->endSegment();
if(!seg)
seg = score->lastSegment()->prev1MM(SegmentType::ChordRest);
Expand All @@ -255,12 +255,12 @@ void ScoreAccessibility::currentInfoChanged()
s->type() != ElementType::TIE )
seg = seg->prev1MM(SegmentType::ChordRest);

bar_beat = barbeat(seg);
bar_beat = seg->barbeat();
barsAndBeats += "; " + tr("End Measure: %1; End Beat: %2").arg(QString::number(bar_beat.first)).arg(QString::number(bar_beat.second));
optimizedBarsAndBeats = barsAndBeats;
}
else {
std::pair<int, float>bar_beat = barbeat(el);
std::pair<int, float>bar_beat = el->barbeat();
if (bar_beat.first) {
_oldBar = bar_beat.first;
barsAndBeats += " " + tr("Measure: %1").arg(QString::number(bar_beat.first));
Expand Down Expand Up @@ -331,7 +331,7 @@ void ScoreAccessibility::currentInfoChanged()
QString barsAndBeats = "";
std::pair<int, float> bar_beat;

bar_beat = barbeat(score->selection().startSegment());
bar_beat = score->selection().startSegment()->barbeat();
barsAndBeats += " " + tr("Start Measure: %1; Start Beat: %2").arg(QString::number(bar_beat.first)).arg(QString::number(bar_beat.second));
Segment* endSegment = score->selection().endSegment();

Expand All @@ -340,7 +340,7 @@ void ScoreAccessibility::currentInfoChanged()
else
endSegment = endSegment->prev1MM();

bar_beat = barbeat(endSegment);
bar_beat = endSegment->barbeat();
barsAndBeats += " " + tr("End Measure: %1; End Beat: %2").arg(QString::number(bar_beat.first)).arg(QString::number(bar_beat.second));
statusBarLabel->setText(tr("Range Selection") + barsAndBeats);
score->setAccessibleInfo(tr("Range Selection") + barsAndBeats);
Expand Down Expand Up @@ -419,38 +419,6 @@ void ScoreAccessibility::updateAccessibility()
//QAccessible::updateAccessibility(&ev2);
}

std::pair<int, float> ScoreAccessibility::barbeat(Element *e)
{
if (!e) {
return std::pair<int, float>(0, 0.0F);
}

int bar = 0;
int beat = 0;
int ticks = 0;
TimeSigMap* tsm = e->score()->sigmap();
Element* p = e;
int ticksB = ticks_beat(tsm->timesig(0).timesig().denominator());
while(p && p->type() != ElementType::SEGMENT && p->type() != ElementType::MEASURE)
p = p->parent();

if (!p) {
return std::pair<int, float>(0, 0.0F);
}
else if (p->type() == ElementType::SEGMENT) {
Segment* seg = static_cast<Segment*>(p);
tsm->tickValues(seg->tick().ticks(), &bar, &beat, &ticks);
ticksB = ticks_beat(tsm->timesig(seg->tick().ticks()).timesig().denominator());
}
else if (p->type() == ElementType::MEASURE) {
Measure* m = static_cast<Measure*>(p);
bar = m->no();
beat = -1;
ticks = 0;
}
return std::pair<int,float>(bar + 1, beat + 1 + ticks / static_cast<float>(ticksB));
}

void ScoreAccessibility::makeReadable(QString& s)
{
static std::vector<std::pair<QString, QString>> unicodeReplacements {
Expand Down
1 change: 0 additions & 1 deletion mscore/scoreaccessibility.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@ class ScoreAccessibility : public QObject {
QMainWindow* mainWindow;
QLabel* statusBarLabel;
ScoreAccessibility(QMainWindow* statusBar);
std::pair<int, float>barbeat(Element* e);
int _oldStaff = -1;
int _oldBar = -1;

Expand Down

0 comments on commit 0e262bb

Please sign in to comment.