From 84f642c913c062eef8617a7d781ad1adfa14d0e7 Mon Sep 17 00:00:00 2001 From: Xavier G <104097021+XavSPM@users.noreply.github.com> Date: Mon, 23 Oct 2023 00:54:20 +0200 Subject: [PATCH] Update ProgressBarRepresentation.java Modification of the display if the min value is greater than max --- .../widgets/ProgressBarRepresentation.java | 65 +++++++++++++++---- 1 file changed, 54 insertions(+), 11 deletions(-) diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ProgressBarRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ProgressBarRepresentation.java index 12612cdf5f..2aa9b529dc 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ProgressBarRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ProgressBarRepresentation.java @@ -35,6 +35,8 @@ public class ProgressBarRepresentation extends RegionBaseRepresentation orientationChangedListener = this::orientationChanged; private final UntypedWidgetPropertyListener valueChangedListener = this::valueChanged; + private final UntypedWidgetPropertyListener propretyChangedListener = this::propertyChanged; + private volatile double percentage = 0.0; @Override @@ -53,8 +55,8 @@ protected void registerListeners() model_widget.propWidth().addUntypedPropertyListener(lookChangedListener); model_widget.propHeight().addUntypedPropertyListener(lookChangedListener); model_widget.propLimitsFromPV().addUntypedPropertyListener(valueChangedListener); - model_widget.propMinimum().addUntypedPropertyListener(valueChangedListener); - model_widget.propMaximum().addUntypedPropertyListener(valueChangedListener); + model_widget.propMinimum().addUntypedPropertyListener(propretyChangedListener); + model_widget.propMaximum().addUntypedPropertyListener(propretyChangedListener); model_widget.propLogScale().addUntypedPropertyListener(valueChangedListener); model_widget.runtimePropValue().addUntypedPropertyListener(valueChangedListener); model_widget.propHorizontal().addPropertyListener(orientationChangedListener); @@ -69,8 +71,8 @@ protected void unregisterListeners() model_widget.propWidth().removePropertyListener(lookChangedListener); model_widget.propHeight().removePropertyListener(lookChangedListener); model_widget.propLimitsFromPV().removePropertyListener(valueChangedListener); - model_widget.propMinimum().removePropertyListener(valueChangedListener); - model_widget.propMaximum().removePropertyListener(valueChangedListener); + model_widget.propMinimum().removePropertyListener(propretyChangedListener); + model_widget.propMaximum().removePropertyListener(propretyChangedListener); model_widget.propLogScale().removePropertyListener(valueChangedListener); model_widget.runtimePropValue().removePropertyListener(valueChangedListener); model_widget.propHorizontal().removePropertyListener(orientationChangedListener); @@ -94,6 +96,12 @@ private void orientationChanged(final WidgetProperty prop, final Boolea lookChanged(prop, old, horizontal); } + private void propertyChanged(final WidgetProperty property, final Object old_value, final Object new_value) + { + lookChanged(property, old_value, new_value ); + valueChanged(property, old_value, new_value ); + } + private void lookChanged(final WidgetProperty property, final Object old_value, final Object new_value) { dirty_look.mark(); @@ -105,8 +113,22 @@ private void valueChanged(final WidgetProperty property, final Object old_val final VType vtype = model_widget.runtimePropValue().getValue(); final boolean limits_from_pv = model_widget.propLimitsFromPV().getValue(); - double min_val = model_widget.propMinimum().getValue(); - double max_val = model_widget.propMaximum().getValue(); + + double min_val = 0; + double max_val = 0; + + // Inverted if low limit and higher than high limit + if (model_widget.propMaximum().getValue() > model_widget.propMinimum().getValue()) + { + min_val = model_widget.propMinimum().getValue(); + max_val = model_widget.propMaximum().getValue(); + } + else + { + max_val = model_widget.propMinimum().getValue(); + min_val = model_widget.propMaximum().getValue(); + } + if (limits_from_pv) { // Try display range from PV @@ -118,7 +140,7 @@ private void valueChanged(final WidgetProperty property, final Object old_val } } // Fall back to 0..100 range - if (min_val >= max_val) + if (min_val == max_val) { min_val = 0.0; max_val = 100.0; @@ -138,8 +160,8 @@ private void valueChanged(final WidgetProperty property, final Object old_val } else percentage = (value - min_val) / (max_val - min_val); - - // Limit to 0.0 .. 1.0 + + // Limit to 0.0 .. 1.0 if (percentage < 0.0 || !Double.isFinite(percentage)) this.percentage = 0.0; else if (percentage > 1.0) @@ -150,6 +172,7 @@ else if (percentage > 1.0) toolkit.scheduleUpdate(this); } + @Override public void updateChanges() { @@ -159,17 +182,37 @@ public void updateChanges() boolean horizontal = model_widget.propHorizontal().getValue(); double width = model_widget.propWidth().getValue(); double height = model_widget.propHeight().getValue(); + double min_val = model_widget.propMinimum().getValue(); + double max_val = model_widget.propMaximum().getValue(); + if (!horizontal) { jfx_node.getTransforms().setAll( - new Translate(0, height), - new Rotate(-90, 0, 0)); + new Translate(0, height), + new Rotate(-90, 0, 0)); jfx_node.setPrefSize(height, width); + + if (min_val > max_val) + { + jfx_node.getTransforms().setAll( + new Translate(0, height), + new Rotate(-90, 0, 0, 0), + new Translate(height, 0), + new Rotate(180, 0, 0, 0, Rotate.Y_AXIS)); + jfx_node.setPrefSize(height, width); + } } else { jfx_node.getTransforms().clear(); jfx_node.setPrefSize(width, height); + + if (min_val > max_val) + { + jfx_node.getTransforms().setAll( + new Translate(width, 0), + new Rotate(180, 0, 0, 0, Rotate.Y_AXIS)); + } } // Default 'inset' of .bar uses 7 pixels.