22import { defineComponent , nextTick , onMounted , onUnmounted , PropType , Ref , ref , watch } from " vue" ;
33import * as d3 from " d3" ;
44import { SpectrogramAnnotation , SpectrogramSequenceAnnotation } from " ../../api/api" ;
5- import { geojsonToSpectro , SpectroInfo , textColorFromBackground } from " ./geoJSUtils" ;
5+ import {
6+ annotationSpreadAcrossPulsesWarning ,
7+ geojsonToSpectro ,
8+ SpectroInfo ,
9+ textColorFromBackground ,
10+ } from " ./geoJSUtils" ;
611import EditAnnotationLayer from " ./layers/editAnnotationLayer" ;
712import RectangleLayer from " ./layers/rectangleLayer" ;
813import CompressedOverlayLayer from " ./layers/compressedOverlayLayer" ;
@@ -13,6 +18,7 @@ import FreqLayer from "./layers/freqLayer";
1318import SpeciesLayer from " ./layers/speciesLayer" ;
1419import SpeciesSequenceLayer from " ./layers/speciesSequenceLayer" ;
1520import MeasureToolLayer from " ./layers/measureToolLayer" ;
21+ import BoundingBoxLayer from " ./layers/boundingBoxLayer" ;
1622import { cloneDeep } from " lodash" ;
1723import useState from " @use/useState" ;
1824export default defineComponent ({
@@ -66,6 +72,8 @@ export default defineComponent({
6672 backgroundColor,
6773 measuring,
6874 frequencyRulerY,
75+ drawingBoundingBox,
76+ boundingBoxError,
6977 } = useState ();
7078 const selectedAnnotationId: Ref <null | number > = ref (null );
7179 const hoveredAnnotationId: Ref <null | number > = ref (null );
@@ -83,6 +91,7 @@ export default defineComponent({
8391 let speciesLayer: SpeciesLayer ;
8492 let speciesSequenceLayer: SpeciesSequenceLayer ;
8593 let measureToolLayer: MeasureToolLayer ;
94+ let boundingBoxLayer: BoundingBoxLayer ;
8695 const displayError = ref (false );
8796 const errorMsg = ref (" " );
8897
@@ -214,9 +223,9 @@ export default defineComponent({
214223 if (index !== - 1 && props .spectroInfo && selectedType .value === ' pulse' ) {
215224 // update bounds for the localAnnotation
216225 const conversionResult = geojsonToSpectro (geoJSON , props .spectroInfo , props .scaledWidth , props .scaledHeight );
217- if (conversionResult .error ) {
226+ if (conversionResult .warning ) {
218227 displayError .value = true ;
219- errorMsg .value = conversionResult .error ;
228+ errorMsg .value = conversionResult .warning ;
220229 return ;
221230 }
222231 const { low_freq, high_freq, start_time, end_time } = conversionResult ;
@@ -232,9 +241,9 @@ export default defineComponent({
232241 if (index !== - 1 && props .spectroInfo && selectedType .value === ' sequence' ) {
233242 // update bounds for the localAnnotation
234243 const conversionResult = geojsonToSpectro (geoJSON , props .spectroInfo , props .scaledWidth , props .scaledHeight );
235- if (conversionResult .error ) {
244+ if (conversionResult .warning && conversionResult . warning !== annotationSpreadAcrossPulsesWarning ) {
236245 displayError .value = true ;
237- errorMsg .value = conversionResult .error ;
246+ errorMsg .value = conversionResult .warning ;
238247 return ;
239248 }
240249 const { start_time, end_time } = conversionResult ;
@@ -253,9 +262,11 @@ export default defineComponent({
253262 if (geoJSON && props .spectroInfo ) {
254263 const conversionResult = geojsonToSpectro (geoJSON , props .spectroInfo , props .scaledWidth , props .scaledHeight );
255264
256- if (conversionResult .error ) {
265+ if (conversionResult .warning
266+ && ! (creationType .value === ' sequence' && conversionResult .warning === annotationSpreadAcrossPulsesWarning )
267+ ) {
257268 displayError .value = true ;
258- errorMsg .value = conversionResult .error ;
269+ errorMsg .value = conversionResult .warning ;
259270 return ;
260271 }
261272 const { low_freq, high_freq, start_time, end_time } = conversionResult ;
@@ -292,6 +303,10 @@ export default defineComponent({
292303 const { yValue } = data ;
293304 frequencyRulerY .value = yValue || 0 ;
294305 }
306+ if (type === " bbox:error" ) {
307+ const { error } = data ;
308+ boundingBoxError .value = error || ' ' ;
309+ }
295310 };
296311
297312 const getDataForLayers = () => {
@@ -537,6 +552,18 @@ export default defineComponent({
537552 }
538553 });
539554
555+ if (! boundingBoxLayer ) {
556+ boundingBoxLayer = new BoundingBoxLayer (props .geoViewerRef , event , props .spectroInfo , drawingBoundingBox .value );
557+ boundingBoxLayer .setScaledDimensions (props .scaledWidth , props .scaledHeight );
558+ }
559+ watch (drawingBoundingBox , () => {
560+ if (drawingBoundingBox .value ) {
561+ boundingBoxLayer .enableDrawing ();
562+ } else {
563+ boundingBoxLayer .disableDrawing ();
564+ }
565+ });
566+
540567 timeLayer .setDisplaying ({ pulse: configuration .value .display_pulse_annotations , sequence: configuration .value .display_sequence_annotations });
541568 timeLayer .formatData (localAnnotations .value , sequenceAnnotations .value );
542569 freqLayer .formatData (localAnnotations .value );
@@ -593,7 +620,7 @@ export default defineComponent({
593620 compressedOverlayLayer .formatData (props .spectroInfo .start_times , props .spectroInfo .end_times , props .yScale );
594621 compressedOverlayLayer .redraw ();
595622 } else {
596- compressedOverlayLayer ?.disable ();
623+ compressedOverlayLayer ?.disable ();
597624 }
598625 }
599626 editAnnotationLayer ?.setScaledDimensions (props .scaledWidth , props .scaledHeight );
@@ -714,6 +741,9 @@ export default defineComponent({
714741 if (measureToolLayer ) {
715742 measureToolLayer .setTextColor (textColor );
716743 }
744+ if (boundingBoxLayer ) {
745+ boundingBoxLayer .setTextColor (textColor );
746+ }
717747 }
718748
719749 watch ([backgroundColor , colorScheme ], updateColorFilter );
0 commit comments