DOCX import: fix relative width of floating tables

Relative width of tables means relative to the page
and not to the paragraph area so we have to set
the RelativeWidthRelation property of the containing
text frame.

Change-Id: I054d22e1883eb0ed9b07b9141bb2bea956e8367e
This commit is contained in:
Zolnai Tamás
2014-02-13 15:19:49 +01:00
parent f16368777b
commit 7ff8414a41
3 changed files with 18 additions and 3 deletions

View File

@@ -1848,6 +1848,18 @@ DECLARE_OOXMLIMPORT_TEST(testFdo69656, "Table_cell_auto_width_fdo69656.docx")
uno::Reference<container::XIndexAccess> xTables(xTablesSupplier->getTextTables( ), uno::UNO_QUERY); uno::Reference<container::XIndexAccess> xTables(xTablesSupplier->getTextTables( ), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(sal_Int32(8154), getProperty<sal_Int32>(xTables->getByIndex(0), "Width")); CPPUNIT_ASSERT_EQUAL(sal_Int32(8154), getProperty<sal_Int32>(xTables->getByIndex(0), "Width"));
} }
DECLARE_OOXMLIMPORT_TEST(testFloatingTableWithRelativeWidth, "floating-table-with-relative-width.docx")
{
// Floating tables are imported to text frames and the size is defined by the frame size.
// Width of the text frame including table was relative to the paragraph area and not to the page.
uno::Reference<text::XTextFramesSupplier> xTextFramesSupplier(mxComponent, uno::UNO_QUERY);
uno::Reference<container::XIndexAccess> xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY);
uno::Reference<beans::XPropertySet> xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(sal_Int32(80), getProperty<sal_Int32>(xFrame, "RelativeWidth"));
CPPUNIT_ASSERT_EQUAL(sal_Int16(text::RelOrientation::PAGE_FRAME), getProperty<sal_Int16>(xFrame, "RelativeWidthRelation"));
}
#endif #endif
CPPUNIT_PLUGIN_IMPLEMENT(); CPPUNIT_PLUGIN_IMPLEMENT();

View File

@@ -944,9 +944,12 @@ void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel)
} }
else else
{ {
aFrameProperties.realloc(aFrameProperties.getLength() + 1); aFrameProperties.realloc(aFrameProperties.getLength() + 2);
aFrameProperties[aFrameProperties.getLength() - 1].Name = "FrameWidthPercent"; aFrameProperties[aFrameProperties.getLength() - 2].Name = "FrameWidthPercent";
aFrameProperties[aFrameProperties.getLength() - 1].Value = xTableProperties->getPropertyValue("RelativeWidth"); aFrameProperties[aFrameProperties.getLength() - 2].Value = xTableProperties->getPropertyValue("RelativeWidth");
aFrameProperties[aFrameProperties.getLength() - 1].Name = "RelativeWidthRelation";
aFrameProperties[aFrameProperties.getLength() - 1].Value = uno::makeAny(text::RelOrientation::PAGE_FRAME);
// Applying the relative width to the frame, needs to have the table width to be 100% of the frame width // Applying the relative width to the frame, needs to have the table width to be 100% of the frame width
xTableProperties->setPropertyValue("RelativeWidth", uno::makeAny(sal_Int16(100))); xTableProperties->setPropertyValue("RelativeWidth", uno::makeAny(sal_Int16(100)));