Kaydet (Commit) 76d6fcd0 authored tarafından Mike Kaganski's avatar Mike Kaganski

tdf#114217: Consider relative width when importing floating table

Unit test included

Change-Id: I8e3338d7df431bd016caa4e06e684fbd189127c4
Reviewed-on: https://gerrit.libreoffice.org/49324Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarMike Kaganski <mike.kaganski@collabora.com>
üst 9751a273
......@@ -1574,6 +1574,14 @@ DECLARE_OOXMLIMPORT_TEST(testTdf113946, "tdf113946.docx")
CPPUNIT_ASSERT_EQUAL( OUString("1696"), aTop );
}
DECLARE_OOXMLIMPORT_TEST(testTdf114217, "tdf114217.docx")
{
uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY);
uno::Reference<drawing::XDrawPage> xDrawPage = xDrawPageSupplier->getDrawPage();
// This was 1, multi-page table was imported as a floating one.
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), xDrawPage->getCount());
}
// tests should only be added to ooxmlIMPORT *if* they fail round-tripping in ooxmlEXPORT
CPPUNIT_PLUGIN_IMPLEMENT();
......
......@@ -1151,8 +1151,10 @@ void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel, bool bTab
// table is not in the body text.
sal_Int32 nTableWidth = 0;
m_aTableProperties->getValue(TablePropertyMap::TABLE_WIDTH, nTableWidth);
sal_Int32 nTableWidthType = text::SizeType::FIX;
m_aTableProperties->getValue(TablePropertyMap::TABLE_WIDTH_TYPE, nTableWidthType);
if (m_rDMapper_Impl.GetSectionContext() && nestedTableLevel <= 1 && !m_rDMapper_Impl.IsInHeaderFooter())
m_rDMapper_Impl.m_aPendingFloatingTables.emplace_back(xStart, xEnd, comphelper::containerToSequence(aFrameProperties), nTableWidth);
m_rDMapper_Impl.m_aPendingFloatingTables.emplace_back(xStart, xEnd, comphelper::containerToSequence(aFrameProperties), nTableWidth, nTableWidthType);
else
{
// m_xText points to the body text, get the current xText from m_rDMapper_Impl, in case e.g. we would be in a header.
......
......@@ -356,17 +356,19 @@ struct FloatingTableInfo
css::uno::Reference<css::text::XTextRange> m_xEnd;
css::uno::Sequence<css::beans::PropertyValue> m_aFrameProperties;
sal_Int32 m_nTableWidth;
sal_Int32 m_nTableWidthType;
/// Break type of the section that contains this table.
sal_Int32 m_nBreakType = -1;
FloatingTableInfo(css::uno::Reference<css::text::XTextRange> const& xStart,
css::uno::Reference<css::text::XTextRange> const& xEnd,
const css::uno::Sequence<css::beans::PropertyValue>& aFrameProperties,
sal_Int32 nTableWidth)
sal_Int32 nTableWidth, sal_Int32 nTableWidthType)
: m_xStart(xStart),
m_xEnd(xEnd),
m_aFrameProperties(aFrameProperties),
m_nTableWidth(nTableWidth)
m_nTableWidth(nTableWidth),
m_nTableWidthType(nTableWidthType)
{
}
css::uno::Any getPropertyValue(const OUString &propertyName);
......
......@@ -38,6 +38,7 @@
#include <com/sun/star/table/ShadowFormat.hpp>
#include <com/sun/star/text/RelOrientation.hpp>
#include <com/sun/star/text/HoriOrientation.hpp>
#include <com/sun/star/text/SizeType.hpp>
#include <com/sun/star/text/VertOrientation.hpp>
#include <com/sun/star/text/WritingMode.hpp>
#include <com/sun/star/text/XTextColumns.hpp>
......@@ -1031,6 +1032,10 @@ bool SectionPropertyMap::FloatingTableConversion( DomainMapper_Impl& rDM_Impl, F
sal_Int32 nTextAreaWidth = nPageWidth - GetLeftMargin() - GetRightMargin();
// Count the layout width of the table.
sal_Int32 nTableWidth = rInfo.m_nTableWidth;
if (rInfo.m_nTableWidthType == text::SizeType::VARIABLE)
{
nTableWidth *= nTextAreaWidth / 100.0;
}
sal_Int32 nLeftMargin = 0;
if ( rInfo.getPropertyValue( "LeftMargin" ) >>= nLeftMargin )
nTableWidth += nLeftMargin;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment