Skip to content

Commit

Permalink
Merge pull request #2850 from XavSPM/ProgressBar-min-max
Browse files Browse the repository at this point in the history
Update ProgressBarRepresentation.java
  • Loading branch information
kasemir authored Oct 27, 2023
2 parents 0d7bf98 + 84f642c commit 19dba58
Showing 1 changed file with 54 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ public class ProgressBarRepresentation extends RegionBaseRepresentation<Progress
private final UntypedWidgetPropertyListener lookChangedListener = this::lookChanged;
private final WidgetPropertyListener<Boolean> orientationChangedListener = this::orientationChanged;
private final UntypedWidgetPropertyListener valueChangedListener = this::valueChanged;
private final UntypedWidgetPropertyListener propretyChangedListener = this::propertyChanged;

private volatile double percentage = 0.0;

@Override
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -94,6 +96,12 @@ private void orientationChanged(final WidgetProperty<Boolean> 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();
Expand All @@ -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
Expand All @@ -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;
Expand All @@ -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)
Expand All @@ -150,6 +172,7 @@ else if (percentage > 1.0)
toolkit.scheduleUpdate(this);
}


@Override
public void updateChanges()
{
Expand All @@ -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.
Expand Down

0 comments on commit 19dba58

Please sign in to comment.