diff --git a/src/engraving/dom/spanner.cpp b/src/engraving/dom/spanner.cpp index edac9498e7d9d..421f59c270b00 100644 --- a/src/engraving/dom/spanner.cpp +++ b/src/engraving/dom/spanner.cpp @@ -281,10 +281,10 @@ void SpannerSegment::undoChangeProperty(Pid pid, const PropertyValue& val, Prope void SpannerSegment::setSelected(bool f) { - for (SpannerSegment* ss : m_spanner->spannerSegments()) { - ss->EngravingItem::setSelected(f); + EngravingItem::setSelected(f); + if (spanner()->selected() != f) { + spanner()->setSelected(f); } - m_spanner->setSelected(f); } //--------------------------------------------------------- @@ -1155,10 +1155,13 @@ Measure* Spanner::endMeasure() const void Spanner::setSelected(bool f) { + EngravingItem::setSelected(f); + for (SpannerSegment* ss : spannerSegments()) { - ss->EngravingItem::setSelected(f); + if (ss->selected() != f) { + ss->setSelected(f); + } } - EngravingItem::setSelected(f); } //--------------------------------------------------------- diff --git a/src/engraving/dom/text.cpp b/src/engraving/dom/text.cpp index d2281b7236480..523db6c98f1fb 100644 --- a/src/engraving/dom/text.cpp +++ b/src/engraving/dom/text.cpp @@ -64,10 +64,31 @@ engraving::PropertyValue Text::propertyDefault(Pid id) const } } +PropertyValue Text::getProperty(Pid id) const +{ + switch (id) { + case Pid::VOICE_ASSIGNMENT: + if (hasVoiceAssignmentProperties()) { + return parentItem()->getProperty(id); + } + default: + return TextBase::getProperty(id); + } +} + String Text::readXmlText(XmlReader& xml, Score* score) { Text t(score->dummy()); rw::RWRegister::reader()->readItem(&t, xml); return t.xmlText(); } + +bool Text::hasVoiceAssignmentProperties() const +{ + const EngravingItem* parent = parentItem(); + if (parent && parent->isTextLineBaseSegment()) { + return parent->hasVoiceAssignmentProperties(); + } + return false; +} } diff --git a/src/engraving/dom/text.h b/src/engraving/dom/text.h index 30f5b0957fd89..561da841f8d0b 100644 --- a/src/engraving/dom/text.h +++ b/src/engraving/dom/text.h @@ -40,11 +40,15 @@ class Text final : public TextBase Text* clone() const override { return new Text(*this); } PropertyValue propertyDefault(Pid id) const override; + PropertyValue getProperty(Pid id) const override; static String readXmlText(XmlReader& r, Score* score); void setLayoutToParentWidth(bool v) { m_layoutToParentWidth = v; } + bool hasVoiceAssignmentProperties() const override; + VoiceAssignment voiceAssignment() const; + private: friend class Factory; Text(EngravingItem* parent, TextStyleType tid = TextStyleType::DEFAULT);