[Libreoffice-commits] core.git: Branch 'libreoffice-5-4' - chart2/qa include/oox oox/source
Bartosz Kosiorek
gang65 at poczta.onet.pl
Sat Jan 27 20:07:49 UTC 2018
chart2/qa/extras/chart2export.cxx | 15 ++++++++
include/oox/export/chartexport.hxx | 5 +-
oox/source/export/chartexport.cxx | 66 ++++++++++++++++++++++++++-----------
3 files changed, 65 insertions(+), 21 deletions(-)
New commits:
commit 46f1fbcea97f777d12efed580a8f04da154106a3
Author: Bartosz Kosiorek <gang65 at poczta.onet.pl>
Date: Wed Jan 3 23:27:16 2018 +0100
tdf#114173 Preserve size of chart legend during xlsx export
This is a combination of 2 commits.
tdf#114173 Preserve size of chart legend during xlsx export
During export chart into .xlsx file,
the information about size of legend was not saved.
Example of proper size:
<c:w val="0.41459448854442293"/>
<c:h val="0.23161616722845749"/>
another issue was hardcoded "layoutTarget" which
was always "inner":
<c:layoutTarget val="inner"/>
also properties regarding default text style was not preserved:
<c:txPr>
<a:bodyPr/>
<a:lstStyle/>
<a:p>
<a:pPr>
<a:defRPr sz="900" b="0" i="0" u="none" strike="noStrike" kern="1200" baseline="0">
<a:solidFill>
<a:schemeClr val="tx1">
<a:lumMod val="65000"/>
<a:lumOff val="35000"/>
</a:schemeClr>
</a:solidFill>
</a:defRPr>
</a:pPr>
<a:endParaRPr lang="pl-PL"/>
</a:p>
</c:txPr>
With this patch all these issues was resolved, and in case
of layoutTarget "outer", the field is not availble at all,
according to specification.
Change-Id: I2c9b7a112bdd911542b5273e660222d7fefa2d88
Reviewed-on: https://gerrit.libreoffice.org/47358
Reviewed-by: Mike Kaganski <mike.kaganski at collabora.com>
Tested-by: Mike Kaganski <mike.kaganski at collabora.com>
(cherry picked from commit 84392651d2731cce91c3b2e144bed4ac07e4ddf1)
crashtesting: multiple export failures
since...
commit 84392651d2731cce91c3b2e144bed4ac07e4ddf1
Date: Wed Jan 3 23:27:16 2018 +0100
tdf#114173 Preserve size of chart legend during xlsx export
Change-Id: Iebc936a0f490d6b707dfee0343732753f56728e7
Reviewed-on: https://gerrit.libreoffice.org/48147
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
Tested-by: Caolán McNamara <caolanm at redhat.com>
(cherry picked from commit fa68bed11c180ebb0d45fb7779d538098b2921ff)
Reviewed-on: https://gerrit.libreoffice.org/48153
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Eike Rathke <erack at redhat.com>
Reviewed-on: https://gerrit.libreoffice.org/48726
diff --git a/chart2/qa/extras/chart2export.cxx b/chart2/qa/extras/chart2export.cxx
index e6b500c32b26..d7f4a67b7651 100644
--- a/chart2/qa/extras/chart2export.cxx
+++ b/chart2/qa/extras/chart2export.cxx
@@ -1406,6 +1406,7 @@ void Chart2ExportTest::testTitleManualLayoutXLSX()
load("/chart2/qa/extras/data/xlsx/", "title_manual_layout.xlsx");
xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
CPPUNIT_ASSERT(pXmlDoc);
+ assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:layout/c:manualLayout/c:layoutTarget", 0);
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:layout/c:manualLayout/c:xMode", "val", "edge");
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:layout/c:manualLayout/c:yMode", "val", "edge");
@@ -1427,6 +1428,7 @@ void Chart2ExportTest::testPlotAreaManualLayoutXLSX()
xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
CPPUNIT_ASSERT(pXmlDoc);
+ assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:layout/c:manualLayout/c:layoutTarget", "val", "inner");
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:layout/c:manualLayout/c:xMode", "val", "edge");
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:layout/c:manualLayout/c:yMode", "val", "edge");
@@ -1455,6 +1457,7 @@ void Chart2ExportTest::testLegendManualLayoutXLSX()
xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
CPPUNIT_ASSERT(pXmlDoc);
+ assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:layout/c:manualLayout/c:layoutTarget", 0);
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:legend/c:layout/c:manualLayout/c:xMode", "val", "edge");
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:legend/c:layout/c:manualLayout/c:yMode", "val", "edge");
@@ -1466,6 +1469,18 @@ void Chart2ExportTest::testLegendManualLayoutXLSX()
double nY = aYVal.toDouble();
CPPUNIT_ASSERT(nY > 0 && nY < 1);
CPPUNIT_ASSERT(nX != nY);
+
+ OUString aWVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:legend/c:layout/c:manualLayout/c:w", "val");
+ double nW = aWVal.toDouble();
+ CPPUNIT_ASSERT(nW > 0 && nW < 1);
+
+ OUString aHVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:legend/c:layout/c:manualLayout/c:h", "val");
+ double nH = aHVal.toDouble();
+ CPPUNIT_ASSERT(nH > 0 && nH < 1);
+ CPPUNIT_ASSERT(nH != nW);
+
+ // Make sure that default text font size is preserved after export
+ assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:legend/c:txPr/a:p/a:pPr/a:defRPr", "sz", "900");
}
void Chart2ExportTest::testAxisCharacterPropertiesXLSX()
diff --git a/include/oox/export/chartexport.hxx b/include/oox/export/chartexport.hxx
index f8c055c3be92..9055e99002f0 100644
--- a/include/oox/export/chartexport.hxx
+++ b/include/oox/export/chartexport.hxx
@@ -135,7 +135,8 @@ private:
css::chart::XChartDocument >& rChartDoc );
void exportTitle( const css::uno::Reference<
css::drawing::XShape >& xShape );
- void exportPlotArea( );
+ void exportPlotArea( const css::uno::Reference<
+ css::chart::XChartDocument >& rChartDoc );
void exportPlotAreaShapeProps( const css::uno::Reference< css::beans::XPropertySet >& xPropSet );
void exportFill( const css::uno::Reference< css::beans::XPropertySet >& xPropSet );
void exportGradientFill( const css::uno::Reference< css::beans::XPropertySet >& xPropSet );
@@ -186,7 +187,7 @@ private:
void exportErrorBar(const css::uno::Reference< css::beans::XPropertySet >& xErrorBarProps,
bool bYError);
- void exportManualLayout(const css::chart2::RelativePosition& rPos, const css::chart2::RelativeSize& rSize);
+ void exportManualLayout(const css::chart2::RelativePosition& rPos, const css::chart2::RelativeSize& rSize, const bool bIsExcludingDiagramPositioning);
void exportAxes( );
void exportAxis(const AxisIdPair& rAxisIdPair);
diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx
index 2ffb03fa7ba4..2592c74fd2e6 100644
--- a/oox/source/export/chartexport.cxx
+++ b/oox/source/export/chartexport.cxx
@@ -48,6 +48,7 @@
#include <com/sun/star/chart/DataLabelPlacement.hpp>
#include <com/sun/star/chart/ErrorBarStyle.hpp>
#include <com/sun/star/chart/MissingValueTreatment.hpp>
+#include <com/sun/star/chart/XDiagramPositioning.hpp>
#include <com/sun/star/chart2/RelativePosition.hpp>
#include <com/sun/star/chart2/RelativeSize.hpp>
@@ -893,7 +894,7 @@ void ChartExport::exportChart( const Reference< css::chart::XChartDocument >& xC
}
// plot area
- exportPlotArea( );
+ exportPlotArea( xChartDoc );
// legend
if( bHasLegend )
exportLegend( xChartDoc );
@@ -996,7 +997,6 @@ void ChartExport::exportLegend( const Reference< css::chart::XChartDocument >& x
uno::Any aRelativePos = xProp->getPropertyValue("RelativePosition");
if (aRelativePos.hasValue())
{
- chart2::RelativePosition aPos = aRelativePos.get<chart2::RelativePosition>();
pFS->startElement(FSNS(XML_c, XML_layout), FSEND);
pFS->startElement(FSNS(XML_c, XML_manualLayout), FSEND);
@@ -1006,9 +1006,10 @@ void ChartExport::exportLegend( const Reference< css::chart::XChartDocument >& x
pFS->singleElement(FSNS(XML_c, XML_yMode),
XML_val, "edge",
FSEND);
+ chart2::RelativePosition aPos = aRelativePos.get<chart2::RelativePosition>();
- double x = aPos.Primary;
- double y = aPos.Secondary;
+ const double x = aPos.Primary;
+ const double y = aPos.Secondary;
pFS->singleElement(FSNS(XML_c, XML_x),
XML_val, IS(x),
@@ -1016,6 +1017,24 @@ void ChartExport::exportLegend( const Reference< css::chart::XChartDocument >& x
pFS->singleElement(FSNS(XML_c, XML_y),
XML_val, IS(y),
FSEND);
+
+ uno::Any aRelativeSize = xProp->getPropertyValue("RelativeSize");
+ if (aRelativeSize.hasValue())
+ {
+ chart2::RelativeSize aSize = aRelativeSize.get<chart2::RelativeSize>();
+
+ const double w = aSize.Primary;
+ const double h = aSize.Secondary;
+
+ pFS->singleElement(FSNS(XML_c, XML_w),
+ XML_val, IS(w),
+ FSEND);
+
+ pFS->singleElement(FSNS(XML_c, XML_h),
+ XML_val, IS(h),
+ FSEND);
+ }
+
SAL_WARN_IF(aPos.Anchor != css::drawing::Alignment_TOP_LEFT, "oox", "unsupported anchor position");
pFS->endElement(FSNS(XML_c, XML_manualLayout));
@@ -1031,6 +1050,9 @@ void ChartExport::exportLegend( const Reference< css::chart::XChartDocument >& x
// shape properties
exportShapeProps( xProp );
+
+ // draw-chart:txPr text properties
+ exportTextProps( xProp );
}
// legendEntry
@@ -1155,7 +1177,7 @@ void ChartExport::exportTitle( const Reference< XShape >& xShape )
pFS->endElement( FSNS( XML_c, XML_title ) );
}
-void ChartExport::exportPlotArea( )
+void ChartExport::exportPlotArea( const Reference< css::chart::XChartDocument >& xChartDoc )
{
Reference< chart2::XCoordinateSystemContainer > xBCooSysCnt( mxNewDiagram, uno::UNO_QUERY );
if( ! xBCooSysCnt.is())
@@ -1176,7 +1198,8 @@ void ChartExport::exportPlotArea( )
chart2::RelativePosition aPos = aAny.get<chart2::RelativePosition>();
aAny = xWall->getPropertyValue("RelativeSize");
chart2::RelativeSize aSize = aAny.get<chart2::RelativeSize>();
- exportManualLayout(aPos, aSize);
+ uno::Reference< css::chart::XDiagramPositioning > xDiagramPositioning( xChartDoc->getDiagram(), uno::UNO_QUERY );
+ exportManualLayout(aPos, aSize, xDiagramPositioning->isExcludingDiagramPositioning() );
}
}
@@ -1288,14 +1311,21 @@ void ChartExport::exportPlotArea( )
}
-void ChartExport::exportManualLayout(const css::chart2::RelativePosition& rPos, const css::chart2::RelativeSize& rSize)
+void ChartExport::exportManualLayout(const css::chart2::RelativePosition& rPos,
+ const css::chart2::RelativeSize& rSize,
+ const bool bIsExcludingDiagramPositioning)
{
FSHelperPtr pFS = GetFS();
pFS->startElement(FSNS(XML_c, XML_layout), FSEND);
pFS->startElement(FSNS(XML_c, XML_manualLayout), FSEND);
- pFS->singleElement(FSNS(XML_c, XML_layoutTarget),
- XML_val, "inner",
- FSEND);
+
+ // By default layoutTarget is set to "outer" and we shouldn't save it in that case
+ if ( bIsExcludingDiagramPositioning )
+ {
+ pFS->singleElement(FSNS(XML_c, XML_layoutTarget),
+ XML_val, "inner",
+ FSEND);
+ }
pFS->singleElement(FSNS(XML_c, XML_xMode),
XML_val, "edge",
FSEND);
@@ -1305,8 +1335,8 @@ void ChartExport::exportManualLayout(const css::chart2::RelativePosition& rPos,
double x = rPos.Primary;
double y = rPos.Secondary;
- double w = rSize.Primary;
- double h = rSize.Secondary;
+ const double w = rSize.Primary;
+ const double h = rSize.Secondary;
switch (rPos.Anchor)
{
case drawing::Alignment_LEFT:
@@ -2391,20 +2421,18 @@ void ChartExport::exportTextProps(const Reference<XPropertySet>& xPropSet)
{
FSHelperPtr pFS = GetFS();
pFS->startElement(FSNS(XML_c, XML_txPr), FSEND);
-
- pFS->startElement(FSNS(XML_a, XML_bodyPr), FSEND);
- pFS->endElement(FSNS(XML_a, XML_bodyPr));
+ pFS->singleElement( FSNS( XML_a, XML_bodyPr ), FSEND );
+ pFS->singleElement( FSNS( XML_a, XML_lstStyle ), FSEND );
pFS->startElement(FSNS(XML_a, XML_p), FSEND);
pFS->startElement(FSNS(XML_a, XML_pPr), FSEND);
- bool bDummy = false;
- sal_Int32 nDummy;
- WriteRunProperties(xPropSet, false, XML_defRPr, true, bDummy, nDummy);
+ bool bOverrideCharHeight = false;
+ sal_Int32 nCharHeight;
+ WriteRunProperties(xPropSet, false, XML_defRPr, true, bOverrideCharHeight, nCharHeight);
pFS->endElement(FSNS(XML_a, XML_pPr));
pFS->endElement(FSNS(XML_a, XML_p));
-
pFS->endElement(FSNS(XML_c, XML_txPr));
}
More information about the Libreoffice-commits
mailing list