void Cursor::add(Element* wrapped) { Ms::Element* s = wrapped->element(); if (!_segment || !s) return; wrapped->setOwnership(Ownership::SCORE); s->setTrack(_track); s->setParent(_segment); if (s->isChordRest()) s->score()->undoAddCR(toChordRest(s), _segment->measure(), _segment->tick()); else if (s->type() == ElementType::KEYSIG) { Ms::Segment* ns = _segment->measure()->undoGetSegment(SegmentType::KeySig, _segment->tick()); s->setParent(ns); _score->undoAddElement(s); } else if (s->type() == ElementType::TIMESIG) { Ms::Measure* m = _segment->measure(); Fraction tick = m->tick(); _score->cmdAddTimeSig(m, _track, toTimeSig(s), false); m = _score->tick2measure(tick); _segment = m->first(_filter); nextInTrack(); } else if (s->type() == ElementType::LAYOUT_BREAK) { Ms::Measure* m = _segment->measure(); s->setParent(m); _score->undoAddElement(s); } else { _score->undoAddElement(s); } _score->setLayoutAll(); }
void Cursor::rewind(RewindMode mode) { // // rewind to start of score // if (mode == SCORE_START) { _segment = nullptr; Ms::Measure* m = _score->firstMeasure(); if (m) { _segment = m->first(_filter); nextInTrack(); } } // // rewind to start of selection // else if (mode == SELECTION_START) { if (!_score->selection().isRange()) return; _segment = _score->selection().startSegment(); _track = _score->selection().staffStart() * VOICES; nextInTrack(); } // // rewind to end of selection // else if (mode == SELECTION_END) { if (!_score->selection().isRange()) return; _segment = _score->selection().endSegment(); _track = (_score->selection().staffEnd() * VOICES) - 1; // be sure _track exists } _score->inputState().setTrack(_track); _score->inputState().setSegment(_segment); }
bool Cursor::nextMeasure() { if (_segment == 0) return false; Ms::Measure* m = _segment->measure()->nextMeasure(); if (m == 0) { _segment = 0; return false; } _segment = m->first(_filter); nextInTrack(); return _segment != 0; }