Skip to content

Commit 84175c0

Browse files
committed
Refactor score tree functions
1 parent c86de2d commit 84175c0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

81 files changed

+309
-1356
lines changed

src/converter/internal/compat/notationmeta.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -307,14 +307,13 @@ QJsonObject NotationMeta::pageFormatJson(const mu::engraving::MStyle& style)
307307
return format;
308308
}
309309

310-
static void findTextByType(void* data, mu::engraving::EngravingItem* element)
310+
static void findTextByType(std::pair<TextStyleType, QStringList*>* typeStringsData, mu::engraving::EngravingItem* element)
311311
{
312312
if (!element->isTextBase()) {
313313
return;
314314
}
315315

316316
const mu::engraving::TextBase* text = toTextBase(element);
317-
auto* typeStringsData = static_cast<std::pair<TextStyleType, QStringList*>*>(data);
318317
if (text->textStyleType() == typeStringsData->first) {
319318
QStringList* titleStrings = typeStringsData->second;
320319
Q_ASSERT(titleStrings);
@@ -336,7 +335,7 @@ QJsonObject NotationMeta::typeDataJson(mu::engraving::Score* score)
336335
QJsonArray typeData;
337336
QStringList typeTextStrings;
338337
std::pair<TextStyleType, QStringList*> extendedTitleData = std::make_pair(nameType.second, &typeTextStrings);
339-
score->scanElements(&extendedTitleData, findTextByType);
338+
score->scanElements([&](EngravingItem* item) { findTextByType(&extendedTitleData, item); });
340339
for (auto typeStr : typeTextStrings) {
341340
typeData.append(typeStr);
342341
}

src/converter/internal/compat/scoreelementsscanner.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ static bool itemAccepted(const mu::engraving::EngravingItem* item, const mu::eng
5050
return false;
5151
}
5252

53+
if (!item->visible() && !item->score()->isShowInvisible()) {
54+
return false;
55+
}
56+
5357
if (acceptedTypes.empty()) {
5458
return true;
5559
}
@@ -95,9 +99,8 @@ static muse::String chordToNotes(const mu::engraving::Chord* chord)
9599
return notes.join(u" ");
96100
}
97101

98-
static void addElementInfoIfNeed(void* data, mu::engraving::EngravingItem* item)
102+
static void addElementInfoIfNeed(ScannerData* scannerData, mu::engraving::EngravingItem* item)
99103
{
100-
ScannerData* scannerData = static_cast<ScannerData*>(data);
101104
if (!itemAccepted(item, scannerData->options.acceptedTypes)) {
102105
return;
103106
}
@@ -205,7 +208,7 @@ ScoreElementScanner::InstrumentElementMap ScoreElementScanner::scanElements(mu::
205208
ScannerData data;
206209
data.options = options;
207210

208-
score->scanElements(&data, addElementInfoIfNeed, false);
211+
score->scanElements([&](mu::engraving::EngravingItem* item) { addElementInfoIfNeed(&data, item); });
209212

210213
return data.elements;
211214
}

src/engraving/devtools/engravingelementsprovider.cpp

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -142,48 +142,9 @@ void EngravingElementsProvider::dumpTree(const mu::engraving::EngravingItem* ite
142142

143143
void EngravingElementsProvider::dumpTreeTree(const mu::engraving::EngravingObject* obj, int& level)
144144
{
145-
++level;
146-
QString gap;
147-
gap.fill(' ', level);
148-
LOGD() << gap << obj->typeName();
149-
150-
for (const mu::engraving::EngravingObject* child : obj->scanChildren()) {
151-
dumpTreeTree(child, level);
152-
}
153-
154-
--level;
155145
}
156146

157147
void EngravingElementsProvider::checkObjectTree(const mu::engraving::EngravingObject* obj)
158148
{
159-
mu::engraving::EngravingObject* p1 = obj->parent();
160-
mu::engraving::EngravingObject* p2 = obj->scanParent();
161-
if (p1 && p2 && p1 != p2) {
162-
LOGD() << "obj: " << obj->typeName();
163-
LOGD() << "parents is differens, p1: " << p1->typeName() << ", p2: " << p2->typeName();
164-
}
165-
166-
size_t ch1 = obj->children().size();
167-
size_t ch2 = obj->scanChildren().size();
168-
if (ch1 != ch2) {
169-
LOGD() << "obj: " << obj->typeName();
170-
LOGD() << "chcount is differens, ch1: " << ch1 << ", ch2: " << ch2;
171-
172-
LOGD() << "children1:";
173-
for (size_t i = 0; i < obj->children().size(); ++i) {
174-
LOGD() << i << ": " << obj->children().at(i)->typeName();
175-
}
176-
177-
LOGD() << "children2:";
178-
179-
int i = 0;
180-
for (const mu::engraving::EngravingObject* child : obj->scanChildren()) {
181-
LOGD() << i++ << ": " << child->typeName();
182-
}
183-
}
184-
185-
for (const mu::engraving::EngravingObject* ch : obj->children()) {
186-
checkObjectTree(ch);
187-
}
188149
}
189150
}

src/engraving/dom/accidental.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -239,9 +239,6 @@ class Accidental final : public EngravingItem
239239

240240
Note* note() const { return (explicitParent() && explicitParent()->isNote()) ? toNote(explicitParent()) : 0; }
241241

242-
// Score Tree functions
243-
EngravingObject* scanParent() const override;
244-
245242
TranslatableString subtypeUserName() const override;
246243
void setSubtype(const AsciiStringView& s);
247244
int subtype() const override { return (int)m_accidentalType; }

src/engraving/dom/ambitus.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -224,16 +224,15 @@ void Ambitus::setBottomTpc(int val, bool applyLogic)
224224
// scanElements
225225
//---------------------------------------------------------
226226

227-
void Ambitus::scanElements(void* data, void (* func)(void*, EngravingItem*), bool all)
227+
void Ambitus::scanElements(std::function<void(EngravingItem*)> func)
228228
{
229-
UNUSED(all);
230-
func(data, this);
229+
func(this);
231230
if (m_topAccidental->accidentalType() != AccidentalType::NONE) {
232-
func(data, m_topAccidental);
231+
func(m_topAccidental);
233232
}
234233

235234
if (m_bottomAccidental->accidentalType() != AccidentalType::NONE) {
236-
func(data, m_bottomAccidental);
235+
func(m_bottomAccidental);
237236
}
238237
}
239238

src/engraving/dom/ambitus.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,6 @@ class Ambitus final : public EngravingItem
5353

5454
Ambitus* clone() const override { return new Ambitus(*this); }
5555

56-
// Score Tree functions
57-
EngravingObject* scanParent() const override;
58-
EngravingObjectList scanChildren() const override;
59-
6056
double mag() const override;
6157

6258
void initFrom(Ambitus* a);
@@ -94,7 +90,7 @@ class Ambitus final : public EngravingItem
9490

9591
// re-implemented virtual functions
9692
PointF pagePos() const override; // position in page coordinates
97-
void scanElements(void* data, void (* func)(void*, EngravingItem*), bool all=true) override;
93+
void scanElements(std::function<void(EngravingItem*)> func) override;
9894
void setTrack(track_idx_t val) override;
9995

10096
String accessibleInfo() const override;

src/engraving/dom/barline.cpp

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -702,16 +702,11 @@ void BarLine::endDragGrip(EditData& ed)
702702
// scanElements
703703
//---------------------------------------------------------
704704

705-
void BarLine::scanElements(void* data, void (* func)(void*, EngravingItem*), bool all)
705+
void BarLine::scanElements(std::function<void(EngravingItem*)> func)
706706
{
707-
// if no width (staff has bar lines turned off) and not all requested, do nothing
708-
if (RealIsNull(width()) && !all) {
709-
return;
710-
}
711-
712-
func(data, this);
707+
func(this);
713708
for (EngravingItem* e : m_el) {
714-
e->scanElements(data, func, all);
709+
e->scanElements(func);
715710
}
716711
}
717712

src/engraving/dom/barline.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,15 +87,11 @@ class BarLine final : public EngravingItem
8787

8888
void setParent(Segment* parent);
8989

90-
// Score Tree functions
91-
EngravingObject* scanParent() const override;
92-
EngravingObjectList scanChildren() const override;
93-
9490
BarLine* clone() const override { return new BarLine(*this); }
9591
PointF canvasPos() const override; ///< position in canvas coordinates
9692
PointF pagePos() const override; ///< position in page coordinates
9793

98-
void scanElements(void* data, void (* func)(void*, EngravingItem*), bool all=true) override;
94+
void scanElements(std::function<void(EngravingItem*)> func) override;
9995
void setTrack(track_idx_t t) override;
10096
void add(EngravingItem*) override;
10197
void remove(EngravingItem*) override;

src/engraving/dom/beam.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,6 @@ class Beam final : public BeamBase
5454
public:
5555
~Beam();
5656

57-
// Score Tree functions
58-
EngravingObject* scanParent() const override;
59-
6057
Beam* clone() const override { return new Beam(*this); }
6158
PointF pagePos() const override; ///< position in page coordinates
6259
PointF canvasPos() const override; ///< position in page coordinates

src/engraving/dom/box.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -994,6 +994,12 @@ void TBox::resetText(Text* text)
994994
text->setParent(this);
995995
}
996996

997+
void TBox::scanElements(std::function<void(EngravingItem*)> func)
998+
{
999+
m_text->scanElements(func);
1000+
Box::scanElements(func);
1001+
}
1002+
9971003
//---------------------------------------------------------
9981004
// drop
9991005
//---------------------------------------------------------

0 commit comments

Comments
 (0)