annotate src/app/visualisations/cross-hair-inspector.component.ts @ 407:6e14dd416e12

A play-head which attaches itself to WavesComponents.
author Lucas Thompson <dev@lucas.im>
date Sun, 04 Jun 2017 20:17:43 +0100
parents 40ea40ebc2b3
children 95d1f10129a3
rev   line source
dev@393 1 /**
dev@393 2 * Created by lucast on 01/06/2017.
dev@393 3 */
dev@393 4 import {
dev@393 5 AfterViewInit,
dev@393 6 ChangeDetectionStrategy,
dev@393 7 Component,
dev@393 8 ContentChildren,
dev@396 9 Input,
dev@393 10 QueryList
dev@393 11 } from '@angular/core';
dev@393 12 import {
dev@393 13 VerticalValueInspectorRenderer
dev@393 14 } from './waves-base.component';
dev@393 15 import {VerticalScaleComponent} from './vertical-scale.component';
dev@403 16 import {
dev@403 17 RenderLoopService,
dev@403 18 TaskRemover
dev@403 19 } from '../services/render-loop/render-loop.service';
dev@393 20
dev@393 21 @Component({
dev@393 22 selector: 'ugly-cross-hair-inspector',
dev@393 23 template: '<ng-content></ng-content>',
dev@393 24 changeDetection: ChangeDetectionStrategy.OnPush
dev@393 25 })
dev@393 26 export class CrossHairInspectorComponent extends VerticalScaleComponent
dev@393 27 implements AfterViewInit {
dev@393 28 @ContentChildren(
dev@393 29 VerticalValueInspectorRenderer
dev@393 30 ) inspectorRenderers: QueryList<VerticalValueInspectorRenderer>;
dev@396 31 @Input() unit: string;
dev@403 32 @Input() set isAnimated(isAnimated: boolean) {
dev@403 33 this.mIsAnimated = isAnimated;
dev@403 34 if (this.removers.length) {
dev@403 35 this.removers.forEach(remove => remove());
dev@403 36 this.removers = [];
dev@403 37 }
dev@403 38 if (isAnimated) {
dev@403 39 this.addTasks();
dev@403 40 }
dev@403 41 }
dev@403 42
dev@403 43 private removers: TaskRemover[];
dev@403 44 private mIsAnimated: boolean;
dev@393 45
dev@397 46 constructor(private renderLoop: RenderLoopService) {
dev@397 47 super();
dev@403 48 this.removers = [];
dev@397 49 }
dev@397 50
dev@393 51 ngAfterViewInit(): void {
dev@393 52 super.ngAfterViewInit();
dev@393 53 this.inspectorRenderers.forEach(renderer => {
dev@403 54 renderer.renderInspector(this.cachedRange, this.unit);
dev@393 55 });
dev@403 56 this.addTasks();
dev@403 57 }
dev@403 58
dev@403 59 private addTasks(): void {
dev@403 60 if (this.inspectorRenderers && this.mIsAnimated) {
dev@403 61 this.inspectorRenderers.forEach(renderer => {
dev@403 62 this.removers.push(
dev@403 63 this.renderLoop.addPlayingTask(renderer.updatePosition)
dev@403 64 );
dev@403 65 });
dev@403 66 }
dev@393 67 }
dev@393 68 }