Skip to content

Commit

Permalink
Merge pull request #4509 from dmitrio95/280775-inserttext-mmrest
Browse files Browse the repository at this point in the history
fix #280775: fix inserting text elements on MM rest via shortcut
  • Loading branch information
anatoly-os committed Dec 28, 2018
2 parents e34bd14 + acdc76f commit 5da7b40
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 30 deletions.
16 changes: 16 additions & 0 deletions libmscore/chordrest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1297,5 +1297,21 @@ bool ChordRest::isBefore(ChordRest* o)
return t < otick;
}

//---------------------------------------------------------
// undoAddAnnotation
//---------------------------------------------------------

void ChordRest::undoAddAnnotation(Element* a)
{
Segment* seg = segment();
Measure* m = measure();
if (m && m->isMMRest())
seg = m->mmRestFirst()->findSegmentR(SegmentType::ChordRest, 0);

a->setTrack(a->systemFlag() ? 0 : track());
a->setParent(seg);
score()->undoAddElement(a);
}

}

2 changes: 2 additions & 0 deletions libmscore/chordrest.h
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,8 @@ class ChordRest : public DurationElement {
virtual void removeMarkings(bool keepTremolo = false);

bool isBefore(ChordRest*);

void undoAddAnnotation(Element*);
};


Expand Down
6 changes: 3 additions & 3 deletions libmscore/element.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1257,10 +1257,10 @@ bool Element::isPrintable() const
// findMeasure
//---------------------------------------------------------

Element* Element::findMeasure()
Measure* Element::findMeasure()
{
if (isMeasure())
return this;
return toMeasure(this);
else if (_parent)
return _parent->findMeasure();
else
Expand All @@ -1271,7 +1271,7 @@ Element* Element::findMeasure()
// findMeasure
//---------------------------------------------------------

const Element* Element::findMeasure() const
const Measure* Element::findMeasure() const
{
Element* e = const_cast<Element*>(this);
return e->findMeasure();
Expand Down
4 changes: 2 additions & 2 deletions libmscore/element.h
Original file line number Diff line number Diff line change
Expand Up @@ -175,8 +175,8 @@ class Element : public ScoreElement {

Element* parent() const { return _parent; }
void setParent(Element* e) { _parent = e; }
Element* findMeasure();
const Element* findMeasure() const;
Measure* findMeasure();
const Measure* findMeasure() const;
MeasureBase* findMeasureBase();
const MeasureBase* findMeasureBase() const;

Expand Down
44 changes: 19 additions & 25 deletions mscore/scoreview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3748,7 +3748,6 @@ void ScoreView::cmdAddText(Tid tid)
changeState(ViewState::NORMAL);

TextBase* s = 0;
TextBase* es = 0;
_score->startCmd();
switch (tid) {
case Tid::TITLE:
Expand All @@ -3765,6 +3764,7 @@ void ScoreView::cmdAddText(Tid tid)
s = new Text(_score, tid);
s->setParent(measure);
adjustCanvasPosition(measure, false);
_score->undoAddElement(s);
}
break;

Expand All @@ -3774,8 +3774,7 @@ void ScoreView::cmdAddText(Tid tid)
if (!cr)
break;
s = new RehearsalMark(_score);
s->setTrack(0);
s->setParent(cr->segment());
cr->undoAddAnnotation(s);
}
break;
case Tid::STAFF:
Expand All @@ -3784,20 +3783,7 @@ void ScoreView::cmdAddText(Tid tid)
if (!cr)
break;
s = new StaffText(_score, Tid::STAFF);
Segment* parent = 0;
if (cr->segment()->measure()->isMMRest()) { // mm hack
Measure* m = cr->segment()->measure()->mmRestFirst();
parent = m->findSegmentR(SegmentType::ChordRest, 0);
es = new StaffText(_score, Tid::STAFF);
es->setTrack(cr->track());
es->setParent(cr->segment());
_score->addElement(es);
s->linkTo(es);
}
else
parent = cr->segment();
s->setTrack(cr->track());
s->setParent(parent);
cr->undoAddAnnotation(s);
}
break;
case Tid::SYSTEM:
Expand All @@ -3806,8 +3792,7 @@ void ScoreView::cmdAddText(Tid tid)
if (!cr)
break;
s = new SystemText(_score, Tid::SYSTEM);
s->setTrack(0);
s->setParent(cr->segment());
cr->undoAddAnnotation(s);
}
break;
case Tid::EXPRESSION:
Expand All @@ -3816,9 +3801,8 @@ void ScoreView::cmdAddText(Tid tid)
if (!cr)
break;
s = new StaffText(_score, Tid::EXPRESSION);
s->setTrack(cr->track());
s->setPlacement(Placement::BELOW);
s->setParent(cr->segment());
cr->undoAddAnnotation(s);
}
break;
case Tid::INSTRUMENT_CHANGE:
Expand All @@ -3827,8 +3811,7 @@ void ScoreView::cmdAddText(Tid tid)
if (!cr)
break;
s = new InstrumentChange(_score);
s->setTrack(cr->track());
s->setParent(cr->segment());
cr->undoAddAnnotation(s);
}
break;
case Tid::FINGERING:
Expand All @@ -3843,17 +3826,28 @@ void ScoreView::cmdAddText(Tid tid)
s = new Fingering(_score);
s->setTrack(e->track());
s->setParent(e);
_score->undoAddElement(s);
}
break;
default:
break;
}

if (s) {
_score->undoAddElement(s);
_score->select(s, SelectType::SINGLE, 0);
_score->endCmd();
startEditMode(es ? es : s);
Measure* m = s->findMeasure();
if (m && m->hasMMRest() && s->links()) {
Measure* mmRest = m->mmRest();
for (ScoreElement* se : *s->links()) {
TextBase* s1 = toTextBase(se);
if (s != s1 && s1->findMeasure() == mmRest) {
s = s1;
break;
}
}
}
startEditMode(s);
}
else
_score->endCmd();
Expand Down

0 comments on commit 5da7b40

Please sign in to comment.