annotate src/app/visualisations/tracks/tracks.components.ts @ 394:f45a916eb5b1

Use the cross hair layer for notes, tracks and curve. This involved bodging in unit to ShapedFeatureData, which isn't particularly easy to do because this isn't an encapsulated type. Need to come back to improving this, as I am monkey-patching a unit property onto Arrays etc.
author Lucas Thompson <dev@lucas.im>
date Thu, 01 Jun 2017 18:55:55 +0100
parents 7ef6c8089801
children 6672496ff32e
rev   line source
dev@372 1 /**
dev@372 2 * Created by lucas on 30/05/2017.
dev@372 3 */
dev@390 4 import {
dev@392 5 InspectableVerticallyBoundedComponent,
dev@390 6 VerticallyBounded,
dev@392 7 VerticalScaleRenderer,
dev@392 8 VerticalValueInspectorRenderer,
dev@390 9 } from '../waves-base.component';
dev@372 10 import {
dev@372 11 ChangeDetectionStrategy,
dev@372 12 Component,
dev@372 13 Input,
dev@378 14 } from '@angular/core';
dev@378 15 import {TracksFeature} from 'piper/HigherLevelUtilities';
dev@372 16 import Waves from 'waves-ui-piper';
dev@378 17 import {generatePlotData, PlotLayerData} from '../FeatureUtilities';
dev@372 18
dev@372 19 @Component({
dev@372 20 selector: 'ugly-tracks',
dev@372 21 templateUrl: '../waves-template.html',
dev@372 22 styleUrls: ['../waves-template.css'],
dev@390 23 changeDetection: ChangeDetectionStrategy.OnPush,
dev@392 24 providers: [
dev@392 25 {provide: VerticallyBounded, useExisting: TracksComponent },
dev@392 26 {provide: VerticalScaleRenderer, useExisting: TracksComponent},
dev@392 27 {provide: VerticalValueInspectorRenderer, useExisting: TracksComponent},
dev@392 28 ],
dev@372 29 })
dev@390 30 export class TracksComponent
dev@392 31 extends InspectableVerticallyBoundedComponent<TracksFeature> {
dev@390 32
dev@372 33 private currentState: PlotLayerData[];
dev@372 34
dev@372 35 @Input() set tracks(input: TracksFeature) {
dev@383 36 this.feature = input;
dev@372 37 }
dev@372 38
dev@390 39 get range(): [number, number] {
dev@390 40 return this.currentState && this.currentState.length > 0 ?
dev@390 41 this.currentState[0].yDomain : null;
dev@390 42 }
dev@390 43
dev@383 44 protected get featureLayers(): Layer[] {
dev@383 45 this.currentState = generatePlotData(this.feature);
dev@383 46 return this.currentState.map(feature => new Waves.helpers.LineLayer(
dev@383 47 feature.data, {
dev@383 48 color: this.colour,
dev@383 49 height: this.height,
dev@383 50 yDomain: feature.yDomain
dev@383 51 })
dev@383 52 );
dev@383 53 }
dev@372 54
dev@383 55 protected get postAddMap() {
dev@383 56 return (layer, index) => {
dev@383 57 layer.start = this.currentState[index].startTime;
dev@383 58 layer.duration = this.currentState[index].duration;
dev@383 59 layer.update();
dev@383 60 };
dev@372 61 }
dev@372 62 }