diff options
-rw-r--r-- | chart2/qa/extras/chart2export.cxx | 14 | ||||
-rw-r--r-- | chart2/qa/extras/data/xlsx/testTdf90749.xlsx | bin | 0 -> 14505 bytes | |||
-rw-r--r-- | chart2/source/view/charttypes/VSeriesPlotter.cxx | 36 | ||||
-rw-r--r-- | oox/source/core/xmlfilterbase.cxx | 2 | ||||
-rw-r--r-- | oox/source/drawingml/chart/seriesconverter.cxx | 3 | ||||
-rw-r--r-- | oox/source/export/chartexport.cxx | 9 | ||||
-rw-r--r-- | oox/source/token/namespaces-strict.txt | 1 | ||||
-rw-r--r-- | oox/source/token/namespaces.hxx.tail | 1 | ||||
-rw-r--r-- | oox/source/token/namespaces.txt | 1 | ||||
-rw-r--r-- | oox/source/token/properties.txt | 1 | ||||
-rw-r--r-- | oox/source/token/tokens.txt | 1 |
11 files changed, 68 insertions, 1 deletions
diff --git a/chart2/qa/extras/chart2export.cxx b/chart2/qa/extras/chart2export.cxx index b9d5873052ba..88c7d154d170 100644 --- a/chart2/qa/extras/chart2export.cxx +++ b/chart2/qa/extras/chart2export.cxx @@ -136,6 +136,7 @@ public: void testCustomDataLabel(); void testCustomPositionofDataLabel(); void testCustomDataLabelMultipleSeries(); + void testLeaderLines(); void testNumberFormatExportPPTX(); void testLabelSeparatorExportDOCX(); void testChartTitlePropertiesColorFillPPTX(); @@ -254,6 +255,7 @@ public: CPPUNIT_TEST(testCustomDataLabel); CPPUNIT_TEST(testCustomPositionofDataLabel); CPPUNIT_TEST(testCustomDataLabelMultipleSeries); + CPPUNIT_TEST(testLeaderLines); CPPUNIT_TEST(testNumberFormatExportPPTX); CPPUNIT_TEST(testLabelSeparatorExportDOCX); CPPUNIT_TEST(testChartTitlePropertiesColorFillPPTX); @@ -349,7 +351,8 @@ void Chart2ExportTest::registerNamespaces(xmlXPathContextPtr& pXmlXPathCtx) { "office", "urn:oasis:names:tc:opendocument:xmlns:office:1.0" }, { "table", "urn:oasis:names:tc:opendocument:xmlns:table:1.0" }, { "text", "urn:oasis:names:tc:opendocument:xmlns:text:1.0" }, - { "xlink", "http://www.w3c.org/1999/xlink" } + { "xlink", "http://www.w3c.org/1999/xlink" }, + { "c15", "http://schemas.microsoft.com/office/drawing/2012/chart" } }; for(size_t i = 0; i < SAL_N_ELEMENTS(aNamespaces); ++i) { @@ -2246,6 +2249,15 @@ void Chart2ExportTest::testCustomDataLabelMultipleSeries() } +void Chart2ExportTest::testLeaderLines() +{ + load("/chart2/qa/extras/data/xlsx/", "testTdf90749.xlsx"); + xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML"); + CPPUNIT_ASSERT(pXmlDoc); + assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:ser[1]/c:dLbls/c:extLst/c:ext/c15:showLeaderLines", "val", "1"); + assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:ser[2]/c:dLbls/c:extLst/c:ext/c15:showLeaderLines", "val", "1"); +} + void Chart2ExportTest::testNumberFormatExportPPTX() { load("/chart2/qa/extras/data/pptx/", "tdf115859.pptx"); diff --git a/chart2/qa/extras/data/xlsx/testTdf90749.xlsx b/chart2/qa/extras/data/xlsx/testTdf90749.xlsx Binary files differnew file mode 100644 index 000000000000..ca3bc806c03c --- /dev/null +++ b/chart2/qa/extras/data/xlsx/testTdf90749.xlsx diff --git a/chart2/source/view/charttypes/VSeriesPlotter.cxx b/chart2/source/view/charttypes/VSeriesPlotter.cxx index b6382943b418..2c46743696f6 100644 --- a/chart2/source/view/charttypes/VSeriesPlotter.cxx +++ b/chart2/source/view/charttypes/VSeriesPlotter.cxx @@ -19,6 +19,7 @@ #include <memory> #include <VSeriesPlotter.hxx> +#include <BaseGFXHelper.hxx> #include <VLineProperties.hxx> #include <ShapeFactory.hxx> @@ -86,6 +87,7 @@ namespace chart { using namespace ::com::sun::star; +using namespace ::com::sun::star::chart; using namespace ::com::sun::star::chart2; using ::com::sun::star::uno::Reference; using ::com::sun::star::uno::Sequence; @@ -721,7 +723,41 @@ uno::Reference< drawing::XShape > VSeriesPlotter::createDataLabel( const uno::Re { awt::Point aRelPos = rDataSeries.getLabelPosition(aTextShapePos, nPointIndex); if( aRelPos.X != -1 ) + { xTextShape->setPosition(aRelPos); + if( !m_xChartTypeModel->getChartType().equalsIgnoreAsciiCase(CHART2_SERVICE_NAME_CHARTTYPE_PIE) ) + { + sal_Int32 nX1 = rScreenPosition2D.X; + sal_Int32 nY1 = rScreenPosition2D.Y; + sal_Int32 nX2 = nX1; + sal_Int32 nY2 = nY1; + ::basegfx::B2IRectangle aRect(BaseGFXHelper::makeRectangle(aRelPos, xTextShape->getSize())); + if (nX1 < aRelPos.X) + nX2 = aRelPos.X; + else if (nX1 > aRect.getMaxX()) + nX2 = aRect.getMaxX(); + + if (nY1 < aRect.getMinY()) + nY2 = aRect.getMinY(); + else if (nY1 > aRect.getMaxY()) + nY2 = aRect.getMaxY(); + + //when the line is very short compared to the page size don't create one + ::basegfx::B2DVector aLength(nX1 - nX2, nY1 - nY2); + double fPageDiagonaleLength = sqrt(double(m_aPageReferenceSize.Width)*double(m_aPageReferenceSize.Width) + double(m_aPageReferenceSize.Height)*double(m_aPageReferenceSize.Height)); + if ((aLength.getLength() / fPageDiagonaleLength) >= 0.01) + { + drawing::PointSequenceSequence aPoints(1); + aPoints[0].realloc(2); + aPoints[0][0].X = nX1; + aPoints[0][0].Y = nY1; + aPoints[0][1].X = nX2; + aPoints[0][1].Y = nY2; + + m_pShapeFactory->createLine2D(xTarget, aPoints, new VLineProperties); + } + } + } } // in case legend symbol has to be displayed, text shape position is diff --git a/oox/source/core/xmlfilterbase.cxx b/oox/source/core/xmlfilterbase.cxx index 3957f51cca1f..c6e9173ce53f 100644 --- a/oox/source/core/xmlfilterbase.cxx +++ b/oox/source/core/xmlfilterbase.cxx @@ -151,6 +151,8 @@ struct NamespaceIds: public rtl::StaticWithInit< NMSP_p15}, {"http://schemas.microsoft.com/office/spreadsheetml/2011/1/ac", NMSP_x12ac}, + {"http://schemas.microsoft.com/office/drawing/2012/chart", + NMSP_c15}, }; } }; diff --git a/oox/source/drawingml/chart/seriesconverter.cxx b/oox/source/drawingml/chart/seriesconverter.cxx index c190fa6a1b6d..61ee198d006f 100644 --- a/oox/source/drawingml/chart/seriesconverter.cxx +++ b/oox/source/drawingml/chart/seriesconverter.cxx @@ -340,6 +340,9 @@ void DataLabelsConverter::convertFromModel( const Reference< XDataSeries >& rxDa // Import baseline border properties for these data labels. importBorderProperties(aPropSet, *mrModel.mxShapeProp, getFilter().getGraphicHelper()); } + // import leaderline of data labels + if( !mrModel.mbShowLeaderLines ) + aPropSet.setProperty( PROP_ShowLeaderLines, false ); // data point label settings for (auto const& pointLabel : mrModel.maPointLabels) diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx index ae33fdcdd222..fbeb2a892672 100644 --- a/oox/source/export/chartexport.cxx +++ b/oox/source/export/chartexport.cxx @@ -3464,6 +3464,15 @@ void ChartExport::exportDataLabels( pFS->singleElement(FSNS(XML_c, XML_showLeaderLines), XML_val, "0"); + // Export leader line + if( eChartType != chart::TYPEID_PIE ) + { + pFS->startElement(FSNS(XML_c, XML_extLst)); + pFS->startElement(FSNS(XML_c, XML_ext), XML_uri, "{CE6537A1-D6FC-4f65-9D91-7224C49458BB}", FSNS(XML_xmlns, XML_c15), GetFB()->getNamespaceURL(OOX_NS(c15)).toUtf8()); + pFS->singleElement(FSNS(XML_c15, XML_showLeaderLines), XML_val, "1"); + pFS->endElement(FSNS(XML_c, XML_ext)); + pFS->endElement(FSNS(XML_c, XML_extLst)); + } pFS->endElement(FSNS(XML_c, XML_dLbls)); } diff --git a/oox/source/token/namespaces-strict.txt b/oox/source/token/namespaces-strict.txt index d6990e5bdf91..9a62a301a513 100644 --- a/oox/source/token/namespaces-strict.txt +++ b/oox/source/token/namespaces-strict.txt @@ -86,6 +86,7 @@ p14 http://schemas.microsoft.com/office/powerpoint/2010/main p15 http://schemas.microsoft.com/office/powerpoint/2012/main x12ac http://schemas.microsoft.com/office/spreadsheetml/2011/1/ac +c15 http://schemas.microsoft.com/office/drawing/2012/chart # extlst namespaces diff --git a/oox/source/token/namespaces.hxx.tail b/oox/source/token/namespaces.hxx.tail index 991527f1d5d6..fdea5b96f1b4 100644 --- a/oox/source/token/namespaces.hxx.tail +++ b/oox/source/token/namespaces.hxx.tail @@ -43,6 +43,7 @@ inline sal_Int32 getNamespace( sal_Int32 nToken ) { return nToken & NMSP_MASK; } #define PPT_TOKEN( token ) OOX_TOKEN( ppt, token ) #define P14_TOKEN( token ) OOX_TOKEN( p14, token ) #define P15_TOKEN( token ) OOX_TOKEN( p15, token ) +#define C15_TOKEN( token ) OOX_TOKEN( c15, token ) #define PR_TOKEN( token ) OOX_TOKEN( packageRel, token ) #define R_TOKEN( token ) OOX_TOKEN( officeRel, token ) #define VML_TOKEN( token ) OOX_TOKEN( vml, token ) diff --git a/oox/source/token/namespaces.txt b/oox/source/token/namespaces.txt index 604541129469..82bec7274c32 100644 --- a/oox/source/token/namespaces.txt +++ b/oox/source/token/namespaces.txt @@ -86,6 +86,7 @@ p14 http://schemas.microsoft.com/office/powerpoint/2010/main p15 http://schemas.microsoft.com/office/powerpoint/2012/main x12ac http://schemas.microsoft.com/office/spreadsheetml/2011/1/ac +c15 http://schemas.microsoft.com/office/drawing/2012/chart # extlst namespaces diff --git a/oox/source/token/properties.txt b/oox/source/token/properties.txt index de9cd886643a..4fc0c5b47c57 100644 --- a/oox/source/token/properties.txt +++ b/oox/source/token/properties.txt @@ -464,6 +464,7 @@ ShowFormulas ShowGrid ShowHighLow ShowInputMessage +ShowLeaderLines ShowLegendEntry ShowList ShowNegativeError diff --git a/oox/source/token/tokens.txt b/oox/source/token/tokens.txt index 3929d8c93808..27396f5b8dfa 100644 --- a/oox/source/token/tokens.txt +++ b/oox/source/token/tokens.txt @@ -1022,6 +1022,7 @@ by byPosition byte c +c15 cBhvr cGp cGpRule |