feat: implemented global marker track
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
import { Expose } from 'class-transformer';
|
||||
import { GlobalTrackType, KGGlobalTrack } from './KGGlobalTrack';
|
||||
|
||||
export class KGChordTrack extends KGGlobalTrack {
|
||||
@Expose()
|
||||
protected override __type: string = 'KGChordTrack';
|
||||
|
||||
constructor(id: string = 'global-chord', trackIndex: number = 3, name: string = 'Chord') {
|
||||
super(id, trackIndex, GlobalTrackType.Chord, name, []);
|
||||
this.__type = 'KGChordTrack';
|
||||
}
|
||||
|
||||
public override getCurrentType(): string {
|
||||
return 'KGChordTrack';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
import { Expose, Type } from 'class-transformer';
|
||||
import { KGGlobalRegion } from '../region/KGGlobalRegion';
|
||||
import { KGMarkerRegion } from '../region/KGMarkerRegion';
|
||||
|
||||
export enum GlobalTrackType {
|
||||
Marker = 'marker',
|
||||
Tempo = 'tempo',
|
||||
Signature = 'signature',
|
||||
Chord = 'chord',
|
||||
}
|
||||
|
||||
export class KGGlobalTrack {
|
||||
@Expose()
|
||||
protected __type: string = 'KGGlobalTrack';
|
||||
|
||||
@Expose()
|
||||
protected id: string = '';
|
||||
|
||||
@Expose()
|
||||
protected trackIndex: number = 0;
|
||||
|
||||
@Expose()
|
||||
protected type: GlobalTrackType = GlobalTrackType.Marker;
|
||||
|
||||
@Expose()
|
||||
protected name: string = '';
|
||||
|
||||
@Expose()
|
||||
@Type(() => KGGlobalRegion, {
|
||||
discriminator: {
|
||||
property: '__type',
|
||||
subTypes: [
|
||||
{ value: KGGlobalRegion, name: 'KGGlobalRegion' },
|
||||
{ value: KGMarkerRegion, name: 'KGMarkerRegion' },
|
||||
],
|
||||
},
|
||||
})
|
||||
protected regions: KGGlobalRegion[] = [];
|
||||
|
||||
constructor(
|
||||
id: string = '',
|
||||
trackIndex: number = 0,
|
||||
type: GlobalTrackType = GlobalTrackType.Marker,
|
||||
name: string = '',
|
||||
regions: KGGlobalRegion[] = []
|
||||
) {
|
||||
this.id = id;
|
||||
this.trackIndex = trackIndex;
|
||||
this.type = type;
|
||||
this.name = name;
|
||||
this.regions = regions;
|
||||
}
|
||||
|
||||
public getId(): string {
|
||||
return this.id;
|
||||
}
|
||||
|
||||
public setId(id: string): void {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public getTrackIndex(): number {
|
||||
return this.trackIndex;
|
||||
}
|
||||
|
||||
public setTrackIndex(trackIndex: number): void {
|
||||
this.trackIndex = trackIndex;
|
||||
this.regions.forEach(region => {
|
||||
region.setTrackIndex(trackIndex);
|
||||
region.setTrackId(this.id);
|
||||
});
|
||||
}
|
||||
|
||||
public getType(): GlobalTrackType {
|
||||
return this.type;
|
||||
}
|
||||
|
||||
public setType(type: GlobalTrackType): void {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public getName(): string {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public setName(name: string): void {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public getRegions(): KGGlobalRegion[] {
|
||||
return this.regions;
|
||||
}
|
||||
|
||||
public setRegions(regions: KGGlobalRegion[]): void {
|
||||
this.regions = regions.map(region => {
|
||||
region.setTrackId(this.id);
|
||||
region.setTrackIndex(this.trackIndex);
|
||||
return region;
|
||||
});
|
||||
}
|
||||
|
||||
public addRegion(region: KGGlobalRegion): void {
|
||||
region.setTrackId(this.id);
|
||||
region.setTrackIndex(this.trackIndex);
|
||||
this.regions.push(region);
|
||||
}
|
||||
|
||||
public removeRegion(regionId: string): void {
|
||||
this.regions = this.regions.filter(region => region.getId() !== regionId);
|
||||
}
|
||||
|
||||
public getCurrentType(): string {
|
||||
return 'KGGlobalTrack';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
import { Expose } from 'class-transformer';
|
||||
import { GlobalTrackType, KGGlobalTrack } from './KGGlobalTrack';
|
||||
|
||||
export class KGMarkerTrack extends KGGlobalTrack {
|
||||
@Expose()
|
||||
protected override __type: string = 'KGMarkerTrack';
|
||||
|
||||
constructor(id: string = 'global-marker', trackIndex: number = 0, name: string = 'Marker') {
|
||||
super(id, trackIndex, GlobalTrackType.Marker, name, []);
|
||||
this.__type = 'KGMarkerTrack';
|
||||
}
|
||||
|
||||
public override getCurrentType(): string {
|
||||
return 'KGMarkerTrack';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
import { Expose } from 'class-transformer';
|
||||
import { GlobalTrackType, KGGlobalTrack } from './KGGlobalTrack';
|
||||
|
||||
export class KGSignatureTrack extends KGGlobalTrack {
|
||||
@Expose()
|
||||
protected override __type: string = 'KGSignatureTrack';
|
||||
|
||||
constructor(id: string = 'global-signature', trackIndex: number = 2, name: string = 'Signature') {
|
||||
super(id, trackIndex, GlobalTrackType.Signature, name, []);
|
||||
this.__type = 'KGSignatureTrack';
|
||||
}
|
||||
|
||||
public override getCurrentType(): string {
|
||||
return 'KGSignatureTrack';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
import { Expose } from 'class-transformer';
|
||||
import { GlobalTrackType, KGGlobalTrack } from './KGGlobalTrack';
|
||||
|
||||
export class KGTempoTrack extends KGGlobalTrack {
|
||||
@Expose()
|
||||
protected override __type: string = 'KGTempoTrack';
|
||||
|
||||
constructor(id: string = 'global-tempo', trackIndex: number = 1, name: string = 'Tempo') {
|
||||
super(id, trackIndex, GlobalTrackType.Tempo, name, []);
|
||||
this.__type = 'KGTempoTrack';
|
||||
}
|
||||
|
||||
public override getCurrentType(): string {
|
||||
return 'KGTempoTrack';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
import { KGChordTrack } from './KGChordTrack';
|
||||
import { KGGlobalTrack } from './KGGlobalTrack';
|
||||
import { KGMarkerTrack } from './KGMarkerTrack';
|
||||
import { KGSignatureTrack } from './KGSignatureTrack';
|
||||
import { KGTempoTrack } from './KGTempoTrack';
|
||||
|
||||
export function createDefaultGlobalTracks(): KGGlobalTrack[] {
|
||||
return [
|
||||
new KGMarkerTrack(),
|
||||
new KGTempoTrack(),
|
||||
new KGSignatureTrack(),
|
||||
new KGChordTrack(),
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
export { KGGlobalTrack, GlobalTrackType } from './KGGlobalTrack';
|
||||
export { KGMarkerTrack } from './KGMarkerTrack';
|
||||
export { KGTempoTrack } from './KGTempoTrack';
|
||||
export { KGSignatureTrack } from './KGSignatureTrack';
|
||||
export { KGChordTrack } from './KGChordTrack';
|
||||
export { createDefaultGlobalTracks } from './createDefaultGlobalTracks';
|
||||
Reference in New Issue
Block a user