@@ -202,6 +202,52 @@ Score* createExcerpt(const QList<Part*>& parts)
202
202
return score;
203
203
}
204
204
205
+ // ---------------------------------------------------------
206
+ // cloneSpanner
207
+ // ---------------------------------------------------------
208
+
209
+ static void cloneSpanner (Spanner* s, Score* score, int dstTrack, int dstTrack2)
210
+ {
211
+ Spanner* ns = static_cast <Spanner*>(s->linkedClone ());
212
+ ns->setScore (score);
213
+ ns->setParent (0 );
214
+ ns->setTrack (dstTrack);
215
+ ns->setTrack2 (dstTrack2);
216
+ if (ns->type () == Element::Type::SLUR) {
217
+ //
218
+ // set start/end element for slur
219
+ //
220
+ ChordRest* cr1 = s->startCR ();
221
+ ChordRest* cr2 = s->endCR ();
222
+
223
+ ns->setStartElement (0 );
224
+ ns->setEndElement (0 );
225
+ for (Element* e : *cr1->links ()) {
226
+ ChordRest* cr = static_cast <ChordRest*>(e);
227
+ if (cr == cr1)
228
+ continue ;
229
+ if ((cr->score () == score) && (cr->tick () == ns->tick ()) && cr->track () == dstTrack) {
230
+ ns->setStartElement (cr);
231
+ break ;
232
+ }
233
+ }
234
+ for (Element* e : *cr2->links ()) {
235
+ ChordRest* cr = static_cast <ChordRest*>(e);
236
+ if (cr == cr2)
237
+ continue ;
238
+ if ((cr->score () == score) && (cr->tick () == ns->tick2 ()) && cr->track () == dstTrack2) {
239
+ ns->setEndElement (cr);
240
+ break ;
241
+ }
242
+ }
243
+ if (!ns->startElement ())
244
+ qDebug (" clone Slur: no start element" );
245
+ if (!ns->endElement ())
246
+ qDebug (" clone Slur: no end element" );
247
+ }
248
+ score->addSpanner (ns);
249
+ }
250
+
205
251
// ---------------------------------------------------------
206
252
// cloneStaves
207
253
// ---------------------------------------------------------
@@ -435,44 +481,8 @@ void cloneStaves(Score* oscore, Score* score, const QList<int>& map)
435
481
}
436
482
if (dstTrack == -1 )
437
483
continue ;
438
- Spanner* ns = static_cast <Spanner*>(s->linkedClone ());
439
- ns->setScore (score);
440
- ns->setParent (0 );
441
- ns->setTrack (dstTrack);
442
- ns->setTrack2 (dstTrack2);
443
- if (ns->type () == Element::Type::SLUR) {
444
- //
445
- // set start/end element for slur
446
- //
447
- ChordRest* cr1 = s->startCR ();
448
- ChordRest* cr2 = s->endCR ();
449
-
450
- ns->setStartElement (0 );
451
- ns->setEndElement (0 );
452
- for (Element* e : *cr1->links ()) {
453
- ChordRest* cr = static_cast <ChordRest*>(e);
454
- if (cr == cr1)
455
- continue ;
456
- if ((cr->score () == score) && (cr->tick () == ns->tick ())) {
457
- ns->setStartElement (cr);
458
- break ;
459
- }
460
- }
461
- for (Element* e : *cr2->links ()) {
462
- ChordRest* cr = static_cast <ChordRest*>(e);
463
- if (cr == cr2)
464
- continue ;
465
- if ((cr->score () == score) && (cr->tick () == ns->tick2 ())) {
466
- ns->setEndElement (cr);
467
- break ;
468
- }
469
- }
470
- if (!ns->startElement ())
471
- qDebug (" clone Slur: no start element" );
472
- if (!ns->endElement ())
473
- qDebug (" clone Slur: no end element" );
474
- }
475
- score->addSpanner (ns);
484
+
485
+ cloneSpanner (s, score, dstTrack, dstTrack2);
476
486
}
477
487
}
478
488
@@ -604,12 +614,7 @@ void cloneStaff(Staff* srcStaff, Staff* dstStaff)
604
614
}
605
615
if (dstTrack == -1 )
606
616
continue ;
607
- Spanner* ns = static_cast <Spanner*>(s->linkedClone ());
608
- ns->setScore (score);
609
- ns->setParent (0 );
610
- ns->setTrack (dstTrack);
611
- ns->setTrack2 (dstTrack2);
612
- score->addSpanner (ns);
617
+ cloneSpanner (s, score, dstTrack, dstTrack2);
613
618
}
614
619
}
615
620
@@ -739,12 +744,7 @@ void cloneStaff2(Staff* srcStaff, Staff* dstStaff, int stick, int etick)
739
744
}
740
745
if (dstTrack == -1 )
741
746
continue ;
742
- Spanner* ns = static_cast <Spanner*>(s->linkedClone ());
743
- ns->setScore (score);
744
- ns->setParent (0 );
745
- ns->setTrack (dstTrack);
746
- ns->setTrack2 (dstTrack2);
747
- score->addSpanner (ns);
747
+ cloneSpanner (s, score, dstTrack, dstTrack2);
748
748
}
749
749
}
750
750
0 commit comments