chart2/qa/extras/chart2import2.cxx | 18 ++++++++++++++++++ chart2/qa/extras/data/xlsx/tdf150434.xlsx |binary chart2/source/view/main/VLegend.cxx | 8 ++++++++ 3 files changed, 26 insertions(+)
New commits: commit e59db22b3b57c9e1a5678218cb56fb75bcc84c26 Author: Tünde Tóth <toth.tu...@nisz.hu> AuthorDate: Wed Jul 27 08:58:35 2022 +0200 Commit: László Németh <nem...@numbertext.org> CommitDate: Thu Aug 18 13:39:31 2022 +0200 tdf#150434: chart2, XLSX import: strip long legend labels Full text of legend labels could overflow the chart area, if the legend text was too long. If it's longer than 520 characters, strip it at the first space from the 500th character (or if there is no space, at the 500th character). This results better XLSX interoperability, too. Change-Id: I23a94f6baaf620b40e9b2819738eba5c5a921722 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137492 Reviewed-by: László Németh <nem...@numbertext.org> Tested-by: László Németh <nem...@numbertext.org> diff --git a/chart2/qa/extras/chart2import2.cxx b/chart2/qa/extras/chart2import2.cxx index ee41c37dd48a..eb983f7687f1 100644 --- a/chart2/qa/extras/chart2import2.cxx +++ b/chart2/qa/extras/chart2import2.cxx @@ -60,6 +60,7 @@ public: void testTdf121281(); void testTdf139658(); void testTdf146066(); + void testTdf150434(); CPPUNIT_TEST_SUITE(Chart2ImportTest2); @@ -101,6 +102,7 @@ public: CPPUNIT_TEST(testTdf121281); CPPUNIT_TEST(testTdf139658); CPPUNIT_TEST(testTdf146066); + CPPUNIT_TEST(testTdf150434); CPPUNIT_TEST_SUITE_END(); }; @@ -930,6 +932,22 @@ void Chart2ImportTest2::testTdf146066() CPPUNIT_ASSERT_EQUAL(OUString("35"), xLabel7->getString()); } +void Chart2ImportTest2::testTdf150434() +{ + load(u"/chart2/qa/extras/data/xlsx/", u"tdf150434.xlsx"); + Reference<chart::XChartDocument> xChartDoc(getChartDocFromSheet(0, mxComponent), + UNO_QUERY_THROW); + Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xChartDoc, UNO_QUERY_THROW); + Reference<drawing::XDrawPage> xDrawPage(xDrawPageSupplier->getDrawPage(), UNO_SET_THROW); + Reference<drawing::XShapes> xShapes(xDrawPage->getByIndex(0), UNO_QUERY_THROW); + Reference<drawing::XShape> xLegend = getShapeByName(xShapes, "CID/D=0:Legend="); + CPPUNIT_ASSERT(xLegend.is()); + awt::Point aPosition = xLegend->getPosition(); + + // This failed, if the legend flowed out of the chart area. + CPPUNIT_ASSERT_GREATEREQUAL(static_cast<sal_Int32>(0), aPosition.Y); +} + CPPUNIT_TEST_SUITE_REGISTRATION(Chart2ImportTest2); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/chart2/qa/extras/data/xlsx/tdf150434.xlsx b/chart2/qa/extras/data/xlsx/tdf150434.xlsx new file mode 100644 index 000000000000..309a0c4c25f7 Binary files /dev/null and b/chart2/qa/extras/data/xlsx/tdf150434.xlsx differ diff --git a/chart2/source/view/main/VLegend.cxx b/chart2/source/view/main/VLegend.cxx index 7fc92b491ad2..e789baf62a62 100644 --- a/chart2/source/view/main/VLegend.cxx +++ b/chart2/source/view/main/VLegend.cxx @@ -167,6 +167,14 @@ awt::Size lcl_createTextShapes( if( i == 1 ) break; + // tdf#150034 limit legend label text + if (aLabelSeq[i]->getString().getLength() > 520) + { + sal_Int32 nIndex = aLabelSeq[i]->getString().indexOf(' ', 500); + aLabelSeq[i]->setString( + aLabelSeq[i]->getString().copy(0, nIndex > 500 ? nIndex : 500)); + } + aLabelString += aLabelSeq[i]->getString(); // workaround for Issue #i67540# if( aLabelString.isEmpty())