summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2015-06-08 07:48:42 +0200
committerCaolán McNamara <caolanm@redhat.com>2015-06-16 14:41:36 +0000
commit853033da3710f0e8df1b5d0d5355c6b0ce1c9ea0 (patch)
treeb828e3b8c06f4f88974975921dbb3639479fd7d7
parent8a315c82aa6609800b4651811cf72c06cc1b9b29 (diff)
tdf#82553 DOCX import: handle table margin when converting floattables
(cherry picked from commit 292ec5fe8d01af6119325f1a426422bb42e58615) Conflicts: sw/qa/extras/ooxmlimport/ooxmlimport.cxx Change-Id: I7a3a233a34453153b3e1c0fe3d60bb0ede65dc86 Reviewed-on: https://gerrit.libreoffice.org/16248 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--sw/qa/extras/ooxmlimport/data/tdf8255.docxbin0 -> 27607 bytes
-rw-r--r--sw/qa/extras/ooxmlimport/ooxmlimport.cxx9
-rw-r--r--writerfilter/source/dmapper/PropertyMap.cxx12
3 files changed, 20 insertions, 1 deletions
diff --git a/sw/qa/extras/ooxmlimport/data/tdf8255.docx b/sw/qa/extras/ooxmlimport/data/tdf8255.docx
new file mode 100644
index 000000000000..366e498856ba
--- /dev/null
+++ b/sw/qa/extras/ooxmlimport/data/tdf8255.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index 0721a1edc6ae..4a7a8bc27b3f 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -2581,6 +2581,15 @@ DECLARE_OOXMLIMPORT_TEST(testFdo87488, "fdo87488.docx")
}
}
+DECLARE_OOXMLIMPORT_TEST(testTdf8255, "tdf8255.docx")
+{
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xTextDocument, uno::UNO_QUERY);
+ uno::Reference<drawing::XDrawPage> xDrawPage = xDrawPageSupplier->getDrawPage();
+ // This was 1: a full-page-wide multi-page floating table was imported as a TextFrame.
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), xDrawPage->getCount());
+}
+
#endif
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx
index 845dbe6cd2a2..f83862cc06a2 100644
--- a/writerfilter/source/dmapper/PropertyMap.cxx
+++ b/writerfilter/source/dmapper/PropertyMap.cxx
@@ -1037,6 +1037,16 @@ void SectionPropertyMap::CloseSectionGroup( DomainMapper_Impl& rDM_Impl )
for (size_t i = 0; i < rPendingFloatingTables.size(); ++i)
{
FloatingTableInfo& rInfo = rPendingFloatingTables[i];
+
+ // Count the layout width of the table.
+ sal_Int32 nTableWidth = rInfo.m_nTableWidth;
+ sal_Int32 nLeftMargin = 0;
+ if (rInfo.getPropertyValue("LeftMargin") >>= nLeftMargin)
+ nTableWidth += nLeftMargin;
+ sal_Int32 nRightMargin = 0;
+ if (rInfo.getPropertyValue("RightMargin") >>= nRightMargin)
+ nTableWidth += nRightMargin;
+
// If the table is wider than the text area, then don't create a fly
// for the table: no wrapping will be performed anyway, but multi-page
// tables will be broken.
@@ -1045,7 +1055,7 @@ void SectionPropertyMap::CloseSectionGroup( DomainMapper_Impl& rDM_Impl )
// If there are columns, always create the fly, otherwise the columns would
// restrict geometry of the table.
if ( ( rInfo.getPropertyValue("HoriOrientRelation") == text::RelOrientation::PAGE_FRAME ) ||
- ( rInfo.m_nTableWidth < nTextAreaWidth ) || ColumnCount() + 1 >= 2 )
+ nTableWidth < nTextAreaWidth || ColumnCount() + 1 >= 2 )
xBodyText->convertToTextFrame(rInfo.m_xStart, rInfo.m_xEnd, rInfo.m_aFrameProperties);
}
rPendingFloatingTables.clear();