multiTempoExpression.ts 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import {Fraction} from "../../../Common/DataObjects/fraction";
  2. import {SourceMeasure} from "../SourceMeasure";
  3. import {InstantaniousTempoExpression} from "./instantaniousTempoExpression";
  4. import {PlacementEnum} from "./abstractExpression";
  5. import {OSMDFontStyles} from "../../../Common/Enums/osmdFontStyles";
  6. import {AbstractTempoExpression} from "./abstractTempoExpression";
  7. import {ContinuousTempoExpression} from "./ContinuousExpressions/continuousTempoExpression";
  8. export class MultiTempoExpression implements IComparable<MultiTempoExpression>
  9. {
  10. constructor(sourceMeasure: SourceMeasure, timestamp: Fraction) {
  11. this.sourceMeasure = sourceMeasure;
  12. this.timestamp = timestamp;
  13. }
  14. private timestamp: Fraction;
  15. private sourceMeasure: SourceMeasure;
  16. private instantaniousTempo: InstantaniousTempoExpression;
  17. private continuousTempo: ContinuousTempoExpression;
  18. private expressions: Array<TempoExpressionEntry> = new Array<TempoExpressionEntry>();
  19. private combinedExpressionsText: string;
  20. public get Timestamp(): Fraction {
  21. return this.timestamp;
  22. }
  23. public get AbsoluteTimestamp(): Fraction {
  24. return this.sourceMeasure.AbsoluteTimestamp + this.timestamp;
  25. }
  26. public get SourceMeasureParent(): SourceMeasure {
  27. return this.sourceMeasure;
  28. }
  29. public set SourceMeasureParent(value: SourceMeasure) {
  30. this.sourceMeasure = value;
  31. }
  32. public get InstantaniousTempo(): InstantaniousTempoExpression {
  33. return this.instantaniousTempo;
  34. }
  35. public get ContinuousTempo(): ContinuousTempoExpression {
  36. return this.continuousTempo;
  37. }
  38. public get EntriesList(): Array<TempoExpressionEntry> {
  39. return this.expressions;
  40. }
  41. public get CombinedExpressionsText(): string {
  42. return this.combinedExpressionsText;
  43. }
  44. public set CombinedExpressionsText(value: string) {
  45. this.combinedExpressionsText = value;
  46. }
  47. public getPlacementOfFirstEntry(): PlacementEnum {
  48. var placement: PlacementEnum = PlacementEnum.Above;
  49. if (this.expressions.length > 0) {
  50. if (this.expressions[0].expression instanceof InstantaniousTempoExpression)
  51. placement = (<InstantaniousTempoExpression>(this.expressions[0].expression)).Placement;
  52. else if (this.expressions[0].expression instanceof ContinuousTempoExpression)
  53. placement = (<ContinuousTempoExpression>(this.expressions[0].expression)).Placement;
  54. }
  55. return placement;
  56. }
  57. public getFontstyleOfFirstEntry(): OSMDFontStyles {
  58. var fontStyle: OSMDFontStyles = OSMDFontStyles.Regular;
  59. if (this.expressions[0].expression instanceof InstantaniousTempoExpression)
  60. fontStyle = OSMDFontStyles.Bold;
  61. else if (this.expressions[0].expression instanceof ContinuousTempoExpression)
  62. fontStyle = OSMDFontStyles.Italic;
  63. return fontStyle;
  64. }
  65. public getFirstEntry(graphicalLabel: GraphicalLabel): AbstractGraphicalExpression {
  66. var indexOfFirstNotInstDynExpr: number = 0;
  67. if (this.expressions.length > 0) {
  68. if (this.expressions[indexOfFirstNotInstDynExpr].expression instanceof InstantaniousTempoExpression)
  69. return new GraphicalInstantaniousTempoExpression(<InstantaniousTempoExpression>(this.expressions[indexOfFirstNotInstDynExpr].expression), graphicalLabel);
  70. else if (this.expressions[indexOfFirstNotInstDynExpr].expression instanceof ContinuousTempoExpression)
  71. return new GraphicalContinuousTempoExpression(<ContinuousTempoExpression>(this.expressions[indexOfFirstNotInstDynExpr].expression), graphicalLabel);
  72. else return null;
  73. }
  74. return null;
  75. }
  76. public addExpression(abstractTempoExpression: AbstractTempoExpression, prefix: string): void {
  77. if (abstractTempoExpression instanceof InstantaniousTempoExpression) {
  78. this.instantaniousTempo = <InstantaniousTempoExpression>abstractTempoExpression;
  79. }
  80. else if (abstractTempoExpression instanceof ContinuousTempoExpression) {
  81. this.continuousTempo = <ContinuousTempoExpression>abstractTempoExpression;
  82. }
  83. var tempoExpressionEntry: TempoExpressionEntry = new TempoExpressionEntry();
  84. tempoExpressionEntry.prefix = prefix;
  85. tempoExpressionEntry.expression = abstractTempoExpression;
  86. tempoExpressionEntry.label = abstractTempoExpression.Label;
  87. this.expressions.push(tempoExpressionEntry);
  88. }
  89. public CompareTo(other: MultiTempoExpression): number {
  90. if (this.SourceMeasureParent.MeasureNumber > other.SourceMeasureParent.MeasureNumber)
  91. return 1;
  92. if (this.SourceMeasureParent.MeasureNumber < other.SourceMeasureParent.MeasureNumber)
  93. return -1;
  94. else {
  95. if (this.Timestamp.RealValue > other.Timestamp.RealValue)
  96. return 1;
  97. if (this.Timestamp.RealValue < other.Timestamp.RealValue)
  98. return -1;
  99. else return 0;
  100. }
  101. }
  102. }
  103. export class TempoExpressionEntry {
  104. public prefix: string;
  105. public expression: AbstractTempoExpression;
  106. public label: string;
  107. }