summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2023-08-15 08:33:55 +0200
committerMiklos Vajna <vmiklos@collabora.com>2023-08-15 09:33:17 +0200
commit68c8466dd80e7a964e1377ee3e0308dc449fbf2d (patch)
treea26e77d64ffec140a49f913d0b89a89491d23e8d /writerfilter
parente027ef6c0534b7ce50dc5f8b74e27ce85b9eb97b (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')
-rw-r--r--writerfilter/qa/cppunittests/rtftok/data/floattable-tbl-overlap.rtf17
-rw-r--r--writerfilter/qa/cppunittests/rtftok/rtfdispatchflag.cxx18
-rw-r--r--writerfilter/source/rtftok/rtfdispatchflag.cxx8
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;
}