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()

Reply via email to