diff options
Diffstat (limited to 'profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools')
2 files changed, 44 insertions, 4 deletions
diff --git a/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChart.java b/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChart.java index d9a3a6232a..adabc5fa73 100644 --- a/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChart.java +++ b/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChart.java @@ -27,6 +27,10 @@ public class PieChart extends Chart { protected List<RGB> colorList = new ArrayList<RGB>(); public PieChart(Composite parent, int style) { + this(parent, style, new String[0]); + } + + public PieChart(Composite parent, int style, String labels[]) { super(parent, style); Control plotArea = null; for (Control child : getChildren()) { @@ -37,7 +41,7 @@ public class PieChart extends Chart { plotArea = child; } } - this.addPaintListener(new PieChartPaintListener(this, plotArea)); + this.addPaintListener(new PieChartPaintListener(this, plotArea, labels)); } @Override @@ -50,6 +54,7 @@ public class PieChart extends Chart { /* * Add data to this Pie Chart. A single pie Chart will be drawn with the data provided. */ + @Deprecated public void addPieChartSeries(String labels[], double val[]) { for (ISeries s : this.getSeriesSet().getSeries()) { this.getSeriesSet().deleteSeries(s.getId()); diff --git a/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChartPaintListener.java b/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChartPaintListener.java index 5b6856da04..50cc59bd75 100644 --- a/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChartPaintListener.java +++ b/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChartPaintListener.java @@ -10,23 +10,36 @@ *******************************************************************************/ package org.eclipse.linuxtools.dataviewers.piechart; +import org.eclipse.swt.SWT; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; 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.Rectangle; import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Display; import org.swtchart.ISeries; public class PieChartPaintListener implements PaintListener { private PieChart chart; private Control plotArea; + private String[] seriesNames; private static final int X_GAP = 10; + protected static final Color WHITE = Display.getDefault().getSystemColor(SWT.COLOR_WHITE); + protected static final Color BLACK = Display.getDefault().getSystemColor(SWT.COLOR_BLACK); + public PieChartPaintListener(PieChart chart, Control plotArea) { + this(chart, plotArea, new String[0]); + } + + public PieChartPaintListener(PieChart chart, Control plotArea, String[] seriesNames) { this.chart = chart; this.plotArea = plotArea; + this.seriesNames = seriesNames; } @Override @@ -39,16 +52,28 @@ public class PieChartPaintListener implements PaintListener { bounds = plotArea.getBounds(); } double[][] series = this.getPieSeriesArray(); + if (series.length == 0) { + Rectangle allBounds = chart.getBounds(); + Font font = new Font(Display.getDefault(), "Arial", 15, SWT.BOLD); //$NON-NLS-1$ + gc.setForeground(BLACK); + gc.setFont(font); + String text = "No data"; //$NON-NLS-1$ + Point textSize = e.gc.textExtent(text); + gc.drawText(text, (allBounds.width - textSize.x) / 2, (allBounds.height - textSize.y) / 2); + font.dispose(); + return; + } int width = (bounds.width - bounds.x) / series.length; int x = bounds.x; - for (double s[] : series) { - drawPieChart(e, s, new Rectangle(x, bounds.y, width, bounds.height)); + for (int i = 0; i < series.length; i++) { + double[] s = series[i]; + drawPieChart(e, i, s, new Rectangle(x, bounds.y, width, bounds.height)); x += width; } } - private void drawPieChart(PaintEvent e, double series[], Rectangle bounds) { + private void drawPieChart(PaintEvent e, int chartnum, double series[], Rectangle bounds) { int nelemSeries = series.length; double sumTotal = 0; @@ -84,6 +109,16 @@ public class PieChartPaintListener implements PaintListener { initialAngle += (-sweepAngle); } } + if (chartnum < seriesNames.length) { + Font font = new Font(Display.getDefault(), "Arial", 15, SWT.BOLD); //$NON-NLS-1$ + gc.setForeground(BLACK); + gc.setBackground(WHITE); + gc.setFont(font); + String text = seriesNames[chartnum]; + Point textSize = e.gc.textExtent(text); + gc.drawText(text, pieX + (pieWidth - textSize.x) / 2, pieY + pieWidth + textSize.y); + font.dispose(); + } } private double[][] getPieSeriesArray() { |