diff --git a/libmscore/barline.cpp b/libmscore/barline.cpp index d8d252c020..272569c73c 100644 --- a/libmscore/barline.cpp +++ b/libmscore/barline.cpp @@ -26,6 +26,8 @@ #include "spanner.h" #include "undo.h" #include "fermata.h" +#include "symbol.h" +#include "image.h" namespace Ms { @@ -292,7 +294,7 @@ BarLine::BarLine(const BarLine& bl) y2 = bl.y2; for (Element* e : bl._el) - _el.push_back(e->clone()); + add(e->clone()); } BarLine::~BarLine() @@ -725,6 +727,22 @@ void BarLine::read(XmlReader& e) a->read(e); add(a); } + else if (tag == "Symbol") { + Symbol* s = new Symbol(score()); + s->setTrack(track()); + s->read(e); + add(s); + } + else if (tag == "Image") { + if (MScore::noImages) + e.skipCurrentElement(); + else { + Image* image = new Image(score()); + image->setTrack(track()); + image->read(e); + add(image); + } + } else if (!Element::readProperties(e)) e.unknown(); } @@ -741,7 +759,7 @@ bool BarLine::acceptDrop(EditData& data) const return true; } else { - return ((type == ElementType::ARTICULATION || type == ElementType::FERMATA) + return ((type == ElementType::ARTICULATION || type == ElementType::FERMATA || type == ElementType::SYMBOL || type == ElementType::IMAGE) && segment() && segment()->isEndBarLineType()); } @@ -805,6 +823,12 @@ Element* BarLine::drop(EditData& data) score()->undoAddElement(atr); return atr; } + else if (e->isSymbol() || e->isImage()) { + e->setParent(this); + e->setTrack(track()); + score()->undoAddElement(e); + return e; + } else if (e->isFermata()) { e->setPlacement(track() & 1 ? Placement::BELOW : Placement::ABOVE); for (Element* el: segment()->annotations()) @@ -1366,6 +1390,28 @@ void BarLine::scanElements(void* data, void (*func)(void*, Element*), bool all) e->scanElements(data, func, all); } +//--------------------------------------------------------- +// setTrack +//--------------------------------------------------------- + +void BarLine::setTrack(int t) + { + Element::setTrack(t); + for (Element* e : _el) + e->setTrack(t); + } + +//--------------------------------------------------------- +// setScore +//--------------------------------------------------------- + +void BarLine::setScore(Score* s) + { + Element::setScore(s); + for (Element* e : _el) + e->setScore(s); + } + //--------------------------------------------------------- // add //--------------------------------------------------------- @@ -1375,6 +1421,8 @@ void BarLine::add(Element* e) e->setParent(this); switch (e->type()) { case ElementType::ARTICULATION: + case ElementType::SYMBOL: + case ElementType::IMAGE: _el.push_back(e); setGenerated(false); break; @@ -1393,6 +1441,8 @@ void BarLine::remove(Element* e) { switch(e->type()) { case ElementType::ARTICULATION: + case ElementType::SYMBOL: + case ElementType::IMAGE: if (!_el.remove(e)) qDebug("BarLine::remove(): cannot find %s", e->name()); break; diff --git a/libmscore/barline.h b/libmscore/barline.h index 988d1eef54..dbcb8fcff1 100644 --- a/libmscore/barline.h +++ b/libmscore/barline.h @@ -86,6 +86,8 @@ class BarLine final : public Element { virtual void layout() override; void layout2(); virtual void scanElements(void* data, void (*func)(void*, Element*), bool all=true) override; + virtual void setTrack(int t) override; + virtual void setScore(Score* s) override; virtual void add(Element*) override; virtual void remove(Element*) override; virtual bool acceptDrop(EditData&) const override; diff --git a/vtest/gen b/vtest/gen index 924d00d1c5..9d4b2a5fb9 100755 --- a/vtest/gen +++ b/vtest/gen @@ -40,7 +40,7 @@ else emmentaler-text-2 gonville-text-2 bravura-text-2 musejazz-text-2\ emmentaler-text-3 gonville-text-3 bravura-text-3 musejazz-text-3\ frametext ottava \ - barline-1 instrument-1 \ + barline-1 instrument-1 symbol-1 \ slurs-1 slurs-2 slurs-3 slurs-4 slurs-5 slurs-6 slurs-7 slurs-8 slurs-9 slurs-10 \ hairpins-1 pedal-1 line-1 line-2 line-3 line-4 line-5 line-6 gliss-1 gliss-2\ chord-layout-1 chord-layout-2 chord-layout-3 chord-layout-4 chord-layout-5\ diff --git a/vtest/gen.bat b/vtest/gen.bat index 9cf7d90e5c..cf9f41363e 100644 --- a/vtest/gen.bat +++ b/vtest/gen.bat @@ -20,7 +20,7 @@ set SRC=mmrest-1,bravura-mmrest,gonville-mmrest,mmrest-2,mmrest-4,mmrest-5,mmres emmentaler-text-2,gonville-text-2,bravura-text-2,musejazz-text-2, ^ emmentaler-text-3,gonville-text-3,bravura-text-3,musejazz-text-3, ^ frametext,ottava, ^ - barline-1,instrument-1, ^ + barline-1,instrument-1,symbol-1, ^ slurs-1,slurs-2,slurs-3,slurs-4,hairpins-1,pedal-1,line-1,line-2,line-3,line-4,line-5,line-6,gliss-1,gliss-2, ^ chord-layout-1,chord-layout-2,chord-layout-3,chord-layout-4,chord-layout-5, ^ chord-layout-6,chord-layout-7,chord-layout-8,chord-layout-9,chord-layout-10, ^ diff --git a/vtest/symbol-1.mscx b/vtest/symbol-1.mscx new file mode 100644 index 0000000000..5bc1f164ab --- /dev/null +++ b/vtest/symbol-1.mscx @@ -0,0 +1,211 @@ + + + + + 0 + 480 + + 1 + 1 + 1 + 0 + + + + + + + + + + + + + + + Standard + + + + + Standard + + F + + Piano + + Pno. + Piano + 21 + 108 + 21 + 108 + + 100 + 70 + + + 100 + 40 + + + 100 + 100 + + + 120 + 100 + + + + + + + + + + + 4 + 4 + + + measure + 4/4 + + miscEyeglasses + Bravura + + + + + repeat2Bars + Bravura + + + + + + + + + measure + 4/4 + + + end + + + + + + + + + 4 + 4 + + + whole + + + miscEyeglasses + Bravura + + 48 + 14 + + + + + + + + quarter + + 48 + 14 + + + + quarter + + miscEyeglasses + Bravura + + + + half + + + end + + + + + + diff --git a/vtest/symbol-1.png b/vtest/symbol-1.png new file mode 100644 index 0000000000..f962715c26 Binary files /dev/null and b/vtest/symbol-1.png differ