diff --git a/src/importexport/musicxml/internal/musicxml/exportxml.cpp b/src/importexport/musicxml/internal/musicxml/exportxml.cpp index e4a25085f4ac8..e886bcfb1151d 100644 --- a/src/importexport/musicxml/internal/musicxml/exportxml.cpp +++ b/src/importexport/musicxml/internal/musicxml/exportxml.cpp @@ -100,7 +100,7 @@ #include "libmscore/fret.h" #include "libmscore/tie.h" #include "libmscore/undo.h" -#include "libmscore/textline.h" +#include "libmscore/textlinebase.h" #include "libmscore/fermata.h" #include "libmscore/textframe.h" #include "libmscore/instrchange.h" @@ -5450,7 +5450,7 @@ static void spannerStart(ExportMusicXml* exp, int strack, int etrack, int track, exp->pedal(toPedal(e), sstaff, seg->tick()); break; case ElementType::TEXTLINE: - exp->textLine(toTextLine(e), sstaff, seg->tick()); + exp->textLine(toTextLineBase(e), sstaff, seg->tick()); break; case ElementType::LET_RING: exp->textLine(toLetRing(e), sstaff, seg->tick()); @@ -5506,7 +5506,7 @@ static void spannerStop(ExportMusicXml* exp, int strack, int etrack, const Fract exp->pedal(toPedal(e), sstaff, Fraction(-1,1)); break; case ElementType::TEXTLINE: - exp->textLine(toTextLine(e), sstaff, Fraction(-1,1)); + exp->textLine(toTextLineBase(e), sstaff, Fraction(-1,1)); break; case ElementType::LET_RING: exp->textLine(toLetRing(e), sstaff, Fraction(-1,1)); diff --git a/src/libmscore/excerpt.cpp b/src/libmscore/excerpt.cpp index e27d36d43e0c1..312b08c4cf5f6 100644 --- a/src/libmscore/excerpt.cpp +++ b/src/libmscore/excerpt.cpp @@ -32,6 +32,7 @@ #include "note.h" #include "lyrics.h" #include "segment.h" +#include "textline.h" #include "tupletmap.h" #include "tiemap.h" #include "layoutbreak.h" @@ -416,7 +417,7 @@ void MasterScore::initExcerpt(Excerpt* excerpt) static void cloneSpanner(Spanner* s, Score* score, int dstTrack, int dstTrack2) { // don’t clone voltas for track != 0 - if (s->type() == ElementType::VOLTA && s->track() != 0) { + if ((s->isVolta() || (s->isTextLine() && toTextLine(s)->systemFlag())) && s->track() != 0) { return; } Spanner* ns = toSpanner(s->linkedClone()); @@ -425,7 +426,7 @@ static void cloneSpanner(Spanner* s, Score* score, int dstTrack, int dstTrack2) ns->setTrack(dstTrack); ns->setTrack2(dstTrack2); - if (ns->type() == ElementType::SLUR) { + if (ns->isSlur()) { // set start/end element for slur ChordRest* cr1 = s->startCR(); ChordRest* cr2 = s->endCR(); @@ -663,7 +664,7 @@ void Excerpt::cloneStaves(Score* oscore, Score* score, const QList& sourceS } ne->setScore(score); - if (oe->type() == ElementType::BAR_LINE && adjustedBarlineSpan) { + if (oe->isBarLine() && adjustedBarlineSpan) { BarLine* nbl = toBarLine(ne); nbl->setSpanStaff(adjustedBarlineSpan); } else if (oe->isChordRest()) { @@ -884,7 +885,7 @@ void Excerpt::cloneStaves(Score* oscore, Score* score, const QList& sourceS int dstTrack = -1; int dstTrack2 = -1; - if (s->type() == ElementType::VOLTA) { + if (s->isVolta() || (s->isTextLine() && toTextLine(s)->systemFlag())) { //always export voltas to first staff in part dstTrack = 0; dstTrack2 = 0; @@ -1031,6 +1032,9 @@ void Excerpt::cloneStaff(Staff* srcStaff, Staff* dstStaff) continue; } default: + if (toTextLine(e)->systemFlag()) { + continue; + } Element* ne1 = e->clone(); ne1->setTrack(dstTrack); ne1->setParent(seg); @@ -1110,7 +1114,7 @@ void Excerpt::cloneStaff(Staff* srcStaff, Staff* dstStaff) int staffIdx = s->staffIdx(); int dstTrack = -1; int dstTrack2 = -1; - if (s->type() != ElementType::VOLTA) { + if (!(s->isVolta() || (s->isTextLine() && toTextLine(s)->systemFlag()))) { //export other spanner if staffidx matches if (srcStaffIdx == staffIdx) { dstTrack = dstStaffIdx * VOICES + s->voice(); @@ -1203,7 +1207,7 @@ void Excerpt::cloneStaff2(Staff* srcStaff, Staff* dstStaff, const Fraction& star if (oe == 0 || oe->generated()) { continue; } - if (oe->type() == ElementType::TIMESIG) { + if (oe->isTimeSig()) { continue; } Segment* ns = nm->getSegment(oseg->segmentType(), oseg->tick()); @@ -1249,6 +1253,9 @@ void Excerpt::cloneStaff2(Staff* srcStaff, Staff* dstStaff, const Fraction& star case ElementType::LYRICS: // not normally segment-attached continue; default: + if (toTextLine(e)->systemFlag()) { + continue; + } Element* ne1 = e->clone(); ne1->setTrack(dstTrack); ne1->setParent(ns); @@ -1296,7 +1303,7 @@ void Excerpt::cloneStaff2(Staff* srcStaff, Staff* dstStaff, const Fraction& star int staffIdx = s->staffIdx(); int dstTrack = -1; int dstTrack2 = -1; - if (s->type() != ElementType::VOLTA) { + if (!(s->isVolta() || (s->isTextLine() && s->systemFlag()))) { //export other spanner if staffidx matches if (srcStaffIdx == staffIdx) { dstTrack = dstStaffIdx * VOICES + s->voice(); diff --git a/src/libmscore/style.cpp b/src/libmscore/style.cpp index 87589275080d8..d9df0475846bb 100644 --- a/src/libmscore/style.cpp +++ b/src/libmscore/style.cpp @@ -617,6 +617,16 @@ static const StyleType styleTypes[] { { Sid::textLineFrameFgColor, "textLineFrameFgColor", QColor(0, 0, 0, 255) }, { Sid::textLineFrameBgColor, "textLineFrameBgColor", QColor(255, 255, 255, 0) }, + { Sid::systemTextLinePlacement, "systemTextLinePlacement", int(Placement::ABOVE) }, + { Sid::systemTextLinePosAbove, "systemTextLinePosAbove", QPointF(.0, -1.0) }, + { Sid::systemTextLinePosBelow, "systemTextLinePosBelow", QPointF(.0, 1.0) }, + { Sid::systemTextLineFrameType, "systemTextLineFrameType", int(FrameType::NO_FRAME) }, + { Sid::systemTextLineFramePadding, "systemTextLineFramePadding", 0.2 }, + { Sid::systemTextLineFrameWidth, "systemTextLineFrameWidth", 0.1 }, + { Sid::systemTextLineFrameRound, "systemTextLineFrameRound", 0 }, + { Sid::systemTextLineFrameFgColor, "systemTextLineFrameFgColor", QColor(0, 0, 0, 255) }, + { Sid::systemTextLineFrameBgColor, "systemTextLineFrameBgColor", QColor(255, 255, 255, 0) }, + { Sid::tremoloBarLineWidth, "tremoloBarLineWidth", Spatium(0.12) }, { Sid::jumpPosAbove, "jumpPosAbove", QPointF(.0, -2.0) }, { Sid::markerPosAbove, "markerPosAbove", QPointF(.0, -2.0) }, @@ -1025,10 +1035,18 @@ static const StyleType styleTypes[] { { Sid::textLineFontSpatiumDependent, "textLineFontSpatiumDependent", true }, { Sid::textLineFontStyle, "textLineFontStyle", int(FontStyle::Normal) }, { Sid::textLineColor, "textLineColor", QColor(0, 0, 0, 255) }, - { Sid::textLineTextAlign, "textLineTextAlign", QVariant::fromValue( - Align::LEFT | Align::VCENTER) }, - - { Sid::glissandoFontFace, "glissandoFontFace", "FreeSerif" }, + { Sid::textLineTextAlign, "textLineTextAlign", QVariant::fromValue(Align::LEFT | Align::VCENTER) }, + { Sid::textLineSystemFlag, "textLineSystemFlag", false }, + + { Sid::systemTextLineFontFace, "systemTextLineFontFace", "Edwin" }, + { Sid::systemTextLineFontSize, "systemTextLineFontSize", 12.0 }, + { Sid::systemTextLineFontSpatiumDependent, "systemTextLineFontSpatiumDependent", true }, + { Sid::systemTextLineFontStyle, "systemTextLineFontStyle", int(FontStyle::Normal) }, + { Sid::systemTextLineColor, "systemTextLineColor", QColor(0, 0, 0, 255) }, + { Sid::systemTextLineTextAlign, "systemTextLineTextAlign", QVariant::fromValue(Align::LEFT | Align::VCENTER) }, + { Sid::systemTextLineSystemFlag, "systemTextLineSystemFlag", true }, + + { Sid::glissandoFontFace, "glissandoFontFace", "Edwin" }, { Sid::glissandoFontSize, "glissandoFontSize", QVariant(8.0) }, { Sid::glissandoFontSpatiumDependent, "glissandoFontSpatiumDependent", true }, { Sid::glissandoFontStyle, "glissandoFontStyle", int(FontStyle::Italic) }, @@ -1397,6 +1415,7 @@ static const StyleType styleTypes[] { { Sid::pedalMinDistance, "pedalMinDistance", Spatium(0.7) }, { Sid::repeatMinDistance, "repeatMinDistance", Spatium(0.5) }, { Sid::textLineMinDistance, "textLineMinDistance", Spatium(0.7) }, + { Sid::systemTextLineMinDistance, "systemTextLineMinDistance", Spatium(0.7) }, { Sid::trillMinDistance, "trillMinDistance", Spatium(1.0) }, { Sid::vibratoMinDistance, "vibratoMinDistance", Spatium(1.0) }, { Sid::voltaMinDistance, "voltaMinDistance", Spatium(1.0) }, diff --git a/src/libmscore/style.h b/src/libmscore/style.h index da7e43cf2bdeb..be41a0db4a293 100644 --- a/src/libmscore/style.h +++ b/src/libmscore/style.h @@ -595,6 +595,16 @@ enum class Sid { textLineFrameFgColor, textLineFrameBgColor, + systemTextLinePlacement, + systemTextLinePosAbove, + systemTextLinePosBelow, + systemTextLineFrameType, + systemTextLineFramePadding, + systemTextLineFrameWidth, + systemTextLineFrameRound, + systemTextLineFrameFgColor, + systemTextLineFrameBgColor, + tremoloBarLineWidth, jumpPosAbove, markerPosAbove, @@ -988,6 +998,15 @@ enum class Sid { textLineFontStyle, textLineColor, textLineTextAlign, + textLineSystemFlag, + + systemTextLineFontFace, + systemTextLineFontSize, + systemTextLineFontSpatiumDependent, + systemTextLineFontStyle, + systemTextLineColor, + systemTextLineTextAlign, + systemTextLineSystemFlag, glissandoFontFace, glissandoFontSize, @@ -1342,6 +1361,7 @@ enum class Sid { pedalMinDistance, repeatMinDistance, textLineMinDistance, + systemTextLineMinDistance, trillMinDistance, vibratoMinDistance, voltaMinDistance, diff --git a/src/libmscore/textline.cpp b/src/libmscore/textline.cpp index 9910e5692e13c..2f486fa342db8 100644 --- a/src/libmscore/textline.cpp +++ b/src/libmscore/textline.cpp @@ -14,13 +14,34 @@ #include "textline.h" #include "staff.h" #include "system.h" +#include "undo.h" +#include "musescoreCore.h" namespace Ms { +//--------------------------------------------------------- +// textLineSegmentStyle +//--------------------------------------------------------- + +static const ElementStyle textLineSegmentStyle { + { Sid::textLinePosAbove, Pid::OFFSET }, + { Sid::textLineMinDistance, Pid::MIN_DISTANCE }, +}; + +//--------------------------------------------------------- +// systemTextLineSegmentStyle +//--------------------------------------------------------- + +static const ElementStyle systemTextLineSegmentStyle { + { Sid::systemTextLinePosAbove, Pid::OFFSET }, + { Sid::systemTextLineMinDistance, Pid::MIN_DISTANCE }, +}; + //--------------------------------------------------------- // textLineStyle //--------------------------------------------------------- static const ElementStyle textLineStyle { +// { Sid::textLineSystemFlag, Pid::SYSTEM_FLAG }, { Sid::textLineFontFace, Pid::BEGIN_FONT_FACE }, { Sid::textLineFontFace, Pid::CONTINUE_FONT_FACE }, { Sid::textLineFontFace, Pid::END_FONT_FACE }, @@ -37,13 +58,53 @@ static const ElementStyle textLineStyle { { Sid::textLinePosAbove, Pid::OFFSET }, }; +//--------------------------------------------------------- +// systemTextLineStyle +//--------------------------------------------------------- + +static const ElementStyle systemTextLineStyle { +// { Sid::systemTextLineSystemFlag, Pid::SYSTEM_FLAG }, + { Sid::systemTextLineFontFace, Pid::BEGIN_FONT_FACE }, + { Sid::systemTextLineFontFace, Pid::CONTINUE_FONT_FACE }, + { Sid::systemTextLineFontFace, Pid::END_FONT_FACE }, + { Sid::systemTextLineFontSize, Pid::BEGIN_FONT_SIZE }, + { Sid::systemTextLineFontSize, Pid::CONTINUE_FONT_SIZE }, + { Sid::systemTextLineFontSize, Pid::END_FONT_SIZE }, + { Sid::systemTextLineFontStyle, Pid::BEGIN_FONT_STYLE }, + { Sid::systemTextLineFontStyle, Pid::CONTINUE_FONT_STYLE }, + { Sid::systemTextLineFontStyle, Pid::END_FONT_STYLE }, + { Sid::systemTextLineTextAlign, Pid::BEGIN_TEXT_ALIGN }, + { Sid::systemTextLineTextAlign, Pid::CONTINUE_TEXT_ALIGN }, + { Sid::systemTextLineTextAlign, Pid::END_TEXT_ALIGN }, + { Sid::systemTextLinePlacement, Pid::PLACEMENT }, + { Sid::systemTextLinePosAbove, Pid::OFFSET }, +}; + //--------------------------------------------------------- // TextLineSegment //--------------------------------------------------------- -TextLineSegment::TextLineSegment(Spanner* sp, Score* s) +TextLineSegment::TextLineSegment(Spanner* sp, Score* s, bool system) : TextLineBaseSegment(sp, s, ElementFlag::MOVABLE | ElementFlag::ON_STAFF) { + setSystemFlag(system); + if (systemFlag()) { + initElementStyle(&systemTextLineSegmentStyle); + } else { + initElementStyle(&textLineSegmentStyle); + } +} + +//--------------------------------------------------------- +// propertyDelegate +//--------------------------------------------------------- + +Element* TextLineSegment::propertyDelegate(Pid pid) +{ + if (pid == Pid::SYSTEM_FLAG) { + return static_cast(spanner()); + } + return TextLineBaseSegment::propertyDelegate(pid); } //--------------------------------------------------------- @@ -63,9 +124,13 @@ void TextLineSegment::layout() // TextLine //--------------------------------------------------------- -TextLine::TextLine(Score* s) +TextLine::TextLine(Score* s, bool system) : TextLineBase(s) { + setSystemFlag(system); + + initStyle(); + setBeginText(""); setContinueText(""); setEndText(""); @@ -91,6 +156,19 @@ TextLine::TextLine(const TextLine& tl) { } +//--------------------------------------------------------- +// initStyle +//--------------------------------------------------------- + +void TextLine::initStyle() +{ + if (systemFlag()) { + initElementStyle(&systemTextLineStyle); + } else { + initElementStyle(&textLineStyle); + } +} + //--------------------------------------------------------- // write //--------------------------------------------------------- @@ -100,7 +178,11 @@ void TextLine::write(XmlWriter& xml) const if (!xml.canWrite(this)) { return; } - xml.stag(this); + if (systemFlag()) { + xml.stag(QString("TextLine"), this, QString("system=\"1\"")); + } else { + xml.stag(this); + } // other styled properties are included in TextLineBase pids list writeProperty(xml, Pid::PLACEMENT); writeProperty(xml, Pid::OFFSET); @@ -108,10 +190,17 @@ void TextLine::write(XmlWriter& xml) const xml.etag(); } -static const ElementStyle textLineSegmentStyle { - { Sid::textLinePosAbove, Pid::OFFSET }, - { Sid::textLineMinDistance, Pid::MIN_DISTANCE }, -}; +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void TextLine::read(XmlReader& e) +{ + bool system = e.intAttribute("system", 0) == 1; + setSystemFlag(system); + initStyle(); + TextLineBase::read(e); +} //--------------------------------------------------------- // createLineSegment @@ -119,16 +208,44 @@ static const ElementStyle textLineSegmentStyle { LineSegment* TextLine::createLineSegment() { - TextLineSegment* seg = new TextLineSegment(this, score()); + TextLineSegment* seg = new TextLineSegment(this, score(), systemFlag()); seg->setTrack(track()); // note-anchored line segments are relative to system not to staff if (anchor() == Spanner::Anchor::NOTE) { seg->setFlag(ElementFlag::ON_STAFF, false); } - seg->initElementStyle(&textLineSegmentStyle); + + if (systemFlag()) { + seg->initElementStyle(&systemTextLineSegmentStyle); + } else { + seg->initElementStyle(&textLineSegmentStyle); + } + return seg; } +//--------------------------------------------------------- +// getTextLinePos +//--------------------------------------------------------- + +Sid TextLineSegment::getTextLinePos(bool above) const +{ + if (systemFlag()) { + return above ? Sid::systemTextLinePosAbove : Sid::systemTextLinePosBelow; + } else { + return above ? Sid::textLinePosAbove : Sid::textLinePosBelow; + } +} + +Sid TextLine::getTextLinePos(bool above) const +{ + if (systemFlag()) { + return above ? Sid::systemTextLinePosAbove : Sid::systemTextLinePosBelow; + } else { + return above ? Sid::textLinePosAbove : Sid::textLinePosBelow; + } +} + //--------------------------------------------------------- // getPropertyStyle //--------------------------------------------------------- @@ -139,7 +256,7 @@ Sid TextLineSegment::getPropertyStyle(Pid pid) const if (spanner()->anchor() == Spanner::Anchor::NOTE) { return Sid::NOSTYLE; } else { - return spanner()->placeAbove() ? Sid::textLinePosAbove : Sid::textLinePosBelow; + return getTextLinePos(spanner()->placeAbove()); } } return TextLineBaseSegment::getPropertyStyle(pid); @@ -151,7 +268,7 @@ Sid TextLine::getPropertyStyle(Pid pid) const if (anchor() == Spanner::Anchor::NOTE) { return Sid::NOSTYLE; } else { - return placeAbove() ? Sid::textLinePosAbove : Sid::textLinePosBelow; + return getTextLinePos(placeAbove()); } } return TextLineBase::getPropertyStyle(pid); @@ -165,7 +282,11 @@ QVariant TextLine::propertyDefault(Pid propertyId) const { switch (propertyId) { case Pid::PLACEMENT: - return score()->styleV(Sid::textLinePlacement); + if (systemFlag()) { + return score()->styleV(Sid::textLinePlacement); + } else { + return score()->styleV(Sid::systemTextLinePlacement); + } case Pid::BEGIN_TEXT: case Pid::CONTINUE_TEXT: case Pid::END_TEXT: @@ -190,4 +311,60 @@ QVariant TextLine::propertyDefault(Pid propertyId) const return TextLineBase::propertyDefault(propertyId); } } + +//--------------------------------------------------------- +// setProperty +//--------------------------------------------------------- + +bool TextLine::setProperty(Pid id, const QVariant& v) +{ + switch (id) { + case Pid::PLACEMENT: + setPlacement(Placement(v.toInt())); + break; + default: + return TextLineBase::setProperty(id, v); + } + triggerLayout(); + return true; +} + +//--------------------------------------------------------- +// undoChangeProperty +//--------------------------------------------------------- + +void TextLine::undoChangeProperty(Pid id, const QVariant& v, PropertyFlags ps) +{ + if (id == Pid::SYSTEM_FLAG) { + score()->undo(new ChangeTextLineProperty(this, v)); + for (SpannerSegment* s : spannerSegments()) { + score()->undo(new ChangeTextLineProperty(s, v)); + triggerLayout(); + } + MuseScoreCore::mscoreCore->updateInspector(); + return; + } + TextLineBase::undoChangeProperty(id, v, ps); +} + +//--------------------------------------------------------- +// layoutSystem +// layout spannersegment for system +//--------------------------------------------------------- + +SpannerSegment* TextLine::layoutSystem(System* system) +{ + TextLineSegment* tls = toTextLineSegment(TextLineBase::layoutSystem(system)); + + if (tls->spanner()) { + for (SpannerSegment* ss : tls->spanner()->spannerSegments()) { + ss->setFlag(ElementFlag::SYSTEM, systemFlag()); + ss->setTrack(systemFlag() ? 0 : track()); + } + tls->spanner()->setFlag(ElementFlag::SYSTEM, systemFlag()); + tls->spanner()->setTrack(systemFlag() ? 0 : track()); + } + + return tls; +} } // namespace Ms diff --git a/src/libmscore/textline.h b/src/libmscore/textline.h index a82ce9e75c62c..fba5f77ae9f4f 100644 --- a/src/libmscore/textline.h +++ b/src/libmscore/textline.h @@ -24,14 +24,17 @@ class Note; class TextLineSegment final : public TextLineBaseSegment { + Sid getTextLinePos(bool above) const; Sid getPropertyStyle(Pid) const override; public: - TextLineSegment(Spanner* sp, Score* s); + TextLineSegment(Spanner* sp, Score* s, bool system=false); ElementType type() const override { return ElementType::TEXTLINE_SEGMENT; } TextLineSegment* clone() const override { return new TextLineSegment(*this); } + virtual Element* propertyDelegate(Pid) override; + TextLine* textLine() const { return toTextLine(spanner()); } void layout() override; }; @@ -42,20 +45,28 @@ class TextLineSegment final : public TextLineBaseSegment class TextLine final : public TextLineBase { + Sid getTextLinePos(bool above) const; Sid getPropertyStyle(Pid) const override; public: - TextLine(Score* s); + TextLine(Score* s, bool system=false); TextLine(const TextLine&); ~TextLine() {} + virtual void undoChangeProperty(Pid id, const QVariant&, PropertyFlags ps) override; + virtual SpannerSegment* layoutSystem(System*) override; + TextLine* clone() const override { return new TextLine(*this); } ElementType type() const override { return ElementType::TEXTLINE; } void write(XmlWriter&) const override; + void read(XmlReader&) override; + + void initStyle(); LineSegment* createLineSegment() override; QVariant propertyDefault(Pid) const override; + bool setProperty(Pid propertyId, const QVariant&) override; }; } // namespace Ms #endif diff --git a/src/libmscore/undo.cpp b/src/libmscore/undo.cpp index af40f04eff46e..b2ad17ceaf613 100644 --- a/src/libmscore/undo.cpp +++ b/src/libmscore/undo.cpp @@ -79,6 +79,7 @@ #include "bracket.h" #include "fret.h" #include "textedit.h" +#include "textline.h" namespace Ms { extern Measure* tick2measure(int tick); @@ -2302,6 +2303,18 @@ void ChangeBracketProperty::flip(EditData* ed) level = toBracketItem(element)->column(); } +//--------------------------------------------------------- +// ChangeTextLineProperty::flip +//--------------------------------------------------------- + +void ChangeTextLineProperty::flip(EditData* ed) +{ + ChangeProperty::flip(ed); + if (element->isTextLine()) { + toTextLine(element)->initStyle(); + } +} + //--------------------------------------------------------- // ChangeMetaText::flip //--------------------------------------------------------- diff --git a/src/libmscore/undo.h b/src/libmscore/undo.h index daaa57ee6eb27..f279f462e89a1 100644 --- a/src/libmscore/undo.h +++ b/src/libmscore/undo.h @@ -1125,6 +1125,20 @@ class ChangeBracketProperty : public ChangeProperty UNDO_NAME("ChangeBracketProperty") }; +//--------------------------------------------------------- +// ChangeTextLineProperty +//--------------------------------------------------------- + +class ChangeTextLineProperty : public ChangeProperty +{ + void flip(EditData*) override; + +public: + ChangeTextLineProperty(ScoreElement* e, QVariant v) + : ChangeProperty(e, Pid::SYSTEM_FLAG, v, PropertyFlags::NOSTYLE) {} + UNDO_NAME("ChangeTextLineProperty") +}; + //--------------------------------------------------------- // ChangeMetaText //---------------------------------------------------------