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&) {