chart2/qa/extras/chart2import.cxx | 21 +++++++++++++++++ chart2/qa/extras/data/xlsx/chart_label_text_break.xlsx |binary oox/inc/drawingml/chart/objectformatter.hxx | 5 ++++ oox/source/drawingml/chart/axisconverter.cxx | 4 +-- oox/source/drawingml/chart/objectformatter.cxx | 20 ++++++++++++++++ 5 files changed, 48 insertions(+), 2 deletions(-)
New commits: commit 015569fc919b702f7a1b0f09038bafa9f104ca70 Author: Balazs Varga <balazs.varga...@gmail.com> AuthorDate: Fri Jan 4 15:12:38 2019 +0100 Commit: Bartosz Kosiorek <gan...@poczta.onet.pl> CommitDate: Mon Jan 7 13:54:55 2019 +0100 tdf#122091 OOXML Import: Automatically break of X Axis labels Set the TextBreak value automatically true, only if the X axis labels rotation is 0 degree. The MS Office using a similar method because there is no any XML tag in the OOXML standard which refer to this setting. Change-Id: Ie84a95935f0d5c4c1f9a30803e22572141385960 Reviewed-on: https://gerrit.libreoffice.org/65853 Tested-by: Jenkins Reviewed-by: Bartosz Kosiorek <gan...@poczta.onet.pl> diff --git a/chart2/qa/extras/chart2import.cxx b/chart2/qa/extras/chart2import.cxx index b8b9a871142a..5d8b43e739a6 100644 --- a/chart2/qa/extras/chart2import.cxx +++ b/chart2/qa/extras/chart2import.cxx @@ -75,6 +75,7 @@ public: void testChartHatchFillXLSX(); void testAxisTextRotationXLSX(); // void testTextCanOverlapXLSX(); // TODO : temporarily disabled. + void testTextBreakXLSX(); void testNumberFormatsXLSX(); void testTransparentBackground(OUString const & filename); @@ -158,6 +159,7 @@ public: CPPUNIT_TEST(testChartHatchFillXLSX); CPPUNIT_TEST(testAxisTextRotationXLSX); // CPPUNIT_TEST(testTextCanOverlapXLSX); // TODO : temporarily disabled. + CPPUNIT_TEST(testTextBreakXLSX); CPPUNIT_TEST(testNumberFormatsXLSX); CPPUNIT_TEST(testAutoTitleDelDefaultValue2007XLSX); CPPUNIT_TEST(testAutoTitleDelDefaultValue2013XLSX); @@ -1013,6 +1015,25 @@ void Chart2ImportTest::testTextCanOverlapXLSX() } */ +void Chart2ImportTest::testTextBreakXLSX() +{ + // tdf#122091: To check textbreak value is true in case of 0° degree of Axis label rotation. + load("/chart2/qa/extras/data/xlsx/", "chart_label_text_break.xlsx"); + uno::Reference< chart::XDiagram > mxDiagram; + uno::Reference< beans::XPropertySet > xAxisProp; + bool textBreak = false; + uno::Reference< chart::XChartDocument > xChartDoc ( getChartCompFromSheet( 0, mxComponent ), UNO_QUERY_THROW); + CPPUNIT_ASSERT(xChartDoc.is()); + mxDiagram.set(xChartDoc->getDiagram()); + CPPUNIT_ASSERT(mxDiagram.is()); + uno::Reference< chart::XAxisXSupplier > xAxisXSupp( mxDiagram, uno::UNO_QUERY ); + CPPUNIT_ASSERT(xAxisXSupp.is()); + xAxisProp = xAxisXSupp->getXAxis(); + xAxisProp->getPropertyValue("TextBreak") >>= textBreak; + // Expected value of 'TextBreak' is true + CPPUNIT_ASSERT(textBreak); +} + void Chart2ImportTest::testNumberFormatsXLSX() { load("/chart2/qa/extras/data/xlsx/", "number-formats.xlsx"); diff --git a/chart2/qa/extras/data/xlsx/chart_label_text_break.xlsx b/chart2/qa/extras/data/xlsx/chart_label_text_break.xlsx new file mode 100755 index 000000000000..81c4958604d5 Binary files /dev/null and b/chart2/qa/extras/data/xlsx/chart_label_text_break.xlsx differ diff --git a/oox/inc/drawingml/chart/objectformatter.hxx b/oox/inc/drawingml/chart/objectformatter.hxx index 446c3d899293..8282844b1ab3 100644 --- a/oox/inc/drawingml/chart/objectformatter.hxx +++ b/oox/inc/drawingml/chart/objectformatter.hxx @@ -144,6 +144,11 @@ public: /** Returns true, if the passed shape properties have automatic fill mode. */ static bool isAutomaticFill( const ModelRef< Shape >& rxShapeProp ); + /** Returns true, if the X Axis label rotation is 0 degree. */ + static bool getTextRotation( + const ModelRef< TextBody >& rxTextProp, + sal_Int32 nDefaultRotation = 0 ); + private: std::shared_ptr< ObjectFormatterData > mxData; }; diff --git a/oox/source/drawingml/chart/axisconverter.cxx b/oox/source/drawingml/chart/axisconverter.cxx index 7bcba408ffbb..f35cd5333e70 100644 --- a/oox/source/drawingml/chart/axisconverter.cxx +++ b/oox/source/drawingml/chart/axisconverter.cxx @@ -260,8 +260,8 @@ void AxisConverter::convertFromModel( { // do not overlap text unless all labels are visible aAxisProp.setProperty( PROP_TextOverlap, mrModel.mnTickLabelSkip == 1 ); - // do not break text into several lines - aAxisProp.setProperty( PROP_TextBreak, false ); + // do not break text into several lines unless the rotation is 0 degree + aAxisProp.setProperty( PROP_TextBreak, ObjectFormatter::getTextRotation( mrModel.mxTextProp ) ); // do not stagger labels in two lines aAxisProp.setProperty( PROP_ArrangeOrder, cssc::ChartAxisArrangeOrderType_SIDE_BY_SIDE ); //! TODO #i58731# show n-th category diff --git a/oox/source/drawingml/chart/objectformatter.cxx b/oox/source/drawingml/chart/objectformatter.cxx index 184cb111f02f..5b576d824ba3 100644 --- a/oox/source/drawingml/chart/objectformatter.cxx +++ b/oox/source/drawingml/chart/objectformatter.cxx @@ -1121,6 +1121,26 @@ bool ObjectFormatter::isAutomaticFill( const ModelRef< Shape >& rxShapeProp ) return !rxShapeProp || !rxShapeProp->getFillProperties().moFillType.has(); } +bool ObjectFormatter::getTextRotation( const ModelRef< TextBody >& rxTextProp, sal_Int32 nDefaultRotation ) +{ + if( rxTextProp.is() ) + { + double fAnglevalue = static_cast< double >( rxTextProp->getTextProperties().moRotation.get( nDefaultRotation ) ); + if( fAnglevalue < -5400000.0 || fAnglevalue > 5400000.0 || fAnglevalue == 0.0 ) + { + return true; + } + else + { + return false; + } + } + else + { + return false; + } +} + } // namespace chart } // namespace drawingml } // namespace oox _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits