summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYogeshBharate <yogesh.bharate@synerzip.com>2014-02-21 11:03:35 +0530
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2014-03-03 13:41:08 +0100
commit9ca4fa05eb5ec7d0d7c3f4a83489013e140d2f0b (patch)
tree2af14d2d09e6fc4173a7978f61e9794e15bef884
parent4f7b96886ec2e98f270a9ec3c3509cd523fce7cc (diff)
fdo#74826: File corruption-Issue related to Series idx & order val.
Problem Description: - If the document contains more than one charts together. ex.Bar & Line chart - In that case, LO writes idx & order val equal to 0, instead of 1 for second chart series. - After roundtrip, the document get corrupted. Implementation: - Added varible to take the series count in case of multiple chart. Note: - Some of the UT's are failing when --enable-dbgutil is enabled. Change-Id: I40606b4d69026939fa19ae534dd7b2bb36ec97fc
-rw-r--r--chart2/qa/extras/chart2export.cxx10
-rw-r--r--chart2/qa/extras/data/docx/testSeriesIdxOrder.docxbin0 -> 25941 bytes
-rw-r--r--include/oox/export/chartexport.hxx1
-rw-r--r--oox/source/export/chartexport.cxx7
4 files changed, 16 insertions, 2 deletions
diff --git a/chart2/qa/extras/chart2export.cxx b/chart2/qa/extras/chart2export.cxx
index 8c7e7b3e13c5..e3554e5b8ffb 100644
--- a/chart2/qa/extras/chart2export.cxx
+++ b/chart2/qa/extras/chart2export.cxx
@@ -48,6 +48,7 @@ public:
void testBarChartRotation();
void testShapeFollowedByChart();
void testPieChartDataLabels();
+ void testSeriesIdxOrder();
CPPUNIT_TEST_SUITE(Chart2ExportTest);
CPPUNIT_TEST(test);
@@ -68,6 +69,7 @@ public:
CPPUNIT_TEST(testBarChartRotation);
CPPUNIT_TEST(testShapeFollowedByChart);
CPPUNIT_TEST(testPieChartDataLabels);
+ CPPUNIT_TEST(testSeriesIdxOrder);
CPPUNIT_TEST_SUITE_END();
protected:
@@ -610,6 +612,14 @@ void Chart2ExportTest::testPieChartDataLabels()
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:pie3DChart/c:ser[1]/c:dLbls/c:dLbl[1]/c:dLblPos", "val", "bestFit");
}
+void Chart2ExportTest::testSeriesIdxOrder()
+{
+ load("/chart2/qa/extras/data/docx/", "testSeriesIdxOrder.docx");
+ xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
+ CPPUNIT_ASSERT(pXmlDoc);
+ assertXPath(pXmlDoc, "/c:chartSpace[1]/c:chart[1]/c:plotArea[1]/c:lineChart[1]/c:ser[1]/c:idx[1]", "val", "1");
+ assertXPath(pXmlDoc, "/c:chartSpace[1]/c:chart[1]/c:plotArea[1]/c:lineChart[1]/c:ser[1]/c:order[1]", "val", "1");
+}
CPPUNIT_TEST_SUITE_REGISTRATION(Chart2ExportTest);
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/chart2/qa/extras/data/docx/testSeriesIdxOrder.docx b/chart2/qa/extras/data/docx/testSeriesIdxOrder.docx
new file mode 100644
index 000000000000..9274e2c2c2d3
--- /dev/null
+++ b/chart2/qa/extras/data/docx/testSeriesIdxOrder.docx
Binary files differ
diff --git a/include/oox/export/chartexport.hxx b/include/oox/export/chartexport.hxx
index 04a5e2029f0c..b95fc5859c34 100644
--- a/include/oox/export/chartexport.hxx
+++ b/include/oox/export/chartexport.hxx
@@ -83,6 +83,7 @@ public:
private:
sal_Int32 mnXmlNamespace;
+ sal_Int32 mnSeriesCount;
Fraction maFraction;
::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > mxChartModel;
com::sun::star::uno::Reference< com::sun::star::chart::XDiagram > mxDiagram;
diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx
index 4250cb72dfbd..9f8df564c5b3 100644
--- a/oox/source/export/chartexport.cxx
+++ b/oox/source/export/chartexport.cxx
@@ -438,6 +438,7 @@ sal_Int32 lcl_generateRandomValue()
ChartExport::ChartExport( sal_Int32 nXmlNamespace, FSHelperPtr pFS, Reference< frame::XModel >& xModel, XmlFilterBase* pFB, DocumentType eDocumentType )
: DrawingML( pFS, pFB, eDocumentType )
, mnXmlNamespace( nXmlNamespace )
+ , mnSeriesCount(0)
, maFraction( 1, 576 )
, mxChartModel( xModel )
, mbHasCategoryLabels( sal_False )
@@ -1041,9 +1042,11 @@ void ChartExport::exportPlotArea( )
aCooSysSeq( xBCooSysCnt->getCoordinateSystems());
for( sal_Int32 nCSIdx=0; nCSIdx<aCooSysSeq.getLength(); ++nCSIdx )
{
+
Reference< chart2::XChartTypeContainer > xCTCnt( aCooSysSeq[nCSIdx], uno::UNO_QUERY );
if( ! xCTCnt.is())
continue;
+ mnSeriesCount=0;
Sequence< Reference< chart2::XChartType > > aCTSeq( xCTCnt->getChartTypes());
for( sal_Int32 nCTIdx=0; nCTIdx<aCTSeq.getLength(); ++nCTIdx )
{
@@ -1689,10 +1692,10 @@ void ChartExport::exportSeries( Reference< chart2::XChartType > xChartType, sal_
// TODO: idx and order
pFS->singleElement( FSNS( XML_c, XML_idx ),
- XML_val, I32S(nSeriesIdx),
+ XML_val, I32S(mnSeriesCount),
FSEND );
pFS->singleElement( FSNS( XML_c, XML_order ),
- XML_val, I32S(nSeriesIdx),
+ XML_val, I32S(mnSeriesCount++),
FSEND );
// export label