diff options
author | Miklos Vajna <vmiklos@collabora.com> | 2023-08-15 08:33:55 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2023-08-15 09:33:17 +0200 |
commit | 68c8466dd80e7a964e1377ee3e0308dc449fbf2d (patch) | |
tree | a26e77d64ffec140a49f913d0b89a89491d23e8d /writerfilter | |
parent | e027ef6c0534b7ce50dc5f8b74e27ce85b9eb97b (diff) |
sw floattable: handle AllowOverlap==false in the RTF filter
Map \tabsnoovrlp to SwFormatWrapInfluenceOnObjPos::mbAllowOverlap on
import and do the opposite on export.
Change-Id: I3d786041648d62e80f2ea9e3d726426e01a8d192
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155687
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
Diffstat (limited to 'writerfilter')
3 files changed, 43 insertions, 0 deletions
diff --git a/writerfilter/qa/cppunittests/rtftok/data/floattable-tbl-overlap.rtf b/writerfilter/qa/cppunittests/rtftok/data/floattable-tbl-overlap.rtf new file mode 100644 index 000000000000..16b8ef7fd4a5 --- /dev/null +++ b/writerfilter/qa/cppunittests/rtftok/data/floattable-tbl-overlap.rtf @@ -0,0 +1,17 @@ +{\rtf1 +\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\nobrkwrptbl +\pard\plain\intbl +{Table1\cell \cell } +{\trowd\tpvpara\tphpg\tposx5596\tposyin\cellx4680\cellx5670\row} +\pard\plain\intbl +{\cell \cell } +{\trowd \tpvpara\tphpg\tposx5596\tposyin\cellx4680\cellx5670\row } +\pard\plain After table1\par +\pard\plain\intbl +{Table2\cell \cell } +{\trowd \tpvpara\tposy0\tabsnoovrlp1\cellx4680\cellx6379\row} +\pard\plain\intbl +{\cell \cell } +{\trowd\tpvpara\tposy0\tabsnoovrlp1\cellx4680\cellx6379\row } +\pard\plain After table2 \par +} diff --git a/writerfilter/qa/cppunittests/rtftok/rtfdispatchflag.cxx b/writerfilter/qa/cppunittests/rtftok/rtfdispatchflag.cxx index 6d6b85be61c4..bca1d4aeb4fd 100644 --- a/writerfilter/qa/cppunittests/rtftok/rtfdispatchflag.cxx +++ b/writerfilter/qa/cppunittests/rtftok/rtfdispatchflag.cxx @@ -12,6 +12,7 @@ #include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/drawing/XDrawPageSupplier.hpp> #include <com/sun/star/text/RelOrientation.hpp> +#include <com/sun/star/text/XTextFramesSupplier.hpp> using namespace ::com::sun::star; @@ -82,6 +83,23 @@ CPPUNIT_TEST_FIXTURE(Test, testDoNotBreakWrappedTables) // set. CPPUNIT_ASSERT(bDoNotBreakWrappedTables); } + +CPPUNIT_TEST_FIXTURE(Test, testTblOverlap) +{ + // Given a document with 2 floating tables, the second is not allowed to overlap: + // When importing that document: + loadFromURL(u"floattable-tbl-overlap.rtf"); + + // Then make sure the second table is marked as "can't overlap": + uno::Reference<text::XTextFramesSupplier> xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> xFrames(xTextDocument->getTextFrames(), uno::UNO_QUERY); + uno::Reference<beans::XPropertySet> xFrame(xFrames->getByIndex(1), uno::UNO_QUERY); + bool bAllowOverlap{}; + CPPUNIT_ASSERT(xFrame->getPropertyValue("AllowOverlap") >>= bAllowOverlap); + // Without the accompanying fix in place, this test would have failed, the tables were marked as + // "can overlap". + CPPUNIT_ASSERT(!bAllowOverlap); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/rtftok/rtfdispatchflag.cxx b/writerfilter/source/rtftok/rtfdispatchflag.cxx index 0ca4d20645f1..de7b91e26fae 100644 --- a/writerfilter/source/rtftok/rtfdispatchflag.cxx +++ b/writerfilter/source/rtftok/rtfdispatchflag.cxx @@ -111,6 +111,14 @@ bool RTFDocumentImpl::dispatchFloatingTableFlag(RTFKeyword nKeyword) return true; } + if (nKeyword == RTFKeyword::TABSNOOVRLP) + { + m_aStates.top().getTableRowSprms().set( + NS_ooxml::LN_CT_TblPrBase_tblOverlap, + new RTFValue(NS_ooxml::LN_Value_ST_TblOverlap_never)); + return true; + } + return false; } |