diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/app/visualisations/instants/instants.component.ts	Wed May 31 17:09:36 2017 +0100
@@ -0,0 +1,61 @@
+/**
+ * Created by lucast on 31/05/2017.
+ */
+import {WavesComponent} from '../waves-base.component';
+import {
+  AfterViewInit,
+  ChangeDetectionStrategy,
+  Component,
+  ElementRef,
+  Input,
+  ViewChild
+} from '@angular/core';
+import {Instant} from '../FeatureUtilities';
+import Waves from 'waves-ui-piper';
+
+@Component({
+  selector: 'ugly-instants',
+  templateUrl: '../waves-template.html',
+  styleUrls: ['../waves-template.css'],
+  changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class InstantsComponent extends WavesComponent implements AfterViewInit {
+  @ViewChild('track') trackDiv: ElementRef;
+
+  private mFeature: Instant[];
+  private height: number; // As it stands, height is fixed. Store once onInit.
+
+  @Input() set instants(instants: Instant[]) {
+    this.mFeature = instants;
+    this.update();
+  }
+
+  get instants(): Instant[] {
+    return this.mFeature;
+  }
+
+  ngAfterViewInit(): void {
+    this.height = this.trackDiv.nativeElement.getBoundingClientRect().height;
+    this.renderTimeline(this.trackDiv);
+    this.update();
+  }
+
+  update(): void {
+    if (!this.waveTrack || !this.instants) { return; }
+    this.clearTimeline(this.trackDiv);
+
+    this.addLayer(
+      new Waves.helpers.TickLayer(
+        this.instants,
+        {
+          height: this.height,
+          color: this.colour,
+          labelPosition: 'bottom',
+          shadeSegments: true
+        }
+      ),
+      this.waveTrack,
+      this.timeline.timeContext
+    );
+  }
+}