chart2/qa/extras/chart2import.cxx | 11 +++++++++++ chart2/qa/extras/data/pptx/tdf146487.pptx |binary oox/inc/drawingml/chart/plotareaconverter.hxx | 3 +++ oox/inc/drawingml/chart/typegroupconverter.hxx | 3 +++ oox/source/drawingml/chart/chartspaceconverter.cxx | 14 +++++++++++++- oox/source/drawingml/chart/plotareaconverter.cxx | 10 +++++++++- oox/source/drawingml/chart/typegroupconverter.cxx | 9 +++++++++ 7 files changed, 48 insertions(+), 2 deletions(-)
New commits: commit 135ce256ce9e879663d828ec6e699de521fad867 Author: Samuel Mehrbrodt <[email protected]> AuthorDate: Mon Aug 14 15:59:18 2023 +0200 Commit: Samuel Mehrbrodt <[email protected]> CommitDate: Thu Jan 18 15:33:10 2024 +0100 tdf#146487 Don't show generic diagram title when there is an empty title given Bugdoc has autoTitleDeleted set to false (so title should be visible), but then an empty title is given. In this case no default string should be added to the title, only in case of Pie Charts. Any other Chart types show the default title in MS-Office. Co-authored-by: Balazs Varga <[email protected]> Change-Id: Ib445099a4a3d113cff6b1ffdfd093fe41c34716b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155681 Tested-by: Samuel Mehrbrodt <[email protected]> Reviewed-by: Samuel Mehrbrodt <[email protected]> diff --git a/chart2/qa/extras/chart2import.cxx b/chart2/qa/extras/chart2import.cxx index 678518d1c88a..fc8042a38393 100644 --- a/chart2/qa/extras/chart2import.cxx +++ b/chart2/qa/extras/chart2import.cxx @@ -1979,6 +1979,17 @@ CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf121205) CPPUNIT_ASSERT_EQUAL(OUString("Firstline Secondline Thirdline"), aTitle); } +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf146487) +{ + loadFromFile(u"pptx/tdf146487.pptx"); + Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY); + CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); + + Reference<chart2::XTitled> xTitled(xChartDoc, uno::UNO_QUERY_THROW); + uno::Reference<chart2::XTitle> xTitle = xTitled->getTitleObject(); + CPPUNIT_ASSERT_MESSAGE("chart doc should not have a title", !xTitle.is()); +} + CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testFixedSizeBarChartVeryLongLabel) { // Bar chart area size is fixed (not automatic) so we can't resize diff --git a/chart2/qa/extras/data/pptx/tdf146487.pptx b/chart2/qa/extras/data/pptx/tdf146487.pptx new file mode 100644 index 000000000000..2a78ae5d859b Binary files /dev/null and b/chart2/qa/extras/data/pptx/tdf146487.pptx differ diff --git a/oox/inc/drawingml/chart/plotareaconverter.hxx b/oox/inc/drawingml/chart/plotareaconverter.hxx index b520c6b4816c..988405b3247c 100644 --- a/oox/inc/drawingml/chart/plotareaconverter.hxx +++ b/oox/inc/drawingml/chart/plotareaconverter.hxx @@ -74,6 +74,8 @@ public: /** Returns the automatic chart title if the chart contains only one series. */ const OUString& getAutomaticTitle() const { return maAutoTitle; } + /** Returns true, if the chart contains only one series and have title textbox (even empty). */ + bool isSingleSeriesTitle() const { return mbSingleSeriesTitle; } /** Returns true, if chart type supports wall and floor format in 3D mode. */ bool isWall3dChart() const { return mbWall3dChart; } @@ -82,6 +84,7 @@ private: bool mb3dChart; bool mbWall3dChart; bool mbPieChart; + bool mbSingleSeriesTitle;; }; diff --git a/oox/inc/drawingml/chart/typegroupconverter.hxx b/oox/inc/drawingml/chart/typegroupconverter.hxx index 2e3aae5a2a10..6b780dd0ae15 100644 --- a/oox/inc/drawingml/chart/typegroupconverter.hxx +++ b/oox/inc/drawingml/chart/typegroupconverter.hxx @@ -133,6 +133,9 @@ public: /** Returns series title, if the chart type group contains only one single series. */ OUString getSingleSeriesTitle() const; + /** Returns true, if the chart contains only one series and have title textbox (even empty). */ + bool isSingleSeriesTitle() const; + /** Creates a coordinate system according to the contained chart type. */ css::uno::Reference< css::chart2::XCoordinateSystem > createCoordinateSystem(); diff --git a/oox/source/drawingml/chart/chartspaceconverter.cxx b/oox/source/drawingml/chart/chartspaceconverter.cxx index c83ed37e9c02..f9b370e04d8f 100644 --- a/oox/source/drawingml/chart/chartspaceconverter.cxx +++ b/oox/source/drawingml/chart/chartspaceconverter.cxx @@ -38,6 +38,7 @@ #include <drawingml/chart/titleconverter.hxx> #include <ooxresid.hxx> #include <strings.hrc> +#include <drawingml/textbody.hxx> using namespace ::com::sun::star; using ::com::sun::star::uno::Reference; @@ -183,7 +184,18 @@ void ChartSpaceConverter::convertFromModel( const Reference< XShapes >& rxExtern OUString aAutoTitle = aPlotAreaConv.getAutomaticTitle(); if( mrModel.mxTitle.is() || !aAutoTitle.isEmpty() ) { - if( aAutoTitle.isEmpty() ) + // tdf#146487 In some cases, we need to show the empty title + bool bShowEmptyTitle = aAutoTitle.isEmpty() && !mrModel.mbAutoTitleDel + && aPlotAreaConv.isSingleSeriesTitle() + && mrModel.mxTitle->mxShapeProp.is() + && mrModel.mxTitle->mxTextProp.is() + && mrModel.mxTitle->mxTextProp->isEmpty(); + // Also for tdf#146487 + bool bEmptyRichText = mrModel.mxTitle->mxText.is() + && mrModel.mxTitle->mxText->mxTextBody.is() + && mrModel.mxTitle->mxText->mxTextBody->isEmpty(); + + if (aAutoTitle.isEmpty() && !bShowEmptyTitle && !bEmptyRichText) aAutoTitle = OoxResId(STR_DIAGRAM_TITLE); Reference< XTitled > xTitled( getChartDocument(), UNO_QUERY_THROW ); TitleConverter aTitleConv( *this, mrModel.mxTitle.getOrCreate() ); diff --git a/oox/source/drawingml/chart/plotareaconverter.cxx b/oox/source/drawingml/chart/plotareaconverter.cxx index 96e51c577d43..32e4de7d1ee4 100644 --- a/oox/source/drawingml/chart/plotareaconverter.cxx +++ b/oox/source/drawingml/chart/plotareaconverter.cxx @@ -76,6 +76,8 @@ public: /** Returns the automatic chart title if the axes set contains only one series. */ const OUString& getAutomaticTitle() const { return maAutoTitle; } + /** Returns true, if the chart contains only one series and have title textbox (even empty). */ + bool isSingleSeriesTitle() const { return mbSingleSeriesTitle; } /** Returns true, if the chart is three-dimensional. */ bool is3dChart() const { return mb3dChart; } /** Returns true, if chart type supports wall and floor format in 3D mode. */ @@ -88,13 +90,15 @@ private: bool mb3dChart; bool mbWall3dChart; bool mbPieChart; + bool mbSingleSeriesTitle; }; AxesSetConverter::AxesSetConverter( const ConverterRoot& rParent, AxesSetModel& rModel ) : ConverterBase< AxesSetModel >( rParent, rModel ), mb3dChart( false ), mbWall3dChart( false ), - mbPieChart( false ) + mbPieChart( false ), + mbSingleSeriesTitle( false ) { } @@ -127,7 +131,10 @@ void AxesSetConverter::convertFromModel( const Reference< XDiagram >& rxDiagram, // get automatic chart title, if there is only one type group if( aTypeGroups.size() == 1 ) + { maAutoTitle = rFirstTypeGroup.getSingleSeriesTitle(); + mbSingleSeriesTitle = rFirstTypeGroup.isSingleSeriesTitle(); + } /* Create a coordinate system. For now, all type groups from all axes sets have to be inserted into one coordinate system. Later, chart2 should @@ -422,6 +429,7 @@ void PlotAreaConverter::convertFromModel( View3DModel& rView3DModel ) if(nAxesSetIdx == nStartAxesSetIdx) { maAutoTitle = aAxesSetConv.getAutomaticTitle(); + mbSingleSeriesTitle = aAxesSetConv.isSingleSeriesTitle(); mb3dChart = aAxesSetConv.is3dChart(); mbWall3dChart = aAxesSetConv.isWall3dChart(); mbPieChart = aAxesSetConv.isPieChart(); diff --git a/oox/source/drawingml/chart/typegroupconverter.cxx b/oox/source/drawingml/chart/typegroupconverter.cxx index e8d8bb47bc33..327a855f708f 100644 --- a/oox/source/drawingml/chart/typegroupconverter.cxx +++ b/oox/source/drawingml/chart/typegroupconverter.cxx @@ -234,6 +234,15 @@ OUString TypeGroupConverter::getSingleSeriesTitle() const return aSeriesTitle; } +bool TypeGroupConverter::isSingleSeriesTitle() const +{ + if (!mrModel.maSeries.empty() && (maTypeInfo.mbSingleSeriesVis || (mrModel.maSeries.size() == 1)) && + mrModel.maSeries.front()->mxText.is()) + return true; + + return false; +} + Reference< XCoordinateSystem > TypeGroupConverter::createCoordinateSystem() { // create the coordinate system object
