diff --git a/libmscore/chord.h b/libmscore/chord.h index 754cd867ef80b..1bebd74a62c5d 100644 --- a/libmscore/chord.h +++ b/libmscore/chord.h @@ -179,7 +179,7 @@ class Chord final : public ChordRest { void setNoteType(NoteType t) { _noteType = t; } bool isGrace() const { return _noteType != NoteType::NORMAL; } void toGraceAfter(); - virtual void scanElements(void* data, void (*func)(void*, Element*), bool all=true); + virtual void scanElements(void* data, void (*func)(void*, Element*), bool all=true) override; virtual void setTrack(int val) override; diff --git a/libmscore/chordrest.h b/libmscore/chordrest.h index 6d751db570ed3..a0ce8f603a0f4 100644 --- a/libmscore/chordrest.h +++ b/libmscore/chordrest.h @@ -84,7 +84,7 @@ class ChordRest : public DurationElement { virtual void writeProperties(XmlWriter& xml) const; virtual bool readProperties(XmlReader&); - virtual void scanElements(void* data, void (*func)(void*, Element*), bool all=true); + virtual void scanElements(void* data, void (*func)(void*, Element*), bool all=true) override; void setBeamMode(Beam::Mode m) { _beamMode = m; } void undoSetBeamMode(Beam::Mode m); diff --git a/libmscore/duration.cpp b/libmscore/duration.cpp index a4c6038d60c6a..73b06d88918b3 100644 --- a/libmscore/duration.cpp +++ b/libmscore/duration.cpp @@ -24,8 +24,8 @@ namespace Ms { // DurationElement //--------------------------------------------------------- -DurationElement::DurationElement(Score* s) - : Element(s) +DurationElement::DurationElement(Score* s, ElementFlags f) + : Element(s, f) { _tuplet = 0; } diff --git a/libmscore/duration.h b/libmscore/duration.h index 02119321f6b56..f402b06c434e7 100644 --- a/libmscore/duration.h +++ b/libmscore/duration.h @@ -42,7 +42,7 @@ class DurationElement : public Element { #endif public: - DurationElement(Score* s); + DurationElement(Score* = 0, ElementFlags = ElementFlag::NOTHING); DurationElement(const DurationElement& e); ~DurationElement(); diff --git a/libmscore/element.cpp b/libmscore/element.cpp index 3f37036e71d39..fc777b79cfa54 100644 --- a/libmscore/element.cpp +++ b/libmscore/element.cpp @@ -483,7 +483,7 @@ void Element::writeProperties(XmlWriter& xml) const else xml.tag("pos", pos() / score()->spatium()); } - if (((track() != xml.curTrack()) || (type() == ElementType::SLUR)) && (track() != -1)) { + if (((track() != xml.curTrack()) || isSlur()) && (track() != -1)) { int t; t = track() + xml.trackDiff(); xml.tag("track", t); diff --git a/libmscore/glissando.cpp b/libmscore/glissando.cpp index 222736feb1c27..b55396549eb19 100644 --- a/libmscore/glissando.cpp +++ b/libmscore/glissando.cpp @@ -474,14 +474,10 @@ void Glissando::write(XmlWriter& xml) const if (_showText && !_text.isEmpty()) xml.tag("text", _text); - writeProperty(xml, P_ID::GLISS_TYPE); - writeProperty(xml, P_ID::PLAY); - writeProperty(xml, P_ID::GLISSANDO_STYLE); - writeProperty(xml, P_ID::FONT_FACE); - writeProperty(xml, P_ID::FONT_SIZE); - writeProperty(xml, P_ID::FONT_BOLD); - writeProperty(xml, P_ID::FONT_ITALIC); - writeProperty(xml, P_ID::FONT_UNDERLINE); + for (auto id : { P_ID::GLISS_TYPE, P_ID::PLAY, P_ID::GLISSANDO_STYLE, P_ID::FONT_FACE, + P_ID::FONT_SIZE, P_ID::FONT_BOLD, P_ID::FONT_ITALIC, P_ID::FONT_UNDERLINE} ) + writeProperty(xml, id); + SLine::writeProperties(xml); xml.etag(); } @@ -794,8 +790,6 @@ QVariant Glissando::propertyDefault(P_ID propertyId) const switch (propertyId) { case P_ID::GLISS_TYPE: return int(GlissandoType::STRAIGHT); - case P_ID::GLISS_TEXT: - return "gliss."; case P_ID::GLISS_SHOW_TEXT: return true; case P_ID::GLISSANDO_STYLE: @@ -807,6 +801,5 @@ QVariant Glissando::propertyDefault(P_ID propertyId) const } return SLine::propertyDefault(propertyId); } - } diff --git a/libmscore/hairpin.cpp b/libmscore/hairpin.cpp index f0cf706634175..1f1e2d1802bb9 100644 --- a/libmscore/hairpin.cpp +++ b/libmscore/hairpin.cpp @@ -25,8 +25,6 @@ namespace Ms { -// Spatium Hairpin::editHairpinHeight; - //--------------------------------------------------------- // HairpinSegment //--------------------------------------------------------- @@ -383,21 +381,11 @@ void HairpinSegment::draw(QPainter* painter) const QVariant HairpinSegment::getProperty(P_ID id) const { - switch (id) { - case P_ID::HAIRPIN_CIRCLEDTIP: - case P_ID::HAIRPIN_TYPE: - case P_ID::VELO_CHANGE: - case P_ID::DYNAMIC_RANGE: - case P_ID::DIAGONAL: - case P_ID::LINE_STYLE: - case P_ID::LINE_WIDTH: - case P_ID::HAIRPIN_HEIGHT: - case P_ID::HAIRPIN_CONT_HEIGHT: - case P_ID::PLACEMENT: - return hairpin()->getProperty(id); - default: - return TextLineBaseSegment::getProperty(id); + for (const StyledProperty* spp = spanner()->styledProperties(); spp->styleIdx != StyleIdx::NOSTYLE; ++spp) { + if (spp->propertyIdx == id) + return spanner()->getProperty(id); } + return TextLineBaseSegment::getProperty(id); } //--------------------------------------------------------- @@ -406,21 +394,11 @@ QVariant HairpinSegment::getProperty(P_ID id) const bool HairpinSegment::setProperty(P_ID id, const QVariant& v) { - switch (id) { - case P_ID::HAIRPIN_CIRCLEDTIP: - case P_ID::HAIRPIN_TYPE: - case P_ID::VELO_CHANGE: - case P_ID::DYNAMIC_RANGE: - case P_ID::DIAGONAL: - case P_ID::LINE_STYLE: - case P_ID::LINE_WIDTH: - case P_ID::HAIRPIN_HEIGHT: - case P_ID::HAIRPIN_CONT_HEIGHT: - case P_ID::PLACEMENT: - return hairpin()->setProperty(id, v); - default: - return TextLineBaseSegment::setProperty(id, v); + for (const StyledProperty* spp = spanner()->styledProperties(); spp->styleIdx != StyleIdx::NOSTYLE; ++spp) { + if (spp->propertyIdx == id) + return spanner()->setProperty(id, v); } + return TextLineBaseSegment::setProperty(id, v); } //--------------------------------------------------------- @@ -429,94 +407,11 @@ bool HairpinSegment::setProperty(P_ID id, const QVariant& v) QVariant HairpinSegment::propertyDefault(P_ID id) const { - switch (id) { - case P_ID::HAIRPIN_CIRCLEDTIP: - case P_ID::HAIRPIN_TYPE: - case P_ID::VELO_CHANGE: - case P_ID::DYNAMIC_RANGE: - case P_ID::DIAGONAL: - case P_ID::LINE_STYLE: - case P_ID::LINE_WIDTH: - case P_ID::HAIRPIN_HEIGHT: - case P_ID::HAIRPIN_CONT_HEIGHT: - case P_ID::PLACEMENT: - return hairpin()->propertyDefault(id); - default: - return TextLineBaseSegment::propertyDefault(id); - } - } - -//--------------------------------------------------------- -// propertyFlags -//--------------------------------------------------------- - -PropertyFlags& HairpinSegment::propertyFlags(P_ID id) - { - switch (id) { - case P_ID::LINE_STYLE: - case P_ID::LINE_WIDTH: - case P_ID::HAIRPIN_HEIGHT: - case P_ID::HAIRPIN_CONT_HEIGHT: - case P_ID::PLACEMENT: - return hairpin()->propertyFlags(id); - - default: - return TextLineBaseSegment::propertyFlags(id); - } - } - -//--------------------------------------------------------- -// getPropertyStyle -//--------------------------------------------------------- - -StyleIdx HairpinSegment::getPropertyStyle(P_ID id) const - { - switch (id) { - case P_ID::LINE_STYLE: - case P_ID::LINE_WIDTH: - case P_ID::HAIRPIN_HEIGHT: - case P_ID::HAIRPIN_CONT_HEIGHT: - case P_ID::BEGIN_FONT_FACE: - case P_ID::CONTINUE_FONT_FACE: - case P_ID::END_FONT_FACE: - case P_ID::BEGIN_FONT_SIZE: - case P_ID::CONTINUE_FONT_SIZE: - case P_ID::END_FONT_SIZE: - case P_ID::BEGIN_FONT_BOLD: - case P_ID::CONTINUE_FONT_BOLD: - case P_ID::END_FONT_BOLD: - case P_ID::BEGIN_FONT_ITALIC: - case P_ID::CONTINUE_FONT_ITALIC: - case P_ID::END_FONT_ITALIC: - case P_ID::BEGIN_FONT_UNDERLINE: - case P_ID::CONTINUE_FONT_UNDERLINE: - case P_ID::END_FONT_UNDERLINE: - case P_ID::BEGIN_TEXT_ALIGN: - case P_ID::CONTINUE_TEXT_ALIGN: - case P_ID::END_TEXT_ALIGN: - return hairpin()->getPropertyStyle(id); - default: - break; - } - return TextLineBaseSegment::getPropertyStyle(id); - } - -//--------------------------------------------------------- -// resetProperty -//--------------------------------------------------------- - -void HairpinSegment::resetProperty(P_ID id) - { - switch (id) { - case P_ID::LINE_STYLE: - case P_ID::LINE_WIDTH: - case P_ID::HAIRPIN_HEIGHT: - case P_ID::HAIRPIN_CONT_HEIGHT: - return hairpin()->resetProperty(id); - - default: - return TextLineBaseSegment::resetProperty(id); + for (const StyledProperty* spp = spanner()->styledProperties(); spp->styleIdx != StyleIdx::NOSTYLE; ++spp) { + if (spp->propertyIdx == id) + return spanner()->propertyDefault(id); } + return TextLineBaseSegment::propertyDefault(id); } //--------------------------------------------------------- @@ -526,19 +421,12 @@ void HairpinSegment::resetProperty(P_ID id) Hairpin::Hairpin(Score* s) : TextLineBase(s) { + initSubStyle(SubStyleId::HAIRPIN); _hairpinType = HairpinType::CRESC_HAIRPIN; - init(); - - setLineWidth(score()->styleS(StyleIdx::hairpinLineWidth)); _hairpinCircledTip = false; _veloChange = 0; _dynRange = Dynamic::Range::PART; - lineWidthStyle = PropertyFlags::STYLED; - _hairpinHeight = score()->styleS(StyleIdx::hairpinHeight); - hairpinHeightStyle = PropertyFlags::STYLED; - _hairpinContHeight = score()->styleS(StyleIdx::hairpinContHeight); - hairpinContHeightStyle = PropertyFlags::STYLED; -//TODO-ws initSubStyle(SubStyleId::HAIRPIN); + setLineVisible(false); } //--------------------------------------------------------- @@ -604,10 +492,13 @@ void Hairpin::write(XmlWriter& xml) const writeProperty(xml, P_ID::VELO_CHANGE); writeProperty(xml, P_ID::HAIRPIN_CIRCLEDTIP); writeProperty(xml, P_ID::DYNAMIC_RANGE); - writeProperty(xml, P_ID::PLACEMENT); - writeProperty(xml, P_ID::HAIRPIN_HEIGHT); - writeProperty(xml, P_ID::HAIRPIN_CONT_HEIGHT); - TextLineBase::writeProperties(xml); + writeProperty(xml, P_ID::BEGIN_TEXT); + writeProperty(xml, P_ID::CONTINUE_TEXT); + + for (const StyledProperty* spp = styledProperties(); spp->styleIdx != StyleIdx::NOSTYLE; ++spp) + writeProperty(xml, spp->propertyIdx); + + Element::writeProperties(xml); xml.etag(); } @@ -628,18 +519,8 @@ void Hairpin::read(XmlReader& e) const QStringRef& tag(e.name()); if (tag == "subtype") setHairpinType(HairpinType(e.readInt())); - else if (tag == "lineWidth") { - setLineWidth(Spatium(e.readDouble())); - lineWidthStyle = PropertyFlags::UNSTYLED; - } - else if (tag == "hairpinHeight") { - setHairpinHeight(Spatium(e.readDouble())); - hairpinHeightStyle = PropertyFlags::UNSTYLED; - } - else if (tag == "hairpinContHeight") { - setHairpinContHeight(Spatium(e.readDouble())); - hairpinContHeightStyle = PropertyFlags::UNSTYLED; - } + else if (readStyledProperty(e, tag)) + ; else if (tag == "hairpinCircledTip") _hairpinCircledTip = e.readInt(); else if (tag == "veloChange") @@ -730,15 +611,12 @@ bool Hairpin::setProperty(P_ID id, const QVariant& v) _dynRange = Dynamic::Range(v.toInt()); break; case P_ID::LINE_WIDTH: - lineWidthStyle = PropertyFlags::UNSTYLED; TextLineBase::setProperty(id, v); break; case P_ID::HAIRPIN_HEIGHT: - hairpinHeightStyle = PropertyFlags::UNSTYLED; _hairpinHeight = v.value(); break; case P_ID::HAIRPIN_CONT_HEIGHT: - hairpinContHeightStyle = PropertyFlags::UNSTYLED; _hairpinContHeight = v.value(); break; default: @@ -771,121 +649,17 @@ QVariant Hairpin::propertyDefault(P_ID id) const if (_hairpinType == HairpinType::CRESC_HAIRPIN || _hairpinType == HairpinType::DECRESC_HAIRPIN) return int(Qt::SolidLine); return int(Qt::CustomDashLine); - case P_ID::PLACEMENT: - return int(Placement::BELOW); - - case P_ID::BEGIN_FONT_FACE: - case P_ID::BEGIN_FONT_SIZE: - case P_ID::BEGIN_FONT_BOLD: - case P_ID::BEGIN_FONT_ITALIC: - case P_ID::BEGIN_FONT_UNDERLINE: - case P_ID::BEGIN_TEXT_ALIGN: - case P_ID::CONTINUE_FONT_FACE: - case P_ID::CONTINUE_FONT_SIZE: - case P_ID::CONTINUE_FONT_BOLD: - case P_ID::CONTINUE_FONT_ITALIC: - case P_ID::CONTINUE_FONT_UNDERLINE: - case P_ID::CONTINUE_TEXT_ALIGN: - case P_ID::END_FONT_FACE: - case P_ID::END_FONT_SIZE: - case P_ID::END_FONT_BOLD: - case P_ID::END_FONT_ITALIC: - case P_ID::END_FONT_UNDERLINE: - case P_ID::END_TEXT_ALIGN: - return score()->styleV(getPropertyStyle(id)); - - default: - return TextLineBase::propertyDefault(id); - } - } - -//--------------------------------------------------------- -// propertyFlags -//--------------------------------------------------------- - -PropertyFlags& Hairpin::propertyFlags(P_ID id) - { - switch (id) { - case P_ID::LINE_WIDTH: - return lineWidthStyle; - case P_ID::HAIRPIN_HEIGHT: - return hairpinHeightStyle; - case P_ID::HAIRPIN_CONT_HEIGHT: - return hairpinContHeightStyle; - default: - return TextLineBase::propertyFlags(id); - } - } - -//--------------------------------------------------------- -// resetProperty -//--------------------------------------------------------- - -void Hairpin::resetProperty(P_ID id) - { - switch (id) { - case P_ID::LINE_WIDTH: - setProperty(id, propertyDefault(id)); - lineWidthStyle = PropertyFlags::STYLED; - break; - - case P_ID::HAIRPIN_HEIGHT: - setProperty(id, propertyDefault(id)); - hairpinHeightStyle = PropertyFlags::STYLED; - break; - - case P_ID::HAIRPIN_CONT_HEIGHT: - setLineWidth(score()->styleS(StyleIdx::hairpinLineWidth)); - hairpinContHeightStyle = PropertyFlags::STYLED; - break; - - default: - return TextLineBase::resetProperty(id); - } - triggerLayout(); - } + case P_ID::BEGIN_TEXT: + case P_ID::CONTINUE_TEXT: + return QString(""); -//--------------------------------------------------------- -// getPropertyStyle -//--------------------------------------------------------- - -StyleIdx Hairpin::getPropertyStyle(P_ID id) const - { - switch (id) { - case P_ID::LINE_WIDTH: - return StyleIdx::hairpinLineWidth; - case P_ID::HAIRPIN_HEIGHT: - return StyleIdx::hairpinHeight; - case P_ID::HAIRPIN_CONT_HEIGHT: - return StyleIdx::hairpinContHeight; - case P_ID::BEGIN_FONT_FACE: - case P_ID::CONTINUE_FONT_FACE: - case P_ID::END_FONT_FACE: - return StyleIdx::hairpinFontFace; - case P_ID::BEGIN_FONT_SIZE: - case P_ID::CONTINUE_FONT_SIZE: - case P_ID::END_FONT_SIZE: - return StyleIdx::hairpinFontSize; - case P_ID::BEGIN_FONT_BOLD: - case P_ID::CONTINUE_FONT_BOLD: - case P_ID::END_FONT_BOLD: - return StyleIdx::hairpinFontBold; - case P_ID::BEGIN_FONT_ITALIC: - case P_ID::CONTINUE_FONT_ITALIC: - case P_ID::END_FONT_ITALIC: - return StyleIdx::hairpinFontItalic; - case P_ID::BEGIN_FONT_UNDERLINE: - case P_ID::CONTINUE_FONT_UNDERLINE: - case P_ID::END_FONT_UNDERLINE: - return StyleIdx::hairpinFontUnderline; - case P_ID::BEGIN_TEXT_ALIGN: - case P_ID::CONTINUE_TEXT_ALIGN: - case P_ID::END_TEXT_ALIGN: - return StyleIdx::hairpinTextAlign; default: - break; + for (const StyledProperty& p : subStyle(subStyleId())) { + if (p.propertyIdx == id) + return score()->styleV(p.styleIdx); + } + return getProperty(id); } - return StyleIdx::NOSTYLE; } //--------------------------------------------------------- @@ -897,45 +671,6 @@ void Hairpin::setYoff(qreal val) rUserYoffset() += val * spatium() - score()->styleP(placeAbove() ? StyleIdx::hairpinPosAbove : StyleIdx::hairpinPosBelow); } -//--------------------------------------------------------- -// styleChanged -// reset all styled values to actual style -//--------------------------------------------------------- - -void Hairpin::styleChanged() - { - bool changed = false; - if (lineWidthStyle == PropertyFlags::STYLED) { - setLineWidth(score()->styleS(StyleIdx::hairpinLineWidth)); - changed = true; - } - if (hairpinHeightStyle == PropertyFlags::STYLED) { - setHairpinHeight(score()->styleS(StyleIdx::hairpinHeight)); - changed = true; - } - if (hairpinContHeightStyle == PropertyFlags::STYLED) { - setHairpinContHeight(score()->styleS(StyleIdx::hairpinContHeight)); - changed = true; - } - if (changed) - triggerLayout(); - } - -//--------------------------------------------------------- -// reset -//--------------------------------------------------------- - -void Hairpin::reset() - { - if (lineWidthStyle == PropertyFlags::UNSTYLED) - undoChangeProperty(P_ID::LINE_WIDTH, propertyDefault(P_ID::LINE_WIDTH), PropertyFlags::STYLED); - if (hairpinHeightStyle == PropertyFlags::UNSTYLED) - undoChangeProperty(P_ID::HAIRPIN_HEIGHT, propertyDefault(P_ID::HAIRPIN_HEIGHT), PropertyFlags::STYLED); - if (hairpinContHeightStyle == PropertyFlags::UNSTYLED) - undoChangeProperty(P_ID::HAIRPIN_CONT_HEIGHT, propertyDefault(P_ID::HAIRPIN_CONT_HEIGHT), PropertyFlags::STYLED); - TextLineBase::reset(); - } - //--------------------------------------------------------- // accessibleInfo //--------------------------------------------------------- diff --git a/libmscore/hairpin.h b/libmscore/hairpin.h index f3b1d20e0be32..3014edbef9537 100644 --- a/libmscore/hairpin.h +++ b/libmscore/hairpin.h @@ -57,9 +57,6 @@ class HairpinSegment final : public TextLineBaseSegment { virtual QVariant getProperty(P_ID) const override; virtual bool setProperty(P_ID, const QVariant&) override; virtual QVariant propertyDefault(P_ID) const override; - virtual PropertyFlags& propertyFlags(P_ID) override; - virtual StyleIdx getPropertyStyle(P_ID) const override; - virtual void resetProperty(P_ID id) override; virtual void layout() override; virtual Shape shape() const override; @@ -77,12 +74,9 @@ class Hairpin final : public TextLineBase { int _veloChange; bool _hairpinCircledTip; Dynamic::Range _dynRange; - PropertyFlags lineWidthStyle; Spatium _hairpinHeight; Spatium _hairpinContHeight; - PropertyFlags hairpinHeightStyle; - PropertyFlags hairpinContHeightStyle; public: Hairpin(Score* s); @@ -120,13 +114,8 @@ class Hairpin final : public TextLineBase { virtual QVariant getProperty(P_ID id) const override; virtual bool setProperty(P_ID propertyId, const QVariant&) override; virtual QVariant propertyDefault(P_ID id) const override; - virtual PropertyFlags& propertyFlags(P_ID id) override; - virtual void resetProperty(P_ID id) override; - virtual StyleIdx getPropertyStyle(P_ID) const override; virtual void setYoff(qreal) override; - virtual void styleChanged() override; - virtual void reset() override; virtual QString accessibleInfo() const override; }; diff --git a/libmscore/letring.cpp b/libmscore/letring.cpp index 713dd79b4cbad..4812612365d79 100644 --- a/libmscore/letring.cpp +++ b/libmscore/letring.cpp @@ -59,7 +59,7 @@ void LetRingSegment::layout() LetRing::LetRing(Score* s) : TextLineBase(s) { - init(); + initSubStyle(SubStyleId::LET_RING); } //--------------------------------------------------------- @@ -76,6 +76,23 @@ void LetRing::read(XmlReader& e) } } +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void LetRing::write(XmlWriter& xml) const + { + if (!xml.canWrite(this)) + return; + xml.stag(QString("%1 id=\"%2\"").arg(name()).arg(xml.spannerId(this))); + + for (const StyledProperty* spp = styledProperties(); spp->styleIdx != StyleIdx::NOSTYLE; ++spp) + writeProperty(xml, spp->propertyIdx); + + Element::writeProperties(xml); + xml.etag(); + } + //--------------------------------------------------------- // createLineSegment //--------------------------------------------------------- diff --git a/libmscore/letring.h b/libmscore/letring.h index 20ffa08d44e4f..7daa7c7dab2f2 100644 --- a/libmscore/letring.h +++ b/libmscore/letring.h @@ -47,6 +47,7 @@ class LetRing final : public TextLineBase { virtual LetRing* clone() const override { return new LetRing(*this); } virtual ElementType type() const override { return ElementType::LET_RING; } virtual void read(XmlReader&) override; + virtual void write(XmlWriter& xml) const override; LineSegment* createLineSegment(); virtual void setYoff(qreal) override; virtual QVariant propertyDefault(P_ID propertyId) const override; diff --git a/libmscore/note.cpp b/libmscore/note.cpp index 33e1012dc2082..83bb430446928 100644 --- a/libmscore/note.cpp +++ b/libmscore/note.cpp @@ -2191,10 +2191,8 @@ void Note::scanElements(void* data, void (*func)(void*, Element*), bool all) if (score()->tagIsValid(e->tag())) e->scanElements(data, func, all); } - for (Spanner* sp : _spannerFor) { - printf("Note scan %d %s\n", tick(), sp->name()); + for (Spanner* sp : _spannerFor) sp->scanElements(data, func, all); - } if (!dragMode && _accidental) func(data, _accidental); @@ -2722,6 +2720,9 @@ QVariant Note::propertyDefault(P_ID propertyId) const return 0; case P_ID::TPC2: return getProperty(P_ID::TPC1); + case P_ID::PITCH: + case P_ID::TPC1: + return QVariant(); default: break; } diff --git a/libmscore/noteline.cpp b/libmscore/noteline.cpp index a6e13b845a4f2..7e1df71296eb9 100644 --- a/libmscore/noteline.cpp +++ b/libmscore/noteline.cpp @@ -18,7 +18,7 @@ namespace Ms { NoteLine::NoteLine(Score* s) : TextLineBase(s) { - init(); +//TODO-ws init(); } NoteLine::NoteLine(const NoteLine& nl) diff --git a/libmscore/ottava.cpp b/libmscore/ottava.cpp index 14e58662155aa..b07168ce56ba5 100644 --- a/libmscore/ottava.cpp +++ b/libmscore/ottava.cpp @@ -87,16 +87,11 @@ void OttavaSegment::layout() QVariant OttavaSegment::getProperty(P_ID id) const { - switch (id) { - case P_ID::LINE_WIDTH: - case P_ID::LINE_STYLE: - case P_ID::OTTAVA_TYPE: - case P_ID::PLACEMENT: - case P_ID::NUMBERS_ONLY: - return ottava()->getProperty(id); - default: - return TextLineBaseSegment::getProperty(id); + for (const StyledProperty* spp = spanner()->styledProperties(); spp->styleIdx != StyleIdx::NOSTYLE; ++spp) { + if (spp->propertyIdx == id) + return spanner()->getProperty(id); } + return TextLineBaseSegment::getProperty(id); } //--------------------------------------------------------- @@ -105,16 +100,11 @@ QVariant OttavaSegment::getProperty(P_ID id) const bool OttavaSegment::setProperty(P_ID id, const QVariant& v) { - switch (id) { - case P_ID::LINE_WIDTH: - case P_ID::LINE_STYLE: - case P_ID::OTTAVA_TYPE: - case P_ID::PLACEMENT: - case P_ID::NUMBERS_ONLY: - return ottava()->setProperty(id, v); - default: - return TextLineBaseSegment::setProperty(id, v); + for (const StyledProperty* spp = spanner()->styledProperties(); spp->styleIdx != StyleIdx::NOSTYLE; ++spp) { + if (spp->propertyIdx == id) + return spanner()->setProperty(id, v); } + return TextLineBaseSegment::setProperty(id, v); } //--------------------------------------------------------- @@ -123,99 +113,11 @@ bool OttavaSegment::setProperty(P_ID id, const QVariant& v) QVariant OttavaSegment::propertyDefault(P_ID id) const { - switch (id) { - case P_ID::LINE_WIDTH: - case P_ID::LINE_STYLE: - case P_ID::OTTAVA_TYPE: - case P_ID::PLACEMENT: - case P_ID::NUMBERS_ONLY: - return ottava()->propertyDefault(id); - default: - return TextLineBaseSegment::propertyDefault(id); + for (const StyledProperty* spp = spanner()->styledProperties(); spp->styleIdx != StyleIdx::NOSTYLE; ++spp) { + if (spp->propertyIdx == id) + return spanner()->propertyDefault(id); } - } - -//--------------------------------------------------------- -// propertyStyle -//--------------------------------------------------------- - -PropertyFlags& OttavaSegment::propertyFlags(P_ID id) - { - switch (id) { - case P_ID::OTTAVA_TYPE: - case P_ID::LINE_WIDTH: - case P_ID::LINE_STYLE: - case P_ID::PLACEMENT: - case P_ID::NUMBERS_ONLY: - return ottava()->propertyFlags(id); - - default: - return TextLineBaseSegment::propertyFlags(id); - } - } - -//--------------------------------------------------------- -// resetProperty -//--------------------------------------------------------- - -void OttavaSegment::resetProperty(P_ID id) - { - switch (id) { - case P_ID::OTTAVA_TYPE: - case P_ID::LINE_WIDTH: - case P_ID::LINE_STYLE: - case P_ID::NUMBERS_ONLY: - ottava()->resetProperty(id); - break; - - default: - TextLineBaseSegment::resetProperty(id); - break; - } - } - -//--------------------------------------------------------- -// getPropertyStyle -//--------------------------------------------------------- - -StyleIdx OttavaSegment::getPropertyStyle(P_ID id) const - { - switch (id) { - case P_ID::LINE_WIDTH: - case P_ID::LINE_STYLE: - case P_ID::NUMBERS_ONLY: - case P_ID::BEGIN_FONT_FACE: - case P_ID::CONTINUE_FONT_FACE: - case P_ID::END_FONT_FACE: - case P_ID::BEGIN_FONT_SIZE: - case P_ID::CONTINUE_FONT_SIZE: - case P_ID::END_FONT_SIZE: - case P_ID::BEGIN_FONT_BOLD: - case P_ID::CONTINUE_FONT_BOLD: - case P_ID::END_FONT_BOLD: - case P_ID::BEGIN_FONT_ITALIC: - case P_ID::CONTINUE_FONT_ITALIC: - case P_ID::END_FONT_ITALIC: - case P_ID::BEGIN_FONT_UNDERLINE: - case P_ID::CONTINUE_FONT_UNDERLINE: - case P_ID::END_FONT_UNDERLINE: - case P_ID::BEGIN_TEXT_ALIGN: - case P_ID::CONTINUE_TEXT_ALIGN: - case P_ID::END_TEXT_ALIGN: - return ottava()->getPropertyStyle(id); - - default: - return TextLineBaseSegment::getPropertyStyle(id); - } - } - -//--------------------------------------------------------- -// styleChanged -//--------------------------------------------------------- - -void OttavaSegment::styleChanged() - { - ottava()->styleChanged(); + return TextLineBaseSegment::propertyDefault(id); } //--------------------------------------------------------- @@ -223,12 +125,13 @@ void OttavaSegment::styleChanged() //--------------------------------------------------------- Ottava::Ottava(Score* s) - : TextLineBase(s) + : TextLineBase(s, ElementFlag::ON_STAFF) { - _numbersOnly = score()->styleB(StyleIdx::ottavaNumbersOnly); - setFlag(ElementFlag::ON_STAFF, true); - setOttavaType(OttavaType::OTTAVA_8VA); - init(); + _ottavaType = OttavaType::OTTAVA_8VA; + setBeginTextPlace(PlaceText::LEFT); + setContinueTextPlace(PlaceText::LEFT); + setLineVisible(true); + initSubStyle(SubStyleId::OTTAVA); } Ottava::Ottava(const Ottava& o) @@ -267,24 +170,6 @@ LineSegment* Ottava::createLineSegment() return new OttavaSegment(score()); } -#if 0 -//--------------------------------------------------------- -// endEdit -//--------------------------------------------------------- - -void Ottava::endEdit(EditData& ed) - { - SpannerEditData* ned = static_cast(ed.getData(this)); - if (ned->editTick != tick() || ned->editTick2 != tick2()) { - Staff* s = staff(); - s->updateOttava(); - score()->addLayoutFlags(LayoutFlag::FIX_PITCH_VELO); - score()->setPlaylistDirty(); - } - TextLineBase::endEdit(ed); - } -#endif - //--------------------------------------------------------- // write //--------------------------------------------------------- @@ -294,9 +179,13 @@ void Ottava::write(XmlWriter& xml) const if (!xml.canWrite(this)) return; xml.stag(QString("%1 id=\"%2\"").arg(name()).arg(xml.spannerId(this))); - writeProperty(xml, P_ID::NUMBERS_ONLY); +// writeProperty(xml, P_ID::NUMBERS_ONLY); xml.tag("subtype", ottavaDefault[int(ottavaType())].name); - TextLineBase::writeProperties(xml); + + for (const StyledProperty* spp = styledProperties(); spp->styleIdx != StyleIdx::NOSTYLE; ++spp) + writeProperty(xml, spp->propertyIdx); + + Element::writeProperties(xml); xml.etag(); } @@ -342,10 +231,6 @@ bool Ottava::readProperties(XmlReader& e) } setOttavaType(OttavaType(idx)); } - else if (tag == "numbersOnly") { - _numbersOnly = e.readInt(); - numbersOnlyStyle = PropertyFlags::UNSTYLED; - } else if (!TextLineBase::readProperties(e)) { e.unknown(); return false; @@ -442,131 +327,25 @@ QVariant Ottava::propertyDefault(P_ID propertyId) const switch (propertyId) { case P_ID::OTTAVA_TYPE: return QVariant(); - case P_ID::LINE_WIDTH: - return score()->styleV(StyleIdx::ottavaLineWidth); - case P_ID::LINE_STYLE: - return score()->styleV(StyleIdx::ottavaLineStyle); - case P_ID::PLACEMENT: - return int(ottavaDefault[int(_ottavaType)].place); case P_ID::END_HOOK_TYPE: return int(HookType::HOOK_90); + case P_ID::PLACEMENT: + return int(ottavaDefault[int(_ottavaType)].place); case P_ID::END_HOOK_HEIGHT: return score()->styleS(StyleIdx::ottavaHook) * ottavaDefault[int(_ottavaType)].hookDirection; - case P_ID::NUMBERS_ONLY: - return score()->styleV(StyleIdx::ottavaNumbersOnly); case P_ID::BEGIN_TEXT: case P_ID::CONTINUE_TEXT: { const OttavaDefault* def = &ottavaDefault[int(_ottavaType)]; SymId id = _numbersOnly ? def->numbersOnlyId : def->id; return QString("%1").arg(Sym::id2name(id)); } - case P_ID::END_TEXT: - return QString(""); - case P_ID::BEGIN_FONT_FACE: - return score()->styleV(StyleIdx::ottavaFontFace); - case P_ID::BEGIN_FONT_SIZE: - return score()->styleV(StyleIdx::ottavaFontSize); - case P_ID::BEGIN_FONT_BOLD: - return score()->styleV(StyleIdx::ottavaFontBold); - case P_ID::BEGIN_FONT_ITALIC: - return score()->styleV(StyleIdx::ottavaFontItalic); - case P_ID::BEGIN_FONT_UNDERLINE: - return score()->styleV(StyleIdx::ottavaFontUnderline); - case P_ID::BEGIN_TEXT_ALIGN: - case P_ID::CONTINUE_TEXT_ALIGN: - return score()->styleV(StyleIdx::ottavaTextAlign); - default: - return TextLineBase::propertyDefault(propertyId); - } - } - -//--------------------------------------------------------- -// propertyFlags -//--------------------------------------------------------- - -PropertyFlags& Ottava::propertyFlags(P_ID id) - { - switch (id) { - case P_ID::OTTAVA_TYPE: - case P_ID::PLACEMENT: - return ScoreElement::propertyFlags(id); // return PropertyFlags::NOSTYLE; - - case P_ID::NUMBERS_ONLY: - return numbersOnlyStyle; - - default: - return TextLineBase::propertyFlags(id); - } - } - -//--------------------------------------------------------- -// styleChanged -// reset all styled values to actual style -//--------------------------------------------------------- - -void Ottava::styleChanged() - { - if (numbersOnlyStyle == PropertyFlags::STYLED) - setNumbersOnly(score()->styleB(StyleIdx::ottavaNumbersOnly)); - TextLineBase::styleChanged(); - } - -//--------------------------------------------------------- -// reset -//--------------------------------------------------------- - -void Ottava::reset() - { - resetProperty(P_ID::NUMBERS_ONLY); - resetProperty(P_ID::BEGIN_TEXT); - resetProperty(P_ID::CONTINUE_TEXT); - setOttavaType(_ottavaType); - TextLineBase::reset(); - } - -//--------------------------------------------------------- -// getPropertyStyle -//--------------------------------------------------------- - -StyleIdx Ottava::getPropertyStyle(P_ID id) const - { - switch (id) { - case P_ID::NUMBERS_ONLY: - return StyleIdx::ottavaNumbersOnly; - case P_ID::LINE_WIDTH: - return StyleIdx::ottavaLineWidth; - case P_ID::LINE_STYLE: - return StyleIdx::ottavaLineStyle; - case P_ID::PLACEMENT: - return StyleIdx::ottavaPlacement; - case P_ID::BEGIN_FONT_FACE: - case P_ID::CONTINUE_FONT_FACE: - case P_ID::END_FONT_FACE: - return StyleIdx::ottavaFontFace; - case P_ID::BEGIN_FONT_SIZE: - case P_ID::CONTINUE_FONT_SIZE: - case P_ID::END_FONT_SIZE: - return StyleIdx::ottavaFontSize; - case P_ID::BEGIN_FONT_BOLD: - case P_ID::CONTINUE_FONT_BOLD: - case P_ID::END_FONT_BOLD: - return StyleIdx::ottavaFontBold; - case P_ID::BEGIN_FONT_ITALIC: - case P_ID::CONTINUE_FONT_ITALIC: - case P_ID::END_FONT_ITALIC: - return StyleIdx::ottavaFontItalic; - case P_ID::BEGIN_FONT_UNDERLINE: - case P_ID::CONTINUE_FONT_UNDERLINE: - case P_ID::END_FONT_UNDERLINE: - return StyleIdx::ottavaFontUnderline; - case P_ID::BEGIN_TEXT_ALIGN: - case P_ID::CONTINUE_TEXT_ALIGN: - case P_ID::END_TEXT_ALIGN: - return StyleIdx::ottavaTextAlign; default: - break; + for (const StyledProperty& p : subStyle(subStyleId())) { + if (p.propertyIdx == propertyId) + return score()->styleV(p.styleIdx); + } + return getProperty(propertyId); } - return StyleIdx::NOSTYLE; } //--------------------------------------------------------- diff --git a/libmscore/ottava.h b/libmscore/ottava.h index 78c08223ce420..57a4871aef325 100644 --- a/libmscore/ottava.h +++ b/libmscore/ottava.h @@ -57,10 +57,6 @@ class OttavaSegment final : public TextLineBaseSegment { virtual QVariant getProperty(P_ID propertyId) const override; virtual bool setProperty(P_ID propertyId, const QVariant&) override; virtual QVariant propertyDefault(P_ID) const override; - virtual PropertyFlags& propertyFlags(P_ID) override; - virtual void resetProperty(P_ID id) override; - virtual void styleChanged() override; - virtual StyleIdx getPropertyStyle(P_ID) const override; }; //--------------------------------------------------------- @@ -71,7 +67,6 @@ class OttavaSegment final : public TextLineBaseSegment { class Ottava final : public TextLineBase { OttavaType _ottavaType; bool _numbersOnly; - PropertyFlags numbersOnlyStyle { PropertyFlags::STYLED }; int _pitchShift; @@ -101,10 +96,6 @@ class Ottava final : public TextLineBase { virtual QVariant getProperty(P_ID propertyId) const override; virtual bool setProperty(P_ID propertyId, const QVariant&) override; virtual QVariant propertyDefault(P_ID) const override; - virtual PropertyFlags& propertyFlags(P_ID) override; - virtual StyleIdx getPropertyStyle(P_ID) const override; - virtual void styleChanged() override; - virtual void reset() override; virtual void setYoff(qreal) override; diff --git a/libmscore/palmmute.cpp b/libmscore/palmmute.cpp index fdf0f263bc787..00f714c7b2c6c 100644 --- a/libmscore/palmmute.cpp +++ b/libmscore/palmmute.cpp @@ -59,7 +59,7 @@ void PalmMuteSegment::layout() PalmMute::PalmMute(Score* s) : TextLineBase(s) { - init(); + initSubStyle(SubStyleId::PALM_MUTE); } //--------------------------------------------------------- @@ -76,6 +76,23 @@ void PalmMute::read(XmlReader& e) } } +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void PalmMute::write(XmlWriter& xml) const + { + if (!xml.canWrite(this)) + return; + xml.stag(QString("%1 id=\"%2\"").arg(name()).arg(xml.spannerId(this))); + + for (const StyledProperty* spp = styledProperties(); spp->styleIdx != StyleIdx::NOSTYLE; ++spp) + writeProperty(xml, spp->propertyIdx); + + Element::writeProperties(xml); + xml.etag(); + } + //--------------------------------------------------------- // createLineSegment //--------------------------------------------------------- diff --git a/libmscore/palmmute.h b/libmscore/palmmute.h index 055fd4ee66a56..4713fada7f2af 100644 --- a/libmscore/palmmute.h +++ b/libmscore/palmmute.h @@ -49,6 +49,7 @@ class PalmMute final : public TextLineBase { virtual PalmMute* clone() const override { return new PalmMute(*this); } virtual ElementType type() const override { return ElementType::PALM_MUTE; } virtual void read(XmlReader&) override; + virtual void write(XmlWriter& xml) const override; LineSegment* createLineSegment(); virtual void setYoff(qreal) override; virtual QVariant propertyDefault(P_ID propertyId) const override; diff --git a/libmscore/pedal.cpp b/libmscore/pedal.cpp index 9aafad8e10cc1..b0d9d4918607b 100644 --- a/libmscore/pedal.cpp +++ b/libmscore/pedal.cpp @@ -64,7 +64,19 @@ void PedalSegment::layout() Pedal::Pedal(Score* s) : TextLineBase(s) { - init(); + setLineVisible(true); + resetProperty(P_ID::BEGIN_TEXT); + resetProperty(P_ID::END_TEXT); + + resetProperty(P_ID::LINE_WIDTH); + resetProperty(P_ID::LINE_STYLE); + + resetProperty(P_ID::BEGIN_HOOK_TYPE); + resetProperty(P_ID::END_HOOK_TYPE); + + resetProperty(P_ID::BEGIN_TEXT_PLACE); + + initSubStyle(SubStyleId::PEDAL); } //--------------------------------------------------------- @@ -81,6 +93,35 @@ void Pedal::read(XmlReader& e) } } +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void Pedal::write(XmlWriter& xml) const + { + if (!xml.canWrite(this)) + return; + int id = xml.spannerId(this); + xml.stag(QString("%1 id=\"%2\"").arg(name()).arg(id)); + + for (auto i : { + P_ID::END_HOOK_TYPE, + P_ID::BEGIN_TEXT, + P_ID::END_TEXT, + P_ID::LINE_WIDTH, + P_ID::LINE_STYLE, + P_ID::BEGIN_HOOK_TYPE + }) { + writeProperty(xml, i); + } + for (const StyledProperty* spp = styledProperties(); spp->styleIdx != StyleIdx::NOSTYLE; ++spp) + writeProperty(xml, spp->propertyIdx); + + Element::writeProperties(xml); + xml.etag(); + } + + //--------------------------------------------------------- // createLineSegment //--------------------------------------------------------- @@ -109,62 +150,25 @@ QVariant Pedal::propertyDefault(P_ID propertyId) const case P_ID::LINE_WIDTH: return score()->styleV(StyleIdx::pedalLineWidth); - case P_ID::ALIGN: - return QVariant::fromValue(Align::LEFT | Align::BASELINE); - case P_ID::LINE_STYLE: return score()->styleV(StyleIdx::pedalLineStyle); - case P_ID::BEGIN_TEXT_OFFSET: - return score()->styleV(StyleIdx::pedalBeginTextOffset).toPointF(); + case P_ID::BEGIN_TEXT: + case P_ID::END_TEXT: + return ""; - case P_ID::BEGIN_TEXT_ALIGN: - case P_ID::CONTINUE_TEXT_ALIGN: - case P_ID::END_TEXT_ALIGN: - return score()->styleV(StyleIdx::pedalTextAlign); + case P_ID::BEGIN_TEXT_PLACE: + return int(PlaceText::LEFT); - case P_ID::BEGIN_HOOK_HEIGHT: - case P_ID::END_HOOK_HEIGHT: - return score()->styleV(StyleIdx::pedalHookHeight); + case P_ID::BEGIN_HOOK_TYPE: + case P_ID::END_HOOK_TYPE: + return int(HookType::NONE); default: return TextLineBase::propertyDefault(propertyId); } } -//--------------------------------------------------------- -// getPropertyStyle -//--------------------------------------------------------- - -StyleIdx Pedal::getPropertyStyle(P_ID id) const - { - switch (id) { - case P_ID::PLACEMENT: - return StyleIdx::pedalPlacement; - case P_ID::BEGIN_FONT_FACE: - return StyleIdx::pedalFontFace; - case P_ID::BEGIN_FONT_SIZE: - return StyleIdx::pedalFontSize; - case P_ID::BEGIN_FONT_BOLD: - return StyleIdx::pedalFontBold; - case P_ID::BEGIN_FONT_ITALIC: - return StyleIdx::pedalFontItalic; - case P_ID::BEGIN_FONT_UNDERLINE: - return StyleIdx::pedalFontUnderline; - case P_ID::BEGIN_TEXT_ALIGN: - case P_ID::CONTINUE_TEXT_ALIGN: - case P_ID::END_TEXT_ALIGN: - return StyleIdx::pedalTextAlign; - case P_ID::BEGIN_HOOK_HEIGHT: - case P_ID::END_HOOK_HEIGHT: - return StyleIdx::pedalHookHeight; - default: - break; - } - return StyleIdx::NOSTYLE; - } - - //--------------------------------------------------------- // linePos // return System() coordinates diff --git a/libmscore/pedal.h b/libmscore/pedal.h index c3d8f0cfb1960..7c88e8eed5874 100644 --- a/libmscore/pedal.h +++ b/libmscore/pedal.h @@ -47,10 +47,10 @@ class Pedal final : public TextLineBase { virtual Pedal* clone() const override { return new Pedal(*this); } virtual ElementType type() const override { return ElementType::PEDAL; } virtual void read(XmlReader&) override; + virtual void write(XmlWriter& xml) const override; LineSegment* createLineSegment(); virtual void setYoff(qreal) override; virtual QVariant propertyDefault(P_ID propertyId) const override; - virtual StyleIdx getPropertyStyle(P_ID) const override; friend class PedalLine; }; diff --git a/libmscore/property.h b/libmscore/property.h index 5cc0796e767c8..9c2f91a2838fd 100644 --- a/libmscore/property.h +++ b/libmscore/property.h @@ -18,7 +18,7 @@ namespace Ms { class XmlReader; enum class StyleIdx : int; -//--------------------------------------------------------- +//------------------------------------------------------------------------ // M_PROPERTY (type, getter_name, setter_name) // helper macro to define a styled ScoreElement property // @@ -40,6 +40,13 @@ enum class StyleIdx : int; void c(const a& val) { _ ## b = val; } \ private: +#define M_PROPERTY2(a,b,c,d) \ + a _ ## b { d }; \ + public: \ + const a& b() const { return _ ## b; } \ + void c(const a& val) { _ ## b = val; } \ + private: + //--------------------------------------------------------- // PropertyFlags //--------------------------------------------------------- diff --git a/libmscore/read206.cpp b/libmscore/read206.cpp index 5260567f46da4..6ced543f4b9b3 100644 --- a/libmscore/read206.cpp +++ b/libmscore/read206.cpp @@ -75,7 +75,6 @@ struct StyleVal2 { { StyleIdx::minSystemDistance, Spatium(8.5) }, { StyleIdx::maxSystemDistance, Spatium(15.0) }, -// { StyleIdx::lyricsDistance, 2.0 }, //renamed to lyricsPosBelow { StyleIdx::lyricsMinBottomDistance, Spatium(4.0) }, { StyleIdx::lyricsLineHeight, QVariant(1.0) }, { StyleIdx::figuredBassFontFamily, QVariant(QString("MScoreBC")) }, @@ -163,7 +162,6 @@ struct StyleVal2 { { StyleIdx::smallClefMag, QVariant(0.8) }, { StyleIdx::genClef, QVariant(true) }, { StyleIdx::genKeysig, QVariant(true) }, -// { StyleIdx::genTimesig, QVariant(true) }, { StyleIdx::genCourtesyTimesig, QVariant(true) }, { StyleIdx::genCourtesyKeysig, QVariant(true) }, { StyleIdx::genCourtesyClef, QVariant(true) }, @@ -203,7 +201,6 @@ struct StyleVal2 { { StyleIdx::MusicalSymbolFont, QVariant(QString("Emmentaler")) }, { StyleIdx::MusicalTextFont, QVariant(QString("MScore Text")) }, { StyleIdx::showHeader, QVariant(false) }, -// { StyleIdx::headerStyled, QVariant(true) }, { StyleIdx::headerFirstPage, QVariant(false) }, { StyleIdx::headerOddEven, QVariant(true) }, { StyleIdx::evenHeaderL, QVariant(QString()) }, @@ -213,7 +210,6 @@ struct StyleVal2 { { StyleIdx::oddHeaderC, QVariant(QString()) }, { StyleIdx::oddHeaderR, QVariant(QString()) }, { StyleIdx::showFooter, QVariant(true) }, -// { StyleIdx::footerStyled, QVariant(true) }, { StyleIdx::footerFirstPage, QVariant(true) }, { StyleIdx::footerOddEven, QVariant(true) }, { StyleIdx::evenFooterL, QVariant(QString("$p")) }, @@ -249,6 +245,7 @@ struct StyleVal2 { { StyleIdx::tupletStemRightDistance, QVariant(.5) }, { StyleIdx::tupletNoteLeftDistance, QVariant(0.0) }, { StyleIdx::tupletNoteRightDistance, QVariant(0.0) }, + { StyleIdx::barreLineWidth, QVariant(1.0) }, { StyleIdx::fretMag, QVariant(1.0) }, { StyleIdx::scaleBarlines, QVariant(true) }, diff --git a/libmscore/scoreElement.cpp b/libmscore/scoreElement.cpp index a0647d16bfeba..132cf89cfe265 100644 --- a/libmscore/scoreElement.cpp +++ b/libmscore/scoreElement.cpp @@ -157,7 +157,7 @@ ScoreElement::~ScoreElement() _links = 0; } } - delete _propertyFlagsList; + delete[] _propertyFlagsList; } //--------------------------------------------------------- @@ -167,13 +167,39 @@ ScoreElement::~ScoreElement() void ScoreElement::setSubStyleId(SubStyleId ssid) { _subStyleId = ssid; - delete _propertyFlagsList; + delete[] _propertyFlagsList; int n = subStyle(_subStyleId).size() - 1; // don't count end of list marker _propertyFlagsList = new PropertyFlags[n]; for (int i = 0; i < n; ++i) _propertyFlagsList[i] = PropertyFlags::STYLED; } +//--------------------------------------------------------- +// propertyDefault +//--------------------------------------------------------- + +QVariant ScoreElement::propertyDefault(P_ID id) const + { +// if (isTuplet()) +// qDebug("lookup <%s> in <%s> style <%s>", propertyName(id), name(), subStyleName(subStyleId())); + if (id == P_ID::SUB_STYLE) { + return int(SubStyleId::DEFAULT); + } + for (const StyledProperty& p : subStyle(subStyleId())) { + if (p.propertyIdx == id) + return score()->styleV(p.styleIdx); + } + for (const StyledProperty& p : subStyle(SubStyleId::DEFAULT)) { + if (p.propertyIdx == id) + return score()->styleV(p.styleIdx); + } + if (isTuplet()) + qDebug("<%s> not found in <%s> style <%s>", propertyName(id), name(), subStyleName(subStyleId())); + +// qDebug("<%s> not found in <%s> style <%s>", propertyName(id), name(), subStyleName(subStyleId())); + return QVariant(); + } + //--------------------------------------------------------- // initSubStyle //--------------------------------------------------------- @@ -503,27 +529,6 @@ bool ScoreElement::readProperty(const QStringRef& s, XmlReader& e, P_ID id) return false; } -//--------------------------------------------------------- -// propertyDefault -//--------------------------------------------------------- - -QVariant ScoreElement::propertyDefault(P_ID id) const - { - if (id == P_ID::SUB_STYLE) { - return int(SubStyleId::DEFAULT); - } - for (const StyledProperty& p : subStyle(subStyleId())) { - if (p.propertyIdx == id) - return score()->styleV(p.styleIdx); - } - for (const StyledProperty& p : subStyle(SubStyleId::DEFAULT)) { - if (p.propertyIdx == id) - return score()->styleV(p.styleIdx); - } - qDebug("not found <%s> in <%s> style <%s>", propertyName(id), name(), subStyleName(subStyleId())); - return QVariant(); - } - //--------------------------------------------------------- // readStyledProperty //--------------------------------------------------------- diff --git a/libmscore/spanner.cpp b/libmscore/spanner.cpp index 0420723801674..f2f4145e21e84 100644 --- a/libmscore/spanner.cpp +++ b/libmscore/spanner.cpp @@ -120,6 +120,46 @@ QVariant SpannerSegment::propertyDefault(P_ID id) const } } +//--------------------------------------------------------- +// getPropertyStyle +//--------------------------------------------------------- + +StyleIdx SpannerSegment::getPropertyStyle(P_ID id) const + { + return spanner()->getPropertyStyle(id); + } + +//--------------------------------------------------------- +// propertyFlags +//--------------------------------------------------------- + +PropertyFlags& SpannerSegment::propertyFlags(P_ID id) + { + return spanner()->propertyFlags(id); + } + +//--------------------------------------------------------- +// resetProperty +//--------------------------------------------------------- + +void SpannerSegment::resetProperty(P_ID id) + { + for (const StyledProperty* spp = spanner()->styledProperties(); spp->styleIdx != StyleIdx::NOSTYLE; ++spp) { + if (spp->propertyIdx == id) + return spanner()->resetProperty(id); + } + return Element::resetProperty(id); + } + +//--------------------------------------------------------- +// styleChanged +//--------------------------------------------------------- + +void SpannerSegment::styleChanged() + { + spanner()->styleChanged(); + } + //--------------------------------------------------------- // reset //--------------------------------------------------------- @@ -199,15 +239,6 @@ QString SpannerSegment::accessibleInfo() const return spanner()->accessibleInfo(); } -//--------------------------------------------------------- -// styleChanged -//--------------------------------------------------------- - -void SpannerSegment::styleChanged() - { - _spanner->styleChanged(); - } - //--------------------------------------------------------- // triggerLayout //--------------------------------------------------------- diff --git a/libmscore/spanner.h b/libmscore/spanner.h index 8a950d402eba4..ed5bc144c50e8 100644 --- a/libmscore/spanner.h +++ b/libmscore/spanner.h @@ -92,16 +92,19 @@ class SpannerSegment : public Element { virtual QVariant getProperty(P_ID id) const override; virtual bool setProperty(P_ID id, const QVariant& v) override; virtual QVariant propertyDefault(P_ID id) const override; + virtual StyleIdx getPropertyStyle(P_ID id) const override; + virtual PropertyFlags& propertyFlags(P_ID id) override; + virtual void resetProperty(P_ID id) override; + virtual void styleChanged() override; void reset() override; + virtual void setSelected(bool f) override; virtual void setVisible(bool f) override; virtual void setColor(const QColor& col) override; virtual Element* nextSegmentElement() override; virtual Element* prevSegmentElement() override; -// virtual bool isSpannerSegment() const override { return true; } virtual QString accessibleInfo() const override; - virtual void styleChanged() override; virtual void triggerLayout() const override; }; diff --git a/libmscore/style.cpp b/libmscore/style.cpp index 939284cc586fb..bfc5f05fff3ff 100644 --- a/libmscore/style.cpp +++ b/libmscore/style.cpp @@ -174,6 +174,12 @@ static const StyleType styleTypes[] { { StyleIdx::hairpinHeight, "hairpinHeight", Spatium(1.2) }, { StyleIdx::hairpinContHeight, "hairpinContHeight", Spatium(0.5) }, { StyleIdx::hairpinLineWidth, "hairpinWidth", Spatium(0.13) }, + { StyleIdx::hairpinFontFace, "hairpinFontFace", "FreeSerif" }, + { StyleIdx::hairpinFontSize, "hairpinFontSize", 12.0 }, + { StyleIdx::hairpinFontBold, "hairpinFontBold", false }, + { StyleIdx::hairpinFontItalic, "hairpinFontItalic", true }, + { StyleIdx::hairpinFontUnderline, "hairpinFontUnderline", false }, + { StyleIdx::hairpinTextAlign, "hairpinTextAlign", QVariant::fromValue(Align::LEFT | Align::BASELINE) }, { StyleIdx::pedalPlacement, "pedalPlacement", int(Placement::BELOW) }, { StyleIdx::pedalPosAbove, "pedalPosAbove", Spatium(-4) }, @@ -182,6 +188,12 @@ static const StyleType styleTypes[] { { StyleIdx::pedalLineStyle, "pedalListStyle", QVariant(int(Qt::SolidLine)) }, { StyleIdx::pedalBeginTextOffset, "pedalBeginTextOffset", QPointF(0.0, 0.15) }, { StyleIdx::pedalHookHeight, "pedalHookHeight", Spatium(-1.2) }, + { StyleIdx::pedalFontFace, "pedalFontFace", "FreeSerif" }, + { StyleIdx::pedalFontSize, "pedalFontSize", 12.0 }, + { StyleIdx::pedalFontBold, "pedalFontBold", false }, + { StyleIdx::pedalFontItalic, "pedalFontItalic", false }, + { StyleIdx::pedalFontUnderline, "pedalFontUnderline", false }, + { StyleIdx::pedalTextAlign, "pedalTextAlign", QVariant::fromValue(Align::LEFT | Align::BASELINE) }, { StyleIdx::trillPlacement, "trillPlacement", int(Placement::ABOVE) }, { StyleIdx::trillPosAbove, "trillPosAbove", Spatium(-1) }, @@ -281,11 +293,18 @@ static const StyleType styleTypes[] { { StyleIdx::oddFooterL, "oddFooterL", QVariant(QString()) }, { StyleIdx::oddFooterC, "oddFooterC", QVariant(QString("$:copyright:")) }, { StyleIdx::oddFooterR, "oddFooterR", QVariant(QString("$p")) }, + { StyleIdx::voltaY, "voltaY", Spatium(-3.0) }, { StyleIdx::voltaHook, "voltaHook", Spatium(1.9) }, - { StyleIdx::voltaLineWidth, "voltaLineWidth", Spatium(.1) }, { StyleIdx::voltaLineStyle, "voltaLineStyle", QVariant(int(Qt::SolidLine)) }, + { StyleIdx::voltaFontFace, "voltaFontFace", "FreeSerif" }, + { StyleIdx::voltaFontSize, "voltaFontSize", 11.0 }, + { StyleIdx::voltaFontBold, "voltaFontBold", true }, + { StyleIdx::voltaFontItalic, "voltaFontItalic", false }, + { StyleIdx::voltaFontUnderline, "voltaFontUnderline", false }, + { StyleIdx::voltaAlign, "voltaAlign", QVariant::fromValue(Align::LEFT | Align::BASELINE) }, + { StyleIdx::voltaOffset, "voltaOffset", QPointF(0.5, 1.9) }, { StyleIdx::ottavaPlacement, "ottavaPlacement", int(Placement::ABOVE) }, { StyleIdx::ottavaPosAbove, "ottavaPosAbove", Spatium(-3.0) }, @@ -294,13 +313,20 @@ static const StyleType styleTypes[] { { StyleIdx::ottavaLineWidth, "ottavaLineWidth", Spatium(.1) }, { StyleIdx::ottavaLineStyle, "ottavaLineStyle", QVariant(int(Qt::DashLine)) }, { StyleIdx::ottavaNumbersOnly, "ottavaNumbersOnly", true }, + { StyleIdx::ottavaFontFace, "ottavaFontFace", "FreeSerif" }, + { StyleIdx::ottavaFontSize, "ottavaFontSize", 12.0 }, + { StyleIdx::ottavaFontBold, "ottavaFontBold", false }, + { StyleIdx::ottavaFontItalic, "ottavaFontItalic", false }, + { StyleIdx::ottavaFontUnderline, "ottavaFontUnderline", false }, + { StyleIdx::ottavaTextAlign, "ottavaTextAlign", QVariant::fromValue(Align::LEFT | Align::VCENTER) }, { StyleIdx::tabClef, "tabClef", QVariant(int(ClefType::TAB)) }, + { StyleIdx::tremoloWidth, "tremoloWidth", Spatium(1.2) }, // tremolo stroke width: notehead width { StyleIdx::tremoloBoxHeight, "tremoloBoxHeight", Spatium(0.65) }, - { StyleIdx::tremoloStrokeWidth, "tremoloLineWidth", Spatium(0.5) }, // was 0.35 { StyleIdx::tremoloDistance, "tremoloDistance", Spatium(0.8) }, + { StyleIdx::linearStretch, "linearStretch", QVariant(qreal(1.5)) }, { StyleIdx::crossMeasureValues, "crossMeasureValues", QVariant(false) }, { StyleIdx::keySigNaturals, "keySigNaturals", QVariant(int(KeySigNatural::NONE)) }, @@ -317,6 +343,13 @@ static const StyleType styleTypes[] { { StyleIdx::tupletDirection, "tupletDirection", QVariant::fromValue(Direction::AUTO) }, { StyleIdx::tupletNumberType, "tupletNumberType", int(TupletNumberType::SHOW_NUMBER) }, { StyleIdx::tupletBracketType, "tupletBracketType", int(TupletBracketType::AUTO_BRACKET) }, + { StyleIdx::tupletFontFace, "tupletFontFace", "FreeSerif" }, + { StyleIdx::tupletFontSize, "tupletFontSize", 10.0 }, + { StyleIdx::tupletFontBold, "tupletFontBold", false }, + { StyleIdx::tupletFontItalic, "tupletFontItalic", true }, + { StyleIdx::tupletFontUnderline, "tupletFontUnderline", false }, + { StyleIdx::tupletAlign, "tupletAlign", QVariant::fromValue(Align::CENTER) }, + { StyleIdx::barreLineWidth, "barreLineWidth", QVariant(1.0) }, { StyleIdx::fretMag, "fretMag", QVariant(1.0) }, @@ -363,6 +396,7 @@ static const StyleType styleTypes[] { { StyleIdx::defaultOffset, "defaultOffset", QPointF() }, { StyleIdx::defaultOffsetType, "defaultOffsetType", int(OffsetType::SPATIUM) }, { StyleIdx::defaultSystemFlag, "defaultSystemFlag", false }, + { StyleIdx::defaultText, "defaultText", QString("") }, { StyleIdx::titleFontFace, "titleFontFace", "FreeSerif" }, { StyleIdx::titleFontSize, "titleFontSize", 24.0 }, @@ -551,13 +585,6 @@ static const StyleType styleTypes[] { { StyleIdx::translatorFontItalic, "translatorFontItalic", false }, { StyleIdx::translatorFontUnderline, "translatorFontUnderline", false }, - { StyleIdx::tupletFontFace, "tupletFontFace", "FreeSerif" }, - { StyleIdx::tupletFontSize, "tupletFontSize", 10.0 }, - { StyleIdx::tupletFontBold, "tupletFontBold", false }, - { StyleIdx::tupletFontItalic, "tupletFontItalic", true }, - { StyleIdx::tupletFontUnderline, "tupletFontUnderline", false }, - { StyleIdx::tupletAlign, "tupletAlign", QVariant::fromValue(Align::CENTER) }, - { StyleIdx::systemFontFace, "systemFontFace", "FreeSerif" }, { StyleIdx::systemFontSize, "systemFontSize", 10.0 }, { StyleIdx::systemFontBold, "systemFontBold", false }, @@ -622,14 +649,6 @@ static const StyleType styleTypes[] { { StyleIdx::repeatRightAlign, "repeatRightAlign", QVariant::fromValue(Align::RIGHT | Align::BASELINE) }, { StyleIdx::repeatRightPlacement, "repeatLeftPlacement", int(Placement::ABOVE) }, - { StyleIdx::voltaFontFace, "voltaFontFace", "FreeSerif" }, - { StyleIdx::voltaFontSize, "voltaFontSize", 11.0 }, - { StyleIdx::voltaFontBold, "voltaFontBold", true }, - { StyleIdx::voltaFontItalic, "voltaFontItalic", false }, - { StyleIdx::voltaFontUnderline, "voltaFontUnderline", false }, - { StyleIdx::voltaAlign, "voltaAlign", QVariant::fromValue(Align::LEFT | Align::BASELINE) }, - { StyleIdx::voltaOffset, "voltaOffset", QPointF(0.5, 1.9) }, - { StyleIdx::frameFontFace, "frameFontFace", "FreeSerif" }, { StyleIdx::frameFontSize, "frameFontSize", 12.0 }, { StyleIdx::frameFontBold, "frameFontBold", false }, @@ -649,27 +668,7 @@ static const StyleType styleTypes[] { { StyleIdx::glissandoFontItalic, "glissandoFontItalic", true }, { StyleIdx::glissandoFontUnderline, "glissandoFontUnderline", false }, { StyleIdx::glissandoLineWidth, "glissandoLineWidth", Spatium(0.15) }, - - { StyleIdx::ottavaFontFace, "ottavaFontFace", "FreeSerif" }, - { StyleIdx::ottavaFontSize, "ottavaFontSize", 12.0 }, - { StyleIdx::ottavaFontBold, "ottavaFontBold", false }, - { StyleIdx::ottavaFontItalic, "ottavaFontItalic", false }, - { StyleIdx::ottavaFontUnderline, "ottavaFontUnderline", false }, - { StyleIdx::ottavaTextAlign, "ottavaTextAlign", QVariant::fromValue(Align::LEFT | Align::VCENTER) }, - - { StyleIdx::pedalFontFace, "pedalFontFace", "FreeSerif" }, - { StyleIdx::pedalFontSize, "pedalFontSize", 12.0 }, - { StyleIdx::pedalFontBold, "pedalFontBold", false }, - { StyleIdx::pedalFontItalic, "pedalFontItalic", false }, - { StyleIdx::pedalFontUnderline, "pedalFontUnderline", false }, - { StyleIdx::pedalTextAlign, "pedalTextAlign", QVariant::fromValue(Align::LEFT | Align::BASELINE) }, - - { StyleIdx::hairpinFontFace, "hairpinFontFace", "FreeSerif" }, - { StyleIdx::hairpinFontSize, "hairpinFontSize", 12.0 }, - { StyleIdx::hairpinFontBold, "hairpinFontBold", false }, - { StyleIdx::hairpinFontItalic, "hairpinFontItalic", true }, - { StyleIdx::hairpinFontUnderline, "hairpinFontUnderline", false }, - { StyleIdx::hairpinTextAlign, "hairpinTextAlign", QVariant::fromValue(Align::LEFT | Align::BASELINE) }, + { StyleIdx::glissandoText, "glissandoText", QString("gliss.") }, { StyleIdx::bendFontFace, "bendFontFace", "FreeSerif" }, { StyleIdx::bendFontSize, "bendFontSize", 8.0 }, @@ -783,6 +782,7 @@ const std::vector defaultStyle { { StyleIdx::defaultOffset, P_ID::OFFSET }, { StyleIdx::defaultOffsetType, P_ID::OFFSET_TYPE }, { StyleIdx::defaultSystemFlag, P_ID::SYSTEM_FLAG }, + { StyleIdx::defaultText, P_ID::TEXT }, { StyleIdx::NOSTYLE, P_ID::END } // end of list marker }; @@ -1027,13 +1027,17 @@ const std::vector translatorStyle { }; const std::vector tupletStyle { - { StyleIdx::tupletFontFace, P_ID::FONT_FACE }, - { StyleIdx::tupletFontSize, P_ID::FONT_SIZE }, - { StyleIdx::tupletFontBold, P_ID::FONT_BOLD }, - { StyleIdx::tupletFontItalic, P_ID::FONT_ITALIC }, - { StyleIdx::tupletFontUnderline, P_ID::FONT_UNDERLINE }, - { StyleIdx::tupletAlign, P_ID::ALIGN }, - { StyleIdx::NOSTYLE, P_ID::END } // end of list marker + { StyleIdx::tupletDirection, P_ID::DIRECTION }, + { StyleIdx::tupletNumberType, P_ID::NUMBER_TYPE }, + { StyleIdx::tupletBracketType, P_ID::BRACKET_TYPE }, + { StyleIdx::tupletBracketWidth, P_ID::LINE_WIDTH }, + { StyleIdx::tupletFontFace, P_ID::FONT_FACE }, + { StyleIdx::tupletFontSize, P_ID::FONT_SIZE }, + { StyleIdx::tupletFontBold, P_ID::FONT_BOLD }, + { StyleIdx::tupletFontItalic, P_ID::FONT_ITALIC }, + { StyleIdx::tupletFontUnderline, P_ID::FONT_UNDERLINE }, + { StyleIdx::tupletAlign, P_ID::ALIGN }, + { StyleIdx::NOSTYLE, P_ID::END } // end of list marker }; const std::vector systemStyle { @@ -1123,55 +1127,114 @@ const std::vector frameStyle { }; const std::vector textLineStyle { - { StyleIdx::textLineFontFace, P_ID::FONT_FACE }, - { StyleIdx::textLineFontSize, P_ID::FONT_SIZE }, - { StyleIdx::textLineFontBold, P_ID::FONT_BOLD }, - { StyleIdx::textLineFontItalic, P_ID::FONT_ITALIC }, - { StyleIdx::textLineFontUnderline, P_ID::FONT_UNDERLINE }, - { StyleIdx::NOSTYLE, P_ID::END } // end of list marker + { StyleIdx::textLineFontFace, P_ID::BEGIN_FONT_FACE }, + { StyleIdx::textLineFontFace, P_ID::CONTINUE_FONT_FACE }, + { StyleIdx::textLineFontFace, P_ID::END_FONT_FACE }, + { StyleIdx::textLineFontSize, P_ID::BEGIN_FONT_SIZE }, + { StyleIdx::textLineFontSize, P_ID::CONTINUE_FONT_SIZE }, + { StyleIdx::textLineFontSize, P_ID::END_FONT_SIZE }, + { StyleIdx::textLineFontBold, P_ID::BEGIN_FONT_BOLD }, + { StyleIdx::textLineFontBold, P_ID::CONTINUE_FONT_BOLD }, + { StyleIdx::textLineFontBold, P_ID::END_FONT_BOLD }, + { StyleIdx::textLineFontItalic, P_ID::BEGIN_FONT_ITALIC }, + { StyleIdx::textLineFontItalic, P_ID::CONTINUE_FONT_ITALIC }, + { StyleIdx::textLineFontItalic, P_ID::END_FONT_ITALIC }, + { StyleIdx::textLineFontUnderline, P_ID::BEGIN_FONT_UNDERLINE }, + { StyleIdx::textLineFontUnderline, P_ID::CONTINUE_FONT_UNDERLINE }, + { StyleIdx::textLineFontUnderline, P_ID::END_FONT_UNDERLINE }, + { StyleIdx::NOSTYLE, P_ID::END } // end of list marker }; const std::vector glissandoStyle { - { StyleIdx::glissandoFontFace, P_ID::FONT_FACE }, - { StyleIdx::glissandoFontSize, P_ID::FONT_SIZE }, - { StyleIdx::glissandoFontBold, P_ID::FONT_BOLD }, - { StyleIdx::glissandoFontItalic, P_ID::FONT_ITALIC }, - { StyleIdx::glissandoFontUnderline, P_ID::FONT_UNDERLINE }, - { StyleIdx::glissandoLineWidth, P_ID::LINE_WIDTH }, - { StyleIdx::NOSTYLE, P_ID::END } // end of list marker + { StyleIdx::glissandoFontFace, P_ID::FONT_FACE }, + { StyleIdx::glissandoFontSize, P_ID::FONT_SIZE }, + { StyleIdx::glissandoFontBold, P_ID::FONT_BOLD }, + { StyleIdx::glissandoFontItalic, P_ID::FONT_ITALIC }, + { StyleIdx::glissandoFontUnderline, P_ID::FONT_UNDERLINE }, + { StyleIdx::glissandoLineWidth, P_ID::LINE_WIDTH }, + { StyleIdx::glissandoText, P_ID::GLISS_TEXT }, + { StyleIdx::NOSTYLE, P_ID::END } // end of list marker }; const std::vector ottavaStyle { - { StyleIdx::ottavaFontFace, P_ID::FONT_FACE }, - { StyleIdx::ottavaFontSize, P_ID::FONT_SIZE }, - { StyleIdx::ottavaFontBold, P_ID::FONT_BOLD }, - { StyleIdx::ottavaFontItalic, P_ID::FONT_ITALIC }, - { StyleIdx::ottavaFontUnderline, P_ID::FONT_UNDERLINE }, - { StyleIdx::ottavaTextAlign, P_ID::BEGIN_TEXT_ALIGN }, - { StyleIdx::NOSTYLE, P_ID::END } // end of list marker + { StyleIdx::ottavaNumbersOnly, P_ID::NUMBERS_ONLY }, + { StyleIdx::ottavaFontFace, P_ID::BEGIN_FONT_FACE }, + { StyleIdx::ottavaFontFace, P_ID::CONTINUE_FONT_FACE }, + { StyleIdx::ottavaFontFace, P_ID::END_FONT_FACE }, + { StyleIdx::ottavaFontSize, P_ID::BEGIN_FONT_SIZE }, + { StyleIdx::ottavaFontSize, P_ID::CONTINUE_FONT_SIZE }, + { StyleIdx::ottavaFontSize, P_ID::END_FONT_SIZE }, + { StyleIdx::ottavaFontBold, P_ID::BEGIN_FONT_BOLD }, + { StyleIdx::ottavaFontBold, P_ID::CONTINUE_FONT_BOLD }, + { StyleIdx::ottavaFontBold, P_ID::END_FONT_BOLD }, + { StyleIdx::ottavaFontItalic, P_ID::BEGIN_FONT_ITALIC }, + { StyleIdx::ottavaFontItalic, P_ID::CONTINUE_FONT_ITALIC }, + { StyleIdx::ottavaFontItalic, P_ID::END_FONT_ITALIC }, + { StyleIdx::ottavaFontUnderline, P_ID::BEGIN_FONT_UNDERLINE }, + { StyleIdx::ottavaFontUnderline, P_ID::CONTINUE_FONT_UNDERLINE }, + { StyleIdx::ottavaFontUnderline, P_ID::END_FONT_UNDERLINE }, + { StyleIdx::ottavaTextAlign, P_ID::BEGIN_TEXT_ALIGN }, + { StyleIdx::ottavaTextAlign, P_ID::CONTINUE_TEXT_ALIGN }, + { StyleIdx::ottavaTextAlign, P_ID::END_TEXT_ALIGN }, + { StyleIdx::ottavaLineWidth, P_ID::LINE_WIDTH }, + { StyleIdx::ottavaLineStyle, P_ID::LINE_STYLE }, + { StyleIdx::ottavaPlacement, P_ID::PLACEMENT }, + { StyleIdx::NOSTYLE, P_ID::END } // end of list marker + }; + +const std::vector voltaStyle { + { StyleIdx::voltaFontFace, P_ID::BEGIN_FONT_FACE }, + { StyleIdx::voltaFontFace, P_ID::CONTINUE_FONT_FACE }, + { StyleIdx::voltaFontFace, P_ID::END_FONT_FACE }, + { StyleIdx::voltaFontSize, P_ID::BEGIN_FONT_SIZE }, + { StyleIdx::voltaFontSize, P_ID::CONTINUE_FONT_SIZE }, + { StyleIdx::voltaFontSize, P_ID::END_FONT_SIZE }, + { StyleIdx::voltaFontBold, P_ID::BEGIN_FONT_BOLD }, + { StyleIdx::voltaFontBold, P_ID::CONTINUE_FONT_BOLD }, + { StyleIdx::voltaFontBold, P_ID::END_FONT_BOLD }, + { StyleIdx::voltaFontItalic, P_ID::BEGIN_FONT_ITALIC }, + { StyleIdx::voltaFontItalic, P_ID::CONTINUE_FONT_ITALIC }, + { StyleIdx::voltaFontItalic, P_ID::END_FONT_ITALIC }, + { StyleIdx::voltaFontUnderline, P_ID::BEGIN_FONT_UNDERLINE }, + { StyleIdx::voltaFontUnderline, P_ID::CONTINUE_FONT_UNDERLINE }, + { StyleIdx::voltaFontUnderline, P_ID::END_FONT_UNDERLINE }, + { StyleIdx::voltaAlign, P_ID::BEGIN_TEXT_ALIGN }, + { StyleIdx::voltaAlign, P_ID::CONTINUE_TEXT_ALIGN }, + { StyleIdx::voltaAlign, P_ID::END_TEXT_ALIGN }, + { StyleIdx::voltaOffset, P_ID::BEGIN_TEXT_OFFSET }, + { StyleIdx::voltaOffset, P_ID::CONTINUE_TEXT_OFFSET }, + { StyleIdx::voltaOffset, P_ID::END_TEXT_OFFSET }, + { StyleIdx::voltaLineWidth, P_ID::LINE_WIDTH }, + { StyleIdx::voltaLineStyle, P_ID::LINE_STYLE }, + { StyleIdx::voltaHook, P_ID::BEGIN_HOOK_HEIGHT }, + { StyleIdx::voltaHook, P_ID::END_HOOK_HEIGHT }, + { StyleIdx::NOSTYLE, P_ID::END } // end of list marker }; const std::vector pedalStyle { - { StyleIdx::pedalFontFace, P_ID::BEGIN_FONT_FACE }, - { StyleIdx::pedalFontFace, P_ID::CONTINUE_FONT_FACE }, - { StyleIdx::pedalFontFace, P_ID::END_FONT_FACE }, - { StyleIdx::pedalFontSize, P_ID::BEGIN_FONT_SIZE }, - { StyleIdx::pedalFontSize, P_ID::CONTINUE_FONT_SIZE }, - { StyleIdx::pedalFontSize, P_ID::END_FONT_SIZE }, - { StyleIdx::pedalFontBold, P_ID::BEGIN_FONT_BOLD }, - { StyleIdx::pedalFontBold, P_ID::CONTINUE_FONT_BOLD }, - { StyleIdx::pedalFontBold, P_ID::END_FONT_BOLD }, - { StyleIdx::pedalFontItalic, P_ID::BEGIN_FONT_ITALIC }, - { StyleIdx::pedalFontItalic, P_ID::CONTINUE_FONT_ITALIC }, - { StyleIdx::pedalFontItalic, P_ID::END_FONT_ITALIC }, - { StyleIdx::pedalFontUnderline, P_ID::BEGIN_FONT_UNDERLINE }, - { StyleIdx::pedalFontUnderline, P_ID::CONTINUE_FONT_UNDERLINE}, - { StyleIdx::pedalFontUnderline, P_ID::END_FONT_UNDERLINE }, - { StyleIdx::pedalTextAlign, P_ID::BEGIN_TEXT_ALIGN }, - { StyleIdx::pedalTextAlign, P_ID::CONTINUE_TEXT_ALIGN }, - { StyleIdx::pedalHookHeight, P_ID::BEGIN_HOOK_HEIGHT }, - { StyleIdx::pedalHookHeight, P_ID::END_HOOK_HEIGHT }, - { StyleIdx::NOSTYLE, P_ID::END } // end of list marker + { StyleIdx::pedalFontFace, P_ID::BEGIN_FONT_FACE }, + { StyleIdx::pedalFontFace, P_ID::CONTINUE_FONT_FACE }, + { StyleIdx::pedalFontFace, P_ID::END_FONT_FACE }, + { StyleIdx::pedalFontSize, P_ID::BEGIN_FONT_SIZE }, + { StyleIdx::pedalFontSize, P_ID::CONTINUE_FONT_SIZE }, + { StyleIdx::pedalFontSize, P_ID::END_FONT_SIZE }, + { StyleIdx::pedalFontBold, P_ID::BEGIN_FONT_BOLD }, + { StyleIdx::pedalFontBold, P_ID::CONTINUE_FONT_BOLD }, + { StyleIdx::pedalFontBold, P_ID::END_FONT_BOLD }, + { StyleIdx::pedalFontItalic, P_ID::BEGIN_FONT_ITALIC }, + { StyleIdx::pedalFontItalic, P_ID::CONTINUE_FONT_ITALIC }, + { StyleIdx::pedalFontItalic, P_ID::END_FONT_ITALIC }, + { StyleIdx::pedalFontUnderline, P_ID::BEGIN_FONT_UNDERLINE }, + { StyleIdx::pedalFontUnderline, P_ID::CONTINUE_FONT_UNDERLINE }, + { StyleIdx::pedalFontUnderline, P_ID::END_FONT_UNDERLINE }, + { StyleIdx::pedalTextAlign, P_ID::BEGIN_TEXT_ALIGN }, + { StyleIdx::pedalTextAlign, P_ID::CONTINUE_TEXT_ALIGN }, + { StyleIdx::pedalTextAlign, P_ID::END_TEXT_ALIGN }, + { StyleIdx::pedalHookHeight, P_ID::BEGIN_HOOK_HEIGHT }, + { StyleIdx::pedalHookHeight, P_ID::END_HOOK_HEIGHT }, + { StyleIdx::pedalBeginTextOffset, P_ID::BEGIN_TEXT_OFFSET }, + { StyleIdx::pedalPlacement, P_ID::PLACEMENT }, + { StyleIdx::NOSTYLE, P_ID::END } // end of list marker }; const std::vector letRingStyle { @@ -1194,7 +1257,7 @@ const std::vector letRingStyle { { StyleIdx::letRingTextAlign, P_ID::CONTINUE_TEXT_ALIGN }, { StyleIdx::letRingHookHeight, P_ID::BEGIN_HOOK_HEIGHT }, { StyleIdx::letRingHookHeight, P_ID::END_HOOK_HEIGHT }, - { StyleIdx::NOSTYLE, P_ID::END } // end of list marker + { StyleIdx::NOSTYLE, P_ID::END } // end of list marker }; const std::vector palmMuteStyle { @@ -1239,7 +1302,11 @@ const std::vector hairpinStyle { { StyleIdx::hairpinFontItalic, P_ID::END_FONT_ITALIC }, { StyleIdx::hairpinFontUnderline, P_ID::END_FONT_UNDERLINE }, { StyleIdx::hairpinTextAlign, P_ID::END_TEXT_ALIGN }, - { StyleIdx::NOSTYLE, P_ID::END } // end of list marker + { StyleIdx::hairpinLineWidth, P_ID::LINE_WIDTH }, + { StyleIdx::hairpinHeight, P_ID::HAIRPIN_HEIGHT }, + { StyleIdx::hairpinContHeight, P_ID::HAIRPIN_CONT_HEIGHT }, + { StyleIdx::hairpinPlacement, P_ID::PLACEMENT }, + { StyleIdx::NOSTYLE, P_ID::END } // end of list marker }; const std::vector bendStyle { @@ -1367,6 +1434,7 @@ static constexpr std::array { QT_TRANSLATE_NOOP("TextStyle", "Text Line"), &textLineStyle, SubStyleId::TEXTLINE }, { QT_TRANSLATE_NOOP("TextStyle", "Glissando"), &glissandoStyle, SubStyleId::GLISSANDO }, { QT_TRANSLATE_NOOP("TextStyle", "Ottava"), &ottavaStyle, SubStyleId::OTTAVA }, + { QT_TRANSLATE_NOOP("TextStyle", "Volta"), &voltaStyle, SubStyleId::VOLTA }, { QT_TRANSLATE_NOOP("TextStyle", "Pedal"), &pedalStyle, SubStyleId::PEDAL }, { QT_TRANSLATE_NOOP("TextStyle", "LetRing"), &letRingStyle, SubStyleId::LET_RING }, { QT_TRANSLATE_NOOP("TextStyle", "PalmMute"), &palmMuteStyle, SubStyleId::PALM_MUTE }, diff --git a/libmscore/style.h b/libmscore/style.h index 09dd9251f7513..3a689c60ad2db 100644 --- a/libmscore/style.h +++ b/libmscore/style.h @@ -151,6 +151,12 @@ enum class StyleIdx { hairpinHeight, hairpinContHeight, hairpinLineWidth, + hairpinFontFace, + hairpinFontSize, + hairpinFontBold, + hairpinFontItalic, + hairpinFontUnderline, + hairpinTextAlign, pedalPlacement, pedalPosAbove, @@ -159,6 +165,12 @@ enum class StyleIdx { pedalLineStyle, pedalBeginTextOffset, pedalHookHeight, + pedalFontFace, + pedalFontSize, + pedalFontBold, + pedalFontItalic, + pedalFontUnderline, + pedalTextAlign, trillPlacement, trillPosAbove, @@ -263,6 +275,13 @@ enum class StyleIdx { voltaHook, voltaLineWidth, voltaLineStyle, + voltaFontFace, + voltaFontSize, + voltaFontBold, + voltaFontItalic, + voltaFontUnderline, + voltaAlign, + voltaOffset, ottavaPlacement, ottavaPosAbove, @@ -271,6 +290,12 @@ enum class StyleIdx { ottavaLineWidth, ottavaLineStyle, ottavaNumbersOnly, + ottavaFontFace, + ottavaFontSize, + ottavaFontBold, + ottavaFontItalic, + ottavaFontUnderline, + ottavaTextAlign, tabClef, @@ -297,6 +322,12 @@ enum class StyleIdx { tupletDirection, tupletNumberType, tupletBracketType, + tupletFontFace, + tupletFontSize, + tupletFontBold, + tupletFontItalic, + tupletFontUnderline, + tupletAlign, barreLineWidth, fretMag, @@ -342,6 +373,7 @@ enum class StyleIdx { defaultOffset, defaultOffsetType, defaultSystemFlag, + defaultText, titleFontFace, titleFontSize, @@ -530,13 +562,6 @@ enum class StyleIdx { translatorFontItalic, translatorFontUnderline, - tupletFontFace, - tupletFontSize, - tupletFontBold, - tupletFontItalic, - tupletFontUnderline, - tupletAlign, - systemFontFace, systemFontSize, systemFontBold, @@ -601,14 +626,6 @@ enum class StyleIdx { repeatRightAlign, repeatRightPlacement, - voltaFontFace, - voltaFontSize, - voltaFontBold, - voltaFontItalic, - voltaFontUnderline, - voltaAlign, - voltaOffset, - frameFontFace, frameFontSize, frameFontBold, @@ -628,27 +645,7 @@ enum class StyleIdx { glissandoFontItalic, glissandoFontUnderline, glissandoLineWidth, - - ottavaFontFace, - ottavaFontSize, - ottavaFontBold, - ottavaFontItalic, - ottavaFontUnderline, - ottavaTextAlign, - - pedalFontFace, - pedalFontSize, - pedalFontBold, - pedalFontItalic, - pedalFontUnderline, - pedalTextAlign, - - hairpinFontFace, - hairpinFontSize, - hairpinFontBold, - hairpinFontItalic, - hairpinFontUnderline, - hairpinTextAlign, + glissandoText, bendFontFace, bendFontSize, @@ -781,6 +778,7 @@ enum class SubStyleId { TEXTLINE, GLISSANDO, OTTAVA, + VOLTA, PEDAL, LET_RING, PALM_MUTE, diff --git a/libmscore/text.cpp b/libmscore/text.cpp index 34d78041a3d1f..c79aff2bf26f4 100644 --- a/libmscore/text.cpp +++ b/libmscore/text.cpp @@ -3160,9 +3160,10 @@ void Text::read(XmlReader& e) { while (e.readNextStartElement()) { const QStringRef& tag(e.name()); - if (tag == "style") { QString sn = e.readElementText(); + if (sn == "Tuplet") // ugly hack for compatibility + continue; SubStyleId s = subStyleFromName(sn); initSubStyle(s); } diff --git a/libmscore/textline.cpp b/libmscore/textline.cpp index 07ba75c01ad99..0ad3596e285e0 100644 --- a/libmscore/textline.cpp +++ b/libmscore/textline.cpp @@ -63,87 +63,6 @@ void TextLineSegment::layout() } } -//--------------------------------------------------------- -// getProperty -//--------------------------------------------------------- - -QVariant TextLineSegment::getProperty(P_ID id) const - { - switch (id) { - case P_ID::PLACEMENT: - return textLine()->getProperty(id); - default: - return TextLineBaseSegment::getProperty(id); - } - } - -//--------------------------------------------------------- -// setProperty -//--------------------------------------------------------- - -bool TextLineSegment::setProperty(P_ID id, const QVariant& v) - { - switch (id) { - case P_ID::PLACEMENT: - return textLine()->setProperty(id, v); - default: - return TextLineBaseSegment::setProperty(id, v); - } - } - -//--------------------------------------------------------- -// propertyDefault -//--------------------------------------------------------- - -QVariant TextLineSegment::propertyDefault(P_ID id) const - { - switch (id) { - case P_ID::PLACEMENT: - return textLine()->propertyDefault(id); - default: - return TextLineBaseSegment::propertyDefault(id); - } - } - -//--------------------------------------------------------- -// propertyFlags -//--------------------------------------------------------- - -PropertyFlags& TextLineSegment::propertyFlags(P_ID id) - { - switch (id) { - case P_ID::PLACEMENT: - return textLine()->propertyFlags(id); - - default: - return TextLineBaseSegment::propertyFlags(id); - } - } - -//--------------------------------------------------------- -// resetProperty -//--------------------------------------------------------- - -void TextLineSegment::resetProperty(P_ID id) - { - switch (id) { - case P_ID::PLACEMENT: - return textLine()->resetProperty(id); - - default: - return TextLineBaseSegment::resetProperty(id); - } - } - -//--------------------------------------------------------- -// styleChanged -//--------------------------------------------------------- - -void TextLineSegment::styleChanged() - { - textLine()->styleChanged(); - } - //--------------------------------------------------------- // TextLine //--------------------------------------------------------- @@ -151,8 +70,27 @@ void TextLineSegment::styleChanged() TextLine::TextLine(Score* s) : TextLineBase(s) { - init(); setPlacement(Placement::ABOVE); + setBeginText(""); + setContinueText(""); + setEndText(""); + setBeginTextOffset(QPointF(0,0)); + setContinueTextOffset(QPointF(0,0)); + setEndTextOffset(QPointF(0,0)); + setLineVisible(true); + setBeginHookType(HookType::NONE); + setEndHookType(HookType::NONE); + setBeginTextPlace(PlaceText::AUTO); + setContinueTextPlace(PlaceText::AUTO); + setEndTextPlace(PlaceText::AUTO); + setBeginHookHeight(Spatium(1.5)); + setEndHookHeight(Spatium(1.5)); + + resetProperty(P_ID::BEGIN_TEXT_ALIGN); + resetProperty(P_ID::CONTINUE_TEXT_ALIGN); + resetProperty(P_ID::END_TEXT_ALIGN); + + initSubStyle(SubStyleId::TEXTLINE); } TextLine::TextLine(const TextLine& tl) @@ -160,26 +98,6 @@ TextLine::TextLine(const TextLine& tl) { } -//--------------------------------------------------------- -// styleChanged -// reset all styled values to actual style -//--------------------------------------------------------- - -void TextLine::styleChanged() - { - TextLineBase::styleChanged(); - triggerLayout(); - } - -//--------------------------------------------------------- -// reset -//--------------------------------------------------------- - -void TextLine::reset() - { - TextLineBase::reset(); - } - //--------------------------------------------------------- // createLineSegment //--------------------------------------------------------- @@ -240,6 +158,30 @@ QVariant TextLine::propertyDefault(P_ID propertyId) const switch (propertyId) { case P_ID::PLACEMENT: return int(Placement::ABOVE); + case P_ID::BEGIN_TEXT: + case P_ID::CONTINUE_TEXT: + case P_ID::END_TEXT: + return ""; + case P_ID::LINE_VISIBLE: + return true; + case P_ID::BEGIN_TEXT_OFFSET: + case P_ID::CONTINUE_TEXT_OFFSET: + case P_ID::END_TEXT_OFFSET: + return QPointF(0,0); + case P_ID::BEGIN_HOOK_TYPE: + case P_ID::END_HOOK_TYPE: + return int(HookType::NONE); + case P_ID::BEGIN_TEXT_PLACE: + case P_ID::CONTINUE_TEXT_PLACE: + case P_ID::END_TEXT_PLACE: + return int(PlaceText::AUTO); + case P_ID::BEGIN_HOOK_HEIGHT: + case P_ID::END_HOOK_HEIGHT: + return Spatium(1.5); + case P_ID::BEGIN_TEXT_ALIGN: + case P_ID::END_TEXT_ALIGN: + case P_ID::CONTINUE_TEXT_ALIGN: + return QVariant::fromValue(Align::LEFT | Align::TOP); default: return TextLineBase::propertyDefault(propertyId); } diff --git a/libmscore/textline.h b/libmscore/textline.h index 371a55b35cf87..080a2474eacff 100644 --- a/libmscore/textline.h +++ b/libmscore/textline.h @@ -30,12 +30,6 @@ class TextLineSegment final : public TextLineBaseSegment { virtual TextLineSegment* clone() const override { return new TextLineSegment(*this); } TextLine* textLine() const { return (TextLine*)spanner(); } virtual void layout() override; - virtual QVariant getProperty(P_ID propertyId) const override; - virtual bool setProperty(P_ID propertyId, const QVariant&) override; - virtual QVariant propertyDefault(P_ID) const override; - virtual PropertyFlags& propertyFlags(P_ID) override; - virtual void resetProperty(P_ID id) override; - virtual void styleChanged() override; }; //--------------------------------------------------------- @@ -50,8 +44,6 @@ class TextLine final : public TextLineBase { virtual TextLine* clone() const { return new TextLine(*this); } virtual ElementType type() const { return ElementType::TEXTLINE; } - virtual void styleChanged() override; - virtual void reset() override; virtual LineSegment* createLineSegment() override; virtual QVariant getProperty(P_ID propertyId) const override; virtual bool setProperty(P_ID propertyId, const QVariant&) override; diff --git a/libmscore/textlinebase.cpp b/libmscore/textlinebase.cpp index 5536f4e1e4380..680d35226bbf8 100644 --- a/libmscore/textlinebase.cpp +++ b/libmscore/textlinebase.cpp @@ -327,8 +327,6 @@ void TextLineBaseSegment::spatiumChanged(qreal ov, qreal nv) static constexpr std::array pids = { { P_ID::LINE_WIDTH, - P_ID::LINE_STYLE, - P_ID::LINE_VISIBLE, P_ID::BEGIN_HOOK_TYPE, P_ID::BEGIN_HOOK_HEIGHT, @@ -406,26 +404,11 @@ QVariant TextLineBaseSegment::propertyDefault(P_ID id) const // TextLineBase //--------------------------------------------------------- -TextLineBase::TextLineBase(Score* s) - : SLine(s) - { - } - -TextLineBase::TextLineBase(const TextLineBase& e) - : SLine(e) - { - for (P_ID pid : pids) - setProperty(pid, e.getProperty(pid)); - } - -//--------------------------------------------------------- -// init -//--------------------------------------------------------- - -void TextLineBase::init() +TextLineBase::TextLineBase(Score* s, ElementFlags f) + : SLine(s, f) { - for (P_ID pid : pids) - setProperty(pid, propertyDefault(pid)); + setBeginHookHeight(Spatium(1.9)); + setEndHookHeight(Spatium(1.9)); } //--------------------------------------------------------- @@ -682,58 +665,5 @@ bool TextLineBase::setProperty(P_ID id, const QVariant& v) return true; } -//--------------------------------------------------------- -// propertyDefault -//--------------------------------------------------------- - -QVariant TextLineBase::propertyDefault(P_ID id) const - { - switch (id) { - case P_ID::CONTINUE_TEXT: - case P_ID::BEGIN_TEXT: - case P_ID::END_TEXT: - return QString(""); - case P_ID::BEGIN_TEXT_PLACE: - case P_ID::CONTINUE_TEXT_PLACE: - case P_ID::END_TEXT_PLACE: - return int(PlaceText::LEFT); - case P_ID::BEGIN_HOOK_TYPE: - case P_ID::END_HOOK_TYPE: - return int(HookType::NONE); - case P_ID::BEGIN_HOOK_HEIGHT: - case P_ID::END_HOOK_HEIGHT: - return Spatium(1.5); - case P_ID::BEGIN_FONT_FACE: - case P_ID::CONTINUE_FONT_FACE: - case P_ID::END_FONT_FACE: - return QString("FreeSerif"); - case P_ID::BEGIN_FONT_SIZE: - case P_ID::CONTINUE_FONT_SIZE: - case P_ID::END_FONT_SIZE: - return 12.0; - case P_ID::BEGIN_FONT_BOLD: - case P_ID::BEGIN_FONT_ITALIC: - case P_ID::BEGIN_FONT_UNDERLINE: - case P_ID::CONTINUE_FONT_BOLD: - case P_ID::CONTINUE_FONT_ITALIC: - case P_ID::CONTINUE_FONT_UNDERLINE: - case P_ID::END_FONT_BOLD: - case P_ID::END_FONT_ITALIC: - case P_ID::END_FONT_UNDERLINE: - return false; - case P_ID::BEGIN_TEXT_OFFSET: - case P_ID::CONTINUE_TEXT_OFFSET: - case P_ID::END_TEXT_OFFSET: - return QPointF(); - case P_ID::BEGIN_TEXT_ALIGN: - case P_ID::CONTINUE_TEXT_ALIGN: - case P_ID::END_TEXT_ALIGN: - return QVariant::fromValue(Align::VCENTER); - case P_ID::LINE_VISIBLE: - return true; - default: - return SLine::propertyDefault(id); - } - } } diff --git a/libmscore/textlinebase.h b/libmscore/textlinebase.h index c1aebcbdd82f8..c7155037438e4 100644 --- a/libmscore/textlinebase.h +++ b/libmscore/textlinebase.h @@ -71,8 +71,8 @@ class TextLineBase : public SLine { enum class LineType : char { CRESCENDO, DECRESCENDO }; M_PROPERTY(bool, lineVisible, setLineVisible) - M_PROPERTY(HookType, beginHookType, setBeginHookType) - M_PROPERTY(HookType, endHookType, setEndHookType) + M_PROPERTY2(HookType, beginHookType, setBeginHookType, HookType::NONE) + M_PROPERTY2(HookType, endHookType, setEndHookType, HookType::NONE) M_PROPERTY(Spatium, beginHookHeight, setBeginHookHeight) M_PROPERTY(Spatium, endHookHeight, setEndHookHeight) @@ -110,9 +110,7 @@ class TextLineBase : public SLine { friend class TextLineBaseSegment; public: - TextLineBase(Score* s); - TextLineBase(const TextLineBase&); - void init(); + TextLineBase(Score* s, ElementFlags = ElementFlag::NOTHING); virtual void write(XmlWriter& xml) const override; virtual void read(XmlReader&) override; @@ -124,7 +122,6 @@ class TextLineBase : public SLine { virtual QVariant getProperty(P_ID id) const override; virtual bool setProperty(P_ID propertyId, const QVariant&) override; - virtual QVariant propertyDefault(P_ID id) const override; }; } // namespace Ms diff --git a/libmscore/tuplet.cpp b/libmscore/tuplet.cpp index 385b5755f6372..247f03da0f22f 100644 --- a/libmscore/tuplet.cpp +++ b/libmscore/tuplet.cpp @@ -26,25 +26,18 @@ namespace Ms { -constexpr std::array Tuplet::_styledProperties; - //--------------------------------------------------------- // Tuplet //--------------------------------------------------------- Tuplet::Tuplet(Score* s) - : DurationElement(s) + : DurationElement(s, ElementFlag::MOVABLE | ElementFlag::SELECTABLE) { - setFlags(ElementFlag::MOVABLE | ElementFlag::SELECTABLE); - - resetProperty(P_ID::DIRECTION); - resetProperty(P_ID::NUMBER_TYPE); - resetProperty(P_ID::BRACKET_TYPE); - resetProperty(P_ID::LINE_WIDTH); _ratio = Fraction(1, 1); _number = 0; _hasBracket = false; _isUp = true; + initSubStyle(SubStyleId::TUPLET); } Tuplet::Tuplet(const Tuplet& t) @@ -54,14 +47,11 @@ Tuplet::Tuplet(const Tuplet& t) _hasBracket = t._hasBracket; _ratio = t._ratio; _baseLen = t._baseLen; - _direction = t._direction; _numberType = t._numberType; _bracketType = t._bracketType; _bracketWidth = t._bracketWidth; - *_propertyFlagsList = *t._propertyFlagsList; - _isUp = t._isUp; p1 = t.p1; @@ -118,10 +108,13 @@ void Tuplet::layout() if (staff() && staff()->isTabStaff(tick()) && staff()->staffType(tick())->slashStyle()) return; + // + // create tuplet number if necessary + // qreal _spatium = spatium(); if (_numberType != TupletNumberType::NO_TEXT) { if (_number == 0) { - _number = new Text(SubStyleId::TUPLET, score()); + _number = new Text(score()); _number->setTrack(track()); _number->setParent(this); _number->setVisible(visible()); @@ -161,6 +154,10 @@ void Tuplet::layout() else _isUp = _direction == Direction::UP; + // + // find first and last chord of tuplet + // (tuplets can be nested) + // const DurationElement* cr1 = _elements.front(); while (cr1->isTuplet()) { const Tuplet* t = toTuplet(cr1); @@ -181,7 +178,7 @@ void Tuplet::layout() // if (_bracketType == TupletBracketType::AUTO_BRACKET) { _hasBracket = false; - foreach (DurationElement* e, _elements) { + for (DurationElement* e : _elements) { if (e->isTuplet() || e->isRest()) { _hasBracket = true; break; @@ -205,14 +202,14 @@ void Tuplet::layout() // // calculate bracket start and end point p1 p2 // - qreal maxSlope = score()->styleD(StyleIdx::tupletMaxSlope); - bool outOfStaff = score()->styleB(StyleIdx::tupletOufOfStaff); + qreal maxSlope = score()->styleD(StyleIdx::tupletMaxSlope); + bool outOfStaff = score()->styleB(StyleIdx::tupletOufOfStaff); qreal vHeadDistance = score()->styleP(StyleIdx::tupletVHeadDistance); qreal vStemDistance = score()->styleP(StyleIdx::tupletVStemDistance); - qreal stemLeft = score()->styleP(StyleIdx::tupletStemLeftDistance); - qreal stemRight = score()->styleP(StyleIdx::tupletStemRightDistance); - qreal noteLeft = score()->styleP(StyleIdx::tupletNoteLeftDistance); - qreal noteRight = score()->styleP(StyleIdx::tupletNoteRightDistance); + qreal stemLeft = score()->styleP(StyleIdx::tupletStemLeftDistance); + qreal stemRight = score()->styleP(StyleIdx::tupletStemRightDistance); + qreal noteLeft = score()->styleP(StyleIdx::tupletNoteLeftDistance); + qreal noteRight = score()->styleP(StyleIdx::tupletNoteRightDistance); int move = 0; if (outOfStaff && cr1->isChordRest() && cr2->isChordRest()) { @@ -224,7 +221,7 @@ void Tuplet::layout() outOfStaff = false; } - qreal l1 = _spatium; // bracket tip height + qreal l1 = _spatium; // bracket tip height TODO: create style value qreal l2l = vHeadDistance; // left bracket vertical distance qreal l2r = vHeadDistance; // right bracket vertical distance right @@ -390,12 +387,14 @@ void Tuplet::layout() if (stem && !chord2->up()) { // if (chord2->beam()) // p2.setX(stem->abbox().x()); +#if 0 // TODO-ws beam bbox not available at this point if (followBeam) p2.ry() = stem->abbox().bottom() + beamAdjust; if (chord2->beam()) p2.ry() = chord2->beam()->abbox().bottom(); else p2.ry() = stem->abbox().bottom(); +#endif l2r = vStemDistance; } else { @@ -481,6 +480,8 @@ void Tuplet::layout() p1.ry() -= l2l * (_isUp ? 1.0 : -1.0); p2.ry() -= l2r * (_isUp ? 1.0 : -1.0); + // l2l l2r, mp, _p1, _p2 const + // center number qreal x3 = 0.0; qreal numberWidth = 0.0; @@ -556,6 +557,8 @@ void Tuplet::layout() } } } + + // collect bounding box QRectF r; if (_number) { r |= _number->bbox().translated(_number->pos()); @@ -655,9 +658,9 @@ Shape Tuplet::shape() const void Tuplet::scanElements(void* data, void (*func)(void*, Element*), bool all) { - func(data, this); if (_number && all) func(data, _number); + func(data, this); } //--------------------------------------------------------- @@ -729,7 +732,7 @@ bool Tuplet::readProperties(XmlReader& e) else if (tag == "baseNote") _baseLen = TDuration(e.readElementText()); else if (tag == "Number") { - _number = new Text(SubStyleId::TUPLET, score()); + _number = new Text(score()); _number->setParent(this); _number->read(e); _number->setVisible(visible()); //?? override saved property @@ -759,9 +762,9 @@ void Tuplet::add(Element* e) #endif switch (e->type()) { - case ElementType::TEXT: - _number = toText(e); - break; +// case ElementType::TEXT: +// _number = toText(e); +// break; case ElementType::CHORD: case ElementType::REST: case ElementType::TUPLET: { @@ -796,10 +799,10 @@ void Tuplet::add(Element* e) void Tuplet::remove(Element* e) { switch (e->type()) { - case ElementType::TEXT: - if (e == _number) - _number = 0; - break; +// case ElementType::TEXT: +// if (e == _number) +// _number = 0; +// break; case ElementType::CHORD: case ElementType::REST: case ElementType::TUPLET: { @@ -869,8 +872,8 @@ void Tuplet::updateGrips(EditData& ed) const void Tuplet::reset() { - for (auto k : _styledProperties) - undoResetProperty(k.propertyIdx); +//TODO-ws for (auto k : _styledProperties) +// undoResetProperty(k.propertyIdx); score()->addRefresh(canvasBoundingRect()); @@ -1027,10 +1030,6 @@ bool Tuplet::setProperty(P_ID propertyId, const QVariant& v) QVariant Tuplet::propertyDefault(P_ID id) const { - for (auto k : _styledProperties) { - if (k.propertyIdx == id) - return score()->styleV(k.styleIdx); - } switch(id) { case P_ID::NORMAL_NOTES: case P_ID::ACTUAL_NOTES: @@ -1043,20 +1042,6 @@ QVariant Tuplet::propertyDefault(P_ID id) const } } -//--------------------------------------------------------- -// styleChanged -// reset all styled values to actual style -//--------------------------------------------------------- - -void Tuplet::styleChanged() - { - ScoreElement::styleChanged(); - if (!_elements.empty()) { - _elements.front()->triggerLayout(); - _elements.back()->triggerLayout(); - } - } - //--------------------------------------------------------- // sanitizeTuplet /// Check validity of tuplets and coherence between duration diff --git a/libmscore/tuplet.h b/libmscore/tuplet.h index 154a27cbed347..73905b3b731f5 100644 --- a/libmscore/tuplet.h +++ b/libmscore/tuplet.h @@ -23,7 +23,6 @@ class Spanner; enum class TupletNumberType : char; enum class TupletBracketType : char; - //------------------------------------------------------------------------ // @@ Tuplet //! Example of 1/8 triplet: @@ -59,37 +58,6 @@ class Tuplet final : public DurationElement { QPointF bracketL[4]; QPointF bracketR[3]; - static constexpr std::array _styledProperties {{ - { StyleIdx::tupletDirection, P_ID::DIRECTION }, - { StyleIdx::tupletNumberType, P_ID::NUMBER_TYPE }, - { StyleIdx::tupletBracketType, P_ID::BRACKET_TYPE }, - { StyleIdx::tupletFontFace, P_ID::FONT_FACE }, - { StyleIdx::tupletFontSize, P_ID::FONT_SIZE }, - { StyleIdx::tupletFontBold, P_ID::FONT_BOLD }, - { StyleIdx::tupletFontItalic, P_ID::FONT_ITALIC }, - { StyleIdx::tupletFontUnderline, P_ID::FONT_UNDERLINE }, - { StyleIdx::tupletAlign, P_ID::ALIGN }, - { StyleIdx::tupletBracketWidth, P_ID::LINE_WIDTH }, - { StyleIdx::NOSTYLE, P_ID::END } // end of list marker - }}; - - PropertyFlags _propertyFlagsList[10] = { - PropertyFlags::STYLED, - PropertyFlags::STYLED, - PropertyFlags::STYLED, - PropertyFlags::STYLED, - PropertyFlags::STYLED, - PropertyFlags::STYLED, - PropertyFlags::STYLED, - PropertyFlags::STYLED, - PropertyFlags::STYLED, - PropertyFlags::STYLED, - }; - - protected: - virtual const StyledProperty* styledProperties() const override { return _styledProperties.data(); } - virtual PropertyFlags* propertyFlagsList() override { return _propertyFlagsList; } - public: Tuplet(Score*); Tuplet(const Tuplet&); @@ -101,6 +69,8 @@ class Tuplet final : public DurationElement { virtual void add(Element*) override; virtual void remove(Element*) override; + Text* number() const { return _number; } + virtual bool isEditable() const override; virtual void startEdit(EditData&) override; virtual void editDrag(EditData&) override; @@ -127,7 +97,6 @@ class Tuplet final : public DurationElement { virtual void layout() override; virtual void scanElements(void* data, void (*func)(void*, Element*), bool all=true) override; - Text* number() const { return _number; } virtual void read(XmlReader&) override; virtual void write(XmlWriter&) const override; @@ -153,12 +122,12 @@ class Tuplet final : public DurationElement { void sortElements(); virtual void setVisible(bool f) override; + virtual QVariant getProperty(P_ID propertyId) const override; virtual bool setProperty(P_ID propertyId, const QVariant& v) override; virtual QVariant propertyDefault(P_ID id) const override; - virtual void styleChanged() override; - virtual Shape shape() const; + virtual Shape shape() const override; void sanitizeTuplet(); }; diff --git a/libmscore/volta.cpp b/libmscore/volta.cpp index d35ca272e4a2a..def84f24cfd2d 100644 --- a/libmscore/volta.cpp +++ b/libmscore/volta.cpp @@ -49,14 +49,18 @@ void VoltaSegment::layout() QVariant VoltaSegment::getProperty(P_ID id) const { switch (id) { + case P_ID::BEGIN_HOOK_TYPE: + case P_ID::END_HOOK_TYPE: case P_ID::VOLTA_ENDING: - case P_ID::LINE_WIDTH: - case P_ID::LINE_STYLE: - case P_ID::BEGIN_TEXT_OFFSET: - return volta()->getProperty(id); + return spanner()->getProperty(id); default: - return TextLineBaseSegment::getProperty(id); + break; + } + for (const StyledProperty* spp = spanner()->styledProperties(); spp->styleIdx != StyleIdx::NOSTYLE; ++spp) { + if (spp->propertyIdx == id) + return spanner()->getProperty(id); } + return TextLineBaseSegment::getProperty(id); } //--------------------------------------------------------- @@ -66,14 +70,18 @@ QVariant VoltaSegment::getProperty(P_ID id) const bool VoltaSegment::setProperty(P_ID id, const QVariant& v) { switch (id) { + case P_ID::BEGIN_HOOK_TYPE: + case P_ID::END_HOOK_TYPE: case P_ID::VOLTA_ENDING: - case P_ID::LINE_WIDTH: - case P_ID::LINE_STYLE: - case P_ID::BEGIN_TEXT_OFFSET: - return volta()->setProperty(id, v); + return spanner()->setProperty(id, v); default: - return TextLineBaseSegment::setProperty(id, v); + break; } + for (const StyledProperty* spp = spanner()->styledProperties(); spp->styleIdx != StyleIdx::NOSTYLE; ++spp) { + if (spp->propertyIdx == id) + return spanner()->setProperty(id, v); + } + return TextLineBaseSegment::setProperty(id, v); } //--------------------------------------------------------- @@ -83,86 +91,18 @@ bool VoltaSegment::setProperty(P_ID id, const QVariant& v) QVariant VoltaSegment::propertyDefault(P_ID id) const { switch (id) { - case P_ID::LINE_WIDTH: - case P_ID::LINE_STYLE: - case P_ID::BEGIN_TEXT_PLACE: - case P_ID::CONTINUE_TEXT_PLACE: - case P_ID::ANCHOR: -// case P_ID::BEGIN_HOOK: - case P_ID::BEGIN_HOOK_HEIGHT: - case P_ID::END_HOOK_HEIGHT: + case P_ID::BEGIN_HOOK_TYPE: + case P_ID::END_HOOK_TYPE: case P_ID::VOLTA_ENDING: - case P_ID::BEGIN_TEXT_OFFSET: - case P_ID::BEGIN_FONT_BOLD: return volta()->propertyDefault(id); default: - return TextLineBaseSegment::propertyDefault(id); - } - } - -//--------------------------------------------------------- -// getPropertyStyle -//--------------------------------------------------------- - -StyleIdx VoltaSegment::getPropertyStyle(P_ID id) const - { - switch (id) { - case P_ID::LINE_WIDTH: - case P_ID::LINE_STYLE: - case P_ID::BEGIN_FONT_FACE: - case P_ID::BEGIN_FONT_SIZE: - case P_ID::BEGIN_FONT_BOLD: - case P_ID::BEGIN_FONT_ITALIC: - case P_ID::BEGIN_FONT_UNDERLINE: - case P_ID::BEGIN_TEXT_ALIGN: - case P_ID::BEGIN_TEXT_OFFSET: - return volta()->getPropertyStyle(id); - - default: - return TextLineBaseSegment::getPropertyStyle(id); + break; } - } - -//--------------------------------------------------------- -// propertyFlags -//--------------------------------------------------------- - -PropertyFlags& VoltaSegment::propertyFlags(P_ID id) - { - switch (id) { - case P_ID::LINE_WIDTH: - case P_ID::LINE_STYLE: - case P_ID::LINE_COLOR: - return volta()->propertyFlags(id); - - default: - return TextLineBaseSegment::propertyFlags(id); + for (const StyledProperty* spp = spanner()->styledProperties(); spp->styleIdx != StyleIdx::NOSTYLE; ++spp) { + if (spp->propertyIdx == id) + return spanner()->propertyDefault(id); } - } - -//--------------------------------------------------------- -// resetProperty -//--------------------------------------------------------- - -void VoltaSegment::resetProperty(P_ID id) - { - switch (id) { - case P_ID::VOLTA_ENDING: - case P_ID::LINE_WIDTH: - return volta()->resetProperty(id); - - default: - return TextLineBaseSegment::resetProperty(id); - } - } - -//--------------------------------------------------------- -// styleChanged -//--------------------------------------------------------- - -void VoltaSegment::styleChanged() - { - volta()->styleChanged(); + return TextLineBaseSegment::propertyDefault(id); } //--------------------------------------------------------- @@ -172,11 +112,20 @@ void VoltaSegment::styleChanged() Volta::Volta(Score* s) : TextLineBase(s) { - init(); + initSubStyle(SubStyleId::VOLTA); + setBeginTextPlace(PlaceText::BELOW); setContinueTextPlace(PlaceText::BELOW); + setLineVisible(true); + resetProperty(P_ID::BEGIN_TEXT); + resetProperty(P_ID::CONTINUE_TEXT); + resetProperty(P_ID::END_TEXT); + resetProperty(P_ID::BEGIN_TEXT_PLACE); + resetProperty(P_ID::CONTINUE_TEXT_PLACE); + resetProperty(P_ID::END_TEXT_PLACE); + resetProperty(P_ID::BEGIN_HOOK_TYPE); + resetProperty(P_ID::END_HOOK_TYPE); - setBeginHookType(HookType::HOOK_90); setAnchor(Anchor::MEASURE); } @@ -316,45 +265,28 @@ bool Volta::setProperty(P_ID propertyId, const QVariant& val) QVariant Volta::propertyDefault(P_ID propertyId) const { switch (propertyId) { - case P_ID::LINE_WIDTH: - return score()->styleV(StyleIdx::voltaLineWidth); - - case P_ID::LINE_STYLE: - return score()->styleV(StyleIdx::voltaLineStyle); - - case P_ID::BEGIN_FONT_BOLD: - return score()->styleV(StyleIdx::voltaFontBold); - - case P_ID::BEGIN_FONT_SIZE: - return score()->styleV(StyleIdx::voltaFontSize); - case P_ID::VOLTA_ENDING: return QVariant::fromValue(QList()); - - case P_ID::BEGIN_TEXT_PLACE: - case P_ID::CONTINUE_TEXT_PLACE: - return int(PlaceText::BELOW); - case P_ID::ANCHOR: return int(Anchor::MEASURE); - case P_ID::BEGIN_HOOK_TYPE: return int(HookType::HOOK_90); - - case P_ID::BEGIN_TEXT_OFFSET: - return QPointF(0.5, 1.9); - - case P_ID::BEGIN_TEXT_ALIGN: - return QVariant::fromValue(Align::BASELINE); - - case P_ID::BEGIN_HOOK_HEIGHT: - case P_ID::END_HOOK_HEIGHT: - return score()->styleV(StyleIdx::voltaHook); + case P_ID::END_HOOK_TYPE: + return int(HookType::NONE); + case P_ID::BEGIN_TEXT: + case P_ID::CONTINUE_TEXT: + case P_ID::END_TEXT: + return ""; + case P_ID::LINE_VISIBLE: + return true; + case P_ID::BEGIN_TEXT_PLACE: + case P_ID::CONTINUE_TEXT_PLACE: + case P_ID::END_TEXT_PLACE: + return int(PlaceText::ABOVE); default: return TextLineBase::propertyDefault(propertyId); } - return QVariant(); } //--------------------------------------------------------- @@ -366,37 +298,6 @@ QString Volta::accessibleInfo() const return QString("%1: %2").arg(Element::accessibleInfo()).arg(text()); } -//--------------------------------------------------------- -// getPropertyStyle -//--------------------------------------------------------- - -StyleIdx Volta::getPropertyStyle(P_ID id) const - { - switch (id) { - case P_ID::LINE_WIDTH: - return StyleIdx::voltaLineWidth; - case P_ID::LINE_STYLE: - return StyleIdx::voltaLineStyle; - case P_ID::BEGIN_FONT_FACE: - return StyleIdx::voltaFontFace; - case P_ID::BEGIN_FONT_SIZE: - return StyleIdx::voltaFontSize; - case P_ID::BEGIN_FONT_BOLD: - return StyleIdx::voltaFontBold; - case P_ID::BEGIN_FONT_ITALIC: - return StyleIdx::voltaFontItalic; - case P_ID::BEGIN_FONT_UNDERLINE: - return StyleIdx::voltaFontUnderline; - case P_ID::BEGIN_TEXT_ALIGN: - return StyleIdx::voltaAlign; - case P_ID::BEGIN_TEXT_OFFSET: - return StyleIdx::voltaOffset; - default: - break; - } - return TextLineBase::getPropertyStyle(id); - } - //--------------------------------------------------------- // setVoltaType // deprecated diff --git a/libmscore/volta.h b/libmscore/volta.h index 0b0c398853d6e..484b3dd5cbbd6 100644 --- a/libmscore/volta.h +++ b/libmscore/volta.h @@ -40,10 +40,6 @@ class VoltaSegment final : public TextLineBaseSegment { virtual QVariant getProperty(P_ID propertyId) const override; virtual bool setProperty(P_ID propertyId, const QVariant&) override; virtual QVariant propertyDefault(P_ID) const override; - virtual PropertyFlags& propertyFlags(P_ID) override; - virtual StyleIdx getPropertyStyle(P_ID) const override; - virtual void resetProperty(P_ID id) override; - virtual void styleChanged() override; }; //--------------------------------------------------------- @@ -81,7 +77,6 @@ class Volta final : public TextLineBase { virtual QVariant getProperty(P_ID propertyId) const override; virtual bool setProperty(P_ID propertyId, const QVariant&) override; virtual QVariant propertyDefault(P_ID) const override; - virtual StyleIdx getPropertyStyle(P_ID) const override; virtual bool systemFlag() const override { return true; } virtual QString accessibleInfo() const override; diff --git a/mscore/importgtp.cpp b/mscore/importgtp.cpp index ebbc9fb73bc0c..064f714dda38b 100644 --- a/mscore/importgtp.cpp +++ b/mscore/importgtp.cpp @@ -1279,7 +1279,6 @@ void GuitarPro::setTempo(int tempo, Measure* measure) tt->setXmlText(QString("metNoteQuarterUp = %1").arg(tempo)); tt->setTrack(0); -qDebug("%p setTempo %d annotations %d", tt, measure->tick(), segment->annotations().size()); segment->add(tt); score->setTempo(measure->tick(), tt->tempo()); previousTempo = tempo; diff --git a/mscore/palette.cpp b/mscore/palette.cpp index 4f418e42626de..50a0dc79d4aa8 100644 --- a/mscore/palette.cpp +++ b/mscore/palette.cpp @@ -407,6 +407,7 @@ static void applyDrop(Score* score, ScoreView* viewer, Element* target, Element* // use same code path as drag&drop QByteArray a = e->mimeData(QPointF()); + XmlReader e(a); Fraction duration; // dummy QPointF dragOffset; @@ -428,6 +429,7 @@ static void applyDrop(Score* score, ScoreView* viewer, Element* target, Element* void Palette::applyPaletteElement(PaletteCell* cell) { +printf("applyPaletteElement\n"); Score* score = mscore->currentScore(); if (score == 0) return; @@ -487,7 +489,7 @@ void Palette::applyPaletteElement(PaletteCell* cell) else if (element->isSlur() && addSingle) { viewer->addSlur(); } - else if (element->isSLine() && element->type() != ElementType::GLISSANDO && addSingle) { + else if (element->isSLine() && !element->isGlissando() && addSingle) { Segment* startSegment = cr1->segment(); Segment* endSegment = cr2->segment(); if (element->type() == ElementType::PEDAL && cr2 != cr1) @@ -496,6 +498,7 @@ void Palette::applyPaletteElement(PaletteCell* cell) int idx = cr1->staffIdx(); QByteArray a = element->mimeData(QPointF()); +printf("<<%s>>\n", a.data()); XmlReader e(a); Fraction duration; // dummy QPointF dragOffset; diff --git a/mscore/scoreview.cpp b/mscore/scoreview.cpp index 8733e1f6acf7d..7939feef58d88 100644 --- a/mscore/scoreview.cpp +++ b/mscore/scoreview.cpp @@ -265,7 +265,7 @@ ScoreView::~ScoreView() void ScoreView::objectPopup(const QPoint& pos, Element* obj) { // show tuplet properties if number is clicked: - if (obj->type() == ElementType::TEXT && obj->parent() && obj->parent()->type() == ElementType::TUPLET) { + if (obj->isText() && obj->parent() && obj->parent()->isTuplet()) { obj = obj->parent(); if (!obj->selected()) obj->score()->select(obj, SelectType::SINGLE, 0); @@ -4179,9 +4179,9 @@ Element* ScoreView::elementNear(QPointF p) } qSort(ll.begin(), ll.end(), elementLower); -#if 0 +#if 1 qDebug("elementNear"); - foreach(const Element* e, ll) + for (const Element* e : ll) qDebug(" %s selected %d z %d", e->name(), e->selected(), e->z()); #endif Element* e = ll.at(0); diff --git a/mtest/capella/io/testTuplet1.capx-ref.mscx b/mtest/capella/io/testTuplet1.capx-ref.mscx index d4485b5eca536..258fe0ddc3974 100644 --- a/mtest/capella/io/testTuplet1.capx-ref.mscx +++ b/mtest/capella/io/testTuplet1.capx-ref.mscx @@ -66,7 +66,6 @@ 3 eighth - 3 @@ -121,7 +120,6 @@ 3 eighth - 3 diff --git a/mtest/capella/io/testTuplet2.cap-ref.mscx b/mtest/capella/io/testTuplet2.cap-ref.mscx index 5976d249247bb..cda639fd1db0a 100644 --- a/mtest/capella/io/testTuplet2.cap-ref.mscx +++ b/mtest/capella/io/testTuplet2.cap-ref.mscx @@ -66,7 +66,6 @@ 3 eighth - 3 @@ -143,7 +142,6 @@ 5 eighth - 5 @@ -224,7 +222,6 @@ 7 16th - 7 @@ -337,7 +334,6 @@ 9 16th - 9 @@ -463,7 +459,6 @@ 6 16th - 6 @@ -557,7 +552,6 @@ 2 eighth - 2 @@ -627,7 +621,6 @@ 4 16th - 4 @@ -724,7 +717,6 @@ 8 16th - 8 @@ -842,7 +834,6 @@ 10 16th - 10 @@ -978,7 +969,6 @@ 14 16th - 14 @@ -1200,7 +1190,6 @@ 11 16th - 11 @@ -1343,7 +1332,6 @@ 12 16th - 12 @@ -1491,7 +1479,6 @@ 13 16th - 13 @@ -1679,7 +1666,6 @@ 15 16th - 15 diff --git a/mtest/capella/io/testTuplet2.capx-ref.mscx b/mtest/capella/io/testTuplet2.capx-ref.mscx index 1c0dcb3a058b0..7dc724e6c2f7a 100644 --- a/mtest/capella/io/testTuplet2.capx-ref.mscx +++ b/mtest/capella/io/testTuplet2.capx-ref.mscx @@ -66,7 +66,6 @@ 3 eighth - 3 @@ -143,7 +142,6 @@ 5 eighth - 5 @@ -224,7 +222,6 @@ 7 16th - 7 @@ -337,7 +334,6 @@ 9 16th - 9 @@ -463,7 +459,6 @@ 6 16th - 6 @@ -557,7 +552,6 @@ 2 eighth - 2 @@ -627,7 +621,6 @@ 4 16th - 4 @@ -724,7 +717,6 @@ 8 16th - 8 @@ -842,7 +834,6 @@ 10 16th - 10 @@ -978,7 +969,6 @@ 14 16th - 14 @@ -1200,7 +1190,6 @@ 11 16th - 11 @@ -1343,7 +1332,6 @@ 12 16th - 12 @@ -1491,7 +1479,6 @@ 13 16th - 13 @@ -1679,7 +1666,6 @@ 15 16th - 15 diff --git a/mtest/guitarpro/dotted-tuplets.gp5-ref.mscx b/mtest/guitarpro/dotted-tuplets.gp5-ref.mscx index f9040cb70b53f..6d057fe489512 100644 --- a/mtest/guitarpro/dotted-tuplets.gp5-ref.mscx +++ b/mtest/guitarpro/dotted-tuplets.gp5-ref.mscx @@ -93,7 +93,6 @@ 3 eighth - 3 @@ -267,7 +266,6 @@ 3 eighth - 3 @@ -355,7 +353,6 @@ 3 eighth - 3 diff --git a/mtest/guitarpro/testIrrTuplet.gp4-ref.mscx b/mtest/guitarpro/testIrrTuplet.gp4-ref.mscx index 3d6c2bd13bfa1..bb166ef576a73 100644 --- a/mtest/guitarpro/testIrrTuplet.gp4-ref.mscx +++ b/mtest/guitarpro/testIrrTuplet.gp4-ref.mscx @@ -89,7 +89,6 @@ 3 eighth - 3 @@ -268,7 +267,6 @@ 3 eighth - 3 @@ -361,7 +359,6 @@ 3 eighth - 3 diff --git a/mtest/guitarpro/tuplets.gpx-ref.mscx b/mtest/guitarpro/tuplets.gpx-ref.mscx index f726898748fbb..61aa0dd4b54c2 100644 --- a/mtest/guitarpro/tuplets.gpx-ref.mscx +++ b/mtest/guitarpro/tuplets.gpx-ref.mscx @@ -124,7 +124,6 @@ 3 eighth - 3 @@ -177,7 +176,6 @@ 5 eighth - 5 @@ -287,7 +285,6 @@ 15 16th - 15:8 @@ -699,7 +696,6 @@ 3 eighth - 3 @@ -752,7 +748,6 @@ 5 eighth - 5 @@ -862,7 +857,6 @@ 15 16th - 15:8 @@ -1147,7 +1141,6 @@ 3 eighth - 3 @@ -1200,7 +1193,6 @@ 5 eighth - 5 @@ -1310,7 +1302,6 @@ 15 16th - 15:8 diff --git a/mtest/guitarpro/tuplets2.gpx-ref.mscx b/mtest/guitarpro/tuplets2.gpx-ref.mscx index ae8b5c97f8317..b0e0c89569a0b 100644 --- a/mtest/guitarpro/tuplets2.gpx-ref.mscx +++ b/mtest/guitarpro/tuplets2.gpx-ref.mscx @@ -310,7 +310,6 @@ solo concert eighth 1 - 3 @@ -383,7 +382,6 @@ solo concert eighth 1 - 3 @@ -455,7 +453,6 @@ solo concert eighth 1 - 3 @@ -1051,7 +1048,6 @@ solo concert eighth 1 - 3 @@ -1124,7 +1120,6 @@ solo concert eighth 1 - 3 @@ -1196,7 +1191,6 @@ solo concert eighth 1 - 3 @@ -1649,7 +1643,6 @@ solo concert eighth 5 - 3 @@ -1722,7 +1715,6 @@ solo concert eighth 5 - 3 @@ -1790,7 +1782,6 @@ solo concert eighth 5 - 3 diff --git a/mtest/guitarpro/volta.gp5-ref.mscx b/mtest/guitarpro/volta.gp5-ref.mscx index 3b706abcb865a..45b7aec6ca23e 100644 --- a/mtest/guitarpro/volta.gp5-ref.mscx +++ b/mtest/guitarpro/volta.gp5-ref.mscx @@ -98,7 +98,6 @@ 3 eighth - 3 @@ -151,7 +150,6 @@ 3 eighth - 3 @@ -204,7 +202,6 @@ 3 eighth - 3 @@ -274,7 +271,6 @@ 3 eighth - 3 @@ -330,7 +326,6 @@ 3 eighth - 3 @@ -383,7 +378,6 @@ 3 eighth - 3 @@ -456,7 +450,6 @@ 3 eighth - 3 @@ -509,7 +502,6 @@ 3 eighth - 3 @@ -562,7 +554,6 @@ 3 eighth - 3 @@ -632,7 +623,6 @@ 3 eighth - 3 @@ -685,7 +675,6 @@ 3 eighth - 3 @@ -738,7 +727,6 @@ 3 eighth - 3 @@ -808,7 +796,6 @@ 3 eighth - 3 @@ -861,7 +848,6 @@ 3 eighth - 3 @@ -917,7 +903,6 @@ 3 eighth - 3 @@ -987,7 +972,6 @@ 3 eighth - 3 @@ -1043,7 +1027,6 @@ 3 eighth - 3 @@ -1096,7 +1079,6 @@ 3 eighth - 3 @@ -1388,7 +1370,6 @@ 3 eighth - 3 @@ -1441,7 +1422,6 @@ 3 eighth - 3 @@ -1494,7 +1474,6 @@ 3 eighth - 3 @@ -1564,7 +1543,6 @@ 3 eighth - 3 @@ -1620,7 +1598,6 @@ 3 eighth - 3 @@ -1673,7 +1650,6 @@ 3 eighth - 3 @@ -1746,7 +1722,6 @@ 3 eighth - 3 @@ -1799,7 +1774,6 @@ 3 eighth - 3 @@ -1852,7 +1826,6 @@ 3 eighth - 3 @@ -1922,7 +1895,6 @@ 3 eighth - 3 @@ -1975,7 +1947,6 @@ 3 eighth - 3 @@ -2028,7 +1999,6 @@ 3 eighth - 3 @@ -2098,7 +2068,6 @@ 3 eighth - 3 @@ -2151,7 +2120,6 @@ 3 eighth - 3 @@ -2207,7 +2175,6 @@ 3 eighth - 3 @@ -2277,7 +2244,6 @@ 3 eighth - 3 @@ -2333,7 +2299,6 @@ 3 eighth - 3 @@ -2386,7 +2351,6 @@ 3 eighth - 3 @@ -2577,7 +2541,6 @@ 3 eighth - 3 @@ -2630,7 +2593,6 @@ 3 eighth - 3 @@ -2683,7 +2645,6 @@ 3 eighth - 3 @@ -2753,7 +2714,6 @@ 3 eighth - 3 @@ -2806,7 +2766,6 @@ 3 eighth - 3 @@ -2859,7 +2818,6 @@ 3 eighth - 3 @@ -2929,7 +2887,6 @@ 3 eighth - 3 @@ -2982,7 +2939,6 @@ 3 eighth - 3 @@ -3035,7 +2991,6 @@ 3 eighth - 3 @@ -3105,7 +3060,6 @@ 3 eighth - 3 @@ -3158,7 +3112,6 @@ 3 eighth - 3 @@ -3211,7 +3164,6 @@ 3 eighth - 3 @@ -3281,7 +3233,6 @@ 3 eighth - 3 @@ -3334,7 +3285,6 @@ 3 eighth - 3 @@ -3387,7 +3337,6 @@ 3 eighth - 3 @@ -3457,7 +3406,6 @@ 3 eighth - 3 @@ -3510,7 +3458,6 @@ 3 eighth - 3 @@ -3563,7 +3510,6 @@ 3 eighth - 3 diff --git a/mtest/libmscore/compat206/textstyles-ref.mscx b/mtest/libmscore/compat206/textstyles-ref.mscx index 31b04c0cc9b56..b7cc7b8aebbcc 100644 --- a/mtest/libmscore/compat206/textstyles-ref.mscx +++ b/mtest/libmscore/compat206/textstyles-ref.mscx @@ -24,7 +24,9 @@ 0.16 1.2 0.25 + MuseJazz Text 0 + MuseJazz Text 0 0 jazz @@ -35,6 +37,10 @@ $C$p -6 + MuseJazz Text + 10 + 1 + MuseJazz Text MuseJazz Text 28 1 @@ -68,7 +74,6 @@ MuseJazz Text MuseJazz Text MuseJazz Text - MuseJazz Text MuseJazz Text 11 @@ -89,11 +94,6 @@ MuseJazz Text 10 MuseJazz Text - MuseJazz Text - 10 - 1 - MuseJazz Text - MuseJazz Text MuseJazz Text MuseJazz Text MuseJazz Text @@ -422,7 +422,6 @@ 1 <sym>keyboardPedalPed</sym> - (<sym>keyboardPedalPed</sym>) quarter diff --git a/mtest/libmscore/compat206/tuplets-ref.mscx b/mtest/libmscore/compat206/tuplets-ref.mscx index 4febe58a680f6..b3dc6ce36bea6 100644 --- a/mtest/libmscore/compat206/tuplets-ref.mscx +++ b/mtest/libmscore/compat206/tuplets-ref.mscx @@ -101,7 +101,6 @@ 6 16th - 6:4 @@ -177,7 +176,6 @@ 10 eighth - 10:8 @@ -271,7 +269,6 @@ 3 eighth - 3 @@ -320,7 +317,6 @@ 3 16th - 3 @@ -363,7 +359,6 @@ 9 16th - 9 @@ -400,7 +395,6 @@ 6 64th - 6 @@ -521,7 +515,6 @@ 11 eighth - 11 @@ -542,7 +535,6 @@ 2 16th - 2 @@ -561,7 +553,6 @@ 3 32nd - 3 @@ -631,7 +622,6 @@ 5 32nd - 5 diff --git a/mtest/libmscore/copypaste/copypaste23-ref.mscx b/mtest/libmscore/copypaste/copypaste23-ref.mscx index 272f832e53ad3..97ceaba997fd6 100644 --- a/mtest/libmscore/copypaste/copypaste23-ref.mscx +++ b/mtest/libmscore/copypaste/copypaste23-ref.mscx @@ -88,7 +88,6 @@ 10 eighth - 10 @@ -145,7 +144,6 @@ 10 eighth - 10 diff --git a/mtest/libmscore/copypaste/copypaste24-ref.mscx b/mtest/libmscore/copypaste/copypaste24-ref.mscx index 10944147b3129..6a6130aa13d33 100644 --- a/mtest/libmscore/copypaste/copypaste24-ref.mscx +++ b/mtest/libmscore/copypaste/copypaste24-ref.mscx @@ -92,7 +92,6 @@ 8 16th - 8 @@ -195,7 +194,6 @@ 8 16th - 8 diff --git a/mtest/libmscore/exchangevoices/undoChangeVoice01-ref.mscx b/mtest/libmscore/exchangevoices/undoChangeVoice01-ref.mscx index 17e58a355f143..d789b4dee9d79 100644 --- a/mtest/libmscore/exchangevoices/undoChangeVoice01-ref.mscx +++ b/mtest/libmscore/exchangevoices/undoChangeVoice01-ref.mscx @@ -350,7 +350,6 @@ 3 quarter - 3 @@ -385,7 +384,6 @@ 3 quarter - 3 @@ -466,7 +464,6 @@ quarter 1 - 3 @@ -526,7 +523,6 @@ quarter 1 - 3 @@ -939,7 +935,6 @@ 3 quarter - 3 @@ -974,7 +969,6 @@ 3 quarter - 3 @@ -1055,7 +1049,6 @@ quarter 1 - 3 @@ -1115,7 +1108,6 @@ quarter 1 - 3 diff --git a/mtest/libmscore/exchangevoices/undoChangeVoice02-ref.mscx b/mtest/libmscore/exchangevoices/undoChangeVoice02-ref.mscx index 66fadb10636c6..7b1b3a81d9106 100644 --- a/mtest/libmscore/exchangevoices/undoChangeVoice02-ref.mscx +++ b/mtest/libmscore/exchangevoices/undoChangeVoice02-ref.mscx @@ -324,7 +324,6 @@ 3 quarter - 3 @@ -374,7 +373,6 @@ 3 quarter - 3 @@ -470,7 +468,6 @@ quarter 1 - 3 @@ -512,7 +509,6 @@ quarter 1 - 3 @@ -880,7 +876,6 @@ 3 quarter - 3 @@ -930,7 +925,6 @@ 3 quarter - 3 @@ -1026,7 +1020,6 @@ quarter 1 - 3 @@ -1068,7 +1061,6 @@ quarter 1 - 3 diff --git a/mtest/libmscore/implode_explode/undoExplode01-ref.mscx b/mtest/libmscore/implode_explode/undoExplode01-ref.mscx index ad6b5a5a250e5..0f91a0626303f 100644 --- a/mtest/libmscore/implode_explode/undoExplode01-ref.mscx +++ b/mtest/libmscore/implode_explode/undoExplode01-ref.mscx @@ -330,7 +330,6 @@ 3 eighth - 3 @@ -476,7 +475,6 @@ 3 eighth - 3 @@ -622,7 +620,6 @@ 3 eighth - 3 @@ -768,7 +765,6 @@ 3 eighth - 3 diff --git a/mtest/libmscore/implode_explode/undoExplode02-ref.mscx b/mtest/libmscore/implode_explode/undoExplode02-ref.mscx index 103ee7a0c6951..082e2ba95afd4 100644 --- a/mtest/libmscore/implode_explode/undoExplode02-ref.mscx +++ b/mtest/libmscore/implode_explode/undoExplode02-ref.mscx @@ -439,7 +439,6 @@ 3 eighth - 3 diff --git a/mtest/libmscore/implode_explode/undoImplode01-ref.mscx b/mtest/libmscore/implode_explode/undoImplode01-ref.mscx index 32c8bd032d0fd..8b062b2955cf1 100644 --- a/mtest/libmscore/implode_explode/undoImplode01-ref.mscx +++ b/mtest/libmscore/implode_explode/undoImplode01-ref.mscx @@ -184,7 +184,6 @@ 3 quarter - 3 @@ -232,7 +231,6 @@ quarter 1 - 3 @@ -287,7 +285,6 @@ quarter 2 - 3 @@ -534,7 +531,6 @@ 3 quarter - 3 @@ -639,7 +635,6 @@ 3 quarter - 3 diff --git a/mtest/libmscore/implode_explode/undoImplode02-ref.mscx b/mtest/libmscore/implode_explode/undoImplode02-ref.mscx index b6282658bd2a6..edf7d71fbe313 100644 --- a/mtest/libmscore/implode_explode/undoImplode02-ref.mscx +++ b/mtest/libmscore/implode_explode/undoImplode02-ref.mscx @@ -184,7 +184,6 @@ 3 quarter - 3 @@ -289,7 +288,6 @@ 3 quarter - 3 @@ -394,7 +392,6 @@ 3 quarter - 3 diff --git a/mtest/libmscore/implode_explode/undoImplodeVoice01-ref.mscx b/mtest/libmscore/implode_explode/undoImplodeVoice01-ref.mscx index f2b0cd91e9494..0f68a28b61485 100644 --- a/mtest/libmscore/implode_explode/undoImplodeVoice01-ref.mscx +++ b/mtest/libmscore/implode_explode/undoImplodeVoice01-ref.mscx @@ -96,7 +96,6 @@ 3 quarter - 3 diff --git a/mtest/libmscore/implode_explode/undoImplodeVoice02-ref.mscx b/mtest/libmscore/implode_explode/undoImplodeVoice02-ref.mscx index d226bbafc0543..3d80025985435 100644 --- a/mtest/libmscore/implode_explode/undoImplodeVoice02-ref.mscx +++ b/mtest/libmscore/implode_explode/undoImplodeVoice02-ref.mscx @@ -88,7 +88,6 @@ 3 quarter - 3 @@ -136,7 +135,6 @@ quarter 1 - 3 @@ -191,7 +189,6 @@ quarter 2 - 3 diff --git a/mtest/libmscore/rhythmicGrouping/groupArticulationsTies-ref.mscx b/mtest/libmscore/rhythmicGrouping/groupArticulationsTies-ref.mscx index e3ee111583f72..ceb80cb46fe5b 100644 --- a/mtest/libmscore/rhythmicGrouping/groupArticulationsTies-ref.mscx +++ b/mtest/libmscore/rhythmicGrouping/groupArticulationsTies-ref.mscx @@ -87,7 +87,6 @@ 3 eighth - 3 @@ -230,7 +229,6 @@ 3 eighth - 3 diff --git a/mtest/libmscore/rhythmicGrouping/updateReference b/mtest/libmscore/rhythmicGrouping/updateReference index 30a3d804820ae..f38cc5e80c70e 100755 --- a/mtest/libmscore/rhythmicGrouping/updateReference +++ b/mtest/libmscore/rhythmicGrouping/updateReference @@ -6,4 +6,5 @@ cp ../../../build.debug/mtest/libmscore/rhythmicGrouping/group8thsCompound.mscx cp ../../../build.debug/mtest/libmscore/rhythmicGrouping/groupSubbeats.mscx groupSubbeats-ref.mscx cp ../../../build.debug/mtest/libmscore/rhythmicGrouping/groupVoices.mscx groupVoices-ref.mscx cp ../../../build.debug/mtest/libmscore/rhythmicGrouping/groupConflicts.mscx groupConflicts-ref.mscx +cp ../../../build.debug/mtest/libmscore/rhythmicGrouping/groupArticulationsTies.mscx groupArticulationsTies-ref.mscx diff --git a/mtest/libmscore/timesig/timesig-02-ref.mscx b/mtest/libmscore/timesig/timesig-02-ref.mscx index 15b5d0f7c95f6..194de330417ff 100644 --- a/mtest/libmscore/timesig/timesig-02-ref.mscx +++ b/mtest/libmscore/timesig/timesig-02-ref.mscx @@ -89,7 +89,6 @@ 3 half - 3 diff --git a/mtest/libmscore/tuplet/split1-ref.mscx b/mtest/libmscore/tuplet/split1-ref.mscx index 1e90506c0aa95..65fbf0885134d 100644 --- a/mtest/libmscore/tuplet/split1-ref.mscx +++ b/mtest/libmscore/tuplet/split1-ref.mscx @@ -113,7 +113,6 @@ 3 eighth - 3 @@ -136,7 +135,6 @@ 3 16th - 3 @@ -172,7 +170,6 @@ 3 eighth - 3 @@ -183,7 +180,6 @@ 3 16th - 3 diff --git a/mtest/libmscore/tuplet/split2-ref.mscx b/mtest/libmscore/tuplet/split2-ref.mscx index efdbbffa0b61d..471b4f2b64aa5 100644 --- a/mtest/libmscore/tuplet/split2-ref.mscx +++ b/mtest/libmscore/tuplet/split2-ref.mscx @@ -117,7 +117,6 @@ 3 eighth - 3 @@ -128,7 +127,6 @@ 3 eighth - 3 @@ -179,7 +177,6 @@ 3 eighth - 3 diff --git a/mtest/libmscore/tuplet/split3-ref.mscx b/mtest/libmscore/tuplet/split3-ref.mscx index 0d623dc207db0..56e46e7ad4b6d 100644 --- a/mtest/libmscore/tuplet/split3-ref.mscx +++ b/mtest/libmscore/tuplet/split3-ref.mscx @@ -113,7 +113,6 @@ 3 eighth - 3 @@ -148,7 +147,6 @@ 3 eighth - 3 @@ -169,7 +167,6 @@ 3 eighth - 3 diff --git a/mtest/libmscore/tuplet/split4-ref.mscx b/mtest/libmscore/tuplet/split4-ref.mscx index be074fffc3926..59d61f7a03c64 100644 --- a/mtest/libmscore/tuplet/split4-ref.mscx +++ b/mtest/libmscore/tuplet/split4-ref.mscx @@ -113,7 +113,6 @@ 3 eighth - 3 @@ -137,7 +136,6 @@ 3 16th - 3 @@ -157,7 +155,6 @@ 3 32nd - 3 @@ -194,7 +191,6 @@ 3 eighth - 3 @@ -206,7 +202,6 @@ 3 16th - 3 @@ -217,7 +212,6 @@ 3 32nd - 3