Element* Rest::drop(const DropData& data) { Element* e = data.element; switch (e->type()) { case ARTICULATION: if (e->subtype() == Articulation_Fermata) score()->addArticulation(this, (Articulation*)e); return 0; case ICON: { switch(e->subtype()) { case ICON_SBEAM: score()->undoChangeBeamMode(this, BEAM_BEGIN); break; case ICON_MBEAM: score()->undoChangeBeamMode(this, BEAM_MID); break; case ICON_NBEAM: score()->undoChangeBeamMode(this, BEAM_NO); break; case ICON_BEAM32: score()->undoChangeBeamMode(this, BEAM_BEGIN32); break; case ICON_BEAM64: score()->undoChangeBeamMode(this, BEAM_BEGIN64); break; case ICON_AUTOBEAM: score()->undoChangeBeamMode(this, BEAM_AUTO); break; } } delete e; break; case CHORD: { Chord* c = static_cast<Chord*>(e); Note* n = c->upNote(); Direction dir = c->stemDirection(); score()->select(0, SELECT_SINGLE, 0); NoteVal nval; nval.pitch = n->pitch(); nval.headGroup = n->headGroup(); Fraction d = score()->inputState().duration().fraction(); if (!d.isZero()) { Segment* seg = score()->setNoteRest(segment(), track(), nval, d, dir); if (seg) { ChordRest* cr = static_cast<ChordRest*>(seg->element(track())); if (cr) score()->nextInputPos(cr, true); } } delete e; } break; default: return ChordRest::drop(data); } return 0; }
Element* Rest::drop(const DropData& data) { Element* e = data.element; switch (e->type()) { case ElementType::ARTICULATION: { Articulation* a = static_cast<Articulation*>(e); if (a->articulationType() != ArticulationType::Fermata || !score()->addArticulation(this, a)) { delete e; e = 0; } } return e; case ElementType::CHORD: { Chord* c = static_cast<Chord*>(e); Note* n = c->upNote(); Direction dir = c->stemDirection(); // score()->select(0, SelectType::SINGLE, 0); NoteVal nval; nval.pitch = n->pitch(); nval.headGroup = n->headGroup(); Fraction d = score()->inputState().duration().fraction(); if (!d.isZero()) { Segment* seg = score()->setNoteRest(segment(), track(), nval, d, dir); if (seg) { ChordRest* cr = static_cast<ChordRest*>(seg->element(track())); if (cr) score()->nextInputPos(cr, true); } } delete e; } break; case ElementType::REPEAT_MEASURE: delete e; if (durationType().type() == TDuration::DurationType::V_MEASURE) { measure()->cmdInsertRepeatMeasure(staffIdx()); } break; default: return ChordRest::drop(data); } return 0; }
Element* Rest::drop(const DropData& data) { Element* e = data.element; switch (e->type()) { case ARTICULATION: { Articulation* a = static_cast<Articulation*>(e); if (a->articulationType() != Articulation_Fermata || !score()->addArticulation(this, a)) { delete e; e = 0; } } return e; case CHORD: { Chord* c = static_cast<Chord*>(e); Note* n = c->upNote(); MScore::Direction dir = c->stemDirection(); // score()->select(0, SELECT_SINGLE, 0); NoteVal nval; nval.pitch = n->pitch(); nval.headGroup = n->headGroup(); Fraction d = score()->inputState().duration().fraction(); if (!d.isZero()) { Segment* seg = score()->setNoteRest(segment(), track(), nval, d, dir); if (seg) { ChordRest* cr = static_cast<ChordRest*>(seg->element(track())); if (cr) score()->nextInputPos(cr, true); } } delete e; } break; default: return ChordRest::drop(data); } return 0; }