fdo#83058 File corrupt due to data label position is invalid in chart.xml

- File getting corrupted after RT due to data label position is invalid in chart.xml
- LO must not export invalid label position property if chart type doesn't support that positioning in MS Office.
- For clusterd bar chart XML Difference
chart1.xml
Original file
<c:barChart>
  <c:grouping val="clustered" />
  <c:ser>
      <c:dLbls>
         ...
        <c:dLbl>
            <c:dLblPos val="outEnd" />
        </c:dLbl>
         ...
      </c:dLbls>
  </c:ser>
</c:barChart>

Roundtrip file
<c:barChart>
  <c:grouping val="clustered" />
  <c:ser>
      <c:dLbls>
         ...
        <c:dLbl>
            <c:dLblPos val="r" />
        </c:dLbl>
         ...
      </c:dLbls>
  </c:ser>
</c:barChart>

Change-Id: I9cae11b8d198aaa70fb05cb3bf329cd898519170
Reviewed-on: https://gerrit.libreoffice.org/11141
Reviewed-by: Kohei Yoshida <libreoffice@kohei.us>
Tested-by: Kohei Yoshida <libreoffice@kohei.us>
This commit is contained in:
PriyankaGaikwad
2014-08-27 19:28:44 +05:30
committed by Kohei Yoshida
parent 31e82d9f6f
commit a7052b906d
4 changed files with 28 additions and 7 deletions

View File

@@ -79,6 +79,7 @@ public:
void testDataLabelDoughnutChartDOCX(); void testDataLabelDoughnutChartDOCX();
void testDataLabelAreaChartDOCX(); void testDataLabelAreaChartDOCX();
void testDataLabelDefaultLineChartDOCX(); void testDataLabelDefaultLineChartDOCX();
void testFdo83058dlblPos();
CPPUNIT_TEST_SUITE(Chart2ExportTest); CPPUNIT_TEST_SUITE(Chart2ExportTest);
CPPUNIT_TEST(test); CPPUNIT_TEST(test);
@@ -123,6 +124,7 @@ public:
CPPUNIT_TEST(testDataLabelDoughnutChartDOCX); CPPUNIT_TEST(testDataLabelDoughnutChartDOCX);
CPPUNIT_TEST(testDataLabelAreaChartDOCX); CPPUNIT_TEST(testDataLabelAreaChartDOCX);
CPPUNIT_TEST(testDataLabelDefaultLineChartDOCX); CPPUNIT_TEST(testDataLabelDefaultLineChartDOCX);
CPPUNIT_TEST(testFdo83058dlblPos);
CPPUNIT_TEST_SUITE_END(); CPPUNIT_TEST_SUITE_END();
protected: protected:
@@ -867,7 +869,7 @@ void Chart2ExportTest::testDataLabelClusteredBarChartDOCX()
CPPUNIT_ASSERT(pXmlDoc); CPPUNIT_ASSERT(pXmlDoc);
// This was "t", should be one of the allowed values. // This was "t", should be one of the allowed values.
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:dLbls/c:dLbl[2]/c:dLblPos", "val", "ctr"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:dLbls/c:dLbl[2]/c:dLblPos", "val", "outEnd");
} }
void Chart2ExportTest::testDataLabelRadarChartDOCX() void Chart2ExportTest::testDataLabelRadarChartDOCX()
@@ -1186,6 +1188,17 @@ void Chart2ExportTest::testLabelStringODS()
CPPUNIT_ASSERT_EQUAL(OUString("\"LabelName\""), aLabelString); CPPUNIT_ASSERT_EQUAL(OUString("\"LabelName\""), aLabelString);
} }
void Chart2ExportTest::testFdo83058dlblPos()
{
load ("/chart2/qa/extras/data/docx/", "fdo83058_dlblPos.docx");
xmlDocPtr pXmlDoc = parseExport("word/charts/chart","Office Open XML Text");
CPPUNIT_ASSERT(pXmlDoc);
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:dLbls[1]/c:dLbl[2]/c:dLblPos", "val", "outEnd");
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:dLbls[1]/c:dLbl[3]/c:dLblPos", "val", "outEnd");
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:dLbls[1]/c:dLbl[4]/c:dLblPos", "val", "outEnd");
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:dLbls[1]/c:dLbl[5]/c:dLblPos", "val", "outEnd");
}
CPPUNIT_TEST_SUITE_REGISTRATION(Chart2ExportTest); CPPUNIT_TEST_SUITE_REGISTRATION(Chart2ExportTest);
CPPUNIT_PLUGIN_IMPLEMENT(); CPPUNIT_PLUGIN_IMPLEMENT();

Binary file not shown.

View File

@@ -99,7 +99,6 @@ private:
bool mbIs3DChart; bool mbIs3DChart;
bool mbStacked; bool mbStacked;
bool mbPercent; bool mbPercent;
bool mbClustered;
private: private:
sal_Int32 getChartType(); sal_Int32 getChartType();

View File

@@ -446,7 +446,6 @@ ChartExport::ChartExport( sal_Int32 nXmlNamespace, FSHelperPtr pFS, Reference< f
, mbIs3DChart( false ) , mbIs3DChart( false )
, mbStacked(false) , mbStacked(false)
, mbPercent(false) , mbPercent(false)
, mbClustered(false)
{ {
} }
@@ -2656,13 +2655,15 @@ void ChartExport::exportDataLabels(
aParam.mbExport = !mbIs3DChart; aParam.mbExport = !mbIs3DChart;
aParam.meDefault = rInfo.mnDefLabelPos; aParam.meDefault = rInfo.mnDefLabelPos;
aParam.allowAll(); aParam.allowAll();
switch (getChartType()) // diagram chart type switch (eChartType) // diagram chart type
{ {
case chart::TYPEID_PIE: case chart::TYPEID_PIE:
if(getChartType() == chart::TYPEID_DOUGHNUT)
aParam.mbExport = false;
else
// All pie charts support label placement. // All pie charts support label placement.
aParam.mbExport = true; aParam.mbExport = true;
break; break;
case chart::TYPEID_DOUGHNUT:
case chart::TYPEID_AREA: case chart::TYPEID_AREA:
case chart::TYPEID_RADARLINE: case chart::TYPEID_RADARLINE:
case chart::TYPEID_RADARAREA: case chart::TYPEID_RADARAREA:
@@ -2670,7 +2671,7 @@ void ChartExport::exportDataLabels(
aParam.mbExport = false; aParam.mbExport = false;
break; break;
case chart::TYPEID_BAR: case chart::TYPEID_BAR:
if (mbStacked || mbPercent || mbClustered) if (mbStacked || mbPercent)
{ {
aParam.maAllowedValues.clear(); aParam.maAllowedValues.clear();
aParam.maAllowedValues.insert(css::chart::DataLabelPlacement::CENTER); aParam.maAllowedValues.insert(css::chart::DataLabelPlacement::CENTER);
@@ -2678,6 +2679,15 @@ void ChartExport::exportDataLabels(
aParam.maAllowedValues.insert(css::chart::DataLabelPlacement::NEAR_ORIGIN); aParam.maAllowedValues.insert(css::chart::DataLabelPlacement::NEAR_ORIGIN);
aParam.meDefault = css::chart::DataLabelPlacement::CENTER; aParam.meDefault = css::chart::DataLabelPlacement::CENTER;
} }
else // Clustered bar chart
{
aParam.maAllowedValues.clear();
aParam.maAllowedValues.insert(css::chart::DataLabelPlacement::CENTER);
aParam.maAllowedValues.insert(css::chart::DataLabelPlacement::INSIDE);
aParam.maAllowedValues.insert(css::chart::DataLabelPlacement::OUTSIDE);
aParam.maAllowedValues.insert(css::chart::DataLabelPlacement::NEAR_ORIGIN);
aParam.meDefault = css::chart::DataLabelPlacement::OUTSIDE;
}
break; break;
default: default:
; ;
@@ -2818,7 +2828,6 @@ void ChartExport::exportGrouping( bool isBar )
if( isBar && !isDeep3dChart() ) if( isBar && !isDeep3dChart() )
{ {
grouping = "clustered"; grouping = "clustered";
mbClustered = true;
} }
else else
grouping = "standard"; grouping = "standard";