void Cursor::add(Element* s) { if (!_segment) return; s->setTrack(_track); s->setParent(_segment); if (s->isChordRest()) s->score()->undoAddCR(static_cast<ChordRest*>(s), _segment->measure(), _segment->tick()); else if (s->type() == ElementType::KEYSIG) { Segment* ns = _segment->measure()->undoGetSegment(SegmentType::KeySig, _segment->tick()); s->setParent(ns); _score->undoAddElement(s); } else if (s->type() == ElementType::TIMESIG) { Measure* m = _segment->measure(); int tick = m->tick(); _score->cmdAddTimeSig(m, _track, static_cast<TimeSig*>(s), false); m = _score->tick2measure(tick); _segment = m->first(SegmentType::ChordRest); firstChordRestInTrack(); } else if (s->type() == ElementType::LAYOUT_BREAK) { Measure* m = _segment->measure(); s->setParent(m); _score->undoAddElement(s); } else { _score->undoAddElement(s); } _score->setLayoutAll(true); }
bool Cursor::next() { if (!_segment) return false; _segment = _segment->next1(Segment::SegChordRest | Segment::SegGrace); firstChordRestInTrack(); _score->inputState().setTrack(_track); _score->inputState().setSegment(_segment); return _segment != 0; }
void Cursor::rewind(int type) { if (type == 0) { _segment = 0; Measure* m = _score->firstMeasure(); if (m) { _segment = m->first(SegmentType::ChordRest); firstChordRestInTrack(); } } else if (type == 1) { _segment = _score->selection().startSegment(); _track = _score->selection().staffStart() * VOICES; firstChordRestInTrack(); } else if (type == 2) { _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; Measure* m = _segment->measure()->nextMeasure(); if (m == 0) { _segment = 0; return false; } _segment = m->first(Segment::SegChordRest | Segment::SegGrace); // while (seg && seg->element(_track) == 0) // seg = seg->next1(SegChordRest | SegGrace); firstChordRestInTrack(); return _segment != 0; }