@@ -370,16 +370,17 @@ MuseScore {
370370 property var _ddNotes: { {
371371 var dd= _degrees .map (function (e ) { return {text: e, step: e}});
372372 // dd.unshift({text: '<html><span style="font-family:\'MScore Text\'; font-size: 20px; text-align: center; vertical-align: middle">\uE4E5</span></html>', step: 'R'});
373- dd .unshift ({text: ' (R)' , step: ' R' });
374373 // dd.unshift({text: String.fromCharCode(7694), step: 'R'});
374+ dd .unshift ({text: ' (R)' , step: ' R' });
375375 dd .unshift ({text: ' ' , step: ' ' });
376376 return dd;
377377 }
378378 }
379379
380380 property var _ddGridNotes: { {
381- var dd = [' ' ];
382- dd = dd .concat (_griddegrees);
381+ var dd= _griddegrees .map (function (e ) { return {text: e, step: e}});
382+ dd .unshift ({text: ' (R)' , step: ' R' });
383+ dd .unshift ({text: ' ' , step: ' ' });
383384 return dd;
384385 }
385386 }
@@ -482,22 +483,63 @@ MuseScore {
482483 var p = null ;
483484 if (raw .gridType === ' grid' ) {
484485 p = [];
485- for (var j = 0 ; j < _max_steps; j++ ) {
486- var sn = raw .steps .get (j);
487- if (sn .degree !== ' ' ) {
486+ // for (var j = 0; j < _max_steps; j++) {
487+ // var sn = raw.steps.get(j);
488+ // if (sn.degree !== '') {
489+ // var d = _griddegrees.indexOf(sn.degree);
490+ // if (d > -1)
491+ // p.push(sn.degree); // we keep the degree !!!
492+ // } else
493+ // break;
494+ // }
495+ // 2.4.0 adding in reverse order
496+ for (var j = (_max_steps- 1 ); j >= 0 ; j-- ) {
497+ var sn = raw .steps .get (j);
498+ if (sn .degree === ' R' ) {
499+ p .unshift ({" note" : null , " duration" : sn .duration });
500+ }
501+ else if (sn .degree !== ' ' ) {
488502 var d = _griddegrees .indexOf (sn .degree );
489503 if (d > - 1 )
490- p .push (sn .degree ); // we keep the degree !!!
491- } else
492- break ;
493- }
504+ p .unshift ({" note" : sn .degree , " duration" : sn .duration }); // we keep the degree !!!
505+ } else if (p .length === 0 ) {
506+ continue ;
507+ }
508+ // else
509+ // p.unshift({"note": null, "duration": sn.duration});
510+ }
494511
495512 if (p .length == 0 ) {
496513 break ;
497514 }
498- }
515+
516+
517+
499518
500- // 1.2) Retrieving loop mode
519+ // 1.2) Completing the pattern to have a round duration
520+ if (chkAdaptativeMeasure .checked && chkStrictLayout .checked ) {
521+ var total = p .map (function (e ) {
522+ return e .duration
523+ }).reduce (function (t , n ) {
524+ return t + n;
525+ });
526+ if (total < Math .ceil (total)) {
527+ var inc = Math .ceil (total) - total;
528+ console .log (" adding a rest of " + inc);
529+ p .push ({
530+ " note" : null ,
531+ " duration" : inc
532+ });
533+ } else
534+ console .log (" !! Measure is complete. Don't need to add some rests" );
535+ } else
536+ console .log (" !! Don't need to check for measure completness" );
537+
538+
539+ debugO (" after cleaning" , p);
540+ }
541+
542+ // 1.3) Retrieving loop mode
501543 var mode = raw .loopMode ;
502544 mode = _loops .filter (function (e ) {return e .id === mode})[0 ];
503545 console .log (" looping mode : " + mode .label );
@@ -511,6 +553,7 @@ MuseScore {
511553 " gridType" : raw .gridType ,
512554 };
513555 patts .push (pattern);
556+ debugO (" ready" ,pattern .notes ); // debug
514557
515558 }
516559
@@ -578,35 +621,42 @@ MuseScore {
578621 // if (pp.notes.length==1 && pp.notes[0]==null) {
579622 if (pp .gridType !== " grid" ) {
580623 // Chord mode: take only the notes of the chord
581- steps = chord .chordnotes .map (function (e ) { return parseInt (e .note ); }).sort (function (a ,b ) { return a- b;});
624+ var nns = chord .chordnotes .map (function (e ) { return parseInt (e .note ); }).sort (function (a ,b ) { return a- b;});
582625
583- console .log (" ~~~~Dealing with the ChordNotes~~~~~" + pp .gridType )
626+ console .log (" ~~~~Dealing with the ChordNotes~~~~~" + pp .gridType )
584627 if (chord .bass != null ) {
585628 console .log (" ~~~~Dealing with the bass~~~~~" )
586- console .log (" Steps before: " + steps );
629+ console .log (" nns before: " + nns );
587630 var bass= chord .bass .key ;
588- var idx= steps .indexOf (bass);
589- steps .pop (); // retirer le "12"
590- console .log (" Steps without 12: " + steps);
591- steps= steps .concat (steps .splice (0 ,idx).map (function (e ){ return e+ 12 }));
592- console .log (" Steps rotated: " + steps);
593- steps= steps .concat (12 + bass);
594- console .log (" Steps with bass+12: " + steps);
631+ var idx= nns .indexOf (bass);
632+ nns .pop (); // retirer le "12"
633+ console .log (" nns without 12: " + nns);
634+ nns= nns .concat (nns .splice (0 ,idx).map (function (e ){ return e+ 12 }));
635+ console .log (" nns rotated: " + nns);
636+ nns= nns .concat (12 + bass);
637+ console .log (" nns with bass+12: " + nns);
638+
595639 }
596640
597- if (pp .gridType == " chorddown" ) steps= steps .reverse ();
641+ steps= nns .map (function (e ) { return { note: e, duration: 1 }});
642+
643+ if (pp .gridType == " chorddown" ) steps= reversePattern (steps);
598644
599645 } else {
600646 // Traditional mode: pattern based
601647 for (var n = 0 ; n < pp .notes .length ; n++ ) {
602- var ip = parseInt (pp .notes [n]) - 1 ; // TODO: This is not clean: using a label "1" and trying to deduce the valid array index
648+ var degree= pp .notes [n];
649+ var inScale = null ;
650+ if (degree .note !== null ) {
651+ var ip = parseInt (degree .note ) - 1 ; // TODO: This is not clean: using a label "1" and trying to deduce the valid array index
603652
604653 console .log (ip + " --" + (ip % 7 ) + " --" + Math .floor (ip / 7 ) + " --" + (Math .floor (ip / 7 ) * 12 ) + " **" + scale[ip % 7 ] + " **" + (scale[ip % 7 ] + (Math .floor (ip / 7 ) * 12 )));
605654
606- var inScale = (scale[ip % 7 ]) + (Math .floor (ip / 7 ) * 12 );
607-
655+ inScale = (scale[ip % 7 ]) + (Math .floor (ip / 7 ) * 12 );
656+ }
608657 console .log (n + " : " + pp .notes [n].note + " --> " + ip + " --> " + inScale);
609- steps .push (inScale);
658+ var step= {note: inScale, duration: degree .duration };
659+ steps .push (step);
610660 }
611661 }
612662
@@ -620,7 +670,7 @@ MuseScore {
620670
621671 var local = extendPattern (pattern);
622672 // tweak the representation
623- local .representation = (pattern .name && pattern .name !== " " ) ? pattern .name : pp .notes .join (" /" );
673+ local .representation = (pattern .name && pattern .name !== " " ) ? pattern .name : pp .notes .map ( function ( e ) { e . note }). filter ( function ( e ) { e !== null }) . join (" /" );
624674 var subpatterns = local[" subpatterns" ];
625675
626676 // console.log("# subpatterns: "+subpatterns.length);
@@ -640,6 +690,7 @@ MuseScore {
640690 var notes = [];
641691
642692 var p= (! chkInvert .checked || ((r % 2 ) == 0 ))? basesteps: reversePattern (basesteps);
693+
643694 for (var j = 0 ; j < p .length ; j++ ) {
644695 console .log (" >>> Looking at note " + j + " : " + p[j].note );
645696 // notes.push(root + p[j]);
@@ -666,6 +717,7 @@ MuseScore {
666717 }
667718
668719 return pages;
720+ // return [];
669721
670722 }
671723 function printWorkout_forScale () {
@@ -1080,7 +1132,8 @@ MuseScore {
10801132
10811133 if (adaptativeMeasure) {
10821134 // beatsByMeasure = (pages[i][j].gridType!=="grid")?pages[i][j].notes.length:signatureForPattern(pages[i][j].notes.length);
1083- beatsByMeasure = (pages[i][j].gridType !== undefined && pages[i][j].gridType !== " grid" )? pages[i][j].notes .length : signatureForPattern (pages[i][j].notes );
1135+ // beatsByMeasure = (pages[i][j].gridType!==undefined && pages[i][j].gridType!=="grid")?pages[i][j].notes.length:signatureForPattern(pages[i][j].notes);
1136+ beatsByMeasure = signatureForPattern (pages[i][j].notes );
10841137 console .log (" recomputing beatsByMeasure to " + beatsByMeasure+ " (#2) / gridType: " + pages[i][j].gridType );
10851138 } else {
10861139 beatsByMeasure = 4 ;
@@ -2756,9 +2809,6 @@ MuseScore {
27562809 }
27572810
27582811 Binding on currentIndex {
2759- // value: model.map(function (e) {
2760- // return e[lstStep.valueRole]
2761- // }).indexOf(note);
27622812 value: {
27632813 _ddNotes .map (function (e ) {
27642814 return e[lstStep .valueRole ]
@@ -2800,21 +2850,49 @@ MuseScore {
28002850
28012851 enabled: gridType=== " grid"
28022852
2853+ textRole: " text"
2854+ property var valueRole: " step"
2855+
28032856 onActivated: {
28042857 console .log (" degree at " + stepIndex+ " of " + patternIndex+ " : " + degree);
2805- degree = model[currentIndex];
2858+ degree = model[currentIndex][valueRole] ;
28062859 workoutName = undefined ; // resetting the name of the
28072860 console .log (" ==> now degree: " + degree);
28082861 }
28092862
28102863 Binding on currentIndex {
2811- value: lstGStep .model .indexOf (degree)
2864+ // value: lstGStep.model.indexOf(degree)
2865+ value: {
2866+ _ddGridNotes .map (function (e ) {
2867+ return e[lstGStep .valueRole ]
2868+ }).indexOf (note);
2869+ }
28122870 }
28132871
28142872
28152873 editable: false
28162874 Layout .alignment : Qt .AlignLeft | Qt .QtAlignBottom
28172875 implicitWidth: 30
2876+
2877+ delegate: ItemDelegate {
2878+ contentItem: Text {
2879+ text: modelData[lstGStep .textRole ]
2880+ // textFormat: Text.RichText
2881+ anchors .verticalCenter : parent .verticalCenter
2882+ font: lstGStep .font
2883+ }
2884+ highlighted: lstStep .highlightedIndex === index
2885+
2886+ }
2887+
2888+ contentItem: Text {
2889+ text: lstGStep .displayText
2890+ // textFormat: Text.RichText
2891+ verticalAlignment: Text .AlignVCenter
2892+ anchors .verticalCenter : parent .verticalCenter
2893+ horizontalAlignment: Qt .AlignHCenter
2894+ }
2895+
28182896 }
28192897 }
28202898
0 commit comments