sc/inc/document.hxx                      |    2 +-
 sc/inc/table.hxx                         |    2 +-
 sc/qa/unit/SparklineImportExportTest.cxx |   12 ++++++------
 sc/qa/unit/SparklineTest.cxx             |   10 +++++-----
 sc/source/core/data/document.cxx         |    4 ++--
 sc/source/core/data/table2.cxx           |   11 ++++-------
 sc/source/ui/view/cellsh.cxx             |    4 ++--
 sc/source/ui/view/output.cxx             |    4 ++--
 8 files changed, 23 insertions(+), 26 deletions(-)

New commits:
commit 413f144e84629fe8f3bae5d984b40228fdeec5c1
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Sat Mar 19 10:56:27 2022 +0900
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Mon Apr 4 04:20:21 2022 +0200

    sc: change GetSparkline to return a shared_ptr instead of raw ptr
    
    Change-Id: If3d7b3ad4b96eb7d3b126ee8b130f8d5e684cd3c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132472
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 420c0eb06e35..979f6d6985f1 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -1249,7 +1249,7 @@ public:
     sc::MultiDataCellState HasMultipleDataCells( const ScRange& rRange ) const;
 
     /** Spaklines */
-    SC_DLLPUBLIC sc::Sparkline* GetSparkline(ScAddress const & rPosition);
+    SC_DLLPUBLIC std::shared_ptr<sc::Sparkline> GetSparkline(ScAddress const & 
rPosition);
     SC_DLLPUBLIC sc::Sparkline* CreateSparkline(ScAddress const & rPosition, 
std::shared_ptr<sc::SparklineGroup> const& pSparklineGroup);
     SC_DLLPUBLIC sc::SparklineList* GetSparklineList(SCTAB nTab);
     SC_DLLPUBLIC bool DeleteSparkline(ScAddress const& rPosition);
diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx
index 00ae196f88ab..14eb33fa50f7 100644
--- a/sc/inc/table.hxx
+++ b/sc/inc/table.hxx
@@ -472,7 +472,7 @@ public:
 
     // Sparklines
 
-    sc::Sparkline* GetSparkline(SCCOL nCol, SCROW nRow);
+    std::shared_ptr<sc::Sparkline> GetSparkline(SCCOL nCol, SCROW nRow);
     sc::Sparkline* CreateSparkline(SCCOL nCol, SCROW nRow, 
std::shared_ptr<sc::SparklineGroup> const& pSparklineGroup);
     bool DeleteSparkline(SCCOL nCol, SCROW nRow);
 
diff --git a/sc/qa/unit/SparklineImportExportTest.cxx 
b/sc/qa/unit/SparklineImportExportTest.cxx
index fe15d783b58e..25af95c8770e 100644
--- a/sc/qa/unit/SparklineImportExportTest.cxx
+++ b/sc/qa/unit/SparklineImportExportTest.cxx
@@ -57,7 +57,7 @@ void checkSparklines(ScDocument& rDocument)
 {
     // Sparkline at Sheet1:A2
     {
-        sc::Sparkline* pSparkline = rDocument.GetSparkline(ScAddress(0, 1, 
0)); // A2
+        auto pSparkline = rDocument.GetSparkline(ScAddress(0, 1, 0)); // A2
         CPPUNIT_ASSERT(pSparkline);
         auto pSparklineGroup = pSparkline->getSparklineGroup();
         CPPUNIT_ASSERT_EQUAL(sc::SparklineType::Line, 
pSparklineGroup->m_eType);
@@ -90,7 +90,7 @@ void checkSparklines(ScDocument& rDocument)
     }
     // Sparkline at Sheet1:A3
     {
-        sc::Sparkline* pSparkline = rDocument.GetSparkline(ScAddress(0, 2, 
0)); // A3
+        auto pSparkline = rDocument.GetSparkline(ScAddress(0, 2, 0)); // A3
         CPPUNIT_ASSERT(pSparkline);
         auto pSparklineGroup = pSparkline->getSparklineGroup();
         CPPUNIT_ASSERT_EQUAL(sc::SparklineType::Column, 
pSparklineGroup->m_eType);
@@ -123,28 +123,28 @@ void checkSparklines(ScDocument& rDocument)
     }
     // Sparkline at Sheet2:B1
     {
-        sc::Sparkline* pSparkline = rDocument.GetSparkline(ScAddress(1, 0, 
1)); //B1
+        auto pSparkline = rDocument.GetSparkline(ScAddress(1, 0, 1)); //B1
         CPPUNIT_ASSERT(pSparkline);
         auto pSparklineGroup = pSparkline->getSparklineGroup();
         CPPUNIT_ASSERT_EQUAL(sc::SparklineType::Column, 
pSparklineGroup->m_eType);
     }
     // Sparkline at Sheet2:B2
     {
-        sc::Sparkline* pSparkline = rDocument.GetSparkline(ScAddress(1, 1, 
1)); //B2
+        auto pSparkline = rDocument.GetSparkline(ScAddress(1, 1, 1)); //B2
         CPPUNIT_ASSERT(pSparkline);
         auto pSparklineGroup = pSparkline->getSparklineGroup();
         CPPUNIT_ASSERT_EQUAL(sc::SparklineType::Line, 
pSparklineGroup->m_eType);
     }
     // Sparkline at Sheet2:B2
     {
-        sc::Sparkline* pSparkline = rDocument.GetSparkline(ScAddress(1, 1, 
1)); //B2
+        auto pSparkline = rDocument.GetSparkline(ScAddress(1, 1, 1)); //B2
         CPPUNIT_ASSERT(pSparkline);
         auto pSparklineGroup = pSparkline->getSparklineGroup();
         CPPUNIT_ASSERT_EQUAL(sc::SparklineType::Line, 
pSparklineGroup->m_eType);
     }
     // Sparkline doesn't exists at A4
     {
-        sc::Sparkline* pSparkline = rDocument.GetSparkline(ScAddress(0, 3, 
0)); //A4
+        auto pSparkline = rDocument.GetSparkline(ScAddress(0, 3, 0)); //A4
         CPPUNIT_ASSERT(!pSparkline);
     }
 }
diff --git a/sc/qa/unit/SparklineTest.cxx b/sc/qa/unit/SparklineTest.cxx
index 74f40579d99f..2a2dfde71b5b 100644
--- a/sc/qa/unit/SparklineTest.cxx
+++ b/sc/qa/unit/SparklineTest.cxx
@@ -82,13 +82,13 @@ void SparklineTest::testAddSparkline()
 
     ScDocument& rDocument = xDocSh->GetDocument();
 
-    sc::Sparkline* pSparkline = createTestSparkline(rDocument);
+    auto pSparkline = createTestSparkline(rDocument);
     CPPUNIT_ASSERT(pSparkline);
 
-    sc::Sparkline* pGetSparkline = rDocument.GetSparkline(ScAddress(0, 6, 0));
+    auto pGetSparkline = rDocument.GetSparkline(ScAddress(0, 6, 0));
     CPPUNIT_ASSERT(pGetSparkline);
 
-    CPPUNIT_ASSERT_EQUAL(pGetSparkline, pSparkline);
+    CPPUNIT_ASSERT_EQUAL(pGetSparkline.get(), pSparkline);
 
     sc::SparklineList* pList = rDocument.GetSparklineList(0);
     CPPUNIT_ASSERT(pList);
@@ -107,12 +107,12 @@ void SparklineTest::testDeleteSprkline()
 
     ScDocument& rDocument = xDocSh->GetDocument();
 
-    sc::Sparkline* pSparkline = createTestSparkline(rDocument);
+    auto pSparkline = createTestSparkline(rDocument);
     CPPUNIT_ASSERT(pSparkline);
 
     clearRange(&rDocument, ScRange(0, 6, 0, 0, 6, 0));
 
-    sc::Sparkline* pGetSparkline = rDocument.GetSparkline(ScAddress(0, 6, 0));
+    auto pGetSparkline = rDocument.GetSparkline(ScAddress(0, 6, 0));
     CPPUNIT_ASSERT(!pGetSparkline);
 
     xDocSh->DoClose();
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index 512d82a02081..11e010afde8f 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -6566,7 +6566,7 @@ bool ScDocument::IsInVBAMode() const
 }
 
 // Sparklines
-sc::Sparkline* ScDocument::GetSparkline(ScAddress const& rPosition)
+std::shared_ptr<sc::Sparkline> ScDocument::GetSparkline(ScAddress const& 
rPosition)
 {
     SCTAB nTab = rPosition.Tab();
 
@@ -6574,7 +6574,7 @@ sc::Sparkline* ScDocument::GetSparkline(ScAddress const& 
rPosition)
     {
         return maTabs[nTab]->GetSparkline(rPosition.Col(), rPosition.Row());
     }
-    return nullptr;
+    return std::shared_ptr<sc::Sparkline>();
 }
 
 sc::Sparkline* ScDocument::CreateSparkline(ScAddress const& rPosition, 
std::shared_ptr<sc::SparklineGroup> const& pSparklineGroup)
diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx
index 99e2af025baf..e6170d2339ab 100644
--- a/sc/source/core/data/table2.cxx
+++ b/sc/source/core/data/table2.cxx
@@ -1811,19 +1811,16 @@ ScFormulaCell* ScTable::GetFormulaCell( SCCOL nCol, 
SCROW nRow )
 
 // Sparklines
 
-sc::Sparkline* ScTable::GetSparkline(SCCOL nCol, SCROW nRow)
+std::shared_ptr<sc::Sparkline> ScTable::GetSparkline(SCCOL nCol, SCROW nRow)
 {
     if (!ValidCol(nCol) || nCol >= GetAllocatedColumnsCount())
-        return nullptr;
+        return std::shared_ptr<sc::Sparkline>();
 
     sc::SparklineCell* pSparklineCell = aCol[nCol].GetSparklineCell(nRow);
     if (!pSparklineCell)
-        return nullptr;
+        return std::shared_ptr<sc::Sparkline>();
 
-    std::shared_ptr<sc::Sparkline> pSparkline(pSparklineCell->getSparkline());
-    assert(pSparkline);
-
-    return pSparkline.get();
+    return pSparklineCell->getSparkline();
 }
 
 sc::Sparkline* ScTable::CreateSparkline(SCCOL nCol, SCROW nRow, 
std::shared_ptr<sc::SparklineGroup> const& pSparklineGroup)
diff --git a/sc/source/ui/view/cellsh.cxx b/sc/source/ui/view/cellsh.cxx
index 72e4b3c74e1d..f1df448a1288 100644
--- a/sc/source/ui/view/cellsh.cxx
+++ b/sc/source/ui/view/cellsh.cxx
@@ -110,8 +110,8 @@ bool canShowDeleteSparkline(ScDocument& rDocument, ScRange 
const& rRange)
     {
         for (SCROW nY = rRange.aStart.Row(); nY <= rRange.aEnd.Row(); nY++)
         {
-            auto* pSparkline = rDocument.GetSparkline(ScAddress(nX, nY, nTab));
-            if (pSparkline == nullptr)
+            auto pSparkline = rDocument.GetSparkline(ScAddress(nX, nY, nTab));
+            if (!pSparkline)
             {
                 return false;
             }
diff --git a/sc/source/ui/view/output.cxx b/sc/source/ui/view/output.cxx
index 2d7e097a4a08..e0ee2e538765 100644
--- a/sc/source/ui/view/output.cxx
+++ b/sc/source/ui/view/output.cxx
@@ -2482,7 +2482,7 @@ void drawColumn(vcl::RenderContext& rRenderContext, 
tools::Rectangle const & rRe
     }
 }
 
-void drawSparkline(sc::Sparkline* pSparkline, vcl::RenderContext& 
rRenderContext, ScDocument* pDocument,
+void drawSparkline(std::shared_ptr<sc::Sparkline> const& pSparkline, 
vcl::RenderContext& rRenderContext, ScDocument* pDocument,
                                  tools::Rectangle const & rRectangle)
 {
     auto const & rRangeList = pSparkline->getInputRange();
@@ -2582,7 +2582,7 @@ void ScOutputData::DrawSparklines(vcl::RenderContext& 
rRenderContext)
                     mpDoc->ExtendOverlapped( nMergeX, nMergeY, nX, nY, nTab );
                 }
 
-                sc::Sparkline* pSparkline = nullptr;
+                std::shared_ptr<sc::Sparkline> pSparkline;
                 ScAddress aCurrentAddress(nX, pRowInfo[nArrY].nRowNo, nTab);
 
                 if (!mpDoc->ColHidden(nX, nTab) && (pSparkline = 
mpDoc->GetSparkline(aCurrentAddress))

Reply via email to