annotate src/app/visualisations/instants/instants.component.ts @ 381:b220ed78a250

Rig up instants and add dynamic colour selection to feature components. Structure of a derived WaveComponent is now pretty clear, some refactoring is in order.
author Lucas Thompson <dev@lucas.im>
date Wed, 31 May 2017 17:09:36 +0100
parents
children 1241ca979fd9
rev   line source
dev@381 1 /**
dev@381 2 * Created by lucast on 31/05/2017.
dev@381 3 */
dev@381 4 import {WavesComponent} from '../waves-base.component';
dev@381 5 import {
dev@381 6 AfterViewInit,
dev@381 7 ChangeDetectionStrategy,
dev@381 8 Component,
dev@381 9 ElementRef,
dev@381 10 Input,
dev@381 11 ViewChild
dev@381 12 } from '@angular/core';
dev@381 13 import {Instant} from '../FeatureUtilities';
dev@381 14 import Waves from 'waves-ui-piper';
dev@381 15
dev@381 16 @Component({
dev@381 17 selector: 'ugly-instants',
dev@381 18 templateUrl: '../waves-template.html',
dev@381 19 styleUrls: ['../waves-template.css'],
dev@381 20 changeDetection: ChangeDetectionStrategy.OnPush
dev@381 21 })
dev@381 22 export class InstantsComponent extends WavesComponent implements AfterViewInit {
dev@381 23 @ViewChild('track') trackDiv: ElementRef;
dev@381 24
dev@381 25 private mFeature: Instant[];
dev@381 26 private height: number; // As it stands, height is fixed. Store once onInit.
dev@381 27
dev@381 28 @Input() set instants(instants: Instant[]) {
dev@381 29 this.mFeature = instants;
dev@381 30 this.update();
dev@381 31 }
dev@381 32
dev@381 33 get instants(): Instant[] {
dev@381 34 return this.mFeature;
dev@381 35 }
dev@381 36
dev@381 37 ngAfterViewInit(): void {
dev@381 38 this.height = this.trackDiv.nativeElement.getBoundingClientRect().height;
dev@381 39 this.renderTimeline(this.trackDiv);
dev@381 40 this.update();
dev@381 41 }
dev@381 42
dev@381 43 update(): void {
dev@381 44 if (!this.waveTrack || !this.instants) { return; }
dev@381 45 this.clearTimeline(this.trackDiv);
dev@381 46
dev@381 47 this.addLayer(
dev@381 48 new Waves.helpers.TickLayer(
dev@381 49 this.instants,
dev@381 50 {
dev@381 51 height: this.height,
dev@381 52 color: this.colour,
dev@381 53 labelPosition: 'bottom',
dev@381 54 shadeSegments: true
dev@381 55 }
dev@381 56 ),
dev@381 57 this.waveTrack,
dev@381 58 this.timeline.timeContext
dev@381 59 );
dev@381 60 }
dev@381 61 }