Pārlūkot izejas kodu

feat(invisible notes): do not display invisible time signature.

Add AbstractNotationInstruction.PrintObject (xml attribute that says whether the object should be printed)

Fix InstrumentReader reading first attribute instead of "symbol" attribute it was looking for
sschmidTU 6 gadi atpakaļ
vecāks
revīzija
af0770a451

+ 2 - 2
src/MusicalScore/Graphical/MusicSystemBuilder.ts

@@ -488,7 +488,7 @@ export class MusicSystemBuilder {
             measure.addKeyAtBegin(currentKey, previousKey, currentClef);
             measure.addKeyAtBegin(currentKey, previousKey, currentClef);
             keyAdded = true;
             keyAdded = true;
         }
         }
-        if (currentRhythm !== undefined) {
+        if (currentRhythm !== undefined && currentRhythm.PrintObject) {
             measure.addRhythmAtBegin(currentRhythm);
             measure.addRhythmAtBegin(currentRhythm);
             rhythmAdded = true;
             rhythmAdded = true;
         }
         }
@@ -615,7 +615,7 @@ export class MusicSystemBuilder {
         if (keyInstruction !== undefined) {
         if (keyInstruction !== undefined) {
             measure.addKeyAtBegin(keyInstruction, this.activeKeys[visStaffIdx], this.activeClefs[visStaffIdx]);
             measure.addKeyAtBegin(keyInstruction, this.activeKeys[visStaffIdx], this.activeClefs[visStaffIdx]);
         }
         }
-        if (rhythmInstruction !== undefined) {
+        if (rhythmInstruction !== undefined && rhythmInstruction.PrintObject) {
             measure.addRhythmAtBegin(rhythmInstruction);
             measure.addRhythmAtBegin(rhythmInstruction);
         }
         }
         measure.PositionAndShape.BorderLeft = 0.0;
         measure.PositionAndShape.BorderLeft = 0.0;

+ 18 - 7
src/MusicalScore/ScoreIO/InstrumentReader.ts

@@ -720,18 +720,27 @@ export class InstrumentReader {
       this.abstractInstructions.push([1, keyInstruction]);
       this.abstractInstructions.push([1, keyInstruction]);
     }
     }
     if (node.element("time") !== undefined) {
     if (node.element("time") !== undefined) {
-      let symbolEnum: RhythmSymbolEnum = RhythmSymbolEnum.NONE;
       const timeNode: IXmlElement = node.element("time");
       const timeNode: IXmlElement = node.element("time");
+      let symbolEnum: RhythmSymbolEnum = RhythmSymbolEnum.NONE;
+      let timePrintObject: boolean = true;
       if (timeNode !== undefined && timeNode.hasAttributes) {
       if (timeNode !== undefined && timeNode.hasAttributes) {
-        const firstAttr: IXmlAttribute = timeNode.firstAttribute;
-        if (firstAttr.name === "symbol") {
-          if (firstAttr.value === "common") {
+        const symbolAttribute: IXmlAttribute = timeNode.attribute("symbol");
+        if (symbolAttribute) {
+          if (symbolAttribute.value === "common") {
             symbolEnum = RhythmSymbolEnum.COMMON;
             symbolEnum = RhythmSymbolEnum.COMMON;
-          } else if (firstAttr.value === "cut") {
+          } else if (symbolAttribute.value === "cut") {
             symbolEnum = RhythmSymbolEnum.CUT;
             symbolEnum = RhythmSymbolEnum.CUT;
           }
           }
         }
         }
+
+        const printObjectAttribute: IXmlAttribute = timeNode.attribute("print-object");
+        if (printObjectAttribute) {
+          if (printObjectAttribute.value === "no") {
+            timePrintObject = false;
+          }
+        }
       }
       }
+
       let num: number = 0;
       let num: number = 0;
       let denom: number = 0;
       let denom: number = 0;
       const senzaMisura: boolean = (timeNode !== undefined && timeNode.element("senza-misura") !== undefined);
       const senzaMisura: boolean = (timeNode !== undefined && timeNode.element("senza-misura") !== undefined);
@@ -785,9 +794,11 @@ export class InstrumentReader {
           log.debug("InstrumentReader.addAbstractInstruction", errorMsg, ex);
           log.debug("InstrumentReader.addAbstractInstruction", errorMsg, ex);
         }
         }
 
 
-        this.abstractInstructions.push([1, new RhythmInstruction(
+        const newRhythmInstruction: RhythmInstruction = new RhythmInstruction(
           new Fraction(num, denom, 0, false), symbolEnum
           new Fraction(num, denom, 0, false), symbolEnum
-        )]);
+        );
+        newRhythmInstruction.PrintObject = timePrintObject;
+        this.abstractInstructions.push([1, newRhythmInstruction]);
       } else {
       } else {
         this.abstractInstructions.push([1, new RhythmInstruction(new Fraction(4, 4, 0, false), RhythmSymbolEnum.NONE)]);
         this.abstractInstructions.push([1, new RhythmInstruction(new Fraction(4, 4, 0, false), RhythmSymbolEnum.NONE)]);
       }
       }

+ 9 - 0
src/MusicalScore/VoiceData/Instructions/AbstractNotationInstruction.ts

@@ -7,6 +7,8 @@ export abstract class AbstractNotationInstruction {
     }
     }
 
 
     protected parent: SourceStaffEntry;
     protected parent: SourceStaffEntry;
+    /** States whether the object should be displayed. False if xmlNode.attribute("print-object").value = "no". */
+    private printObject: boolean = true;
 
 
     public get Parent(): SourceStaffEntry {
     public get Parent(): SourceStaffEntry {
         return this.parent;
         return this.parent;
@@ -15,4 +17,11 @@ export abstract class AbstractNotationInstruction {
         this.parent = value;
         this.parent = value;
     }
     }
 
 
+    public get PrintObject(): boolean {
+        return this.printObject;
+    }
+
+    public set PrintObject(value: boolean) {
+        this.printObject = value;
+    }
 }
 }