sc/inc/docuno.hxx | 9 +++++-- sc/source/filter/xml/XMLTableSourceContext.cxx | 3 +- sc/source/filter/xml/xmlcoli.cxx | 5 ++-- sc/source/filter/xml/xmlrowi.cxx | 5 ++-- sc/source/filter/xml/xmlsubti.cxx | 29 ++++++++----------------- sc/source/filter/xml/xmlsubti.hxx | 5 ++-- sc/source/filter/xml/xmltabi.cxx | 3 +- sc/source/ui/unoobj/docuno.cxx | 17 ++++++++------ 8 files changed, 39 insertions(+), 37 deletions(-)
New commits: commit cf3973fef6f4503001859b0f1c799c79eaf64694 Author: Noel Grandin <noelgran...@gmail.com> AuthorDate: Sat Apr 5 20:37:35 2025 +0200 Commit: Tomaž Vajngerl <qui...@gmail.com> CommitDate: Fri Jun 13 15:43:05 2025 +0200 use more concrete UNO in sc as a prelude to doing some optimisation Change-Id: Ia92f4c2f7a440c39c3180b262cde4ef83db7622a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183749 Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> Tested-by: Jenkins (cherry picked from commit 2824c9ca4ba53f015f9b8f279b347585ee847818) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/185735 Reviewed-by: Tomaž Vajngerl <qui...@gmail.com> Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> diff --git a/sc/inc/docuno.hxx b/sc/inc/docuno.hxx index 5586ee4f8963..c8dab9647d0c 100644 --- a/sc/inc/docuno.hxx +++ b/sc/inc/docuno.hxx @@ -71,6 +71,7 @@ class ScRangeList; class ScPrintUIOptions; class ScSheetSaveData; struct ScFormatSaveData; +class ScTableSheetsObj; class SAL_DLLPUBLIC_RTTI ScModelObj : public SfxBaseModel, public vcl::ITiledRenderable, @@ -163,8 +164,9 @@ public: virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override; /// XSpreadsheetDocument - virtual css::uno::Reference< css::sheet::XSpreadsheets > SAL_CALL - getSheets() override; + SC_DLLPUBLIC virtual css::uno::Reference< css::sheet::XSpreadsheets > SAL_CALL + getSheets() override final; + SC_DLLPUBLIC rtl::Reference< ScTableSheetsObj > getScSheets(); /// XDataProviderAccess virtual ::css::uno::Reference< css::chart2::data::XDataProvider > SAL_CALL @@ -449,7 +451,6 @@ class ScTableSheetsObj final : public cppu::WeakImplHelper< private: ScDocShell* pDocShell; - rtl::Reference<ScTableSheetObj> GetObjectByIndex_Impl(sal_Int32 nIndex) const; rtl::Reference<ScTableSheetObj> GetObjectByName_Impl(const OUString& aName) const; public: @@ -511,6 +512,8 @@ public: virtual OUString SAL_CALL getImplementationName() override; virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; + + rtl::Reference<ScTableSheetObj> GetSheetByIndex(sal_Int32 nIndex) const; }; class ScTableColumnsObj final : public cppu::WeakImplHelper< diff --git a/sc/source/filter/xml/XMLTableSourceContext.cxx b/sc/source/filter/xml/XMLTableSourceContext.cxx index 9f66f6f4a089..a6a95a1473ec 100644 --- a/sc/source/filter/xml/XMLTableSourceContext.cxx +++ b/sc/source/filter/xml/XMLTableSourceContext.cxx @@ -23,6 +23,7 @@ #include <docsh.hxx> #include "xmlsubti.hxx" #include <tablink.hxx> +#include <cellsuno.hxx> #include <xmloff/xmltoken.hxx> #include <xmloff/xmlnamespace.hxx> #include <sax/tools/converter.hxx> @@ -79,7 +80,7 @@ void SAL_CALL ScXMLTableSourceContext::endFastElement( sal_Int32 /*nElement*/ ) if (sLink.isEmpty()) return; - uno::Reference <sheet::XSheetLinkable> xLinkable (GetScImport().GetTables().GetCurrentXSheet(), uno::UNO_QUERY); + rtl::Reference<ScTableSheetObj> xLinkable (GetScImport().GetTables().GetCurrentXSheet()); ScDocument* pDoc(GetScImport().GetDocument()); if (!(xLinkable.is() && pDoc)) return; diff --git a/sc/source/filter/xml/xmlcoli.cxx b/sc/source/filter/xml/xmlcoli.cxx index 5114296d9760..7c0944b6bdc7 100644 --- a/sc/source/filter/xml/xmlcoli.cxx +++ b/sc/source/filter/xml/xmlcoli.cxx @@ -21,6 +21,7 @@ #include "xmlimprt.hxx" #include "xmlstyli.hxx" #include <document.hxx> +#include <cellsuno.hxx> #include <docuno.hxx> #include <olinetab.hxx> #include <sheetdata.hxx> @@ -88,7 +89,7 @@ void SAL_CALL ScXMLTableColContext::endFastElement( sal_Int32 /*nElement*/ ) ScDocument* pDoc = rXMLImport.GetDocument(); SCTAB nSheet = rXMLImport.GetTables().GetCurrentSheet(); sal_Int32 nCurrentColumn = rXMLImport.GetTables().GetCurrentColCount(); - uno::Reference<sheet::XSpreadsheet> xSheet(rXMLImport.GetTables().GetCurrentXSheet()); + rtl::Reference<ScTableSheetObj> xSheet(rXMLImport.GetTables().GetCurrentXSheet()); if(pDoc && xSheet.is()) { sal_Int32 nLastColumn(nCurrentColumn + nColCount - 1); @@ -207,7 +208,7 @@ void SAL_CALL ScXMLTableColsContext::endFastElement( sal_Int32 /*nElement*/ ) nHeaderEndCol--; if (nHeaderStartCol <= nHeaderEndCol) { - uno::Reference <sheet::XPrintAreas> xPrintAreas (rXMLImport.GetTables().GetCurrentXSheet(), uno::UNO_QUERY); + rtl::Reference<ScTableSheetObj> xPrintAreas (rXMLImport.GetTables().GetCurrentXSheet()); if (xPrintAreas.is()) { if (!xPrintAreas->getPrintTitleColumns()) diff --git a/sc/source/filter/xml/xmlrowi.cxx b/sc/source/filter/xml/xmlrowi.cxx index a75b32ac60f6..a2ad7c33e703 100644 --- a/sc/source/filter/xml/xmlrowi.cxx +++ b/sc/source/filter/xml/xmlrowi.cxx @@ -23,6 +23,7 @@ #include "xmlstyli.hxx" #include "xmlstyle.hxx" #include <document.hxx> +#include <cellsuno.hxx> #include <docuno.hxx> #include <olinetab.hxx> #include <sheetdata.hxx> @@ -153,7 +154,7 @@ void SAL_CALL ScXMLTableRowContext::endFastElement(sal_Int32 /*nElement*/) } SCTAB nSheet = rXMLImport.GetTables().GetCurrentSheet(); sal_Int32 nCurrentRow(rXMLImport.GetTables().GetCurrentRow()); - uno::Reference<sheet::XSpreadsheet> xSheet(rXMLImport.GetTables().GetCurrentXSheet()); + rtl::Reference<ScTableSheetObj> xSheet(rXMLImport.GetTables().GetCurrentXSheet()); if(!xSheet.is()) return; @@ -324,7 +325,7 @@ void SAL_CALL ScXMLTableRowsContext::endFastElement(sal_Int32 /*nElement*/) SCROW nHeaderEndRow = rXMLImport.GetTables().GetCurrentRow(); if (nHeaderStartRow <= nHeaderEndRow) { - uno::Reference <sheet::XPrintAreas> xPrintAreas (rXMLImport.GetTables().GetCurrentXSheet(), uno::UNO_QUERY); + rtl::Reference<ScTableSheetObj> xPrintAreas (rXMLImport.GetTables().GetCurrentXSheet()); if (xPrintAreas.is()) { if (!xPrintAreas->getPrintTitleRows()) diff --git a/sc/source/filter/xml/xmlsubti.cxx b/sc/source/filter/xml/xmlsubti.cxx index 5d09b36456e9..89c2e8d9be17 100644 --- a/sc/source/filter/xml/xmlsubti.cxx +++ b/sc/source/filter/xml/xmlsubti.cxx @@ -22,6 +22,7 @@ #include "xmlimprt.hxx" #include <document.hxx> #include "XMLConverter.hxx" +#include <cellsuno.hxx> #include <docuno.hxx> #include "XMLStylesImportHelper.hxx" #include <sheetdata.hxx> @@ -71,23 +72,18 @@ ScMyTables::~ScMyTables() namespace { -uno::Reference<sheet::XSpreadsheet> getCurrentSheet(const uno::Reference<frame::XModel>& xModel, SCTAB nSheet) +rtl::Reference<ScTableSheetObj> getCurrentSheet(const uno::Reference<frame::XModel>& xModel, SCTAB nSheet) { - uno::Reference<sheet::XSpreadsheet> xSheet; - uno::Reference<sheet::XSpreadsheetDocument> xSpreadDoc(xModel, uno::UNO_QUERY); - if (!xSpreadDoc.is()) + rtl::Reference<ScTableSheetObj> xSheet; + ScModelObj* pSpreadDoc = dynamic_cast<ScModelObj*>(xModel.get()); + if (!pSpreadDoc) return xSheet; - uno::Reference <sheet::XSpreadsheets> xSheets(xSpreadDoc->getSheets()); + rtl::Reference<ScTableSheetsObj> xSheets(pSpreadDoc->getScSheets()); if (!xSheets.is()) return xSheet; - uno::Reference <container::XIndexAccess> xIndex(xSheets, uno::UNO_QUERY); - if (!xIndex.is()) - return xSheet; - - xSheet.set(xIndex->getByIndex(nSheet), uno::UNO_QUERY); - return xSheet; + return xSheets->GetSheetByIndex(nSheet); } } @@ -142,10 +138,6 @@ void ScMyTables::SetTableStyle(const OUString& sStyleName) if ( !xCurrentSheet.is() ) return; - uno::Reference <beans::XPropertySet> xProperties(xCurrentSheet, uno::UNO_QUERY); - if ( !xProperties.is() ) - return; - XMLTableStylesContext *pStyles = static_cast<XMLTableStylesContext *>(rImport.GetAutoStyles()); if ( pStyles ) { @@ -153,7 +145,7 @@ void ScMyTables::SetTableStyle(const OUString& sStyleName) XmlStyleFamily::TABLE_TABLE, sStyleName, true))); if ( pStyle ) { - pStyle->FillPropertySet(xProperties); + pStyle->FillPropertySet(xCurrentSheet); ScSheetSaveData* pSheetData = rImport.GetScModel()->GetSheetSaveData(); pSheetData->AddTableStyle( sStyleName, ScAddress( 0, 0, maCurrentCellPos.Tab() ) ); @@ -231,9 +223,8 @@ uno::Reference< drawing::XDrawPage > const & ScMyTables::GetCurrentXDrawPage() { if( (maCurrentCellPos.Tab() != nCurrentDrawPage) || !xDrawPage.is() ) { - uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier( xCurrentSheet, uno::UNO_QUERY ); - if( xDrawPageSupplier.is() ) - xDrawPage.set(xDrawPageSupplier->getDrawPage()); + if( xCurrentSheet.is() ) + xDrawPage.set(xCurrentSheet->getDrawPage()); nCurrentDrawPage = sal::static_int_cast<sal_Int16>(maCurrentCellPos.Tab()); } return xDrawPage; diff --git a/sc/source/filter/xml/xmlsubti.hxx b/sc/source/filter/xml/xmlsubti.hxx index b5ccc4261600..5970ddade41b 100644 --- a/sc/source/filter/xml/xmlsubti.hxx +++ b/sc/source/filter/xml/xmlsubti.hxx @@ -29,6 +29,7 @@ namespace com::sun::star::table { class XCellRange; } namespace com::sun::star::drawing { class XShapes; } class ScXMLImport; +class ScTableSheetObj; struct ScXMLTabProtectionData { @@ -55,7 +56,7 @@ private: ScMyOLEFixer aFixupOLEs; - css::uno::Reference< css::sheet::XSpreadsheet > xCurrentSheet; + rtl::Reference< ScTableSheetObj > xCurrentSheet; css::uno::Reference< css::drawing::XDrawPage > xDrawPage; css::uno::Reference < css::drawing::XShapes > xShapes; OUString sCurrentSheetName; @@ -87,7 +88,7 @@ public: SCTAB GetCurrentSheet() const { return (maCurrentCellPos.Tab() >= 0) ? maCurrentCellPos.Tab() : 0; } SCCOL GetCurrentColCount() const; SCROW GetCurrentRow() const { return (maCurrentCellPos.Row() >= 0) ? maCurrentCellPos.Row() : 0; } - const css::uno::Reference< css::sheet::XSpreadsheet >& + const rtl::Reference< ScTableSheetObj >& GetCurrentXSheet() const { return xCurrentSheet; } css::uno::Reference< css::drawing::XDrawPage > const & GetCurrentXDrawPage(); diff --git a/sc/source/filter/xml/xmltabi.cxx b/sc/source/filter/xml/xmltabi.cxx index 5010c70b5e11..48849bdd8be9 100644 --- a/sc/source/filter/xml/xmltabi.cxx +++ b/sc/source/filter/xml/xmltabi.cxx @@ -25,6 +25,7 @@ #include "xmlexternaltabi.hxx" #include "xmlnexpi.hxx" #include <document.hxx> +#include <cellsuno.hxx> #include <docuno.hxx> #include <olinetab.hxx> #include "XMLTableShapesContext.hxx" @@ -305,7 +306,7 @@ uno::Reference< xml::sax::XFastContextHandler > SAL_CALL case XML_ELEMENT(OFFICE_EXT, XML_EVENT_LISTENERS): { // use XEventsSupplier interface of the sheet - uno::Reference<document::XEventsSupplier> xSupplier( GetScImport().GetTables().GetCurrentXSheet(), uno::UNO_QUERY ); + uno::Reference<document::XEventsSupplier> xSupplier( GetScImport().GetTables().GetCurrentXSheet() ); pContext = new XMLEventsImportContext( GetImport(), xSupplier ); } break; diff --git a/sc/source/ui/unoobj/docuno.cxx b/sc/source/ui/unoobj/docuno.cxx index 5bacba49347d..1bad5589add9 100644 --- a/sc/source/ui/unoobj/docuno.cxx +++ b/sc/source/ui/unoobj/docuno.cxx @@ -1529,6 +1529,11 @@ void ScModelObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) // XSpreadsheetDocument uno::Reference<sheet::XSpreadsheets> SAL_CALL ScModelObj::getSheets() +{ + return getScSheets(); +} + +rtl::Reference<ScTableSheetsObj> ScModelObj::getScSheets() { SolarMutexGuard aGuard; if (pDocShell) @@ -4185,7 +4190,7 @@ void ScTableSheetsObj::Notify( SfxBroadcaster&, const SfxHint& rHint ) // XSpreadsheets -rtl::Reference<ScTableSheetObj> ScTableSheetsObj::GetObjectByIndex_Impl(sal_Int32 nIndex) const +rtl::Reference<ScTableSheetObj> ScTableSheetsObj::GetSheetByIndex(sal_Int32 nIndex) const { if ( pDocShell && nIndex >= 0 && nIndex < pDocShell->GetDocument().GetTableCount() ) return new ScTableSheetObj( pDocShell, static_cast<SCTAB>(nIndex) ); @@ -4404,7 +4409,7 @@ sal_Int32 ScTableSheetsObj::importSheet( uno::Reference< table::XCell > SAL_CALL ScTableSheetsObj::getCellByPosition( sal_Int32 nColumn, sal_Int32 nRow, sal_Int32 nSheet ) { SolarMutexGuard aGuard; - rtl::Reference<ScTableSheetObj> xSheet = GetObjectByIndex_Impl(static_cast<sal_uInt16>(nSheet)); + rtl::Reference<ScTableSheetObj> xSheet = GetSheetByIndex(static_cast<sal_uInt16>(nSheet)); if (! xSheet.is()) throw lang::IndexOutOfBoundsException(); @@ -4414,7 +4419,7 @@ uno::Reference< table::XCell > SAL_CALL ScTableSheetsObj::getCellByPosition( sal uno::Reference< table::XCellRange > SAL_CALL ScTableSheetsObj::getCellRangeByPosition( sal_Int32 nLeft, sal_Int32 nTop, sal_Int32 nRight, sal_Int32 nBottom, sal_Int32 nSheet ) { SolarMutexGuard aGuard; - rtl::Reference<ScTableSheetObj> xSheet = GetObjectByIndex_Impl(static_cast<sal_uInt16>(nSheet)); + rtl::Reference<ScTableSheetObj> xSheet = GetSheetByIndex(static_cast<sal_uInt16>(nSheet)); if (! xSheet.is()) throw lang::IndexOutOfBoundsException(); @@ -4467,13 +4472,11 @@ sal_Int32 SAL_CALL ScTableSheetsObj::getCount() uno::Any SAL_CALL ScTableSheetsObj::getByIndex( sal_Int32 nIndex ) { SolarMutexGuard aGuard; - uno::Reference<sheet::XSpreadsheet> xSheet(GetObjectByIndex_Impl(nIndex)); + rtl::Reference<ScTableSheetObj> xSheet(GetSheetByIndex(nIndex)); if (!xSheet.is()) throw lang::IndexOutOfBoundsException(); - return uno::Any(xSheet); - -// return uno::Any(); + return uno::Any(uno::Reference<sheet::XSpreadsheet>(xSheet)); } uno::Type SAL_CALL ScTableSheetsObj::getElementType()