From 76d1ca523ddcf89cc269fe51c70e66066943ef5a Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Wed, 28 Aug 2013 15:27:07 +0200 Subject: [PATCH] bnc#816593 DOCX import: fix auto table width wrt nested tables The bugdoc has a table with a single cell, and also a nested table in that cell. Both tables have auto width. The problem was that the width of the outer table was too large. There is a trick in DomainMapperTableManager::startLevel() to get the cell widths at the correct level: do the same in DomainMapperTableManager::endLevel(), and that'll fix the table width problem. (Because with that, the outer table will correctly have access to its cell width.) Change-Id: Ib750f0475364fd7e47c445cb54f2df34f3af085d --- .../ooxmlimport/data/table-auto-nested.docx | Bin 0 -> 10297 bytes sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 13 +++++++++++++ .../source/dmapper/DomainMapperTableManager.cxx | 9 +++++++++ 3 files changed, 22 insertions(+) create mode 100755 sw/qa/extras/ooxmlimport/data/table-auto-nested.docx diff --git a/sw/qa/extras/ooxmlimport/data/table-auto-nested.docx b/sw/qa/extras/ooxmlimport/data/table-auto-nested.docx new file mode 100755 index 0000000000000000000000000000000000000000..85f47dbba0b3392d391008f7ac8f093a76ca707c GIT binary patch literal 10297 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 ZB_|07q0^5OM<{?3Nb$f1*#H56{{aGPx?2DM literal 0 HcmV?d00001 diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx index f79167b0cea8..3c13f052a879 100644 --- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx +++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx @@ -127,6 +127,7 @@ public: void testFdo66474(); void testGroupshapeRotation(); void testBnc780044Spacing(); + void testTableAutoNested(); CPPUNIT_TEST_SUITE(Test); #if !defined(MACOSX) && !defined(WNT) @@ -220,6 +221,7 @@ void Test::run() {"fdo66474.docx", &Test::testFdo66474}, {"groupshape-rotation.docx", &Test::testGroupshapeRotation}, {"bnc780044_spacing.docx", &Test::testBnc780044Spacing}, + {"table-auto-nested.docx", &Test::testTableAutoNested}, }; header(); for (unsigned int i = 0; i < SAL_N_ELEMENTS(aMethods); ++i) @@ -1495,6 +1497,17 @@ void Test::testBnc780044Spacing() CPPUNIT_ASSERT_EQUAL(sal_Int16(1), xCursor->getPage()); } +void Test::testTableAutoNested() +{ + // This was 176, when compat option is not enabled, the auto paragraph bottom margin value was incorrect. + CPPUNIT_ASSERT_EQUAL(sal_Int32(494), getProperty(getParagraph(1), "ParaBottomMargin")); + + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + // This was 115596, i.e. the width of the outer table was too large. + CPPUNIT_ASSERT_EQUAL(sal_Int32(23051), getProperty(xTables->getByIndex(1), "Width")); +} + CPPUNIT_TEST_SUITE_REGISTRATION(Test); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.cxx b/writerfilter/source/dmapper/DomainMapperTableManager.cxx index 80ffb4873c29..ac75e073fc85 100644 --- a/writerfilter/source/dmapper/DomainMapperTableManager.cxx +++ b/writerfilter/source/dmapper/DomainMapperTableManager.cxx @@ -483,7 +483,16 @@ void DomainMapperTableManager::endLevel( ) { m_aTableGrid.pop_back( ); m_aGridSpans.pop_back( ); + + // Do the same trick as in startLevel(): pop the value that was pushed too early. + boost::optional oCurrentWidth; + if (m_bPushCurrentWidth && !m_aCellWidths.empty() && !m_aCellWidths.back()->empty()) + oCurrentWidth.reset(m_aCellWidths.back()->back()); m_aCellWidths.pop_back( ); + // And push it back to the right level. + if (oCurrentWidth) + m_aCellWidths.back()->push_back(*oCurrentWidth); + m_nCell.pop_back( ); m_nTableWidth = 0; m_nLayoutType = 0;