From 233a634a112e6dae07dca5fb1296764cb0001503 Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Wed, 22 Jul 2015 09:24:06 +0200 Subject: tdf#86374 DOCX import: fix btLr text table direction without Commit 0208ead70a9412ccd554fcef3e9308f8ca17037b (DOCX import: improve btLr table cell support, 2013-02-22) made any table row that has at least one btLr cell fixed height. This causes problems in case a table has a minimal height with lots of content, where the fixed height gives wrong layout, but the minimal height is correct. Fix the problem by only making the row fixed height if is set (as seen in the old bugdoc), and revert to setting the height type to minimal in any other case. Change-Id: Ibaf91f542e64e5caa7904df97eb6eb52618e0023 --- sw/qa/extras/ooxmlimport/data/tdf86374.docx | Bin 0 -> 13194 bytes sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 10 ++++++++++ writerfilter/source/dmapper/TableManager.hxx | 2 ++ writerfilter/source/dmapper/TablePropertiesHandler.cxx | 10 ++++++++-- 4 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 sw/qa/extras/ooxmlimport/data/tdf86374.docx diff --git a/sw/qa/extras/ooxmlimport/data/tdf86374.docx b/sw/qa/extras/ooxmlimport/data/tdf86374.docx new file mode 100644 index 000000000000..7fd772d79b3f Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/tdf86374.docx differ diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx index 6ae2e0bdf41a..4a8d1a98954b 100644 --- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx +++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx @@ -2748,6 +2748,16 @@ DECLARE_OOXMLIMPORT_TEST(testTdf89702, "tdf89702.docx") CPPUNIT_ASSERT_EQUAL(OUString("Arial"), getProperty(xStyle, "CharFontName")); } +DECLARE_OOXMLIMPORT_TEST(testTdf86374, "tdf86374.docx") +{ + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xTableRows(xTable->getRows(), uno::UNO_QUERY); + // btLr text direction was imported as FIX, it should be MIN to have enough space for the additionally entered paragraphs. + CPPUNIT_ASSERT_EQUAL(text::SizeType::MIN, getProperty(xTableRows->getByIndex(0), "SizeType")); +} + #endif CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/writerfilter/source/dmapper/TableManager.hxx b/writerfilter/source/dmapper/TableManager.hxx index e3760d0e627d..1a459cd1b784 100644 --- a/writerfilter/source/dmapper/TableManager.hxx +++ b/writerfilter/source/dmapper/TableManager.hxx @@ -241,6 +241,7 @@ protected: mState.resetCellProps(); } +public: TablePropertyMapPtr getRowProps() { return mState.getRowProps(); @@ -256,6 +257,7 @@ protected: mState.resetRowProps(); } +protected: void setInCell(bool bInCell) { mState.setInCell(bInCell); diff --git a/writerfilter/source/dmapper/TablePropertiesHandler.cxx b/writerfilter/source/dmapper/TablePropertiesHandler.cxx index eb29b481f533..4db5a8c167b3 100644 --- a/writerfilter/source/dmapper/TablePropertiesHandler.cxx +++ b/writerfilter/source/dmapper/TablePropertiesHandler.cxx @@ -90,8 +90,14 @@ namespace dmapper { const int MINLAY = 23; // sw/inc/swtypes.hxx, minimal possible size of frames. if (!pManager || !pManager->HasBtlrCell() || pMeasureHandler->getMeasureValue() > ConversionHelper::convertTwipToMM100(MINLAY)) { - // In case a cell already wanted fixed size, we should not overwrite it here. - if (!pManager || !pManager->IsRowSizeTypeInserted()) + bool bCantSplit = false; + if (pManager && pManager->getRowProps()) + { + boost::optional oIsSplitAllowed = pManager->getRowProps()->getProperty(PROP_IS_SPLIT_ALLOWED); + bCantSplit = oIsSplitAllowed && !oIsSplitAllowed->second.get(); + } + // In case a cell already wanted fixed size and the row has , we should not overwrite it here. + if (!pManager || !pManager->IsRowSizeTypeInserted() || !bCantSplit) pPropMap->Insert( PROP_SIZE_TYPE, uno::makeAny( pMeasureHandler->GetRowHeightSizeType() ), false); else pPropMap->Insert( PROP_SIZE_TYPE, uno::makeAny(text::SizeType::FIX), false); -- cgit