From 576daf083694ec6035bcf349e7d41d985f395b4f Mon Sep 17 00:00:00 2001 From: Abraham Wolk Date: Wed, 23 Jul 2025 09:46:36 +0200 Subject: [PATCH 1/5] CSSTUDIO-3337 Update widgets to display "" when a value with alarm equal to Alar.disconnected() is received. --- .../representation/javafx/widgets/SpinnerRepresentation.java | 4 +++- .../javafx/widgets/TextEntryRepresentation.java | 4 +++- .../javafx/widgets/TextUpdateRepresentation.java | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/SpinnerRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/SpinnerRepresentation.java index 74ec7a5c8a..f8ee0881db 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/SpinnerRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/SpinnerRepresentation.java @@ -24,6 +24,7 @@ import org.csstudio.display.builder.model.widgets.SpinnerWidget; import org.csstudio.display.builder.representation.javafx.Cursors; import org.csstudio.display.builder.representation.javafx.JFXUtil; +import org.epics.vtype.Alarm; import org.epics.vtype.Display; import org.epics.vtype.VNumber; import org.epics.vtype.VType; @@ -374,7 +375,8 @@ private void writeResultingValue(double change) */ private String computeText(final VType value) { - if (value == null) + Alarm alarm = Alarm.alarmOf(value); + if (value == null || alarm.equals(Alarm.disconnected())) return "<" + model_widget.propPVName().getValue() + ">"; return FormatOptionHandler.format(value, model_widget.propFormat().getValue(), diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TextEntryRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TextEntryRepresentation.java index 3792dc2673..6ae8f2c1a9 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TextEntryRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TextEntryRepresentation.java @@ -27,6 +27,7 @@ import org.csstudio.display.builder.model.widgets.TextEntryWidget; import org.csstudio.display.builder.representation.javafx.Cursors; import org.csstudio.display.builder.representation.javafx.JFXUtil; +import org.epics.vtype.Alarm; import org.epics.vtype.VType; import org.phoebus.ui.javafx.Styles; import org.phoebus.ui.vtype.FormatOptionHandler; @@ -345,7 +346,8 @@ private void styleChanged(final WidgetProperty property, final Object old_val */ private String computeText(final VType value) { - if (value == null) + Alarm alarm = Alarm.alarmOf(value); + if (value == null || alarm.equals(Alarm.disconnected())) return "<" + model_widget.propPVName().getValue() + ">"; if (value == PVWidget.RUNTIME_VALUE_NO_PV) return ""; diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TextUpdateRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TextUpdateRepresentation.java index 4287458de9..e87fc13772 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TextUpdateRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TextUpdateRepresentation.java @@ -20,6 +20,7 @@ import org.csstudio.display.builder.model.widgets.PVWidget; import org.csstudio.display.builder.model.widgets.TextUpdateWidget; import org.csstudio.display.builder.representation.javafx.JFXUtil; +import org.epics.vtype.Alarm; import org.epics.vtype.VType; import org.phoebus.ui.vtype.FormatOptionHandler; @@ -167,7 +168,8 @@ private void styleChanged(final WidgetProperty property, final Object old_val private String computeText(final VType value) { Objects.requireNonNull(model_widget, "No widget"); - if (value == null) + Alarm alarm = Alarm.alarmOf(value); + if (value == null || alarm.equals(Alarm.disconnected())) return "<" + model_widget.propPVName().getValue() + ">"; if (value == PVWidget.RUNTIME_VALUE_NO_PV) return ""; From 96c7e14ee514f92707420188fe2783a085a938b6 Mon Sep 17 00:00:00 2001 From: Abraham Wolk Date: Wed, 23 Jul 2025 09:49:07 +0200 Subject: [PATCH 2/5] CSSTUDIO-3337 Do not display alarm ranges in tooltip when a PV is disconnected. --- .../builder/representation/javafx/widgets/TooltipSupport.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TooltipSupport.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TooltipSupport.java index c40f741593..ab1d0c0b08 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TooltipSupport.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TooltipSupport.java @@ -105,7 +105,7 @@ public static void attach(final Node node, final WidgetProperty tooltip_ // If 'vtype' supports it (i.e., it is an instance of "DisplayProvider"), // append the alarm limits to $(pv_value): - if (vtype instanceof DisplayProvider) { + if (vtype instanceof DisplayProvider && !Alarm.alarmOf(vtype).equals(Alarm.disconnected()) ) { Range alarmRange = display.getAlarmRange(); double lolo = alarmRange.getMinimum(); From b62cc9465502878f3be13279e9636a9966901f94 Mon Sep 17 00:00:00 2001 From: Abraham Wolk Date: Thu, 24 Jul 2025 10:03:09 +0200 Subject: [PATCH 3/5] CSSTUDIO-3337 RegionBaseRepresentation.connectionOrValueChanged(): when the received value has an alarm equal to Alarm.disconnected(), show the disconnected border. --- .../javafx/widgets/RegionBaseRepresentation.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/RegionBaseRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/RegionBaseRepresentation.java index 7e4cf542a4..d2d1ffa91d 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/RegionBaseRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/RegionBaseRepresentation.java @@ -255,14 +255,14 @@ private void connectionOrValueChanged(final WidgetProperty property, final Ob AlarmSeverity severity = AlarmSeverity.NONE; // Ignore custom border and value of primary PV, show disconnected - if (! model_widget.runtimePropConnected().getValue()) + final VType value = value_prop.getValue(); + final Alarm alarm = Alarm.alarmOf(value); + if (! model_widget.runtimePropConnected().getValue() || alarm.equals(Alarm.disconnected())) severity = AlarmSeverity.UNDEFINED; else { // Reflect severity of primary PV's value if (value_prop != null && alarm_sensitive_border_prop.getValue()) { - final Object value = value_prop.getValue(); - final Alarm alarm = Alarm.alarmOf(value); if (alarm != null && alarm.getSeverity() != AlarmSeverity.NONE) // Have alarm info severity = alarm.getSeverity(); From ed23f1408c3eb846e7b6ec7d8644006776501778 Mon Sep 17 00:00:00 2001 From: Abraham Wolk Date: Thu, 24 Jul 2025 10:06:40 +0200 Subject: [PATCH 4/5] CSSTUDIO-3337 Remove unreachable code. --- .../javafx/widgets/RegionBaseRepresentation.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/RegionBaseRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/RegionBaseRepresentation.java index d2d1ffa91d..478b284393 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/RegionBaseRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/RegionBaseRepresentation.java @@ -269,9 +269,6 @@ private void connectionOrValueChanged(final WidgetProperty property, final Ob else if (value instanceof VType) // VType that doesn't provide alarm, always OK severity = AlarmSeverity.NONE; - else if (value != null) - // Not a vtype, but non-null, assume OK - severity = AlarmSeverity.NONE; else // null severity = AlarmSeverity.UNDEFINED; } From 843f2712bf90a775fa45841fd9a08bacb4f71759 Mon Sep 17 00:00:00 2001 From: Abraham Wolk Date: Thu, 24 Jul 2025 10:08:03 +0200 Subject: [PATCH 5/5] CSSTUDIO-3337 Replace "instanceof VType" with "!= null". --- .../representation/javafx/widgets/RegionBaseRepresentation.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/RegionBaseRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/RegionBaseRepresentation.java index 478b284393..694eaa17c8 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/RegionBaseRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/RegionBaseRepresentation.java @@ -266,7 +266,7 @@ private void connectionOrValueChanged(final WidgetProperty property, final Ob if (alarm != null && alarm.getSeverity() != AlarmSeverity.NONE) // Have alarm info severity = alarm.getSeverity(); - else if (value instanceof VType) + else if (value != null) // VType that doesn't provide alarm, always OK severity = AlarmSeverity.NONE; else // null