sw/inc/unocoll.hxx                             |    6 ++++--
 sw/inc/unotbl.hxx                              |    3 ++-
 sw/inc/unotxdoc.hxx                            |    1 +
 sw/source/core/unocore/unocoll.cxx             |   11 +++++++----
 sw/source/core/unocore/unotbl.cxx              |    5 +++++
 sw/source/uibase/uno/unotxdoc.cxx              |    5 +++++
 sw/source/writerfilter/dmapper/PropertyMap.cxx |   13 +++++++------
 7 files changed, 31 insertions(+), 13 deletions(-)

New commits:
commit 9b7a6c3f2cf3bbdf96517f08ad86c5daa2c1824e
Author:     Noel Grandin <noelgran...@gmail.com>
AuthorDate: Sun Aug 11 16:49:37 2024 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Mon Aug 12 10:50:54 2024 +0200

    use more concrete UNO type in writerfilter
    
    Change-Id: I307f83dc95be7d74ba0b847eb82cca42ac7dbbbd
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/171727
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/sw/inc/unocoll.hxx b/sw/inc/unocoll.hxx
index 0e2a5e1d1d68..49bfae7d276b 100644
--- a/sw/inc/unocoll.hxx
+++ b/sw/inc/unocoll.hxx
@@ -263,7 +263,7 @@ cppu::WeakImplHelper
     css::lang::XServiceInfo
 >
 SwCollectionBaseClass;
-class SwXTextTables final : public SwCollectionBaseClass,
+class SW_DLLPUBLIC SwXTextTables final : public SwCollectionBaseClass,
     public SwUnoCollection
 {
     virtual ~SwXTextTables() override;
@@ -288,7 +288,9 @@ public:
     virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) 
override;
     virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() 
override;
 
-    SW_DLLPUBLIC static rtl::Reference<SwXTextTable> GetObject(SwFrameFormat& 
rFormat);
+    rtl::Reference<SwXTextTable> getTextTableByName(std::u16string_view Name);
+
+    static rtl::Reference<SwXTextTable> GetObject(SwFrameFormat& rFormat);
 };
 
 typedef
diff --git a/sw/inc/unotbl.hxx b/sw/inc/unotbl.hxx
index b56b2d79d4e9..f544b0ab80c8 100644
--- a/sw/inc/unotbl.hxx
+++ b/sw/inc/unotbl.hxx
@@ -58,7 +58,7 @@ cppu::WeakImplHelper
     css::container::XEnumerationAccess
 >
 SwXCellBaseClass;
-class SwXCell final : public SwXCellBaseClass,
+class SW_DLLPUBLIC SwXCell final : public SwXCellBaseClass,
     public SwXText,
     public SvtListener
 {
@@ -343,6 +343,7 @@ public:
     virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) 
override;
     virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() 
override;
 
+    rtl::Reference< SwXCell > getSwCellByName( const OUString& aCellName );
 };
 
 class SwXCellRange final : public cppu::WeakImplHelper
diff --git a/sw/inc/unotxdoc.hxx b/sw/inc/unotxdoc.hxx
index 8440f958ccd2..4329019af918 100644
--- a/sw/inc/unotxdoc.hxx
+++ b/sw/inc/unotxdoc.hxx
@@ -522,6 +522,7 @@ public:
 
     SwDocShell*                 GetDocShell() {return m_pDocShell;}
 
+    rtl::Reference<SwXTextTables> getSwTextTables();
     rtl::Reference<SwFmDrawPage> getSwDrawPage();
     rtl::Reference<SwXFootnotes> getSwXFootnotes();
     rtl::Reference<SwXFootnotes> getSwXEndnotes();
diff --git a/sw/source/core/unocore/unocoll.cxx 
b/sw/source/core/unocore/unocoll.cxx
index 0a6c269e3eee..70773c3bdbd3 100644
--- a/sw/source/core/unocore/unocoll.cxx
+++ b/sw/source/core/unocore/unocoll.cxx
@@ -888,26 +888,29 @@ uno::Any SAL_CALL SwXTextTables::getByIndex(sal_Int32 
nInputIndex)
 }
 
 uno::Any SwXTextTables::getByName(const OUString& rItemName)
+{
+    return uno::Any(uno::Reference< XTextTable 
>(getTextTableByName(rItemName)));
+}
+
+rtl::Reference<SwXTextTable> 
SwXTextTables::getTextTableByName(std::u16string_view rItemName)
 {
     SolarMutexGuard aGuard;
-    uno::Any aRet;
 
     const size_t nCount = GetDoc().GetTableFrameFormatCount(true);
-    uno::Reference< XTextTable >  xTable;
+    rtl::Reference< SwXTextTable >  xTable;
     for( size_t i = 0; i < nCount; ++i)
     {
         SwFrameFormat& rFormat = GetDoc().GetTableFrameFormat(i, true);
         if (rItemName == rFormat.GetName())
         {
             xTable = SwXTextTables::GetObject(rFormat);
-            aRet <<= xTable;
             break;
         }
     }
     if(!xTable.is())
         throw NoSuchElementException();
 
-    return aRet;
+    return xTable;
 }
 
 uno::Sequence< OUString > SwXTextTables::getElementNames()
diff --git a/sw/source/core/unocore/unotbl.cxx 
b/sw/source/core/unocore/unotbl.cxx
index a8b99eccba91..4878788eb606 100644
--- a/sw/source/core/unocore/unotbl.cxx
+++ b/sw/source/core/unocore/unotbl.cxx
@@ -2026,6 +2026,11 @@ uno::Reference<table::XTableColumns> SAL_CALL 
SwXTextTable::getColumns()
 }
 
 uno::Reference<table::XCell> SwXTextTable::getCellByName(const OUString& 
sCellName)
+{
+    return uno::Reference<table::XCell>(getSwCellByName(sCellName));
+}
+
+rtl::Reference<SwXCell> SwXTextTable::getSwCellByName(const OUString& 
sCellName)
 {
     SolarMutexGuard aGuard;
     SwFrameFormat* pFormat = lcl_EnsureCoreConnected(GetFrameFormat(), this);
diff --git a/sw/source/uibase/uno/unotxdoc.cxx 
b/sw/source/uibase/uno/unotxdoc.cxx
index 821519fa114d..7365585a7fce 100644
--- a/sw/source/uibase/uno/unotxdoc.cxx
+++ b/sw/source/uibase/uno/unotxdoc.cxx
@@ -1232,6 +1232,11 @@ Reference< XNameAccess >  
SwXTextDocument::getTextSections()
 }
 
 Reference< XNameAccess >  SwXTextDocument::getTextTables()
+{
+    return getSwTextTables();
+}
+
+rtl::Reference<SwXTextTables> SwXTextDocument::getSwTextTables()
 {
     SolarMutexGuard aGuard;
     ThrowIfInvalid();
diff --git a/sw/source/writerfilter/dmapper/PropertyMap.cxx 
b/sw/source/writerfilter/dmapper/PropertyMap.cxx
index 1d9e6280966a..64f7aa20fd62 100644
--- a/sw/source/writerfilter/dmapper/PropertyMap.cxx
+++ b/sw/source/writerfilter/dmapper/PropertyMap.cxx
@@ -70,6 +70,8 @@
 #include <unoxstyle.hxx>
 #include <unostyle.hxx>
 #include <unotext.hxx>
+#include <unotextcursor.hxx>
+#include <unotbl.hxx>
 #include <utility>
 
 #include <frozen/bits/defines.h>
@@ -1459,21 +1461,20 @@ void BeforeConvertToTextFrame(const 
std::deque<StoredRedline>& rFramedRedlines,
 void AfterConvertToTextFrame(DomainMapper_Impl& rDM_Impl, const 
std::deque<StoredRedline>& rFramedRedlines, std::vector<sal_Int32>& redPos, 
std::vector<sal_Int32>& redLen, std::vector<OUString>& redCell, 
std::vector<OUString>& redTable)
 {
     rtl::Reference<SwXTextDocument> xTextDocument(rDM_Impl.GetTextDocument());
-    uno::Reference<container::XNameAccess> xTables = 
xTextDocument->getTextTables();
+    rtl::Reference<SwXTextTables> xTables = xTextDocument->getSwTextTables();
     for( size_t i = 0; i < rFramedRedlines.size(); i++)
     {
         // skip failed createTextCursorByRange()
         if (redPos[i] == -1)
             continue;
-        uno::Reference<text::XTextTable> 
xTable(xTables->getByName(redTable[i]), uno::UNO_QUERY);
-        uno::Reference<text::XText> xCell(xTable->getCellByName(redCell[i]), 
uno::UNO_QUERY);
-        uno::Reference<text::XTextCursor> xCrsr = xCell->createTextCursor();
+        rtl::Reference<SwXTextTable> 
xTable(xTables->getTextTableByName(redTable[i]));
+        rtl::Reference<SwXCell> xCell(xTable->getSwCellByName(redCell[i]));
+        rtl::Reference<SwXTextCursor> xCrsr = xCell->createXTextCursor();
         xCrsr->goRight(redPos[i], false);
         xCrsr->goRight(redLen[i], true);
-        uno::Reference < text::XRedline > xRedline( xCrsr, 
uno::UNO_QUERY_THROW );
         try
         {
-            xRedline->makeRedline( rFramedRedlines[i].msType, 
rFramedRedlines[i].maRedlineProperties );
+            xCrsr->makeRedline( rFramedRedlines[i].msType, 
rFramedRedlines[i].maRedlineProperties );
         }
         catch (const uno::Exception&)
         {

Reply via email to