diff --git a/app/display/convert-edm/src/main/java/org/csstudio/display/converter/edm/widgets/Convert_activeBarClass.java b/app/display/convert-edm/src/main/java/org/csstudio/display/converter/edm/widgets/Convert_activeBarClass.java
index a7acd31982..44a4bdde0b 100644
--- a/app/display/convert-edm/src/main/java/org/csstudio/display/converter/edm/widgets/Convert_activeBarClass.java
+++ b/app/display/convert-edm/src/main/java/org/csstudio/display/converter/edm/widgets/Convert_activeBarClass.java
@@ -28,7 +28,23 @@ public Convert_activeBarClass(final EdmConverter converter, final Widget parent,
convertColor(r.getBgColor(), widget.propBackgroundColor());
widget.propHorizontal().setValue(!"vertical".equals(r.getOrientation()));
widget.propPVName().setValue(convertPVName(r.getIndicatorPv()));
+
+ // Scale and range
+ widget.propScaleVisible().setValue(r.isShowScale());
widget.propLimitsFromPV().setValue(r.isLimitsFromDb());
+ if (!r.isLimitsFromDb() && r.getMax() > r.getMin())
+ {
+ widget.propMinimum().setValue(r.getMin());
+ widget.propMaximum().setValue(r.getMax());
+ }
+
+ // Precision: 0 in EDM usually means "not set" — only override when positive.
+ if (r.getPrecision() > 0)
+ widget.propPrecision().setValue(r.getPrecision());
+
+ // EDM 'border' is a boolean; map it to a 1 px border when set.
+ if (r.isBorder())
+ widget.propBorderWidth().setValue(1);
}
@Override
diff --git a/app/display/editor/src/main/java/org/csstudio/display/builder/editor/properties/PropertyPanelSection.java b/app/display/editor/src/main/java/org/csstudio/display/builder/editor/properties/PropertyPanelSection.java
index cd971b0583..639d7e5ac7 100644
--- a/app/display/editor/src/main/java/org/csstudio/display/builder/editor/properties/PropertyPanelSection.java
+++ b/app/display/editor/src/main/java/org/csstudio/display/builder/editor/properties/PropertyPanelSection.java
@@ -59,6 +59,8 @@
import org.csstudio.display.builder.model.properties.RulesWidgetProperty;
import org.csstudio.display.builder.model.properties.ScriptsWidgetProperty;
import org.csstudio.display.builder.model.properties.WidgetClassProperty;
+import org.csstudio.display.builder.model.widgets.ProgressBarWidget;
+import org.csstudio.display.builder.representation.Preferences;
import org.csstudio.display.builder.representation.javafx.FilenameSupport;
import org.phoebus.ui.color.NamedWidgetColor;
import org.phoebus.ui.color.WidgetColor;
@@ -163,6 +165,14 @@ void fill(final UndoableActionManager undo,
if (property instanceof WidgetClassProperty && class_mode)
continue;
+ // When using the legacy JFX ProgressBar rendering, hide properties that
+ // only affect the RTTank-based scale rendering — they have no effect and
+ // would only confuse operators.
+ if (!Preferences.progressbar_scale_mode
+ && property.getWidget() instanceof ProgressBarWidget
+ && ProgressBarWidget.SCALE_MODE_PROPS.contains(property.getName()))
+ continue;
+
// Start of new category that needs to be shown?
if (property.getCategory() != category) {
category = property.getCategory();
diff --git a/app/display/model/src/main/java/org/csstudio/display/builder/model/Messages.java b/app/display/model/src/main/java/org/csstudio/display/builder/model/Messages.java
index 1f56ddea77..86df17727c 100644
--- a/app/display/model/src/main/java/org/csstudio/display/builder/model/Messages.java
+++ b/app/display/model/src/main/java/org/csstudio/display/builder/model/Messages.java
@@ -185,6 +185,7 @@ public class Messages
WidgetProperties_BorderAlarmSensitive,
WidgetProperties_BorderColor,
WidgetProperties_BorderWidth,
+ WidgetProperties_InnerPadding,
WidgetProperties_CellColors,
WidgetProperties_Class,
WidgetProperties_ColorHiHi,
@@ -326,6 +327,7 @@ public class Messages
WidgetProperties_ShowLoLo,
WidgetProperties_ShowMinorTicks,
WidgetProperties_PerpendicularTickLabels,
+ WidgetProperties_ShowScaleLabels,
WidgetProperties_ShowOK,
WidgetProperties_ShowScale,
WidgetProperties_ShowUnits,
diff --git a/app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/ProgressBarWidget.java b/app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/ProgressBarWidget.java
index 193cb01ecf..09ec78e112 100644
--- a/app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/ProgressBarWidget.java
+++ b/app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/ProgressBarWidget.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2015-2022 Oak Ridge National Laboratory.
+ * Copyright (c) 2015-2026 Oak Ridge National Laboratory.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -9,37 +9,86 @@
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propBackgroundColor;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propFillColor;
+import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propFont;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propHorizontal;
-import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propLimitsFromPV;
-import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propMaximum;
-import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propMinimum;
import static org.csstudio.display.builder.model.widgets.plots.PlotWidgetProperties.propLogscale;
+import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.newIntegerPropertyDescriptor;
import java.util.Arrays;
import java.util.List;
+import java.util.Set;
+import org.csstudio.display.builder.model.Messages;
import org.csstudio.display.builder.model.Version;
import org.csstudio.display.builder.model.Widget;
import org.csstudio.display.builder.model.WidgetCategory;
import org.csstudio.display.builder.model.WidgetConfigurator;
import org.csstudio.display.builder.model.WidgetDescriptor;
import org.csstudio.display.builder.model.WidgetProperty;
+import org.csstudio.display.builder.model.WidgetPropertyCategory;
+import org.csstudio.display.builder.model.WidgetPropertyDescriptor;
import org.csstudio.display.builder.model.persist.ModelReader;
+import org.csstudio.display.builder.model.persist.NamedWidgetFonts;
+import org.csstudio.display.builder.model.persist.WidgetFontService;
import org.csstudio.display.builder.model.persist.XMLTags;
import org.csstudio.display.builder.model.properties.CommonWidgetProperties;
import org.csstudio.display.builder.model.properties.HorizontalAlignment;
+import org.csstudio.display.builder.model.properties.WidgetFont;
import org.phoebus.ui.color.WidgetColor;
import org.phoebus.framework.persistence.XMLUtil;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
-/** Widget that displays a progress bar
+/** Widget that displays a progress bar with an optional numeric scale.
+ *
+ *
Extends {@link ScaledPVWidget} to inherit common scale/limit properties
+ * (min/max range, format, precision, alarm limit lines). The bar uses the
+ * same rendering engine as {@link TankWidget} ({@code RTTank}) so the scale
+ * and alarm-limit features are identical.
+ *
+ *
Existing {@code .bob} files load unchanged: {@code fill_color},
+ * {@code background_color}, {@code horizontal}, {@code limits_from_pv},
+ * {@code minimum}, {@code maximum} and {@code log_scale} keep the same
+ * XML names. New properties ({@code format}, {@code precision},
+ * {@code scale_visible}, {@code show_minor_ticks}, {@code show_scale_labels},
+ * {@code inner_padding}, alarm limit properties)
+ * are silently ignored by older Phoebus versions.
+ *
* @author Kay Kasemir
* @author Amanda Carpenter
+ * @author Heredie Delvalle — CLS, ScaledPVWidget refactoring, scale support
*/
@SuppressWarnings("nls")
-public class ProgressBarWidget extends PVWidget
+public class ProgressBarWidget extends ScaledPVWidget
{
+ /** Property names that only take effect when the RTTank-based rendering engine is
+ * active ({@code progressbar_scale_mode=true}). The property editor uses this set
+ * to hide irrelevant entries when the legacy JFX ProgressBar rendering is selected,
+ * keeping the panel uncluttered for operators who do not need scale features.
+ *
+ *
Properties used by both renderers are intentionally absent, including
+ * {@code minimum}, {@code maximum}, {@code limits_from_pv}, {@code horizontal},
+ * {@code log_scale}, {@code fill_color}, {@code background_color},
+ * {@code border_width} (drawn as a CSS outer border by {@code RegionBaseRepresentation}
+ * in the legacy renderer; as an inner canvas border in RTTank mode), and
+ * {@code border_alarm_sensitive} (alarm-sensitive outer border, also handled by
+ * {@code RegionBaseRepresentation} for all widget types). */
+ public static final Set SCALE_MODE_PROPS = Set.of(
+ "format", "precision",
+ "scale_visible", "show_minor_ticks", "show_scale_labels",
+ "opposite_scale_visible", "perpendicular_tick_labels", "font",
+ "inner_padding",
+ "alarm_limits_from_pv", "show_alarm_limits",
+ "level_lolo", "level_low", "level_high", "level_hihi",
+ "minor_alarm_color", "major_alarm_color");
+
+ /** 'inner_padding' — extra inset from widget edge to the fill bar, in pixels (0..20).
+ * Defaults to 3, matching the CSS inset of the stock JFX ProgressBar.
+ * Set to 0 for a tight, edge-to-edge bar with no surrounding gap. */
+ public static final WidgetPropertyDescriptor propInnerPadding =
+ newIntegerPropertyDescriptor(WidgetPropertyCategory.DISPLAY, "inner_padding",
+ Messages.WidgetProperties_InnerPadding, 0, 20);
+
/** Widget descriptor */
public static final WidgetDescriptor WIDGET_DESCRIPTOR =
new WidgetDescriptor("progressbar", WidgetCategory.MONITOR,
@@ -55,7 +104,7 @@ public Widget createWidget()
}
};
- /** Widget configurator to read legacy *.opi files*/
+ /** Widget configurator to read legacy *.opi files */
private static class ProgressBarConfigurator extends WidgetConfigurator
{
public ProgressBarConfigurator(final Version xml_version)
@@ -72,24 +121,31 @@ public boolean configureFromXML(final ModelReader model_reader, final Widget wid
if (xml_version.getMajor() < 2)
{
final ProgressBarWidget bar = (ProgressBarWidget) widget;
- // BOY progress bar reserved room on top for limit markers,
- // and on bottom for scale
+ // BOY reserved room on top for limit markers and on the bottom for
+ // a scale. This widget now actually has a scale, so only adjust for
+ // the marker area that has been removed.
if (XMLUtil.getChildBoolean(xml, "show_markers").orElse(true))
{
- // This widget has no markers on top, so move widget down and reduce height.
- // There is no 'marker font', seems to have constant height
final int reduce = 25;
bar.propY().setValue(bar.propY().getValue() + reduce);
bar.propHeight().setValue(bar.propHeight().getValue() - reduce);
}
- // Do use space below where BOY placed markers for the bar itself.
- // In the future, there could be a scale.
final Element el = XMLUtil.getChildElement(xml, "color_fillbackground");
if (el != null)
bar.propBackgroundColor().readFromXML(model_reader, el);
- // Create text update for the value indicator
+ // BOY's 'show_scale' boolean maps to our 'scale_visible' property.
+ final Element showScaleEl = XMLUtil.getChildElement(xml, "show_scale");
+ if (showScaleEl != null)
+ bar.propScaleVisible().readFromXML(model_reader, showScaleEl);
+
+ // BOY's 'scale_font' maps to our 'font' property.
+ final Element scaleFontEl = XMLUtil.getChildElement(xml, "scale_font");
+ if (scaleFontEl != null)
+ bar.propFont().readFromXML(model_reader, scaleFontEl);
+
+ // Create a companion TextUpdate widget for the BOY value label.
if (XMLUtil.getChildBoolean(xml, "show_label").orElse(true))
{
final Document doc = xml.getOwnerDocument();
@@ -125,31 +181,47 @@ public WidgetConfigurator getConfigurator(final Version persisted_version)
return new ProgressBarConfigurator(persisted_version);
}
- private volatile WidgetProperty limits_from_pv;
- private volatile WidgetProperty minimum;
- private volatile WidgetProperty maximum;
- private volatile WidgetProperty log_scale;
+ private volatile WidgetProperty font;
private volatile WidgetProperty fill_color;
private volatile WidgetProperty background_color;
- private volatile WidgetProperty horizontal;
+ private volatile WidgetProperty log_scale;
+ private volatile WidgetProperty horizontal;
+ private volatile WidgetProperty scale_visible;
+ private volatile WidgetProperty show_minor_ticks;
+ private volatile WidgetProperty show_scale_labels;
+ private volatile WidgetProperty opposite_scale_visible;
+ private volatile WidgetProperty perpendicular_tick_labels;
+ private volatile WidgetProperty border_width_prop;
+ private volatile WidgetProperty inner_padding_prop;
/** Constructor */
public ProgressBarWidget()
{
- super(WIDGET_DESCRIPTOR.getType());
+ super(WIDGET_DESCRIPTOR.getType(), 300, 30);
}
@Override
protected void defineProperties(final List> properties)
{
super.defineProperties(properties);
- properties.add(fill_color = propFillColor.createProperty(this, new WidgetColor(60, 255, 60)));
+ properties.add(font = propFont.createProperty(this, WidgetFontService.get(NamedWidgetFonts.DEFAULT)));
+ properties.add(fill_color = propFillColor.createProperty(this, new WidgetColor(60, 255, 60)));
properties.add(background_color = propBackgroundColor.createProperty(this, new WidgetColor(250, 250, 250)));
- 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 = propLogscale.createProperty(this, false));
- properties.add(horizontal = propHorizontal.createProperty(this, true));
+ properties.add(log_scale = propLogscale.createProperty(this, false));
+ properties.add(horizontal = propHorizontal.createProperty(this, true));
+ properties.add(scale_visible = propScaleVisible.createProperty(this, false));
+ properties.add(show_minor_ticks = propShowMinorTicks.createProperty(this, true));
+ properties.add(show_scale_labels = propShowScaleLabels.createProperty(this, true));
+ properties.add(opposite_scale_visible = propOppositeScaleVisible.createProperty(this, false));
+ properties.add(perpendicular_tick_labels = propPerpendicularTickLabels.createProperty(this, false));
+ properties.add(border_width_prop = propBorderWidth.createProperty(this, 0));
+ properties.add(inner_padding_prop = propInnerPadding.createProperty(this, 3));
+ }
+
+ /** @return 'font' property */
+ public WidgetProperty propFont()
+ {
+ return font;
}
/** @return 'fill_color' property */
@@ -164,33 +236,57 @@ public WidgetProperty propBackgroundColor()
return background_color;
}
- /** @return 'limits_from_pv' property */
- public WidgetProperty propLimitsFromPV()
+ /** @return 'log_scale' property */
+ public WidgetProperty propLogScale()
{
- return limits_from_pv;
+ return log_scale;
}
- /** @return 'minimum' property */
- public WidgetProperty propMinimum()
+ /** @return 'horizontal' property */
+ public WidgetProperty propHorizontal()
{
- return minimum;
+ return horizontal;
}
- /** @return 'maximum' property */
- public WidgetProperty propMaximum()
+ /** @return 'scale_visible' property */
+ public WidgetProperty propScaleVisible()
{
- return maximum;
+ return scale_visible;
}
- /** @return 'log_scale' property */
- public WidgetProperty propLogScale()
+ /** @return 'show_minor_ticks' property */
+ public WidgetProperty propShowMinorTicks()
{
- return log_scale;
+ return show_minor_ticks;
}
- /** @return 'horizontal' property */
- public WidgetProperty propHorizontal()
+ /** @return 'show_scale_labels' property */
+ public WidgetProperty propShowScaleLabels()
{
- return horizontal;
+ return show_scale_labels;
+ }
+
+ /** @return 'opposite_scale_visible' property */
+ public WidgetProperty propOppositeScaleVisible()
+ {
+ return opposite_scale_visible;
+ }
+
+ /** @return 'perpendicular_tick_labels' property */
+ public WidgetProperty propPerpendicularTickLabels()
+ {
+ return perpendicular_tick_labels;
+ }
+
+ /** @return 'border_width' property (0 = no border) */
+ public WidgetProperty propBorderWidth()
+ {
+ return border_width_prop;
+ }
+
+ /** @return 'inner_padding' property (extra inset between widget edge and fill bar, 0..20 px) */
+ public WidgetProperty propInnerPadding()
+ {
+ return inner_padding_prop;
}
}
diff --git a/app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/ScaledPVWidget.java b/app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/ScaledPVWidget.java
index 6f8e5ecd11..573e3ed1b7 100644
--- a/app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/ScaledPVWidget.java
+++ b/app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/ScaledPVWidget.java
@@ -22,10 +22,10 @@
import org.csstudio.display.builder.model.WidgetProperty;
import org.csstudio.display.builder.model.WidgetPropertyCategory;
import org.csstudio.display.builder.model.WidgetPropertyDescriptor;
-import org.phoebus.ui.color.NamedWidgetColors;
-import org.phoebus.ui.color.WidgetColorService;
import org.csstudio.display.builder.model.properties.EnumWidgetProperty;
+import org.phoebus.ui.color.NamedWidgetColors;
import org.phoebus.ui.color.WidgetColor;
+import org.phoebus.ui.color.WidgetColorService;
import org.phoebus.ui.vtype.ScaleFormat;
/** Base class for PV widgets that display a numeric value on a scale
@@ -46,7 +46,7 @@
* overrides the manual LOLO/LO/HI/HIHI levels. New property;
* old Phoebus silently ignores the XML element.
* Manual {@code minimum} / {@code maximum} range.
- * A {@code show_limits} toggle for alarm-limit visual markers.
+ * A {@code show_alarm_limits} toggle for alarm-limit visual markers.
* Manual LOLO / LO / HI / HIHI thresholds (NaN = inactive).
* Configurable minor/major alarm colours defaulting to the named
* {@code ALARM_MINOR} / {@code ALARM_MAJOR} palette entries.
@@ -125,6 +125,36 @@ public EnumWidgetProperty createProperty(final Widget widget,
newColorPropertyDescriptor(WidgetPropertyCategory.DISPLAY, "major_alarm_color",
Messages.WidgetProperties_MajorAlarmColor);
+ /** 'scale_visible' — show the numeric scale (tick marks and labels) */
+ public static final WidgetPropertyDescriptor propScaleVisible =
+ newBooleanPropertyDescriptor(WidgetPropertyCategory.DISPLAY, "scale_visible",
+ Messages.WidgetProperties_ScaleVisible);
+
+ /** 'show_minor_ticks' — show minor tick marks on the scale */
+ public static final WidgetPropertyDescriptor propShowMinorTicks =
+ newBooleanPropertyDescriptor(WidgetPropertyCategory.DISPLAY, "show_minor_ticks",
+ Messages.WidgetProperties_ShowMinorTicks);
+
+ /** 'opposite_scale_visible' — show a second scale on the opposite side */
+ public static final WidgetPropertyDescriptor propOppositeScaleVisible =
+ newBooleanPropertyDescriptor(WidgetPropertyCategory.DISPLAY, "opposite_scale_visible",
+ Messages.WidgetProperties_OppositeScaleVisible);
+
+ /** 'perpendicular_tick_labels' — draw scale labels perpendicular to the axis */
+ public static final WidgetPropertyDescriptor propPerpendicularTickLabels =
+ newBooleanPropertyDescriptor(WidgetPropertyCategory.DISPLAY, "perpendicular_tick_labels",
+ Messages.WidgetProperties_PerpendicularTickLabels);
+
+ /** 'show_scale_labels' — show tick label text on the scale (ticks are always drawn) */
+ public static final WidgetPropertyDescriptor propShowScaleLabels =
+ newBooleanPropertyDescriptor(WidgetPropertyCategory.DISPLAY, "show_scale_labels",
+ Messages.WidgetProperties_ShowScaleLabels);
+
+ /** 'border_width' — width in pixels of the border drawn around the widget (0..5) */
+ public static final WidgetPropertyDescriptor propBorderWidth =
+ newIntegerPropertyDescriptor(WidgetPropertyCategory.DISPLAY, "border_width",
+ Messages.WidgetProperties_BorderWidth, 0, 5);
+
// ---- Instance fields ------------------------------------------------
private volatile WidgetProperty format;
diff --git a/app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/TankWidget.java b/app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/TankWidget.java
index 48666c55da..8771df90eb 100644
--- a/app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/TankWidget.java
+++ b/app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/TankWidget.java
@@ -7,9 +7,7 @@
*******************************************************************************/
package org.csstudio.display.builder.model.widgets;
-import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.newBooleanPropertyDescriptor;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.newColorPropertyDescriptor;
-import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.newIntegerPropertyDescriptor;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propBackgroundColor;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propFillColor;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propFont;
@@ -74,36 +72,9 @@ public Widget createWidget()
}
};
- /** 'tank_border_width' — width in pixels of the border drawn around the
- * tank body; 0 (default) means no border, preserving the original look.
- */
- public static final WidgetPropertyDescriptor propTankBorderWidth =
- newIntegerPropertyDescriptor(WidgetPropertyCategory.DISPLAY, "tank_border_width",
- Messages.WidgetProperties_BorderWidth, 0, 5);
-
/** 'empty_color' */
public static final WidgetPropertyDescriptor propEmptyColor =
newColorPropertyDescriptor(WidgetPropertyCategory.DISPLAY, "empty_color", Messages.WidgetProperties_EmptyColor);
- /** 'scale_visible' */
- public static final WidgetPropertyDescriptor propScaleVisible =
- newBooleanPropertyDescriptor(WidgetPropertyCategory.DISPLAY, "scale_visible", Messages.WidgetProperties_ScaleVisible);
-
- /** 'show_minor_ticks' */
- public static final WidgetPropertyDescriptor propShowMinorTicks =
- newBooleanPropertyDescriptor(WidgetPropertyCategory.DISPLAY, "show_minor_ticks", Messages.WidgetProperties_ShowMinorTicks);
-
- /** 'perpendicular_tick_labels' — draw scale labels perpendicular
- * to the axis direction (horizontal text beside vertical scale)
- */
- public static final WidgetPropertyDescriptor propPerpendicularTickLabels =
- newBooleanPropertyDescriptor(WidgetPropertyCategory.DISPLAY, "perpendicular_tick_labels", Messages.WidgetProperties_PerpendicularTickLabels);
-
- /** 'opposite_scale_visible' — show a second scale on the opposite
- * side of the tank (right for vertical, bottom for horizontal).
- * Inspired by CS-Studio BOY which could show markers on both sides.
- */
- public static final WidgetPropertyDescriptor propOppositeScaleVisible =
- newBooleanPropertyDescriptor(WidgetPropertyCategory.DISPLAY, "opposite_scale_visible", Messages.WidgetProperties_OppositeScaleVisible);
/** Widget configurator to read legacy *.opi files*/
private static class CustomConfigurator extends WidgetConfigurator
@@ -168,6 +139,7 @@ public WidgetConfigurator getConfigurator(final Version persisted_version)
private volatile WidgetProperty empty_color;
private volatile WidgetProperty scale_visible;
private volatile WidgetProperty show_minor_ticks;
+ private volatile WidgetProperty show_scale_labels;
private volatile WidgetProperty perpendicular_tick_labels;
private volatile WidgetProperty opposite_scale_visible;
private volatile WidgetProperty log_scale;
@@ -193,10 +165,11 @@ protected void defineProperties(final List> properties)
properties.add(scale_visible = propScaleVisible.createProperty(this, true));
properties.add(opposite_scale_visible = propOppositeScaleVisible.createProperty(this, false));
properties.add(show_minor_ticks = propShowMinorTicks.createProperty(this, true));
+ properties.add(show_scale_labels = propShowScaleLabels.createProperty(this, true));
properties.add(perpendicular_tick_labels = propPerpendicularTickLabels.createProperty(this, false));
properties.add(log_scale = propLogscale.createProperty(this, false));
properties.add(horizontal = propHorizontal.createProperty(this, false));
- properties.add(border_width_prop = propTankBorderWidth.createProperty(this, 0));
+ properties.add(border_width_prop = propBorderWidth.createProperty(this, 0));
}
@Override
@@ -250,6 +223,12 @@ public WidgetProperty propShowMinorTicks()
return show_minor_ticks;
}
+ /** @return 'show_scale_labels' property */
+ public WidgetProperty propShowScaleLabels()
+ {
+ return show_scale_labels;
+ }
+
/** @return 'perpendicular_tick_labels' property */
public WidgetProperty propPerpendicularTickLabels()
{
diff --git a/app/display/model/src/main/resources/org/csstudio/display/builder/model/messages.properties b/app/display/model/src/main/resources/org/csstudio/display/builder/model/messages.properties
index 278fcc4753..33600004a2 100644
--- a/app/display/model/src/main/resources/org/csstudio/display/builder/model/messages.properties
+++ b/app/display/model/src/main/resources/org/csstudio/display/builder/model/messages.properties
@@ -171,6 +171,7 @@ WidgetProperties_Bit=Bit
WidgetProperties_BorderAlarmSensitive=Alarm Border
WidgetProperties_BorderColor=Border Color
WidgetProperties_BorderWidth=Border Width
+WidgetProperties_InnerPadding=Inner Padding
WidgetProperties_CellColors=Cell Colors
WidgetProperties_Class=Class
WidgetProperties_ColorHiHi=Color HiHi
@@ -310,6 +311,7 @@ WidgetProperties_ShowLimits=Show Limits
WidgetProperties_ShowLow=Show Low
WidgetProperties_ShowLoLo=Show LoLo
WidgetProperties_ShowMinorTicks=Show minor ticks
+WidgetProperties_ShowScaleLabels=Show scale labels
WidgetProperties_PerpendicularTickLabels=Labels perpendicular to axis
WidgetProperties_ShowOK=Show OK
WidgetProperties_ShowScale=Show Scale
diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/BaseWidgetRepresentations.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/BaseWidgetRepresentations.java
index b6db502bd7..8c9927f195 100644
--- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/BaseWidgetRepresentations.java
+++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/BaseWidgetRepresentations.java
@@ -55,6 +55,7 @@
import org.csstudio.display.builder.model.widgets.plots.ImageWidget;
import org.csstudio.display.builder.model.widgets.plots.StripchartWidget;
import org.csstudio.display.builder.model.widgets.plots.XYPlotWidget;
+import org.csstudio.display.builder.representation.Preferences;
import org.csstudio.display.builder.representation.WidgetRepresentation;
import org.csstudio.display.builder.representation.WidgetRepresentationFactory;
import org.csstudio.display.builder.representation.javafx.widgets.plots.DataBrowserRepresentation;
@@ -105,7 +106,9 @@ public Widget createWidget()
entry(PictureWidget.WIDGET_DESCRIPTOR, () -> (WidgetRepresentation) new PictureRepresentation()),
entry(PolygonWidget.WIDGET_DESCRIPTOR, () -> (WidgetRepresentation) new PolygonRepresentation()),
entry(PolylineWidget.WIDGET_DESCRIPTOR, () -> (WidgetRepresentation) new PolylineRepresentation()),
- entry(ProgressBarWidget.WIDGET_DESCRIPTOR, () -> (WidgetRepresentation) new ProgressBarRepresentation()),
+ entry(ProgressBarWidget.WIDGET_DESCRIPTOR, () -> (WidgetRepresentation) (Preferences.progressbar_scale_mode
+ ? new RTProgressBarRepresentation()
+ : new ProgressBarRepresentation())),
entry(RadioWidget.WIDGET_DESCRIPTOR, () -> (WidgetRepresentation) new RadioRepresentation()),
entry(RectangleWidget.WIDGET_DESCRIPTOR, () -> (WidgetRepresentation) new RectangleRepresentation()),
entry(ScaledSliderWidget.WIDGET_DESCRIPTOR, () -> (WidgetRepresentation) new ScaledSliderRepresentation()),
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 2aa9b529dc..12612cdf5f 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,8 +35,6 @@ public class ProgressBarRepresentation extends RegionBaseRepresentation