Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,10 @@
public static final WidgetPropertyDescriptor<WidgetColor> propKnobColor =
newColorPropertyDescriptor(WidgetPropertyCategory.MISC, "knob_color", Messages.WidgetProperties_KnobColor);

/** Property */
public static final WidgetPropertyDescriptor<Boolean> propLogarithmicScale =
newBooleanPropertyDescriptor(WidgetPropertyCategory.DISPLAY, "log_scale", Messages.WidgetProperties_LogScale);

private volatile WidgetProperty<WidgetColor> foreground;
private volatile WidgetProperty<WidgetColor> background;
private volatile WidgetProperty<WidgetFont> font;
Expand All @@ -158,6 +162,7 @@
private volatile WidgetProperty<Boolean> limits_from_pv;
private volatile WidgetProperty<Double> minimum;
private volatile WidgetProperty<Double> maximum;
private volatile WidgetProperty<Boolean> log_scale;

Check warning on line 165 in app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/MeterWidget.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Rename this field "log_scale" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.

See more on https://sonarcloud.io/project/issues?id=ControlSystemStudio_phoebus&issues=AZ1SgIZXv4af9OZ52JZE&open=AZ1SgIZXv4af9OZ52JZE&pullRequest=3764

/** Constructor */
public MeterWidget()
Expand Down Expand Up @@ -195,6 +200,7 @@
properties.add(limits_from_pv = propLimitsFromPV.createProperty(this, true));
properties.add(minimum = propMinimum.createProperty(this, 0.0));
properties.add(maximum = propMaximum.createProperty(this, 100.0));
properties.add(log_scale = propLogarithmicScale.createProperty(this, false));

Check warning on line 203 in app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/MeterWidget.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Extract the assignment out of this expression.

See more on https://sonarcloud.io/project/issues?id=ControlSystemStudio_phoebus&issues=AZ12xvaTAuf7ECOyYl0I&open=AZ12xvaTAuf7ECOyYl0I&pullRequest=3764
}

/** @return 'foreground_color' property */
Expand Down Expand Up @@ -274,4 +280,10 @@
{
return maximum;
}

/** @return 'log_scale' property */
public WidgetProperty<Boolean> propLogScale()
{
return log_scale;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ protected void registerListeners()
model_widget.propMaximum().addUntypedPropertyListener(valueListener);
model_widget.propShowValue().addUntypedPropertyListener(valueListener);
model_widget.runtimePropValue().addUntypedPropertyListener(valueListener);
model_widget.propLogScale().addUntypedPropertyListener(valueListener);
valueChanged(null, null, null);
}

Expand All @@ -82,6 +83,7 @@ protected void unregisterListeners()
model_widget.propMaximum().removePropertyListener(valueListener);
model_widget.propShowValue().removePropertyListener(valueListener);
model_widget.runtimePropValue().removePropertyListener(valueListener);
model_widget.propLogScale().removePropertyListener(valueListener);
super.unregisterListeners();
}

Expand Down Expand Up @@ -142,6 +144,8 @@ private void valueChanged(final WidgetProperty<?> property, final Object old_val
}
else
meter.setValue(value, "");

meter.setLogScale(model_widget.propLogScale().getValue());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,13 @@ public class RTMeter extends ImageView
/** Area of this meter */
protected volatile Rectangle area = new Rectangle(0, 0, 0, 0);

/** @param logscale Use log scale for y-axis? */
public void setLogScale(final boolean logscale)
{
scale.setLogarithmic(logscale);
requestUpdate();
}

/** Listener to {@link PlotPart}s (scale), triggering refresh of meter */
protected final PlotPartListener plot_part_listener = new PlotPartListener()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
import org.csstudio.javafx.rtplot.AxisRange;
import org.csstudio.javafx.rtplot.internal.util.GraphicsUtils;

import static org.csstudio.javafx.rtplot.internal.util.Log10.log10;

/** 'Round' numeric scale for a meter.
* @author Kay Kasemir
*/
Expand Down Expand Up @@ -131,7 +133,15 @@ public double getAngle(final double value)
if (Double.isFinite(value))
{
final AxisRange<Double> range = getValueRange();
return start_angle + (value - range.getLow()) * angle_range / (range.getHigh() - range.getLow());
if (isLogarithmic())
{
return start_angle + (log10(value) - log10(range.getLow())) * angle_range / (log10(range.getHigh()) - log10(range.getLow()));
}
else
{
return start_angle + (value - range.getLow()) * angle_range / (range.getHigh() - range.getLow());
}

}
else
return Double.NaN;
Expand Down
Loading