@@ -288,86 +288,88 @@ private void layoutChanged(WidgetProperty<?> property, Object old_value, Object
288288
289289 private void valueChanged (WidgetProperty <?> property , Object old_value , Object new_value ) {
290290 if (new_value instanceof VDouble ) {
291- VDouble vDouble = ((VDouble ) new_value );
292- double newValue = vDouble .getValue ();
291+ meter .withWriteLock (() -> {
292+ VDouble vDouble = ((VDouble ) new_value );
293+ double newValue = vDouble .getValue ();
294+
295+ if (!Double .isNaN (newValue )) {
296+ if (Double .isNaN (observedMin ) || newValue < observedMin ) {
297+ observedMin = newValue ;
298+ newObservedMinAndMaxValues = true ;
299+ }
293300
294- if (! Double .isNaN (newValue ) ) {
295- if ( Double . isNaN ( observedMin ) || newValue < observedMin ) {
296- observedMin = newValue ;
297- newObservedMinAndMaxValues = true ;
301+ if (Double .isNaN (observedMax ) || newValue > observedMax ) {
302+ observedMax = newValue ;
303+ newObservedMinAndMaxValues = true ;
304+ }
298305 }
299306
300- if (Double .isNaN (observedMax ) || newValue > observedMax ) {
301- observedMax = newValue ;
302- newObservedMinAndMaxValues = true ;
307+ Display display = vDouble .getDisplay ();
308+
309+ // Set the units:
310+ if (model_widget != null && model_widget .propShowUnits ().getValue ()) {
311+ meter .setUnits (display .getUnit ());
303312 }
304- }
305-
306- Display display = vDouble .getDisplay ();
307-
308- // Set the units:
309- if (model_widget != null && model_widget .propShowUnits ().getValue ()) {
310- meter .setUnits (display .getUnit ());
311- }
312- if (model_widget != null ) {
313- LinearMeterWidget .LimitsFromPV limitsFromPVSetting = model_widget .propLimitsFromPV ().getValue ();
314- if (limitsFromPVSetting .equals (LinearMeterWidget .LimitsFromPV .LimitsFromPV ) ||
315- limitsFromPVSetting .equals (LinearMeterWidget .LimitsFromPV .MinAndMaxFromPV )) {
316- Range displayRange = display .getDisplayRange ();
317- if (displayRange != null
318- && Double .isFinite (displayRange .getMinimum ())
319- && Double .isFinite (displayRange .getMaximum ())
320- && displayRange .getMaximum () - displayRange .getMinimum () > 0.0 ) {
321- if (meter .linearMeterScale .getValueRange ().getLow () != displayRange .getMinimum () || meter .linearMeterScale .getValueRange ().getHigh () != displayRange .getMaximum () || !meter .getValidRange ()) {
322- meter .setRange (displayRange .getMinimum (), displayRange .getMaximum (), true );
323- }
324- } else {
325- Range controlRange = display .getControlRange ();
326- if (controlRange != null
327- && Double .isFinite (controlRange .getMinimum ())
328- && Double .isFinite (controlRange .getMaximum ())
329- && controlRange .getMaximum () - controlRange .getMinimum () > 0.0 ) {
330- if (meter .linearMeterScale .getValueRange ().getLow () != controlRange .getMinimum () || meter .linearMeterScale .getValueRange ().getHigh () != controlRange .getMaximum () || !meter .getValidRange ()) {
331- meter .setRange (controlRange .getMinimum (), controlRange .getMaximum (), true );
313+ if (model_widget != null ) {
314+ LinearMeterWidget .LimitsFromPV limitsFromPVSetting = model_widget .propLimitsFromPV ().getValue ();
315+ if (limitsFromPVSetting .equals (LinearMeterWidget .LimitsFromPV .LimitsFromPV ) ||
316+ limitsFromPVSetting .equals (LinearMeterWidget .LimitsFromPV .MinAndMaxFromPV )) {
317+ Range displayRange = display .getDisplayRange ();
318+ if (displayRange != null
319+ && Double .isFinite (displayRange .getMinimum ())
320+ && Double .isFinite (displayRange .getMaximum ())
321+ && displayRange .getMaximum () - displayRange .getMinimum () > 0.0 ) {
322+ if (meter .linearMeterScale .getValueRange ().getLow () != displayRange .getMinimum () || meter .linearMeterScale .getValueRange ().getHigh () != displayRange .getMaximum () || !meter .getValidRange ()) {
323+ meter .setRange (displayRange .getMinimum (), displayRange .getMaximum (), true );
324+ }
325+ } else {
326+ Range controlRange = display .getControlRange ();
327+ if (controlRange != null
328+ && Double .isFinite (controlRange .getMinimum ())
329+ && Double .isFinite (controlRange .getMaximum ())
330+ && controlRange .getMaximum () - controlRange .getMinimum () > 0.0 ) {
331+ if (meter .linearMeterScale .getValueRange ().getLow () != controlRange .getMinimum () || meter .linearMeterScale .getValueRange ().getHigh () != controlRange .getMaximum () || !meter .getValidRange ()) {
332+ meter .setRange (controlRange .getMinimum (), controlRange .getMaximum (), true );
333+ }
334+ } else if (newObservedMinAndMaxValues && !Double .isNaN (observedMin ) && !Double .isNaN (observedMax )) {
335+ meter .setRange (observedMin - 1 , observedMax + 1 , false );
336+ newObservedMinAndMaxValues = false ;
337+ } else if (meter .linearMeterScale .getValueRange ().getLow () != 0.0 || meter .linearMeterScale .getValueRange ().getHigh () != 100 ) {
338+ meter .setRange (0.0 , 100.0 , false );
332339 }
333- } else if (newObservedMinAndMaxValues && !Double .isNaN (observedMin ) && !Double .isNaN (observedMax )) {
334- meter .setRange (observedMin - 1 , observedMax + 1 , false );
335- newObservedMinAndMaxValues = false ;
336- } else if (meter .linearMeterScale .getValueRange ().getLow () != 0.0 || meter .linearMeterScale .getValueRange ().getHigh () != 100 ) {
337- meter .setRange (0.0 , 100.0 , false );
338340 }
339341 }
340- }
341- if ( limitsFromPVSetting .equals (LinearMeterWidget .LimitsFromPV .LimitsFromPV ) ||
342- limitsFromPVSetting . equals ( LinearMeterWidget . LimitsFromPV . AlarmLimitsFromPV )) {
343- {
344- Range warningRange = display . getWarningRange ();
345- if (warningRange != null ) {
346- if (! Double . isNaN ( warningRange . getMinimum ()) && meter .getLow () != warningRange .getMinimum ()) {
347- meter . setLow ( warningRange . getMinimum ());
348- }
349-
350- if (! Double . isNaN ( warningRange . getMaximum ()) && meter .getHigh () != warningRange .getMaximum ()) {
351- meter . setHigh ( warningRange . getMaximum ());
342+ if ( limitsFromPVSetting . equals ( LinearMeterWidget . LimitsFromPV . LimitsFromPV ) ||
343+ limitsFromPVSetting .equals (LinearMeterWidget .LimitsFromPV .AlarmLimitsFromPV )) {
344+ {
345+ Range warningRange = display . getWarningRange ();
346+ if ( warningRange != null ) {
347+ if (! Double . isNaN ( warningRange . getMinimum ()) && meter . getLow () != warningRange . getMinimum () ) {
348+ meter .setLow ( warningRange .getMinimum ());
349+ }
350+
351+ if (! Double . isNaN ( warningRange . getMaximum ()) && meter . getHigh () != warningRange . getMaximum ()) {
352+ meter .setHigh ( warningRange .getMaximum ());
353+ }
352354 }
353355 }
354- }
355356
356- {
357- Range alarmRange = display .getAlarmRange ();
358- if (alarmRange != null ) {
359- if (!Double .isNaN (alarmRange .getMinimum ()) && meter .getLoLo () != alarmRange .getMinimum ()) {
360- meter .setLoLo (alarmRange .getMinimum ());
361- }
357+ {
358+ Range alarmRange = display .getAlarmRange ();
359+ if (alarmRange != null ) {
360+ if (!Double .isNaN (alarmRange .getMinimum ()) && meter .getLoLo () != alarmRange .getMinimum ()) {
361+ meter .setLoLo (alarmRange .getMinimum ());
362+ }
362363
363- if (!Double .isNaN (alarmRange .getMaximum ()) && meter .getHiHi () != alarmRange .getMaximum ()) {
364- meter .setHiHi (alarmRange .getMaximum ());
364+ if (!Double .isNaN (alarmRange .getMaximum ()) && meter .getHiHi () != alarmRange .getMaximum ()) {
365+ meter .setHiHi (alarmRange .getMaximum ());
366+ }
365367 }
366368 }
367369 }
368370 }
369- }
370- meter . setCurrentValue ( newValue );
371+ meter . setCurrentValue ( newValue );
372+ } );
371373 }
372374 }
373375
0 commit comments