void TextBase::endEdit(EditData& ed) { TextEditData* ted = static_cast<TextEditData*>(ed.getData(this)); score()->undoStack()->remove(ted->startUndoIdx); // remove all undo/redo records // replace all undo/redo records collected during text editing with // one property change QString actualText = xmlText(); if (ted->oldXmlText.isEmpty()) { UndoStack* us = score()->undoStack(); UndoCommand* ucmd = us->last(); if (ucmd) { const QList<UndoCommand*>& cl = ucmd->commands(); const UndoCommand* cmd = cl.back(); if (strncmp(cmd->name(), "Add:", 4) == 0) { const AddElement* ae = static_cast<const AddElement*>(cmd); if (ae->getElement() == this) { if (actualText.isEmpty()) { // we just created this empty text, rollback that operation us->rollback(); score()->update(); ed.element = 0; } else { setXmlText(ted->oldXmlText); // reset text to value before editing us->reopen(); // combine undo records of text creation with text editing undoChangeProperty(Pid::TEXT, actualText); layout1(); score()->endCmd(); } return; } } } } if (actualText.isEmpty()) { qDebug("actual text is empty"); score()->startCmd(); score()->undoRemoveElement(this); ed.element = 0; score()->endCmd(); return; } setXmlText(ted->oldXmlText); // reset text to value before editing score()->startCmd(); undoChangeProperty(Pid::TEXT, actualText); // change property to set text to actual value again // this also changes text of linked elements layout1(); triggerLayout(); // force relayout even if text did not change score()->endCmd(); static const qreal w = 2.0; score()->addRefresh(canvasBoundingRect().adjusted(-w, -w, w, w)); }
void Dynamic::setDynamicType(const QString& tag) { int n = sizeof(dynList)/sizeof(*dynList); for (int i = 0; i < n; ++i) { if (dynList[i].tag == tag || dynList[i].text == tag) { setDynamicType(Type(i)); setXmlText(QString::fromUtf8(dynList[i].text)); return; } } qDebug("setDynamicType: other <%s>", qPrintable(tag)); setDynamicType(Type::OTHER); setXmlText(tag); }
void TempoText::read(XmlReader& e) { while (e.readNextStartElement()) { const QStringRef& tag(e.name()); if (tag == "tempo") setTempo(e.readDouble()); else if (tag == "followText") _followText = e.readInt(); else if (!Text::readProperties(e)) e.unknown(); } if (score()->mscVersion() <= 114) { // // Reset text in old version to // style. // //TODO if (textStyle() != TextStyleType::INVALID) { // setStyled(true); // styleChanged(); // } } // check sanity if (xmlText().isEmpty()) { setXmlText(QString("<sym>metNoteQuarterUp</sym> = %1").arg(lrint(60 * _tempo))); setVisible(false); } }
void Marker::setMarkerType(Type t) { _markerType = t; const char* txt = 0; switch (t) { case Type::SEGNO: txt = "<sym>segno</sym>"; setLabel("segno"); break; case Type::VARSEGNO: txt = "<sym>segnoSerpent1</sym>"; setLabel("varsegno"); break; case Type::CODA: txt = "<sym>coda</sym>"; setLabel("codab"); break; case Type::VARCODA: txt = "<sym>codaSquare</sym>"; setLabel("varcoda"); break; case Type::CODETTA: txt = "<sym>coda</sym><sym>coda</sym>"; setLabel("codetta"); break; case Type::FINE: txt = "Fine"; initSubStyle(SubStyle::REPEAT_RIGHT); setLabel("fine"); break; case Type::TOCODA: txt = "To Coda"; initSubStyle(SubStyle::REPEAT_RIGHT); setLabel("coda"); break; case Type::USER: break; default: qDebug("unknown marker type %d", int(t)); break; } if (empty() && txt) setXmlText(txt); }
void Jump::setJumpType(Type t) { for (const JumpTypeTable& p : jumpTypeTable) { if (p.type == t) { setXmlText(p.text); setJumpTo(p.jumpTo); setPlayUntil(p.playUntil); setContinueAt(p.continueAt); setTextStyleType(p.textStyleType); break; } } }
void Jump::setJumpType(Type t) { for (const JumpTypeTable& p : jumpTypeTable) { if (p.type == t) { setXmlText(p.text); setJumpTo(p.jumpTo); setPlayUntil(p.playUntil); setContinueAt(p.continueAt); initTid(Tid::REPEAT_RIGHT); break; } } }
void TempoText::read(XmlReader& e) { while (e.readNextStartElement()) { const QStringRef& tag(e.name()); if (tag == "tempo") setTempo(e.readDouble()); else if (tag == "followText") _followText = e.readInt(); else if (!TextBase::readProperties(e)) e.unknown(); } // check sanity if (xmlText().isEmpty()) { setXmlText(QString("<sym>metNoteQuarterUp</sym> = %1").arg(lrint(60 * _tempo))); setVisible(false); } }