annotate src/app/visualisations/grid/grid.component.ts @ 488:64ed45a0bad3

Introduce PlayheadRenderer, implement in the waves base. Make VerticallyBounded and VerticalScaleRenderer generic and remove bin equivalents. Forward calls for a PlayheadRenderer from VerticalScaleComponent on to its children. Also update other components accordingly.
author Lucas Thompson <dev@lucas.im>
date Wed, 05 Jul 2017 18:42:12 +0100
parents e3cbf4c53e5e
children ab43880f1cd5
rev   line source
dev@382 1 /**
dev@382 2 * Created by lucast on 31/05/2017.
dev@382 3 */
cannam@471 4 import {
cannam@473 5 VerticallyBinnedWavesComponent,
dev@488 6 WavesComponent, PlayheadRenderer, VerticallyBounded, VerticalScaleRenderer
cannam@471 7 } from '../waves-base.component';
dev@382 8 import {
dev@382 9 ChangeDetectionStrategy,
dev@382 10 Component,
dev@382 11 Input,
dev@382 12 } from '@angular/core';
dev@382 13 import Waves from 'waves-ui-piper';
dev@477 14 import {Grid} from '../FeatureUtilities';
dev@382 15 import {iceMapper} from '../../spectrogram/ColourMap';
dev@382 16 import {estimatePercentile} from '../../spectrogram/MatrixUtils';
dev@382 17
dev@382 18 @Component({
dev@382 19 selector: 'ugly-grid',
dev@382 20 templateUrl: '../waves-template.html',
dev@382 21 styleUrls: ['../waves-template.css'],
dev@405 22 changeDetection: ChangeDetectionStrategy.OnPush,
dev@405 23 providers: [
dev@488 24 {provide: VerticallyBounded, useExisting: GridComponent },
dev@488 25 {provide: VerticalScaleRenderer, useExisting: GridComponent},
dev@488 26 {provide: PlayheadRenderer, useExisting: GridComponent },
dev@405 27 {provide: WavesComponent, useExisting: GridComponent}
dev@405 28 ]
dev@382 29 })
dev@383 30
dev@477 31 export class GridComponent extends VerticallyBinnedWavesComponent<Grid> {
cannam@472 32
dev@477 33 @Input() set grid(grid: Grid) {
dev@383 34 this.feature = grid;
dev@382 35 }
dev@382 36
dev@383 37 protected get featureLayers(): Layer[] {
cannam@471 38 const startTime = this.feature.startTime;
dev@383 39 const stepDuration = this.feature.stepDuration;
dev@383 40 const matrixData = this.feature.data;
dev@382 41
dev@382 42 if (matrixData.length === 0) {
dev@383 43 return [];
dev@382 44 }
dev@382 45
dev@382 46 const targetValue = estimatePercentile(matrixData, 95);
dev@382 47 const gain = (targetValue > 0.0 ? (1.0 / targetValue) : 1.0);
dev@382 48 const matrixEntity = new Waves.utils.PrefilledMatrixEntity(
dev@382 49 matrixData,
cannam@471 50 startTime,
dev@382 51 stepDuration
dev@382 52 );
dev@382 53
dev@383 54 return [
dev@382 55 new Waves.helpers.MatrixLayer(
dev@382 56 matrixEntity,
dev@382 57 {
dev@382 58 gain: gain,
dev@382 59 height: this.height,
dev@382 60 normalise: 'none',
dev@382 61 mapper: iceMapper()
dev@382 62 }
dev@383 63 )
dev@383 64 ];
dev@382 65 }
dev@477 66
dev@488 67 get range(): string[] {
cannam@474 68 if (!this.feature.binNames || this.feature.binNames.length === 0) {
cannam@474 69 const binCount = (this.feature.data.length > 0 ?
cannam@474 70 this.feature.data[0].length : 0);
cannam@474 71 for (let i = 0; i < binCount; ++i) {
dev@477 72 this.feature.binNames.push(`${i + 1}`);
cannam@474 73 }
cannam@474 74 }
cannam@473 75 return this.feature.binNames;
cannam@471 76 }
dev@382 77 }