dev@388: /**
dev@388: * Created by lucas on 01/06/2017.
dev@388: */
dev@488: import {
dev@488: PlayheadManager,
dev@488: PlayheadRenderer,
dev@488: VerticalScaleRenderer
dev@488: } from './waves-base.component';
dev@388: import {
dev@388: ChangeDetectionStrategy,
dev@388: Component,
dev@388: ContentChildren,
dev@388: QueryList,
dev@388: AfterViewInit
dev@393: } from '@angular/core';
dev@388:
dev@388: @Component({
dev@388: selector: 'ugly-vertical-scale',
dev@388: template: '',
dev@488: changeDetection: ChangeDetectionStrategy.OnPush,
dev@488: providers: [
dev@488: {provide: PlayheadRenderer, useExisting: VerticalScaleComponent }
dev@488: ]
dev@388: })
dev@488: export class VerticalScaleComponent implements AfterViewInit, PlayheadRenderer {
dev@388:
dev@393: @ContentChildren(
dev@393: VerticalScaleRenderer
dev@488: ) bounded: QueryList>;
dev@488: @ContentChildren(
dev@488: PlayheadRenderer
dev@488: ) seekable: QueryList;
dev@488: protected cachedRange: any;
dev@388:
dev@388: ngAfterViewInit(): void {
dev@388: this.bounded.forEach(component => {
dev@489: this.cachedRange = component.labels;
dev@403: if (this.cachedRange) {
dev@403: component.renderScale(this.cachedRange);
dev@388: }
dev@388: });
dev@388: }
dev@488:
dev@488: renderPlayhead(initialTime: number, colour: string): PlayheadManager {
dev@488: const rendered = this.seekable
dev@488: .filter(x => x !== this) // why does QueryList consider itself as a child?
dev@488: .map(component => component.renderPlayhead(initialTime, colour));
dev@488: return {
dev@488: update: (time: number) => {
dev@488: rendered.forEach(component => component.update(time));
dev@488: },
dev@488: remove: () => rendered.map(component => component.remove)
dev@488: };
dev@488: }
dev@388: }