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: }