Skip to content

Commit 2ffbfb1

Browse files
committed
Issue #2334, 'start' and 'end' replace 'time_range' on Stripchart
1 parent e786d90 commit 2ffbfb1

File tree

5 files changed

+79
-15
lines changed

5 files changed

+79
-15
lines changed

app/display/convert-medm/src/main/java/org/csstudio/opibuilder/adl2boy/translator/StripChart2Model.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public void processWidget(ADLWidget adlWidget) throws Exception
4141
setColor(plotcom.getBackgroundColor(), CommonWidgetProperties.propBackgroundColor);
4242
}
4343

44-
widgetModel.propTimeRange().setValue(Math.round(plotWidget.getPeriod()) + " " + plotWidget.getUnits());
44+
widgetModel.propStart().setValue(Math.round(plotWidget.getPeriod()) + " " + plotWidget.getUnits());
4545

4646
final List<ADLPen> pens = plotWidget.getPens();
4747
if (pens.size() > 0)

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
@@ -116,7 +116,8 @@ public class Messages
116116
Stripchart_Description,
117117
Stripchart_LabelFont,
118118
Stripchart_Name,
119-
Stripchart_TimeRange,
119+
Stripchart_StartTime,
120+
Stripchart_EndTime,
120121
Style,
121122
Style_Group,
122123
Style_Line,

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

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,13 @@ public Widget createWidget()
8080
}
8181
};
8282

83-
/** 'time_range' */
84-
public static final WidgetPropertyDescriptor<String> propTimeRange =
85-
CommonWidgetProperties.newStringPropertyDescriptor(WidgetPropertyCategory.BEHAVIOR, "time_range", Messages.Stripchart_TimeRange);
83+
/** 'start' */
84+
public static final WidgetPropertyDescriptor<String> propStart =
85+
CommonWidgetProperties.newStringPropertyDescriptor(WidgetPropertyCategory.BEHAVIOR, "start", Messages.Stripchart_StartTime);
86+
87+
/** 'end' */
88+
public static final WidgetPropertyDescriptor<String> propEnd =
89+
CommonWidgetProperties.newStringPropertyDescriptor(WidgetPropertyCategory.BEHAVIOR, "end", Messages.Stripchart_EndTime);
8690

8791
/** 'label_font' */
8892
public static final WidgetPropertyDescriptor<WidgetFont> propLabelFont =
@@ -96,6 +100,12 @@ public WidgetProperty<WidgetFont> createProperty(final Widget widget,
96100
}
97101
};
98102

103+
@Override
104+
public Version getVersion()
105+
{
106+
return new Version(2, 1, 0);
107+
}
108+
99109
/** 'axis' structure */
100110
public static class AxisWidgetProperty extends StructuredWidgetProperty
101111
{
@@ -318,7 +328,16 @@ public boolean configureFromXML(final ModelReader model_reader, final Widget wid
318328

319329
if (! handleLegacyTraces(model_reader, strip, xml, pv_macro))
320330
return false;
331+
332+
}
333+
// Stripchart V2.1.0
334+
if ((xml_version.getMinor() < 1 && xml_version.getMajor() == 2) || xml_version.getMajor() < 2)
335+
{
336+
final StripchartWidget strip = (StripchartWidget) widget;
337+
final String timeRange = XMLUtil.getChildString(xml, "time_range").orElse("1 minute");
338+
strip.propStart().setValue(timeRange);
321339
}
340+
322341
return true;
323342
}
324343

@@ -431,7 +450,8 @@ private boolean handleLegacyTraces(final ModelReader model_reader, final Stripch
431450
private volatile WidgetProperty<WidgetFont> scale_font;
432451
private volatile WidgetProperty<Boolean> show_toolbar;
433452
private volatile WidgetProperty<Boolean> show_legend;
434-
private volatile WidgetProperty<String> time_range;
453+
private volatile WidgetProperty<String> start;
454+
private volatile WidgetProperty<String> end;
435455
private volatile ArrayWidgetProperty<AxisWidgetProperty> y_axes;
436456
private volatile ArrayWidgetProperty<TraceWidgetProperty> traces;
437457
private volatile RuntimeEventProperty configure;
@@ -463,7 +483,8 @@ protected void defineProperties(final List<WidgetProperty<?>> properties)
463483
properties.add(scale_font = PlotWidgetProperties.propScaleFont.createProperty(this, WidgetFontService.get(NamedWidgetFonts.DEFAULT)));
464484
properties.add(show_toolbar = propToolbar.createProperty(this, true));
465485
properties.add(show_legend = PlotWidgetProperties.propLegend.createProperty(this, false));
466-
properties.add(time_range = propTimeRange.createProperty(this, "1 minute"));
486+
properties.add(start = propStart.createProperty(this, "1 minute"));
487+
properties.add(end = propEnd.createProperty(this, ""));
467488
properties.add(y_axes = propYAxes.createProperty(this, Arrays.asList(AxisWidgetProperty.create(propYAxis, this, Messages.PlotWidget_Y))));
468489
properties.add(traces = propTraces.createProperty(this, Arrays.asList(new TraceWidgetProperty(this, 0))));
469490
properties.add(configure = (RuntimeEventProperty) runtimePropConfigure.createProperty(this, null));
@@ -551,10 +572,16 @@ public WidgetProperty<Boolean> propLegend()
551572
return show_legend;
552573
}
553574

554-
/** @return 'time_range' property */
555-
public WidgetProperty<String> propTimeRange()
575+
/** @return 'start' property */
576+
public WidgetProperty<String> propStart()
577+
{
578+
return start;
579+
}
580+
581+
/** @return 'end' property */
582+
public WidgetProperty<String> propEnd()
556583
{
557-
return time_range;
584+
return end;
558585
}
559586

560587
/** @return 'y_axes' property */

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,8 @@ Spinner_ButtonsOnLeft=Buttons on left
9999
Stripchart_Description=Plot scalar PVs over time
100100
Stripchart_LabelFont=Label Font
101101
Stripchart_Name=Strip Chart
102-
Stripchart_TimeRange=Time Range
102+
Stripchart_StartTime=Start
103+
Stripchart_EndTime=End
103104
Style=Style
104105
Style_Group=Group Box
105106
Style_Line=Line

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

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.csstudio.trends.databrowser3.ui.plot.ModelBasedPlot;
3232
import org.phoebus.util.time.TimeParser;
3333
import org.phoebus.util.time.TimeRelativeInterval;
34+
import org.phoebus.util.time.TimestampFormats;
3435

3536
import javafx.scene.layout.Pane;
3637

@@ -117,7 +118,8 @@ protected void registerListeners()
117118
model_widget.propScaleFont().addUntypedPropertyListener(modelChangedListener);
118119
model_widget.propToolbar().addUntypedPropertyListener(optsChangedListener);
119120
model_widget.propLegend().addUntypedPropertyListener(modelChangedListener);
120-
model_widget.propTimeRange().addUntypedPropertyListener(modelChangedListener);
121+
model_widget.propStart().addUntypedPropertyListener(modelChangedListener);
122+
model_widget.propEnd().addUntypedPropertyListener(modelChangedListener);
121123
model_widget.propYAxes().addPropertyListener(axes_listener);
122124
model_widget.propTraces().addPropertyListener(traces_listener);
123125

@@ -148,7 +150,8 @@ protected void unregisterListeners()
148150
model_widget.propScaleFont().removePropertyListener(modelChangedListener);
149151
model_widget.propToolbar().removePropertyListener(optsChangedListener);
150152
model_widget.propLegend().removePropertyListener(modelChangedListener);
151-
model_widget.propTimeRange().removePropertyListener(modelChangedListener);
153+
model_widget.propStart().removePropertyListener(modelChangedListener);
154+
model_widget.propEnd().removePropertyListener(modelChangedListener);
152155
model_widget.propYAxes().removePropertyListener(axes_listener);
153156

154157
if (! toolkit.isEditMode())
@@ -274,8 +277,40 @@ private void updateModel()
274277
model.setLabelFont(JFXUtil.convert(model_widget.propLabelFont().getValue()));
275278
model.setScaleFont(JFXUtil.convert(model_widget.propScaleFont().getValue()));
276279

277-
final TemporalAmount rel_start = TimeParser.parseTemporalAmount(model_widget.propTimeRange().getValue());
278-
model.setTimerange(TimeRelativeInterval.startsAt(rel_start));
280+
/* deal with start/end time configuration */
281+
//start
282+
String text = model_widget.propStart().getValue();
283+
final Instant abs_start = TimestampFormats.parse(text);
284+
final TemporalAmount rel_start = TimeParser.parseTemporalAmount(text);
285+
286+
//end
287+
text = model_widget.propEnd().getValue();
288+
final Instant abs_end = TimestampFormats.parse(text);
289+
final TemporalAmount rel_end= TimeParser.parseTemporalAmount(text);
290+
291+
292+
TimeRelativeInterval range;
293+
294+
if (abs_end != null){
295+
if (abs_start != null){
296+
range = TimeRelativeInterval.of(abs_start, abs_end);
297+
}
298+
else
299+
{ // we must use an absolute interval here, when Stripchart has a relative start, the end is set to "now"
300+
range = TimeRelativeInterval.of(abs_end.minus(rel_start), abs_end);
301+
}
302+
}
303+
else{
304+
if (abs_start != null){
305+
range = TimeRelativeInterval.of(abs_start, abs_start.plus(rel_end));
306+
}
307+
else
308+
{ // rel_end ignored
309+
range = TimeRelativeInterval.startsAt(rel_start);
310+
}
311+
}
312+
model.setTimerange(range);
313+
279314

280315
final boolean show_legend = model_widget.propLegend().getValue();
281316
model.setLegendVisible(show_legend);

0 commit comments

Comments
 (0)