]> source.dussan.org Git - poi.git/commitdiff
Bug 54696: Add overlay setting to ChartLegend
authorCédric Walter <cedricwalter@apache.org>
Tue, 5 Nov 2013 22:35:54 +0000 (22:35 +0000)
committerCédric Walter <cedricwalter@apache.org>
Tue, 5 Nov 2013 22:35:54 +0000 (22:35 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1539169 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/ss/usermodel/charts/ChartLegend.java
src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartLegend.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSFChartLegend.java

index f40664f9c00295ce54cf68e220ee12dd236c22bd..f8ab5c9695d1040334aa1b58081de07b7d123971 100644 (file)
@@ -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);
 }
index 896e6dff2269b7e632c93fb6485ea07223cccdb2..6d82881a119428aa5b08c3c1f48886dd115fe16b 100644 (file)
@@ -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;
index 3c7cf5217f26e87dcca47d8c1e16afb68b0aba89..02aabad057da54575a36b459de978fe5513526d2 100644 (file)
@@ -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());
+       }
 }