From ac800aa627935b5835279fc332181408fe52e583 Mon Sep 17 00:00:00 2001 From: =?utf8?q?C=C3=A9dric=20Walter?= Date: Tue, 5 Nov 2013 22:35:54 +0000 Subject: [PATCH] Bug 54696: Add overlay setting to ChartLegend git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1539169 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/ss/usermodel/charts/ChartLegend.java | 18 ++++++++- .../usermodel/charts/XSSFChartLegend.java | 21 ++++++++++ .../usermodel/charts/TestXSSFChartLegend.java | 39 ++++++++++++++++++- 3 files changed, 76 insertions(+), 2 deletions(-) diff --git a/src/java/org/apache/poi/ss/usermodel/charts/ChartLegend.java b/src/java/org/apache/poi/ss/usermodel/charts/ChartLegend.java index f40664f9c0..f8ab5c9695 100644 --- a/src/java/org/apache/poi/ss/usermodel/charts/ChartLegend.java +++ b/src/java/org/apache/poi/ss/usermodel/charts/ChartLegend.java @@ -23,10 +23,11 @@ import org.apache.poi.util.Beta; * High level representation of chart legend. * * @author Roman Kashitsyn + * @author Martin Andersson */ @Beta public interface ChartLegend extends ManuallyPositionable { - + /** * @return legend position */ @@ -36,4 +37,19 @@ public interface ChartLegend extends ManuallyPositionable { * @param position new legend position */ void setPosition(LegendPosition position); + + /** + * @return overlay value. + */ + boolean isOverlay(); + + /** + * If true the legend is positioned over the chart area otherwise + * the legend is displayed next to it. + * + * Default is no overlay. + * + * @param value + */ + void setOverlay(boolean value); } diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartLegend.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartLegend.java index 896e6dff22..6d82881a11 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartLegend.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartLegend.java @@ -30,6 +30,7 @@ import org.openxmlformats.schemas.drawingml.x2006.chart.STLegendPos; /** * Represents a SpreadsheetML chart legend * @author Roman Kashitsyn + * @author Martin Andersson */ @Beta public final class XSSFChartLegend implements ChartLegend { @@ -47,6 +48,18 @@ public final class XSSFChartLegend implements ChartLegend { this.legend = (ctChart.isSetLegend()) ? ctChart.getLegend() : ctChart.addNewLegend(); + + setDefaults(); + } + + /** + * Set sensible default styling. + */ + private void setDefaults() { + if (!legend.isSetOverlay()) { + legend.addNewOverlay(); + } + legend.getOverlay().setVal(false); } /** @@ -84,6 +97,14 @@ public final class XSSFChartLegend implements ChartLegend { return new XSSFManualLayout(legend.getLayout()); } + public boolean isOverlay() { + return legend.getOverlay().getVal(); + } + + public void setOverlay(boolean value) { + legend.getOverlay().setVal(value); + } + private STLegendPos.Enum fromLegendPosition(LegendPosition position) { switch (position) { case BOTTOM: return STLegendPos.B; diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSFChartLegend.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSFChartLegend.java index 3c7cf5217f..02aabad057 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSFChartLegend.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSFChartLegend.java @@ -24,8 +24,14 @@ import org.apache.poi.ss.usermodel.charts.ChartLegend; import org.apache.poi.ss.usermodel.charts.LegendPosition; import org.apache.poi.xssf.usermodel.*; +/** + * Tests ChartLegend + * + * @author Martin Andersson + * @author Cedric dot Walter at gmail dot com + */ public final class TestXSSFChartLegend extends TestCase { - + public void testLegendPositionAccessMethods() throws Exception { Workbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet(); @@ -37,4 +43,35 @@ public final class TestXSSFChartLegend extends TestCase { legend.setPosition(LegendPosition.TOP_RIGHT); assertEquals(LegendPosition.TOP_RIGHT, legend.getPosition()); } + + public void test_setOverlay_defaultChartLegend_expectOverlayInitialValueSetToFalse() { + // Arrange + Workbook wb = new XSSFWorkbook(); + Sheet sheet = wb.createSheet(); + Drawing drawing = sheet.createDrawingPatriarch(); + ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 1, 1, 10, 30); + Chart chart = drawing.createChart(anchor); + ChartLegend legend = chart.getOrCreateLegend(); + + // Act + + // Assert + assertFalse(legend.isOverlay()); + } + + public void test_setOverlay_chartLegendSetToTrue_expectOverlayInitialValueSetToTrue() { + // Arrange + Workbook wb = new XSSFWorkbook(); + Sheet sheet = wb.createSheet(); + Drawing drawing = sheet.createDrawingPatriarch(); + ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 1, 1, 10, 30); + Chart chart = drawing.createChart(anchor); + ChartLegend legend = chart.getOrCreateLegend(); + + // Act + legend.setOverlay(true); + + // Assert + assertTrue(legend.isOverlay()); + } } -- 2.39.5