sc/inc/SheetViewManager.hxx              |    7 ++++---
 sc/source/core/data/SheetView.cxx        |    2 +-
 sc/source/core/data/SheetViewManager.cxx |   15 +++++++--------
 sc/source/core/data/document10.cxx       |    6 +++---
 sc/source/ui/view/viewfunc.cxx           |   12 ++++++------
 5 files changed, 21 insertions(+), 21 deletions(-)

New commits:
commit 27ac3b7a03d0d10489f5752527cf1dfce9d29a46
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Thu Sep 11 18:40:06 2025 +0200
Commit:     Miklos Vajna <vmik...@collabora.com>
CommitDate: Fri Sep 26 08:56:27 2025 +0200

    sc: use shared_ptr to store SheetView classes
    
    This makes it possible to store and modify the SheetView outside
    of SheetViewManager, which will be used in a follow up patch. It
    also makes IsValid and default constructor obsolete.
    
    Change-Id: I12b511e5ecaaa360119c50dda22585f08e9041cb
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/190888
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/191520
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>

diff --git a/sc/inc/SheetViewManager.hxx b/sc/inc/SheetViewManager.hxx
index e807cbd8fb57..51bd7036d694 100644
--- a/sc/inc/SheetViewManager.hxx
+++ b/sc/inc/SheetViewManager.hxx
@@ -13,6 +13,7 @@
 #include "types.hxx"
 
 #include <vector>
+#include <memory>
 
 class ScTable;
 
@@ -22,7 +23,7 @@ namespace sc
 class SheetViewManager
 {
 private:
-    std::vector<SheetView> maViews;
+    std::vector<std::shared_ptr<SheetView>> maViews;
 
 public:
     SheetViewManager();
@@ -31,7 +32,7 @@ public:
     SheetViewID create(ScTable* pSheetViewTable);
 
     /** Returns a sheet view for the ID. */
-    SheetView get(SheetViewID nID) const;
+    std::shared_ptr<SheetView> get(SheetViewID nID) const;
 
     /** True if there are no sheet views. */
     bool isEmpty() const { return maViews.empty(); }
@@ -40,7 +41,7 @@ public:
     bool remove(SheetViewID nID);
 
     /** Return the list of sheet views. */
-    std::vector<SheetView> const& getSheetViews() const { return maViews; }
+    std::vector<std::shared_ptr<SheetView>> const& getSheetViews() const { 
return maViews; }
 
     /** Calculate the next sheet view ID from the current ID. */
     SheetViewID getNextSheetView(SheetViewID nID);
diff --git a/sc/source/core/data/SheetView.cxx 
b/sc/source/core/data/SheetView.cxx
index d96719eb13ad..a445b0380c63 100644
--- a/sc/source/core/data/SheetView.cxx
+++ b/sc/source/core/data/SheetView.cxx
@@ -18,7 +18,7 @@ SheetView::SheetView(ScTable* pTable)
 }
 
 ScTable* SheetView::getTablePointer() const { return mpTable; }
-bool SheetView::isValid() const { return mpTable; }
+
 SCTAB SheetView::getTableNumber() const
 {
     assert(mpTable);
diff --git a/sc/source/core/data/SheetViewManager.cxx 
b/sc/source/core/data/SheetViewManager.cxx
index ffbd41c8f298..c94e4ed9a40a 100644
--- a/sc/source/core/data/SheetViewManager.cxx
+++ b/sc/source/core/data/SheetViewManager.cxx
@@ -16,9 +16,9 @@ SheetViewManager::SheetViewManager() {}
 
 SheetViewID SheetViewManager::create(ScTable* pSheetViewTable)
 {
-    sal_Int32 nID = maViews.size();
-    maViews.emplace_back(pSheetViewTable);
-    return SheetViewID(nID);
+    SheetViewID nID(maViews.size());
+    maViews.emplace_back(std::make_shared<SheetView>(pSheetViewTable));
+    return nID;
 }
 
 bool SheetViewManager::remove(SheetViewID nID)
@@ -31,14 +31,13 @@ bool SheetViewManager::remove(SheetViewID nID)
     return false;
 }
 
-SheetView SheetViewManager::get(SheetViewID nID) const
+std::shared_ptr<SheetView> SheetViewManager::get(SheetViewID nID) const
 {
     if (nID >= 0 && o3tl::make_unsigned(nID) < maViews.size())
     {
-        if (maViews[nID].isValid())
-            return maViews[nID];
+        return maViews[nID];
     }
-    return SheetView();
+    return std::shared_ptr<SheetView>();
 }
 
 /// Calculate the next existing sheet view to use.
@@ -64,7 +63,7 @@ SheetViewID SheetViewManager::getNextSheetView(SheetViewID 
nID)
 
     for (size_t nIndex = startIndex; nIndex < maViews.size(); ++nIndex)
     {
-        if (maViews[nIndex].isValid())
+        if (maViews[nIndex])
             return SheetViewID(nIndex);
     }
 
diff --git a/sc/source/core/data/document10.cxx 
b/sc/source/core/data/document10.cxx
index b288967fccf4..b01f1cd04e28 100644
--- a/sc/source/core/data/document10.cxx
+++ b/sc/source/core/data/document10.cxx
@@ -1178,10 +1178,10 @@ SCTAB ScDocument::GetSheetViewNumber(SCTAB nTab, 
sc::SheetViewID nID)
         if (pMainSheet->IsSheetView() || nID == sc::DefaultSheetViewID)
             return nTab;
 
-        sc::SheetView aView = pMainSheet->GetSheetViewManager()->get(nID);
-        if (aView.isValid())
+        std::shared_ptr<sc::SheetView> pView = 
pMainSheet->GetSheetViewManager()->get(nID);
+        if (pView)
         {
-            return aView.getTablePointer()->GetTab();
+            return pView->getTablePointer()->GetTab();
         }
         assert(false && "a non valid sheet view is unexpected...");
     }
diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx
index b957271c0e61..26c1f70b75f6 100644
--- a/sc/source/ui/view/viewfunc.cxx
+++ b/sc/source/ui/view/viewfunc.cxx
@@ -805,12 +805,12 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB 
nTab,
         {
             auto pManager = rDoc.GetSheetViewManager(nSelectedTab);
 
-            for (auto const& rSheetView : pManager->getSheetViews())
+            for (auto const& pSheetView : pManager->getSheetViews())
             {
-                if (!rSheetView.isValid())
+                if (!pSheetView)
                     continue;
 
-                SCTAB nSheetViewTab = rSheetView.getTableNumber();
+                SCTAB nSheetViewTab = pSheetView->getTableNumber();
 
                 ScMarkData aSheetViewMark(rDoc.GetSheetLimits());
                 aSheetViewMark.SelectTable(nSheetViewTab, false);
@@ -830,12 +830,12 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB 
nTab,
             if (!rDoc.IsSheetView(rTab))
             {
                 auto pManager = rDoc.GetSheetViewManager(rTab);
-                for (auto const& rSheetView : pManager->getSheetViews())
+                for (auto const& pSheetView : pManager->getSheetViews())
                 {
-                    if (!rSheetView.isValid())
+                    if (!pSheetView)
                         continue;
 
-                    SCTAB nSheetViewTab = rSheetView.getTableNumber();
+                    SCTAB nSheetViewTab = pSheetView->getTableNumber();
                     applyText(*this, nCol, nRow, nSheetViewTab, rString, 
bNumFmtChanged);
                 }
             }

Reply via email to