Skip to content

Commit 88af69d

Browse files
committed
XYPlot: Add 'on_right' property to Y axes
1 parent c1f0189 commit 88af69d

File tree

5 files changed

+73
-22
lines changed

5 files changed

+73
-22
lines changed

app/display/model/src/main/java/org/csstudio/display/builder/model/Messages.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2015-2021 Oak Ridge National Laboratory.
2+
* Copyright (c) 2015-2022 Oak Ridge National Laboratory.
33
* All rights reserved. This program and the accompanying materials
44
* are made available under the terms of the Eclipse Public License v1.0
55
* which accompanies this distribution, and is available at
@@ -264,6 +264,7 @@ public class Messages
264264
WidgetProperties_OnImage,
265265
WidgetProperties_OnLabel,
266266
WidgetProperties_OnlyExtremaVisible,
267+
WidgetProperties_OnRight,
267268
WidgetProperties_Opacity,
268269
WidgetProperties_Orientation,
269270
WidgetProperties_Password,

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

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2015-2019 Oak Ridge National Laboratory.
2+
* Copyright (c) 2015-2022 Oak Ridge National Laboratory.
33
* All rights reserved. This program and the accompanying materials
44
* are made available under the terms of the Eclipse Public License v1.0
55
* which accompanies this distribution, and is available at
@@ -146,14 +146,56 @@ protected AxisWidgetProperty(final StructuredWidgetProperty.Descriptor axis_desc
146146
public WidgetProperty<Boolean> visible() { return getElement(8); }
147147
};
148148

149+
/** 'on_right' property: Should axis be on the right? */
150+
public static final WidgetPropertyDescriptor<Boolean> propOnRight =
151+
CommonWidgetProperties.newBooleanPropertyDescriptor(WidgetPropertyCategory.DISPLAY, "on_right", Messages.WidgetProperties_OnRight);
152+
153+
/** Structure for Y axis */
154+
public static class YAxisWidgetProperty extends AxisWidgetProperty
155+
{
156+
/** @param descriptor propYAxis
157+
* @param widget Widget
158+
* @param title_text Title
159+
* @return {@link YAxisWidgetProperty}
160+
*/
161+
public static YAxisWidgetProperty create(final StructuredWidgetProperty.Descriptor descriptor, final Widget widget, final String title_text)
162+
{
163+
return new YAxisWidgetProperty(descriptor, widget,
164+
Arrays.asList(propTitle.createProperty(widget, title_text),
165+
propAutoscale.createProperty(widget, false),
166+
propLogscale.createProperty(widget, false),
167+
CommonWidgetProperties.propMinimum.createProperty(widget, 0.0),
168+
CommonWidgetProperties.propMaximum.createProperty(widget, 100.0),
169+
propGrid.createProperty(widget, false),
170+
propTitleFont.createProperty(widget, WidgetFontService.get(NamedWidgetFonts.DEFAULT_BOLD)),
171+
propScaleFont.createProperty(widget, WidgetFontService.get(NamedWidgetFonts.DEFAULT)),
172+
propOnRight.createProperty(widget, false),
173+
CommonWidgetProperties.propVisible.createProperty(widget, true)));
174+
}
175+
176+
protected YAxisWidgetProperty(final StructuredWidgetProperty.Descriptor axis_descriptor,
177+
final Widget widget, final List<WidgetProperty<?>> elements)
178+
{
179+
super(axis_descriptor, widget, elements);
180+
}
181+
182+
/** @return On right side? */
183+
public WidgetProperty<Boolean> onRight() { return getElement(8); }
184+
185+
// Element shifted from 8 in basic axis to 9 in Y axis
186+
@Override
187+
public WidgetProperty<Boolean> visible() { return getElement(9); }
188+
};
189+
190+
149191
/** 'y_axes' array */
150-
public static final ArrayWidgetProperty.Descriptor<AxisWidgetProperty> propYAxes =
192+
public static final ArrayWidgetProperty.Descriptor<YAxisWidgetProperty> propYAxes =
151193
new ArrayWidgetProperty.Descriptor<>(WidgetPropertyCategory.BEHAVIOR, "y_axes", Messages.PlotWidget_YAxes,
152194
(widget, index) ->
153-
AxisWidgetProperty.create(propYAxis, widget,
154-
index > 0
155-
? Messages.PlotWidget_Y + " " + index
156-
: Messages.PlotWidget_Y));
195+
YAxisWidgetProperty.create(propYAxis, widget,
196+
index > 0
197+
? Messages.PlotWidget_Y + " " + index
198+
: Messages.PlotWidget_Y));
157199

158200
// Elements of the 'trace' structure
159201

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2015-2019 Oak Ridge National Laboratory.
2+
* Copyright (c) 2015-2022 Oak Ridge National Laboratory.
33
* All rights reserved. This program and the accompanying materials
44
* are made available under the terms of the Eclipse Public License v1.0
55
* which accompanies this distribution, and is available at
@@ -54,6 +54,7 @@
5454
import org.csstudio.display.builder.model.widgets.VisibleWidget;
5555
import org.csstudio.display.builder.model.widgets.plots.PlotWidgetProperties.AxisWidgetProperty;
5656
import org.csstudio.display.builder.model.widgets.plots.PlotWidgetProperties.TraceWidgetProperty;
57+
import org.csstudio.display.builder.model.widgets.plots.PlotWidgetProperties.YAxisWidgetProperty;
5758
import org.phoebus.framework.persistence.XMLUtil;
5859
import org.w3c.dom.Element;
5960

@@ -223,10 +224,10 @@ private void handleLegacyYAxes(final ModelReader model_reader,
223224
// Count actual Y axes, because legacy_axis includes skipped X axes
224225
++y_count;
225226

226-
final AxisWidgetProperty y_axis;
227+
final YAxisWidgetProperty y_axis;
227228
if (plot.y_axes.size() < y_count)
228229
{
229-
y_axis = AxisWidgetProperty.create(propYAxis, widget, "");
230+
y_axis = YAxisWidgetProperty.create(propYAxis, widget, "");
230231
plot.y_axes.addElement(y_axis);
231232
}
232233
else
@@ -308,7 +309,7 @@ private boolean handleLegacyTraces(final ModelReader model_reader,
308309
private volatile WidgetProperty<Boolean> show_toolbar;
309310
private volatile WidgetProperty<Boolean> show_legend;
310311
private volatile AxisWidgetProperty x_axis;
311-
private volatile ArrayWidgetProperty<AxisWidgetProperty> y_axes;
312+
private volatile ArrayWidgetProperty<YAxisWidgetProperty> y_axes;
312313
private volatile ArrayWidgetProperty<TraceWidgetProperty> traces;
313314
private volatile ArrayWidgetProperty<MarkerProperty> markers;
314315
private volatile RuntimeEventProperty configure;
@@ -337,7 +338,7 @@ protected void defineProperties(final List<WidgetProperty<?>> properties)
337338
properties.add(show_toolbar = propToolbar.createProperty(this,false));
338339
properties.add(show_legend = PlotWidgetProperties.propLegend.createProperty(this, true));
339340
properties.add(x_axis = AxisWidgetProperty.create(propXAxis, this, Messages.PlotWidget_X));
340-
properties.add(y_axes = PlotWidgetProperties.propYAxes.createProperty(this, Arrays.asList(AxisWidgetProperty.create(propYAxis, this, Messages.PlotWidget_Y))));
341+
properties.add(y_axes = PlotWidgetProperties.propYAxes.createProperty(this, Arrays.asList(YAxisWidgetProperty.create(propYAxis, this, Messages.PlotWidget_Y))));
341342
properties.add(traces = PlotWidgetProperties.propTraces.createProperty(this, Arrays.asList(new TraceWidgetProperty(this, 0))));
342343
properties.add(markers = propMarkers.createProperty(this, Collections.emptyList()));
343344
properties.add(configure = (RuntimeEventProperty) runtimePropConfigure.createProperty(this, null));
@@ -435,7 +436,7 @@ public AxisWidgetProperty propXAxis()
435436
}
436437

437438
/** @return 'y_axes' property */
438-
public ArrayWidgetProperty<AxisWidgetProperty> propYAxes()
439+
public ArrayWidgetProperty<YAxisWidgetProperty> propYAxes()
439440
{
440441
return y_axes;
441442
}

app/display/model/src/main/resources/org/csstudio/display/builder/model/messages.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ WidgetProperties_OnColor='On' Color
247247
WidgetProperties_OnImage='On' Image
248248
WidgetProperties_OnLabel='On' Label
249249
WidgetProperties_OnlyExtremaVisible=Only Extrema Visible
250+
WidgetProperties_OnRight=On Right
250251
WidgetProperties_Opacity=Opacity
251252
WidgetProperties_Orientation=Orientation
252253
WidgetProperties_Password=Password

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

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.csstudio.display.builder.model.widgets.plots.PlotWidgetPointType;
2424
import org.csstudio.display.builder.model.widgets.plots.PlotWidgetProperties.AxisWidgetProperty;
2525
import org.csstudio.display.builder.model.widgets.plots.PlotWidgetProperties.TraceWidgetProperty;
26+
import org.csstudio.display.builder.model.widgets.plots.PlotWidgetProperties.YAxisWidgetProperty;
2627
import org.csstudio.display.builder.model.widgets.plots.PlotWidgetTraceType;
2728
import org.csstudio.display.builder.model.widgets.plots.XYPlotWidget;
2829
import org.csstudio.display.builder.model.widgets.plots.XYPlotWidget.MarkerProperty;
@@ -67,7 +68,7 @@ public class XYPlotRepresentation extends RegionBaseRepresentation<Pane, XYPlotW
6768
private final DirtyFlag dirty_position = new DirtyFlag();
6869
private final DirtyFlag dirty_range = new DirtyFlag();
6970
private final DirtyFlag dirty_config = new DirtyFlag();
70-
private final WidgetPropertyListener<List<AxisWidgetProperty>> yaxes_listener = this::yAxesChanged;
71+
private final WidgetPropertyListener<List<YAxisWidgetProperty>> yaxes_listener = this::yAxesChanged;
7172
private final UntypedWidgetPropertyListener position_listener = this::positionChanged;
7273
private final WidgetPropertyListener<List<TraceWidgetProperty>> traces_listener = this::tracesChanged;
7374
private final WidgetPropertyListener<Instant> configure_listener = (p, o, n) -> plot.showConfigurationDialog();
@@ -481,7 +482,7 @@ protected void registerListeners()
481482
trackAxisChanges(model_widget.propXAxis());
482483

483484
// Track initial Y axis
484-
final List<AxisWidgetProperty> y_axes = model_widget.propYAxes().getValue();
485+
final List<YAxisWidgetProperty> y_axes = model_widget.propYAxes().getValue();
485486
trackAxisChanges(y_axes.get(0));
486487
// Create additional Y axes from model
487488
if (y_axes.size() > 1)
@@ -512,7 +513,7 @@ protected void unregisterListeners()
512513
model_widget.propLegend().removePropertyListener(config_listener);
513514

514515
ignoreAxisChanges(model_widget.propXAxis());
515-
final List<AxisWidgetProperty> y_axes = model_widget.propYAxes().getValue();
516+
final List<YAxisWidgetProperty> y_axes = model_widget.propYAxes().getValue();
516517
for (AxisWidgetProperty axis : y_axes)
517518
ignoreAxisChanges(axis);
518519
model_widget.propYAxes().removePropertyListener(yaxes_listener);
@@ -543,6 +544,8 @@ private void trackAxisChanges(final AxisWidgetProperty axis)
543544
axis.titleFont().addUntypedPropertyListener(config_listener);
544545
axis.scaleFont().addUntypedPropertyListener(config_listener);
545546
axis.visible().addUntypedPropertyListener(config_listener);
547+
if (axis instanceof YAxisWidgetProperty)
548+
((YAxisWidgetProperty) axis).onRight().addUntypedPropertyListener(config_listener);
546549
}
547550

548551
/** Ignore changed axis properties
@@ -559,15 +562,17 @@ private void ignoreAxisChanges(final AxisWidgetProperty axis)
559562
axis.titleFont().removePropertyListener(config_listener);
560563
axis.scaleFont().removePropertyListener(config_listener);
561564
axis.visible().removePropertyListener(config_listener);
565+
if (axis instanceof YAxisWidgetProperty)
566+
((YAxisWidgetProperty) axis).onRight().removePropertyListener(config_listener);
562567
}
563568

564-
private void yAxesChanged(final WidgetProperty<List<AxisWidgetProperty>> property,
565-
final List<AxisWidgetProperty> removed, final List<AxisWidgetProperty> added)
569+
private void yAxesChanged(final WidgetProperty<List<YAxisWidgetProperty>> property,
570+
final List<YAxisWidgetProperty> removed, final List<YAxisWidgetProperty> added)
566571
{
567572
// Remove axis
568573
if (removed != null)
569574
{ // Notification holds the one removed axis, which was the last one
570-
final AxisWidgetProperty axis = removed.get(0);
575+
final YAxisWidgetProperty axis = removed.get(0);
571576
final int index = plot.getYAxes().size()-1;
572577
ignoreAxisChanges(axis);
573578
plot.removeYAxis(index);
@@ -577,7 +582,7 @@ private void yAxesChanged(final WidgetProperty<List<AxisWidgetProperty>> propert
577582
// Notification will hold the one added axis,
578583
// but initial call from registerListeners() will hold all axes to add
579584
if (added != null)
580-
for (AxisWidgetProperty axis : added)
585+
for (YAxisWidgetProperty axis : added)
581586
{
582587
plot.addYAxis(axis.title().getValue());
583588
trackAxisChanges(axis);
@@ -643,7 +648,7 @@ private void updateConfig()
643648
plot.setLegendFont(JFXUtil.convert(model_widget.propXAxis().titleFont().getValue()));
644649

645650
// Update Y Axes
646-
final List<AxisWidgetProperty> model_y = model_widget.propYAxes().getValue();
651+
final List<YAxisWidgetProperty> model_y = model_widget.propYAxes().getValue();
647652
if (plot.getYAxes().size() != model_y.size())
648653
{
649654
logger.log(Level.WARNING, "Plot has " + plot.getYAxes().size() + " while model has " + model_y.size() + " Y axes");
@@ -654,6 +659,7 @@ private void updateConfig()
654659
{
655660
plot_axis.useTraceNames(!legend);
656661
updateAxisConfig(plot_axis, model_y.get(i));
662+
plot_axis.setOnRight(model_y.get(i).onRight().getValue());
657663
++i;
658664
}
659665
}
@@ -677,7 +683,7 @@ private void updateRanges()
677683
updateAxisRange(plot.getXAxis(), model_widget.propXAxis());
678684

679685
// Update Y Axes
680-
final List<AxisWidgetProperty> model_y = model_widget.propYAxes().getValue();
686+
final List<YAxisWidgetProperty> model_y = model_widget.propYAxes().getValue();
681687
if (plot.getYAxes().size() != model_y.size())
682688
{
683689
logger.log(Level.WARNING, "Plot has " + plot.getYAxes().size() + " while model has " + model_y.size() + " Y axes");

0 commit comments

Comments
 (0)