fixed beam parent

This commit is contained in:
Igor Korsukov 2021-09-16 11:14:58 +02:00
parent 0627e89d27
commit 761af43d6d
15 changed files with 35 additions and 26 deletions

View file

@ -195,7 +195,7 @@ QVariantMap EngravingElementsModel::makeData(const Ms::EngravingObject* el) cons
QString info = name + ": ";
info += "children: " + QString::number(el->children().size());
if (!el->isDummy()) {
info += ", treechildren: " + QString::number(el->treeChildCount());
//info += ", treechildren: " + QString::number(el->treeChildCount());
}
info += "\n";
if (el->isEngravingItem()) {
@ -207,9 +207,9 @@ QVariantMap EngravingElementsModel::makeData(const Ms::EngravingObject* el) cons
d["selected"] = elementsProvider()->isSelected(el);
d["info"] = info;
if (el->children().size() != size_t(el->treeChildCount())) {
d["color"] = "#ff0000";
}
// if (el->children().size() != size_t(el->treeChildCount())) {
// d["color"] = "#ff0000";
// }
return d;
}

View file

@ -2166,7 +2166,7 @@ static void readMeasure(Measure* m, int staffIdx, XmlReader& e, ReadContext& ctx
} else if (tag == "slashStyle") {
m->setStaffStemless(staffIdx, e.readInt());
} else if (tag == "Beam") {
Beam* beam = Factory::createBeam(ctx.dummy(), ctx.dummy()->score());
Beam* beam = Factory::createBeam(ctx.dummy()->system());
beam->setTrack(e.track());
beam->read(e);
beam->moveToDummy();
@ -2950,7 +2950,7 @@ Score::FileError Read114::read114(MasterScore* masterScore, XmlReader& e, ReadCo
masterScore->_excerpts.append(ex);
}
} else if (tag == "Beam") {
Beam* beam = Factory::createBeam(masterScore->dummy(), masterScore);
Beam* beam = Factory::createBeam(masterScore->dummy()->system());
beam->read(e);
beam->moveToDummy();
// _beams.append(beam);

View file

@ -2949,7 +2949,7 @@ static void readMeasure(Measure* m, int staffIdx, XmlReader& e, ReadContext& ctx
} else if (tag == "slashStyle") {
m->setStaffStemless(staffIdx, e.readInt());
} else if (tag == "Beam") {
Beam* beam = Factory::createBeam(ctx.dummy(), ctx.dummy()->score());
Beam* beam = Factory::createBeam(ctx.dummy()->system());
beam->setTrack(e.track());
beam->read(e);
beam->moveToDummy();

View file

@ -84,7 +84,6 @@ Err EngravingProject::setupMasterScore()
engravingElementsProvider()->clearStatistic();
Err err = doSetupMasterScore(m_masterScore);
engravingElementsProvider()->printStatistic("=== Update and Layout ===");
return err;
}
@ -127,7 +126,6 @@ Err EngravingProject::loadMscz(const MscReader& reader, bool ignoreVersionError)
engravingElementsProvider()->clearStatistic();
Ms::Score::FileError err = m_masterScore->loadMscz(reader, ignoreVersionError);
engravingElementsProvider()->printStatistic("=== Load ===");
return scoreFileErrorToErr(err);
}

View file

@ -169,7 +169,7 @@ void LayoutBeams::breakCrossMeasureBeams(const LayoutContext& ctx, Measure* meas
Beam* newBeam = nullptr;
if (nextElements.size() > 1) {
newBeam = Factory::createBeam(ctx.score()->dummy(), ctx.score());
newBeam = Factory::createBeam(ctx.score()->dummy()->system());
newBeam->setGenerated(true);
newBeam->setTrack(track);
}
@ -244,7 +244,7 @@ void LayoutBeams::beamGraceNotes(Score* score, Chord* mainNote, bool after)
} else {
beam = a1->beam();
if (beam == 0 || beam->elements().front() != a1) {
beam = Factory::createBeam(score->dummy(), score);
beam = Factory::createBeam(score->dummy()->system());
beam->setGenerated(true);
beam->setTrack(mainNote->track());
a1->replaceBeam(beam);
@ -431,7 +431,7 @@ void LayoutBeams::createBeams(Score* score, LayoutContext& lc, Measure* measure)
} else {
beam = a1->beam();
if (beam == 0 || beam->elements().front() != a1) {
beam = Factory::createBeam(score->dummy(), score);
beam = Factory::createBeam(score->dummy()->system());
beam->setGenerated(true);
beam->setTrack(track);
a1->replaceBeam(beam);

View file

@ -75,10 +75,9 @@ struct BeamFragment {
// Beam
//---------------------------------------------------------
Beam::Beam(EngravingItem* parent, Score* score)
Beam::Beam(System* parent)
: EngravingItem(ElementType::BEAM, parent)
{
EngravingObject::setScore(score);
initElementStyle(&beamStyle);
}

View file

@ -77,7 +77,7 @@ class Beam final : public EngravingItem
qreal slope { 0.0 };
friend class mu::engraving::Factory;
Beam(EngravingItem* parent, Ms::Score* score);
Beam(System* parent);
Beam(const Beam&);
void layout2(std::vector<ChordRest*>, SpannerSegmentType, int frag);

View file

@ -96,6 +96,10 @@ EngravingObject::EngravingObject(const EngravingObject& se)
EngravingObject::~EngravingObject()
{
for (EngravingObject* c : m_children) {
c->m_parent = nullptr;
}
if (!isDummy() && !isScore()) {
Score* sc = score();
IF_ASSERT_FAILED(sc) {
@ -670,6 +674,10 @@ void EngravingObject::addChild(EngravingObject* o)
void EngravingObject::removeChild(EngravingObject* o)
{
IF_ASSERT_FAILED(o->m_parent == this) {
return;
}
o->m_parent = nullptr;
m_children.remove(o);
}

View file

@ -418,16 +418,16 @@ CREATE_ITEM_IMPL(BarLine, ElementType::BAR_LINE, Segment)
COPY_ITEM_IMPL(BarLine)
MAKE_ITEM_IMPL(BarLine, Segment)
Beam* Factory::createBeam(EngravingItem * parent, Score * score)
Beam* Factory::createBeam(System * parent)
{
Beam* b = new Beam(parent, score);
Beam* b = new Beam(parent);
b->setup();
return b;
}
std::shared_ptr<Beam> Factory::makeBeam(EngravingItem* parent, Score* score)
std::shared_ptr<Beam> Factory::makeBeam(System* parent)
{
return std::shared_ptr<Beam>(createBeam(parent, score));
return std::shared_ptr<Beam>(createBeam(parent));
}
CREATE_ITEM_IMPL(Bend, ElementType::BEND, Note)

View file

@ -61,9 +61,8 @@ public:
static Ms::BarLine* copyBarLine(const Ms::BarLine& src);
static std::shared_ptr<Ms::BarLine> makeBarLine(Ms::Segment* parent);
//! NOTE Ms::Score* is needed temporarily
static Ms::Beam* createBeam(Ms::EngravingItem* parent, Ms::Score* score);
static std::shared_ptr<Ms::Beam> makeBeam(Ms::EngravingItem* parent, Ms::Score* score);
static Ms::Beam* createBeam(Ms::System* parent);
static std::shared_ptr<Ms::Beam> makeBeam(Ms::System* parent);
static Ms::Bend* createBend(Ms::Note* parent);
static std::shared_ptr<Ms::Bend> makeBend(Ms::Note* parent);

View file

@ -2514,7 +2514,7 @@ void Measure::readVoice(XmlReader& e, int staffIdx, bool irregular)
}
e.readNext();
} else if (tag == "Beam") {
Beam* beam = Factory::createBeam(score()->dummy(), score());
Beam* beam = Factory::createBeam(score()->dummy()->system());
beam->setTrack(e.track());
beam->read(e);
beam->moveToDummy();

View file

@ -437,7 +437,7 @@ bool Score::pasteStaff(XmlReader& e, Segment* dst, int dstStaff, Fraction scale)
breath->setParent(segment);
undoChangeElement(segment->element(e.track()), breath);
} else if (tag == "Beam") {
Beam* beam = Factory::createBeam(this->dummy(), this);
Beam* beam = Factory::createBeam(this->dummy()->system());
beam->setTrack(e.track());
beam->read(e);
beam->moveToDummy();

View file

@ -34,7 +34,8 @@ RootItem::RootItem(Score* score)
RootItem::~RootItem()
{
delete m_dummy;
//! TODO Please don't remove (igor.korsukov@gmail.com)
// delete m_dummy;
}
compat::DummyElement* RootItem::dummy() const

View file

@ -25,6 +25,7 @@
#include "accessibility/accessibleitem.h"
#include "libmscore/page.h"
#include "libmscore/score.h"
#include "log.h"
@ -46,6 +47,9 @@ void DebugPaint::paintPageDiagnostic(mu::draw::Painter& painter, Ms::Page* page)
// Get children
const mu::diagnostics::EngravingObjectList& elements = elementsProvider()->elements();
Ms::Score* score = page->score();
RootItem* root = score->rootItem();
std::list<const Ms::EngravingItem*> children;
for (const Ms::EngravingObject* el : elements) {
if (!el->isEngravingItem()) {

View file

@ -1809,7 +1809,7 @@ static void handleBeamAndStemDir(ChordRest* cr, const Beam::Mode bm, const Direc
removeBeam(beam);
}
// create a new beam
beam = Factory::createBeam(cr->score()->dummy(), cr->score());
beam = Factory::createBeam(cr->score()->dummy()->system());
beam->setTrack(cr->track());
beam->setBeamDirection(sd);
}