Skip to content

Commit ee52204

Browse files
authored
Merge pull request #2417 from ControlSystemStudio/CSSTUDIO-1414
Csstudio 1414: Enable Grid Color for Plot widgets and Data Editor
2 parents 3cc8189 + 96d927d commit ee52204

File tree

7 files changed

+109
-32
lines changed

7 files changed

+109
-32
lines changed

app/display/convert-edm/src/main/java/org/csstudio/display/converter/edm/widgets/Convert_xyGraphClass.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ public Convert_xyGraphClass(final EdmConverter converter, final Widget parent, f
4040

4141
convertColor(r.getBgColor(), widget.propBackground());
4242
convertColor(r.getFgColor(), widget.propForeground());
43-
convertColor(r.getFgColor(), widget.propGridColor());
43+
widget.propYAxes().getValue().forEach(propYAxis -> {
44+
convertColor(r.getFgColor(), propYAxis.color());
45+
});
4446

4547
// X Axis
4648
if (r.getXLabel() == null)

app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/plots/PlotWidgetProperties.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.csstudio.display.builder.model.WidgetPropertyDescriptor;
2121
import org.csstudio.display.builder.model.persist.NamedWidgetColors;
2222
import org.csstudio.display.builder.model.persist.NamedWidgetFonts;
23+
import org.csstudio.display.builder.model.persist.WidgetColorService;
2324
import org.csstudio.display.builder.model.persist.WidgetFontService;
2425
import org.csstudio.display.builder.model.properties.CommonWidgetProperties;
2526
import org.csstudio.display.builder.model.properties.EnumWidgetProperty;
@@ -88,7 +89,7 @@ public WidgetProperty<WidgetFont> createProperty(final Widget widget,
8889

8990
/** 'grid_color' */
9091
public static final WidgetPropertyDescriptor<WidgetColor> propGridColor =
91-
CommonWidgetProperties.newColorPropertyDescriptor(WidgetPropertyCategory.DISPLAY, "grid_color", Messages.PlotWidget_GridColor);
92+
CommonWidgetProperties.newColorPropertyDescriptor(WidgetPropertyCategory.DISPLAY, "grid_color", Messages.PlotWidget_Color);
9293

9394
/** 'x_axis' */
9495
public final static StructuredWidgetProperty.Descriptor propXAxis =
@@ -144,6 +145,7 @@ protected AxisWidgetProperty(final StructuredWidgetProperty.Descriptor axis_desc
144145
public WidgetProperty<WidgetFont> scaleFont() { return getElement(7); }
145146
/** @return Is axis visible? */
146147
public WidgetProperty<Boolean> visible() { return getElement(8); }
148+
147149
};
148150

149151
/** 'on_right' property: Should axis be on the right? */
@@ -170,7 +172,10 @@ public static YAxisWidgetProperty create(final StructuredWidgetProperty.Descript
170172
propTitleFont.createProperty(widget, WidgetFontService.get(NamedWidgetFonts.DEFAULT_BOLD)),
171173
propScaleFont.createProperty(widget, WidgetFontService.get(NamedWidgetFonts.DEFAULT)),
172174
propOnRight.createProperty(widget, false),
173-
CommonWidgetProperties.propVisible.createProperty(widget, true)));
175+
CommonWidgetProperties.propVisible.createProperty(widget, true),
176+
CommonWidgetProperties.propColor.createProperty(widget, WidgetColorService.getColor(NamedWidgetColors.TEXT))
177+
)
178+
);
174179
}
175180

176181
protected YAxisWidgetProperty(final StructuredWidgetProperty.Descriptor axis_descriptor,
@@ -185,6 +190,9 @@ protected YAxisWidgetProperty(final StructuredWidgetProperty.Descriptor axis_des
185190
// Element shifted from 8 in basic axis to 9 in Y axis
186191
@Override
187192
public WidgetProperty<Boolean> visible() { return getElement(9); }
193+
194+
/** @return Axis/Grid color */
195+
public WidgetProperty<WidgetColor> color() { return getElement(10); }
188196
};
189197

190198

app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/plots/StripchartWidget.java

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -148,11 +148,36 @@ protected AxisWidgetProperty(final StructuredWidgetProperty.Descriptor axis_desc
148148
public WidgetProperty<Boolean> visible() { return getElement(6); }
149149
};
150150

151+
public static class YAxisWidgetProperty extends AxisWidgetProperty {
152+
153+
public static YAxisWidgetProperty create(final StructuredWidgetProperty.Descriptor descriptor, final Widget widget, final String title_text)
154+
{
155+
return new YAxisWidgetProperty(descriptor, widget,
156+
Arrays.asList(PlotWidgetProperties.propTitle.createProperty(widget, title_text),
157+
PlotWidgetProperties.propAutoscale.createProperty(widget, false),
158+
PlotWidgetProperties.propLogscale.createProperty(widget, false),
159+
CommonWidgetProperties.propMinimum.createProperty(widget, 0.0),
160+
CommonWidgetProperties.propMaximum.createProperty(widget, 100.0),
161+
PlotWidgetProperties.propGrid.createProperty(widget, false),
162+
CommonWidgetProperties.propVisible.createProperty(widget, true),
163+
CommonWidgetProperties.propColor.createProperty(widget, WidgetColorService.getColor(NamedWidgetColors.TEXT))
164+
));
165+
}
166+
167+
protected YAxisWidgetProperty(Descriptor axis_descriptor, Widget widget, List<WidgetProperty<?>> elements) {
168+
super(axis_descriptor, widget, elements);
169+
}
170+
171+
/** @return Axis/Grid color */
172+
public WidgetProperty<WidgetColor> color() { return getElement(7); }
173+
174+
}
175+
151176
/** 'y_axes' array */
152-
public static final ArrayWidgetProperty.Descriptor<AxisWidgetProperty> propYAxes =
177+
public static final ArrayWidgetProperty.Descriptor<YAxisWidgetProperty> propYAxes =
153178
new ArrayWidgetProperty.Descriptor<>(WidgetPropertyCategory.BEHAVIOR, "y_axes", Messages.PlotWidget_YAxes,
154179
(widget, index) ->
155-
AxisWidgetProperty.create(propYAxis, widget,
180+
YAxisWidgetProperty.create(propYAxis, widget,
156181
index > 0
157182
? Messages.PlotWidget_Y + " " + index
158183
: Messages.PlotWidget_Y));
@@ -358,10 +383,10 @@ private void handleLegacyAxes(final ModelReader model_reader,
358383
// Count actual Y axes, because legacy_axis includes skipped X axes
359384
++y_count;
360385

361-
final AxisWidgetProperty y_axis;
386+
final YAxisWidgetProperty y_axis;
362387
if (strip.y_axes.size() < y_count)
363388
{
364-
y_axis = AxisWidgetProperty.create(propYAxis, strip, "");
389+
y_axis = YAxisWidgetProperty.create(propYAxis, strip, "");
365390
strip.y_axes.addElement(y_axis);
366391
}
367392
else
@@ -452,7 +477,7 @@ private boolean handleLegacyTraces(final ModelReader model_reader, final Stripch
452477
private volatile WidgetProperty<Boolean> show_legend;
453478
private volatile WidgetProperty<String> start;
454479
private volatile WidgetProperty<String> end;
455-
private volatile ArrayWidgetProperty<AxisWidgetProperty> y_axes;
480+
private volatile ArrayWidgetProperty<YAxisWidgetProperty> y_axes;
456481
private volatile ArrayWidgetProperty<TraceWidgetProperty> traces;
457482
private volatile RuntimeEventProperty configure;
458483
private volatile RuntimeEventProperty open_full;
@@ -485,7 +510,7 @@ protected void defineProperties(final List<WidgetProperty<?>> properties)
485510
properties.add(show_legend = PlotWidgetProperties.propLegend.createProperty(this, false));
486511
properties.add(start = propStart.createProperty(this, "1 minute"));
487512
properties.add(end = propEnd.createProperty(this, ""));
488-
properties.add(y_axes = propYAxes.createProperty(this, Arrays.asList(AxisWidgetProperty.create(propYAxis, this, Messages.PlotWidget_Y))));
513+
properties.add(y_axes = propYAxes.createProperty(this, Arrays.asList(YAxisWidgetProperty.create(propYAxis, this, Messages.PlotWidget_Y))));
489514
properties.add(traces = propTraces.createProperty(this, Arrays.asList(new TraceWidgetProperty(this, 0))));
490515
properties.add(configure = (RuntimeEventProperty) runtimePropConfigure.createProperty(this, null));
491516
properties.add(open_full = (RuntimeEventProperty) DataBrowserWidget.runtimePropOpenFull.createProperty(this, null));
@@ -585,7 +610,7 @@ public WidgetProperty<String> propEnd()
585610
}
586611

587612
/** @return 'y_axes' property */
588-
public ArrayWidgetProperty<AxisWidgetProperty> propYAxes()
613+
public ArrayWidgetProperty<YAxisWidgetProperty> propYAxes()
589614
{
590615
return y_axes;
591616
}

app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/plots/XYPlotWidget.java

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,18 @@ protected MarkerProperty(final Widget widget, final String name)
122122
/** Legacy properties that have already triggered a warning */
123123
private final CopyOnWriteArraySet<String> warnings_once = new CopyOnWriteArraySet<>();
124124

125+
/** Moving gridline color to individual Y-Axes was a backwards-incompatible change
126+
* So the major was incremented from 2.0.0 to 3.0.0
127+
*/
128+
private static final Version VERSION = Version.parse("3.0.0");
129+
130+
/** @return Widget version number */
131+
@Override
132+
public Version getVersion()
133+
{
134+
return VERSION;
135+
}
136+
125137
/** Configurator that handles legacy properties */
126138
private static class Configurator extends WidgetConfigurator
127139
{
@@ -136,6 +148,7 @@ public boolean configureFromXML(final ModelReader model_reader, final Widget wid
136148
{
137149
configureAllPropertiesFromMatchingXML(model_reader, widget, xml);
138150

151+
// Legacy widget
139152
if (xml_version.getMajor() < 2)
140153
{
141154
if (StripchartWidget.isLegacyStripchart(xml))
@@ -176,6 +189,24 @@ public boolean configureFromXML(final ModelReader model_reader, final Widget wid
176189
for (TraceWidgetProperty trace : plot.propTraces().getValue())
177190
trace.traceName().setValue("");
178191
}
192+
193+
// Newer widgets with some high-level properties moved to individual axes
194+
if (xml_version.getMajor() < 3) {
195+
196+
final XYPlotWidget plot = (XYPlotWidget) widget;
197+
198+
// If grid color was specified, then use it on each axis
199+
Element gridColor = XMLUtil.getChildElement(xml, "grid_color");
200+
if(gridColor != null) {
201+
plot.y_axes.getValue().forEach(axis -> {
202+
try {
203+
axis.color().readFromXML(model_reader, gridColor);
204+
} catch (Exception e) {
205+
logger.log(Level.WARNING, "Could not read widget color from grid_color of V2 X/Y Plot Widget");
206+
}
207+
});
208+
}
209+
}
179210
return true;
180211
}
181212

@@ -303,7 +334,6 @@ private boolean handleLegacyTraces(final ModelReader model_reader,
303334

304335
private volatile WidgetProperty<WidgetColor> foreground;
305336
private volatile WidgetProperty<WidgetColor> background;
306-
private volatile WidgetProperty<WidgetColor> grid;
307337
private volatile WidgetProperty<String> title;
308338
private volatile WidgetProperty<WidgetFont> title_font;
309339
private volatile WidgetProperty<Boolean> show_toolbar;
@@ -332,7 +362,6 @@ protected void defineProperties(final List<WidgetProperty<?>> properties)
332362
super.defineProperties(properties);
333363
properties.add(foreground = propForegroundColor.createProperty(this, WidgetColorService.getColor(NamedWidgetColors.TEXT)));
334364
properties.add(background = propBackgroundColor.createProperty(this, WidgetColorService.getColor(NamedWidgetColors.BACKGROUND)));
335-
properties.add(grid = propGridColor.createProperty(this, WidgetColorService.getColor(NamedWidgetColors.GRID)));
336365
properties.add(title = PlotWidgetProperties.propTitle.createProperty(this, ""));
337366
properties.add(title_font = PlotWidgetProperties.propTitleFont.createProperty(this, WidgetFontService.get(NamedWidgetFonts.HEADER2)));
338367
properties.add(show_toolbar = propToolbar.createProperty(this,false));
@@ -399,12 +428,6 @@ public WidgetProperty<WidgetColor> propForeground()
399428
return foreground;
400429
}
401430

402-
/** @return 'grid_color' property */
403-
public WidgetProperty<WidgetColor> propGridColor()
404-
{
405-
return grid;
406-
}
407-
408431
/** @return 'title' property */
409432
public WidgetProperty<String> propTitle()
410433
{

app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/plots/StripchartRepresentation.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public class StripchartRepresentation extends RegionBaseRepresentation<Pane, Str
6868
private final WidgetPropertyListener<Integer> sizeChangedListener = this::sizeChanged;
6969
private final UntypedWidgetPropertyListener optsChangedListener = this::optsChanged;
7070
private final UntypedWidgetPropertyListener modelChangedListener = this::modelChanged;
71-
private final WidgetPropertyListener<List<AxisWidgetProperty>> axes_listener = this::axesChanged;
71+
private final WidgetPropertyListener<List<StripchartWidget.YAxisWidgetProperty>> axes_listener = this::axesChanged;
7272
private final WidgetPropertyListener<List<TraceWidgetProperty>> traces_listener = this::tracesChanged;
7373
private final WidgetPropertyListener<Instant> config_dialog_listener = (p, o, n) -> plot.getPlot().showConfigurationDialog();
7474
private final WidgetPropertyListener<Instant> open_databrowser_listener = (p, o, n) ->
@@ -164,22 +164,22 @@ protected void unregisterListeners()
164164
super.unregisterListeners();
165165
}
166166

167-
private void axesChanged(final WidgetProperty<List<AxisWidgetProperty>> prop, final List<AxisWidgetProperty> removed, final List<AxisWidgetProperty> added)
167+
private void axesChanged(final WidgetProperty<List<StripchartWidget.YAxisWidgetProperty>> prop, final List<StripchartWidget.YAxisWidgetProperty> removed, final List<StripchartWidget.YAxisWidgetProperty> added)
168168
{
169169
// Track/ignore axes
170170
if (removed != null)
171-
for (AxisWidgetProperty axis : removed)
171+
for (StripchartWidget.YAxisWidgetProperty axis : removed)
172172
ignoreAxisChanges(axis);
173173

174174
if (added != null)
175-
for (AxisWidgetProperty axis : added)
175+
for (StripchartWidget.YAxisWidgetProperty axis : added)
176176
trackAxisChanges(axis);
177177

178178
// Anything changed -> Update complete model
179179
modelChanged(null, null, null);
180180
}
181181

182-
private void trackAxisChanges(final AxisWidgetProperty axis)
182+
private void trackAxisChanges(final StripchartWidget.YAxisWidgetProperty axis)
183183
{
184184
axis.title().addUntypedPropertyListener(modelChangedListener);
185185
axis.autoscale().addUntypedPropertyListener(modelChangedListener);
@@ -188,9 +188,10 @@ private void trackAxisChanges(final AxisWidgetProperty axis)
188188
axis.maximum().addUntypedPropertyListener(modelChangedListener);
189189
axis.grid().addUntypedPropertyListener(modelChangedListener);
190190
axis.visible().addUntypedPropertyListener(modelChangedListener);
191+
axis.color().addUntypedPropertyListener(modelChangedListener);
191192
}
192193

193-
private void ignoreAxisChanges(final AxisWidgetProperty axis)
194+
private void ignoreAxisChanges(final StripchartWidget.YAxisWidgetProperty axis)
194195
{
195196
axis.title().removePropertyListener(modelChangedListener);
196197
axis.autoscale().removePropertyListener(modelChangedListener);
@@ -199,6 +200,8 @@ private void ignoreAxisChanges(final AxisWidgetProperty axis)
199200
axis.maximum().removePropertyListener(modelChangedListener);
200201
axis.grid().removePropertyListener(modelChangedListener);
201202
axis.visible().removePropertyListener(modelChangedListener);
203+
axis.color().removePropertyListener(modelChangedListener);
204+
202205
}
203206

204207

@@ -317,10 +320,10 @@ private void updateModel()
317320

318321
// Value Axes
319322
int index = 0;
320-
final List<AxisWidgetProperty> axes = model_widget.propYAxes().getValue();
323+
final List<StripchartWidget.YAxisWidgetProperty> axes = model_widget.propYAxes().getValue();
321324
while (model.getAxisCount() > axes.size())
322325
model.removeAxis(model.getAxis(0));
323-
for (AxisWidgetProperty axis : axes)
326+
for (StripchartWidget.YAxisWidgetProperty axis : axes)
324327
{
325328
final AxisConfig config;
326329
if (index < model.getAxisCount())
@@ -336,6 +339,7 @@ private void updateModel()
336339
config.setLogScale(axis.logscale().getValue());
337340
config.setGridVisible(axis.grid().getValue());
338341
config.setVisible(axis.visible().getValue());
342+
config.setColor(JFXUtil.convert(axis.color().getValue()));
339343
++index;
340344
}
341345

0 commit comments

Comments
 (0)