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); } }