bool Ottava::readProperties(XmlReader& e) { const QStringRef& tag(e.name()); if (tag == "subtype") { QString s = e.readElementText(); bool ok; int idx = s.toInt(&ok); if (!ok) { _ottavaType = OttavaType::OTTAVA_8VA; for (OttavaDefault d : ottavaDefault) { if (s == d.name) { _ottavaType = d.type; break; } } } else if (score()->mscVersion() <= 114) { //subtype are now in a different order... if (idx == 1) idx = 2; else if (idx == 2) idx = 1; _ottavaType = OttavaType(idx); } else _ottavaType = OttavaType(idx); } else if (readStyledProperty(e, tag)) return true; else if (!TextLineBase::readProperties(e)) { e.unknown(); return false; } return true; }
bool Ottava::setProperty(Pid propertyId, const QVariant& val) { switch (propertyId) { case Pid::OTTAVA_TYPE: setOttavaType(OttavaType(val.toInt())); break; case Pid::NUMBERS_ONLY: _numbersOnly = val.toBool(); break; case Pid::SPANNER_TICKS: setTicks(val.value<Fraction>()); staff()->updateOttava(); break; case Pid::SPANNER_TICK: setTick(val.value<Fraction>()); staff()->updateOttava(); break; default: if (!TextLineBase::setProperty(propertyId, val)) return false; break; } triggerLayout(); return true; }
void Ottava::read(XmlReader& e) { qDeleteAll(spannerSegments()); spannerSegments().clear(); setId(e.intAttribute("id", -1)); while (e.readNextStartElement()) { const QStringRef& tag(e.name()); if (tag == "subtype") { QString s = e.readElementText(); bool ok; int idx = s.toInt(&ok); if (!ok) { idx = int(OttavaType::OTTAVA_8VA); for (unsigned i = 0; i < sizeof(ottavaDefault)/sizeof(*ottavaDefault); ++i) { if (s == ottavaDefault[i].name) { idx = i; break; } } } else if (score()->mscVersion() <= 114) { //subtype are now in a different order... if (idx == 1) idx = 2; else if (idx == 2) idx = 1; } setOttavaType(OttavaType(idx)); } else if (tag == "numbersOnly") { _numbersOnly = e.readInt(); numbersOnlyStyle = PropertyStyle::UNSTYLED; } else if (tag == "lineWidth") { setLineWidth(Spatium(e.readDouble())); lineWidthStyle = PropertyStyle::UNSTYLED; } else if (tag == "lineStyle") { setLineStyle(Qt::PenStyle(e.readInt())); lineStyleStyle = PropertyStyle::UNSTYLED; } else if (tag == "beginSymbol") { beginTextStyle = PropertyStyle::UNSTYLED; QString text(e.readElementText()); setBeginText(QString("<sym>%1</sym>").arg(text[0].isNumber() ? Sym::id2name(SymId(text.toInt())) : text)); } else if (tag == "continueSymbol") { continueTextStyle = PropertyStyle::UNSTYLED; QString text(e.readElementText()); setContinueText(QString("<sym>%1</sym>").arg(text[0].isNumber() ? Sym::id2name(SymId(text.toInt())) : text)); } else if (!TextLine::readProperties(e)) e.unknown(); } }
bool Ottava::setProperty(P_ID propertyId, const QVariant& val) { switch (propertyId) { case P_ID::OTTAVA_TYPE: setOttavaType(OttavaType(val.toInt())); break; case P_ID::LINE_WIDTH: lineWidthStyle = PropertyStyle::UNSTYLED; TextLine::setProperty(propertyId, val); break; case P_ID::LINE_STYLE: lineStyleStyle = PropertyStyle::UNSTYLED; TextLine::setProperty(propertyId, val); break; case P_ID::NUMBERS_ONLY: setNumbersOnly(val.toBool()); setOttavaType(_ottavaType); numbersOnlyStyle = PropertyStyle::UNSTYLED; break; case P_ID::SPANNER_TICK2: staff()->pitchOffsets().remove(tick2()); setTick2(val.toInt()); staff()->updateOttava(this); break; case P_ID::SPANNER_TICK: staff()->pitchOffsets().remove(tick()); setTick(val.toInt()); staff()->updateOttava(this); break; default: if (!TextLine::setProperty(propertyId, val)) return false; break; } score()->setLayoutAll(true); return true; }
Ottava::Ottava(Score* s) : TextLine(s) { _ottavaType = OttavaType(-1); setOttavaType(OTTAVA_8VA); }