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 13be76e4d58db7ff892dff900e7734ac424bd8dd
Author:     Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de>
AuthorDate: Mon Aug 14 15:59:18 2023 +0200
Commit:     Thorsten Behrens <thorsten.behr...@allotropia.de>
CommitDate: Mon Jan 22 08:28:13 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 <balazs.varga.ext...@allotropia.de>
    
    Change-Id: Ib445099a4a3d113cff6b1ffdfd093fe41c34716b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155681
    Tested-by: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de>
    Reviewed-by: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de>
    (cherry picked from commit c205194b8c54011af4b2cd34fbc00f4885883643)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162270
    Tested-by: Jenkins
    Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de>

diff --git a/chart2/qa/extras/chart2import.cxx 
b/chart2/qa/extras/chart2import.cxx
index f7324c94754f..7c24ff6110ba 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

Reply via email to