From 9cd8fb08f47bc0900e49a32eaee165b956406096 Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Wed, 12 Mar 2014 11:42:34 +0100 Subject: bnc#865381 DOCX import: table cell btLr text direction fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit 48b5b7641d0df960558082e8948da8598f801264) (cherry picked from commit 970160f78ef6cc7abacfa252daa8451e1f0117bb) Conflicts: sw/qa/extras/ooxmlimport/ooxmlimport.cxx writerfilter/source/dmapper/DomainMapperTableManager.cxx writerfilter/source/dmapper/TablePropertiesHandler.cxx Change-Id: I527955671e1100f05da717bffe002131baaf0291 Reviewed-on: https://gerrit.libreoffice.org/8554 Reviewed-by: Caolán McNamara Tested-by: Caolán McNamara --- writerfilter/source/dmapper/DomainMapperTableManager.cxx | 15 +++++++++++---- writerfilter/source/dmapper/DomainMapperTableManager.hxx | 7 +++++++ writerfilter/source/dmapper/TablePropertiesHandler.cxx | 12 ++++++++---- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.cxx b/writerfilter/source/dmapper/DomainMapperTableManager.cxx index 157fbf83b914..6ca05de8f55d 100644 --- a/writerfilter/source/dmapper/DomainMapperTableManager.cxx +++ b/writerfilter/source/dmapper/DomainMapperTableManager.cxx @@ -55,6 +55,7 @@ DomainMapperTableManager::DomainMapperTableManager(bool bOOXML) : m_aTmpTableProperties(), m_bPushCurrentWidth(false), m_bRowSizeTypeInserted(false), + m_bHasBtlrCell(false), m_bTableSizeTypeInserted(false), m_nLayoutType(0), m_nMaxFixedWidth(0), @@ -336,10 +337,15 @@ bool DomainMapperTableManager::sprm(Sprm & rSprm) SAL_INFO( "writerfilter", "Have inserted textDirection " << nIntValue ); // We're faking a text direction, so don't allow multiple lines. - TablePropertyMapPtr pRowPropMap( new TablePropertyMap ); - pRowPropMap->Insert(PROP_SIZE_TYPE, false, uno::makeAny(text::SizeType::FIX)); - m_bRowSizeTypeInserted = true; - insertRowProps(pRowPropMap); + if (!getCellProps() || getCellProps()->find(PropertyDefinition(PROP_VERTICAL_MERGE, false)) == getCellProps()->end()) + { + // Though in case there will be a vertical merge, don't do this, it hides text that is supposed to be visible. + TablePropertyMapPtr pRowPropMap( new TablePropertyMap ); + pRowPropMap->Insert(PROP_SIZE_TYPE, false, uno::makeAny(text::SizeType::FIX)); + m_bRowSizeTypeInserted = true; + insertRowProps(pRowPropMap); + } + m_bHasBtlrCell = true; } break; case 4: // lrTbV @@ -720,6 +726,7 @@ void DomainMapperTableManager::endOfRowAction() m_nGridBefore = m_nGridAfter = 0; m_bRowSizeTypeInserted = false; + m_bHasBtlrCell = false; m_bTableSizeTypeInserted = false; #ifdef DEBUG_DOMAINMAPPER diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.hxx b/writerfilter/source/dmapper/DomainMapperTableManager.hxx index 6243b619c0e1..ea1a953c212d 100644 --- a/writerfilter/source/dmapper/DomainMapperTableManager.hxx +++ b/writerfilter/source/dmapper/DomainMapperTableManager.hxx @@ -58,6 +58,8 @@ class DomainMapperTableManager : public DomainMapperTableManager_Base_t ::std::vector< IntVectorPtr > m_aCellWidths; /// Remember if a cell already set this, then it should not be set at a row level. bool m_bRowSizeTypeInserted; + /// At least one cell in the current row has the btLr text direction. + bool m_bHasBtlrCell; /// Remember if table width was already set, when we lack a w:tblW, it should be set manually at the end. bool m_bTableSizeTypeInserted; /// Table layout algorithm, IOW if we should consider fixed column width or not. @@ -133,6 +135,11 @@ public: return m_bRowSizeTypeInserted; } + bool HasBtlrCell() const + { + return m_bHasBtlrCell; + } + bool IsTableSizeTypeInserted() const { return m_bTableSizeTypeInserted; diff --git a/writerfilter/source/dmapper/TablePropertiesHandler.cxx b/writerfilter/source/dmapper/TablePropertiesHandler.cxx index 4023a2134abb..0b5952cd5434 100644 --- a/writerfilter/source/dmapper/TablePropertiesHandler.cxx +++ b/writerfilter/source/dmapper/TablePropertiesHandler.cxx @@ -94,12 +94,16 @@ namespace dmapper { pProperties->resolve(*pMeasureHandler); TablePropertyMapPtr pPropMap( new TablePropertyMap ); - // In case a cell already wanted fixed size, we should not overwrite it here. DomainMapperTableManager* pManager = dynamic_cast(m_pTableManager); - if (!pManager || !pManager->IsRowSizeTypeInserted()) - pPropMap->Insert( PROP_SIZE_TYPE, false, uno::makeAny( pMeasureHandler->GetRowHeightSizeType() ), false); + // In case any of the cells has the btLr cell direction, then an explicit minimal size will just hide the whole row, don't do that. + if (pMeasureHandler->GetRowHeightSizeType() != text::SizeType::MIN || !pManager->HasBtlrCell()) + { + // In case a cell already wanted fixed size, we should not overwrite it here. + if (!pManager || !pManager->IsRowSizeTypeInserted()) + pPropMap->Insert( PROP_SIZE_TYPE, false, uno::makeAny( pMeasureHandler->GetRowHeightSizeType() ), false); - pPropMap->Insert( PROP_HEIGHT, false, uno::makeAny(pMeasureHandler->getMeasureValue() )); + pPropMap->Insert( PROP_HEIGHT, false, uno::makeAny(pMeasureHandler->getMeasureValue() )); + } insertRowProps(pPropMap); } } -- cgit