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:
Binary file not shown.
@@ -1848,6 +1848,18 @@ DECLARE_OOXMLIMPORT_TEST(testFdo69656, "Table_cell_auto_width_fdo69656.docx")
|
||||
uno::Reference<container::XIndexAccess> xTables(xTablesSupplier->getTextTables( ), uno::UNO_QUERY);
|
||||
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
|
||||
|
||||
CPPUNIT_PLUGIN_IMPLEMENT();
|
||||
|
@@ -944,9 +944,12 @@ void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel)
|
||||
}
|
||||
else
|
||||
{
|
||||
aFrameProperties.realloc(aFrameProperties.getLength() + 1);
|
||||
aFrameProperties[aFrameProperties.getLength() - 1].Name = "FrameWidthPercent";
|
||||
aFrameProperties[aFrameProperties.getLength() - 1].Value = xTableProperties->getPropertyValue("RelativeWidth");
|
||||
aFrameProperties.realloc(aFrameProperties.getLength() + 2);
|
||||
aFrameProperties[aFrameProperties.getLength() - 2].Name = "FrameWidthPercent";
|
||||
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
|
||||
xTableProperties->setPropertyValue("RelativeWidth", uno::makeAny(sal_Int16(100)));
|
||||
|
Reference in New Issue
Block a user