view src/app/visualisations/curve/curve.component.ts @ 477:e3cbf4c53e5e

Rename type and make it an abstract class to stop angular-cli complaining (I still don't understand this).
author Lucas Thompson <dev@lucas.im>
date Fri, 30 Jun 2017 16:25:58 +0100
parents 89674c064cda
children 64ed45a0bad3
line wrap: on
line source
/**
 * Created by lucas on 30/05/2017.
 */
import {
  ChangeDetectionStrategy,
  Component,
  Input,
  ViewChild
} from '@angular/core';
import {OnSeekHandler} from '../../playhead/PlayHeadHelpers';
import {VectorFeature} from 'piper/HigherLevelUtilities';
import {
  VerticallyBounded,
  VerticalScaleRenderer,
  VerticalValueInspectorRenderer,
  WavesComponent
} from '../waves-base.component';
import {TracksComponent} from '../tracks/tracks.components';

@Component({
  selector: 'ugly-curve',
  template: `
    <ugly-tracks
      [timeline]="timeline"
      [width]="width"
      [onSeek]="onSeek"
      [colour]="colour"
      [tracks]="[curve]"
      [duration]="duration"
    ></ugly-tracks>`,
  changeDetection: ChangeDetectionStrategy.OnPush,
  providers: [
    {provide: VerticallyBounded, useExisting: CurveComponent },
    {provide: VerticalScaleRenderer, useExisting: CurveComponent},
    {provide: VerticalValueInspectorRenderer, useExisting: CurveComponent},
    {provide: WavesComponent, useExisting: CurveComponent}
  ]
})
export class CurveComponent implements VerticalValueInspectorRenderer {
  @Input() timeline: Timeline; // TODO refactor WaveComponents to have own Timeline, sharing a TimeContext
  @Input() onSeek: OnSeekHandler;
  @Input() width: number;
  @Input() curve: VectorFeature;
  @Input() colour: string;
  @Input() duration: number;
  @ViewChild(TracksComponent) tracksComponent: TracksComponent;

  renderInspector(range: [number, number], unit?: string): void {
    this.tracksComponent.renderInspector(range, unit);
  }

  get updatePosition(): OnSeekHandler {
    return this.tracksComponent.updatePosition;
  }

  renderScale(range: [number, number]): void {
    this.tracksComponent.renderScale(range);
  }

  get range(): [number, number] {
    return this.tracksComponent.range;
  }
}