GraphicalStaffEntryLink.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import {StaffEntryLink} from "../VoiceData/StaffEntryLink";
  2. import {GraphicalStaffEntry} from "./GraphicalStaffEntry";
  3. import {GraphicalNote} from "./GraphicalNote";
  4. export class GraphicalStaffEntryLink {
  5. private staffEntryLink: StaffEntryLink;
  6. private graphicalLinkedStaffEntries: GraphicalStaffEntry[] = [];
  7. constructor(staffEntryLink: StaffEntryLink) {
  8. this.staffEntryLink = staffEntryLink;
  9. this.initialize();
  10. }
  11. public get GetStaffEntryLink(): StaffEntryLink {
  12. return this.staffEntryLink;
  13. }
  14. public get GraphicalLinkedStaffEntries(): GraphicalStaffEntry[] {
  15. return this.graphicalLinkedStaffEntries;
  16. }
  17. public set GraphicalLinkedStaffEntries(value: GraphicalStaffEntry[]) {
  18. this.graphicalLinkedStaffEntries = value;
  19. }
  20. public isFilled(): boolean {
  21. for (let i: number = 0; i < this.graphicalLinkedStaffEntries.length; i++) {
  22. if (this.graphicalLinkedStaffEntries[i] === undefined) {
  23. return false;
  24. }
  25. }
  26. return true;
  27. }
  28. public getLinkedStaffEntriesGraphicalNotes(graphicalStaffEntry: GraphicalStaffEntry): GraphicalNote[] {
  29. if (this.graphicalLinkedStaffEntries.indexOf(graphicalStaffEntry) !== -1) {
  30. let notes: GraphicalNote[] = [];
  31. for (let idx: number = 0, len: number = this.graphicalLinkedStaffEntries.length; idx < len; ++idx) {
  32. let graphicalLinkedStaffEntry: GraphicalStaffEntry = this.graphicalLinkedStaffEntries[idx];
  33. for (let idx2: number = 0, len2: number = graphicalLinkedStaffEntry.notes.length; idx2 < len2; ++idx2) {
  34. let graphicalNotes: GraphicalNote[] = graphicalLinkedStaffEntry.notes[idx2];
  35. for (let idx3: number = 0, len3: number = graphicalNotes.length; idx3 < len3; ++idx3) {
  36. let graphicalNote: GraphicalNote = graphicalNotes[idx3];
  37. if (graphicalNote.sourceNote.ParentStaffEntry.Link !== undefined
  38. && graphicalNote.sourceNote.ParentVoiceEntry === this.staffEntryLink.GetVoiceEntry) {
  39. notes.push(graphicalNote);
  40. }
  41. }
  42. }
  43. }
  44. return notes;
  45. }
  46. return undefined;
  47. }
  48. private initialize(): void {
  49. for (let idx: number = 0, len: number = this.staffEntryLink.LinkStaffEntries.length; idx < len; ++idx) {
  50. this.graphicalLinkedStaffEntries.push(undefined);
  51. }
  52. }
  53. }