tmf.ui: Show "No Data" when an XY plot is empty
The timegraph chart has a concept of swimlanes, so no data is obvious.
With an XY Chart, it is less so as the data can be 0.
This gives a visusal feedback that there is no data available in the chart.
[Changed] Add indication that there is no data available to the xy chart
Change-Id: I9d15387bb463e389de4e567e39cc175c217d4881
Signed-off-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/c/tracecompass/org.eclipse.tracecompass/+/182633
Tested-by: Trace Compass Bot <tracecompass-bot@eclipse.org>
Tested-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
Reviewed-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/Messages.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/Messages.java
index 12d8654..cd70758 100644
--- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/Messages.java
+++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/Messages.java
@@ -45,6 +45,7 @@
public static String MarkerEvent_Bookmarks;
public static String TmfChartView_LockYAxis;
+ public static String TmfChartViewer_NoData;
public static String TmfCommonXLineChartTooltipProvider_time;
public static String TmfEventsTable_AddAsFilterText;
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/messages.properties b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/messages.properties
index 4d0fdd2..e690d29 100644
--- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/messages.properties
+++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/messages.properties
@@ -36,6 +36,7 @@
# org.eclipse.tracecompass.tmf.ui.viewers.events
TmfChartView_LockYAxis=Lock Y Axis...
+TmfChartViewer_NoData=No Data
TmfCommonXLineChartTooltipProvider_time=Time
TmfEventsTable_AddAsFilterText=Add as Filter (Ctrl+Enter)
TmfEventsTable_AddBookmarkActionText=Add Bookmark...
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/viewers/piecharts/Messages.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/viewers/piecharts/Messages.java
index c34acaa..b3c5c1d 100644
--- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/viewers/piecharts/Messages.java
+++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/viewers/piecharts/Messages.java
@@ -26,12 +26,6 @@
private static final String BUNDLE_NAME = "org.eclipse.tracecompass.internal.tmf.ui.viewers.piecharts.messages"; //$NON-NLS-1$
-
- /**
- * Show no data in pie chart
- */
- public static String TmfPieChart_noData;
-
/**
* String shown on top of the time-range selection piechart
*/
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/viewers/piecharts/messages.properties b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/viewers/piecharts/messages.properties
index 3978868..d1b73fc 100644
--- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/viewers/piecharts/messages.properties
+++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/viewers/piecharts/messages.properties
@@ -12,7 +12,6 @@
# Ericsson - Initial API and implementation
###############################################################################
-TmfPieChart_noData=No data
TmfStatisticsView_GlobalSelectionPieChartName=Global
TmfStatisticsView_TimeRangeSelectionPieChartName=Events in selection
TmfStatisticsView_PieChartOthersSliceName=Others
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/widgets/piechart/TmfPieChart.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/widgets/piechart/TmfPieChart.java
index 0da3a61..b820e8e 100644
--- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/widgets/piechart/TmfPieChart.java
+++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/widgets/piechart/TmfPieChart.java
@@ -162,7 +162,7 @@
Font font = new Font(Display.getDefault(), FONT, 15, SWT.BOLD);
gc.setForeground(BLACK);
gc.setFont(font);
- String text = Messages.TmfPieChart_noData;
+ String text = org.eclipse.tracecompass.internal.tmf.ui.Messages.TmfChartViewer_NoData;
Point textSize = e.gc.textExtent(text);
gc.drawText(text, (bounds.width - textSize.x) / 2, (bounds.height - textSize.y) / 2);
gc.setFont(oldFont);
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/xychart/linechart/TmfCommonXAxisChartViewer.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/xychart/linechart/TmfCommonXAxisChartViewer.java
index 0ce7562..dcfe15a 100644
--- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/xychart/linechart/TmfCommonXAxisChartViewer.java
+++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/xychart/linechart/TmfCommonXAxisChartViewer.java
@@ -28,14 +28,19 @@
import org.eclipse.jface.resource.ColorRegistry;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.RGBA;
+import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swtchart.IAxisSet;
import org.eclipse.swtchart.IAxisTick;
import org.eclipse.swtchart.IBarSeries;
+import org.eclipse.swtchart.ICustomPaintListener;
import org.eclipse.swtchart.ILineSeries;
+import org.eclipse.swtchart.IPlotArea;
import org.eclipse.swtchart.ISeries;
import org.eclipse.swtchart.ISeries.SeriesType;
import org.eclipse.swtchart.ISeriesSet;
@@ -52,6 +57,7 @@
import org.eclipse.tracecompass.internal.provisional.tmf.ui.viewers.xychart.BaseXYPresentationProvider;
import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
import org.eclipse.tracecompass.internal.tmf.ui.Activator;
+import org.eclipse.tracecompass.internal.tmf.ui.Messages;
import org.eclipse.tracecompass.tmf.core.dataprovider.DataProviderParameterUtils;
import org.eclipse.tracecompass.tmf.core.dataprovider.DataTypeUtils;
import org.eclipse.tracecompass.tmf.core.model.OutputElementStyle;
@@ -122,6 +128,26 @@
private static final @NonNull Logger LOGGER = TraceCompassLog.getLogger(TmfCommonXAxisChartViewer.class);
private static final int DEFAULT_SERIES_WIDTH = 1;
private static final String DIMMED_SERIES_SUFFIX = ".dimmed"; //$NON-NLS-1$
+ private static final ICustomPaintListener NO_DATA = e -> {
+ GC gc = e.gc;
+ Rectangle bounds = gc.getClipping();
+ Font oldFont = gc.getFont();
+ int height = 28;
+ Font font = new Font(Display.getDefault(), "Arial", height, SWT.BOLD); //$NON-NLS-1$
+ IPlotArea chart = (IPlotArea) e.widget;
+ Color oldFg = gc.getForeground();
+ gc.setForeground(chart.getChart().getForeground());
+ gc.setFont(font);
+ String text = Messages.TmfChartViewer_NoData;
+ Point textSize = e.gc.textExtent(text);
+ Color bg = gc.getBackground();
+ gc.setBackground(chart.getBackground());
+ gc.drawText(text, (bounds.width - textSize.x) / 2, (bounds.height - textSize.y) / 2);
+ gc.setBackground(bg);
+ gc.setForeground(oldFg);
+ gc.setFont(oldFont);
+ font.dispose();
+ };
private final double fResolution;
private final AtomicInteger fDirty = new AtomicInteger();
@@ -389,6 +415,7 @@
} while (!isComplete);
}
+
/**
* Update the chart's values before refreshing the viewer
*/
@@ -500,7 +527,10 @@
clearContent();
delta = 1;
}
-
+ getSwtChart().getPlotArea().removeCustomPaintListener(NO_DATA);
+ if(seriesValues.getSeriesData().isEmpty()) {
+ getSwtChart().getPlotArea().addCustomPaintListener(NO_DATA);
+ }
// Set the formatters for the axis
IAxisSet axisSet = getSwtChart().getAxisSet();
IAxisTick xTick = axisSet.getXAxis(0).getTick();
@@ -529,7 +559,6 @@
new Range(fixedYRange.getLower(), fixedYRange.getUpper()));
}
getSwtChart().redraw();
-
if (isSendTimeAlignSignals()) {
/*
* The width of the chart might have changed and its time axis might be