dev@393: /** dev@393: * Created by lucast on 01/06/2017. dev@393: */ dev@393: import { dev@393: AfterViewInit, dev@393: ChangeDetectionStrategy, dev@393: Component, dev@393: ContentChildren, dev@396: Input, dev@487: OnDestroy, dev@393: QueryList dev@393: } from '@angular/core'; dev@393: import { dev@488: PlayheadRenderer, dev@393: VerticalValueInspectorRenderer dev@393: } from './waves-base.component'; dev@393: import {VerticalScaleComponent} from './vertical-scale.component'; dev@403: import { dev@403: RenderLoopService, dev@403: TaskRemover dev@403: } from '../services/render-loop/render-loop.service'; dev@415: import {AudioPlayerService} from '../services/audio-player/audio-player.service'; dev@393: dev@393: @Component({ dev@393: selector: 'ugly-cross-hair-inspector', dev@393: template: '', dev@488: changeDetection: ChangeDetectionStrategy.OnPush, dev@488: providers: [ dev@488: {provide: PlayheadRenderer, useExisting: CrossHairInspectorComponent } dev@488: ] dev@393: }) dev@393: export class CrossHairInspectorComponent extends VerticalScaleComponent dev@487: implements AfterViewInit, OnDestroy { dev@393: @ContentChildren( dev@393: VerticalValueInspectorRenderer dev@393: ) inspectorRenderers: QueryList; dev@396: @Input() unit: string; dev@403: @Input() set isAnimated(isAnimated: boolean) { dev@403: this.mIsAnimated = isAnimated; dev@403: if (this.removers.length) { dev@403: this.removers.forEach(remove => remove()); dev@403: this.removers = []; dev@403: } dev@403: if (isAnimated) { dev@403: this.addTasks(); dev@403: } dev@403: } dev@403: dev@403: private removers: TaskRemover[]; dev@403: private mIsAnimated: boolean; dev@393: dev@415: constructor(private renderLoop: RenderLoopService, dev@415: private player: AudioPlayerService) { dev@397: super(); dev@403: this.removers = []; dev@397: } dev@397: dev@393: ngAfterViewInit(): void { dev@393: super.ngAfterViewInit(); dev@393: this.inspectorRenderers.forEach(renderer => { dev@403: renderer.renderInspector(this.cachedRange, this.unit); dev@415: renderer.updatePosition(this.player.getCurrentTime()); dev@393: }); dev@403: this.addTasks(); dev@403: } dev@403: dev@487: ngOnDestroy(): void { dev@487: this.removers.forEach(remove => remove()); dev@487: } dev@487: dev@403: private addTasks(): void { dev@403: if (this.inspectorRenderers && this.mIsAnimated) { dev@403: this.inspectorRenderers.forEach(renderer => { dev@403: this.removers.push( dev@403: this.renderLoop.addPlayingTask(renderer.updatePosition) dev@403: ); dev@403: }); dev@403: } dev@393: } dev@393: }