void Score::cmdJoinMeasure(Measure* m1, Measure* m2) { startCmd(); deselectAll(); ScoreRange range; range.read(m1->first(), m2->last()); int tick1 = m1->tick(); int tick2 = m2->endTick(); for (auto i : _spanner.findContained(tick1, tick2)) undo(new RemoveElement(i.value)); undoRemoveMeasures(m1, m2); Measure* m = new Measure(this); m->setEndBarLineType(m2->endBarLineType(), m2->endBarLineGenerated(), m2->endBarLineVisible(), m2->endBarLineColor()); m->setTick(m1->tick()); m->setTimesig(m1->timesig()); Fraction f; for (Measure* mm = m1; mm; mm = mm->nextMeasure()) { f += mm->len(); if (mm == m2) break; } m->setLen(f); m->setNext(m2->next()); m->setPrev(m2->next() ? m2->next()->prev() : last()); undo(new InsertMeasures(m, m)); range.write(this, m1->tick()); endCmd(); }
void SourceTASReader::Execute() { iterationFinished = false; SetFpsAndPlayspeed(); currentTick = 0; clientDLL.ResetAfterframesQueue(); currentScript.Init(fileName); for (auto& entry : currentScript.afterFramesEntries) { if (entry.framesLeft == NO_AFTERFRAMES_BULK) { currentScript.AddDuringLoadCmd(entry.command); } } std::string startCmd(currentScript.initCommand + ";" + currentScript.duringLoad); EngineConCmd(startCmd.c_str()); DevMsg("Executing start command: %s\n", startCmd.c_str()); if (!demoName.empty()) currentScript.AddAfterFramesEntry(demoDelay, "record " + demoName); for (auto& entry : currentScript.afterFramesEntries) { if (entry.framesLeft != NO_AFTERFRAMES_BULK) { clientDLL.AddIntoAfterframesQueue(entry); } } }
void Score::cmdSplitMeasure(ChordRest* cr) { Segment* segment = cr->segment(); Measure* measure = segment->measure(); ScoreRange range; range.read(measure->first(), measure->last()); startCmd(); deleteItem(measure); // create empty measures: Measure* m2 = static_cast<Measure*>(insertMeasure(Element::Type::MEASURE, measure->next(), true)); Measure* m1 = static_cast<Measure*>(insertMeasure(Element::Type::MEASURE, m2, true)); int tick = segment->tick(); m1->setTick(measure->tick()); m2->setTick(tick); int ticks1 = segment->tick() - measure->tick(); int ticks2 = measure->ticks() - ticks1; m1->setTimesig(measure->timesig()); m2->setTimesig(measure->timesig()); m1->adjustToLen(Fraction::fromTicks(ticks1)); m2->adjustToLen(Fraction::fromTicks(ticks2)); range.write(this, m1->tick()); endCmd(); }
void Score::write(Xml& xml, bool selectionOnly) { // if we have multi measure rests and some parts are hidden, // then some layout information is missing: // relayout with all parts set visible QList<Part*> hiddenParts; bool unhide = false; if (styleB(StyleIdx::createMultiMeasureRests)) { for (Part* part : _parts) { if (!part->show()) { if (!unhide) { startCmd(); unhide = true; } part->undoChangeProperty(P_ID::VISIBLE, true); hiddenParts.append(part); } } } if (unhide) { doLayout(); for (Part* p : hiddenParts) p->setShow(false); } xml.stag("Score"); switch(_layoutMode) { case LayoutMode::PAGE: case LayoutMode::FLOAT: case LayoutMode::SYSTEM: break; case LayoutMode::LINE: xml.tag("layoutMode", "line"); break; } #ifdef OMR if (_omr && xml.writeOmr) _omr->write(xml); #endif if (_showOmr && xml.writeOmr) xml.tag("showOmr", _showOmr); if (_audio && xml.writeOmr) { xml.tag("playMode", int(_playMode)); _audio->write(xml); } for (int i = 0; i < 32; ++i) { if (!_layerTags[i].isEmpty()) { xml.tag(QString("LayerTag id=\"%1\" tag=\"%2\"").arg(i).arg(_layerTags[i]), _layerTagComments[i]); } } int n = _layer.size(); for (int i = 1; i < n; ++i) { // dont save default variant const Layer& l = _layer[i]; xml.tagE(QString("Layer name=\"%1\" mask=\"%2\"").arg(l.name).arg(l.tags)); } xml.tag("currentLayer", _currentLayer); if (!MScore::testMode) _synthesizerState.write(xml); if (pageNumberOffset()) xml.tag("page-offset", pageNumberOffset()); xml.tag("Division", MScore::division); xml.curTrack = -1; _style.save(xml, true); // save only differences to buildin style xml.tag("showInvisible", _showInvisible); xml.tag("showUnprintable", _showUnprintable); xml.tag("showFrames", _showFrames); xml.tag("showMargins", _showPageborders); QMapIterator<QString, QString> i(_metaTags); while (i.hasNext()) { i.next(); if ((!MScore::testMode && !MScore::saveTemplateMode) || (i.key() != "platform" && i.key() != "creationDate")) xml.tag(QString("metaTag name=\"%1\"").arg(i.key().toHtmlEscaped()), i.value()); } if (!selectionOnly) { xml.stag("PageList"); foreach(Page* page, _pages) page->write(xml); xml.etag(); } xml.curTrack = 0; int staffStart; int staffEnd; MeasureBase* measureStart; MeasureBase* measureEnd; if (selectionOnly) { staffStart = _selection.staffStart(); staffEnd = _selection.staffEnd(); // make sure we select full parts Staff* sStaff = staff(staffStart); Part* sPart = sStaff->part(); Staff* eStaff = staff(staffEnd - 1); Part* ePart = eStaff->part(); staffStart = staffIdx(sPart); staffEnd = staffIdx(ePart) + ePart->nstaves(); measureStart = _selection.startSegment()->measure(); if (_selection.endSegment()) measureEnd = _selection.endSegment()->measure()->next(); else measureEnd = 0; } else { staffStart = 0; staffEnd = nstaves(); measureStart = first(); measureEnd = 0; } foreach(const Part* part, _parts) { if (!selectionOnly || ((staffIdx(part) >= staffStart) && (staffEnd >= staffIdx(part) + part->nstaves()))) part->write(xml); } xml.curTrack = 0; xml.trackDiff = -staffStart * VOICES; if (measureStart) { for (int staffIdx = staffStart; staffIdx < staffEnd; ++staffIdx) { xml.stag(QString("Staff id=\"%1\"").arg(staffIdx + 1 - staffStart)); xml.curTick = measureStart->tick(); xml.tickDiff = xml.curTick; xml.curTrack = staffIdx * VOICES; bool writeSystemElements = staffIdx == staffStart; for (MeasureBase* m = measureStart; m != measureEnd; m = m->next()) writeMeasure(xml, m, staffIdx, writeSystemElements); xml.etag(); } } xml.curTrack = -1; if (!selectionOnly) { for (const Excerpt* excerpt : _excerpts) { if (excerpt->partScore() != this) excerpt->partScore()->write(xml, false); // recursion } } if (parentScore()) xml.tag("name", name()); xml.etag(); if (unhide) { endCmd(); undo()->undo(); endUndoRedo(); } }
void Score::cmdSplitMeasure(ChordRest* cr) { startCmd(); splitMeasure(cr->segment()); endCmd(); }