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") ...@@ -1574,6 +1574,14 @@ DECLARE_OOXMLIMPORT_TEST(testTdf113946, "tdf113946.docx")
CPPUNIT_ASSERT_EQUAL( OUString("1696"), aTop ); 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 // tests should only be added to ooxmlIMPORT *if* they fail round-tripping in ooxmlEXPORT
CPPUNIT_PLUGIN_IMPLEMENT(); CPPUNIT_PLUGIN_IMPLEMENT();
......
...@@ -1151,8 +1151,10 @@ void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel, bool bTab ...@@ -1151,8 +1151,10 @@ void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel, bool bTab
// table is not in the body text. // table is not in the body text.
sal_Int32 nTableWidth = 0; sal_Int32 nTableWidth = 0;
m_aTableProperties->getValue(TablePropertyMap::TABLE_WIDTH, nTableWidth); 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()) 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 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. // 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 ...@@ -356,17 +356,19 @@ struct FloatingTableInfo
css::uno::Reference<css::text::XTextRange> m_xEnd; css::uno::Reference<css::text::XTextRange> m_xEnd;
css::uno::Sequence<css::beans::PropertyValue> m_aFrameProperties; css::uno::Sequence<css::beans::PropertyValue> m_aFrameProperties;
sal_Int32 m_nTableWidth; sal_Int32 m_nTableWidth;
sal_Int32 m_nTableWidthType;
/// Break type of the section that contains this table. /// Break type of the section that contains this table.
sal_Int32 m_nBreakType = -1; sal_Int32 m_nBreakType = -1;
FloatingTableInfo(css::uno::Reference<css::text::XTextRange> const& xStart, FloatingTableInfo(css::uno::Reference<css::text::XTextRange> const& xStart,
css::uno::Reference<css::text::XTextRange> const& xEnd, css::uno::Reference<css::text::XTextRange> const& xEnd,
const css::uno::Sequence<css::beans::PropertyValue>& aFrameProperties, const css::uno::Sequence<css::beans::PropertyValue>& aFrameProperties,
sal_Int32 nTableWidth) sal_Int32 nTableWidth, sal_Int32 nTableWidthType)
: m_xStart(xStart), : m_xStart(xStart),
m_xEnd(xEnd), m_xEnd(xEnd),
m_aFrameProperties(aFrameProperties), m_aFrameProperties(aFrameProperties),
m_nTableWidth(nTableWidth) m_nTableWidth(nTableWidth),
m_nTableWidthType(nTableWidthType)
{ {
} }
css::uno::Any getPropertyValue(const OUString &propertyName); css::uno::Any getPropertyValue(const OUString &propertyName);
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#include <com/sun/star/table/ShadowFormat.hpp> #include <com/sun/star/table/ShadowFormat.hpp>
#include <com/sun/star/text/RelOrientation.hpp> #include <com/sun/star/text/RelOrientation.hpp>
#include <com/sun/star/text/HoriOrientation.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/VertOrientation.hpp>
#include <com/sun/star/text/WritingMode.hpp> #include <com/sun/star/text/WritingMode.hpp>
#include <com/sun/star/text/XTextColumns.hpp> #include <com/sun/star/text/XTextColumns.hpp>
...@@ -1031,6 +1032,10 @@ bool SectionPropertyMap::FloatingTableConversion( DomainMapper_Impl& rDM_Impl, F ...@@ -1031,6 +1032,10 @@ bool SectionPropertyMap::FloatingTableConversion( DomainMapper_Impl& rDM_Impl, F
sal_Int32 nTextAreaWidth = nPageWidth - GetLeftMargin() - GetRightMargin(); sal_Int32 nTextAreaWidth = nPageWidth - GetLeftMargin() - GetRightMargin();
// Count the layout width of the table. // Count the layout width of the table.
sal_Int32 nTableWidth = rInfo.m_nTableWidth; sal_Int32 nTableWidth = rInfo.m_nTableWidth;
if (rInfo.m_nTableWidthType == text::SizeType::VARIABLE)
{
nTableWidth *= nTextAreaWidth / 100.0;
}
sal_Int32 nLeftMargin = 0; sal_Int32 nLeftMargin = 0;
if ( rInfo.getPropertyValue( "LeftMargin" ) >>= nLeftMargin ) if ( rInfo.getPropertyValue( "LeftMargin" ) >>= nLeftMargin )
nTableWidth += 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