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(-)

New commits:
commit 9cd8fb08f47bc0900e49a32eaee165b956406096
Author: Miklos Vajna <vmik...@collabora.co.uk>
Date:   Wed Mar 12 11:42:34 2014 +0100

    bnc#865381 DOCX import: table cell btLr text direction fixes
    
    (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 <caol...@redhat.com>
    Tested-by: Caolán McNamara <caol...@redhat.com>

diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.cxx 
b/writerfilter/source/dmapper/DomainMapperTableManager.cxx
index 157fbf8..6ca05de 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 6243b61..ea1a953 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 4023a21..0b5952c 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<DomainMapperTableManager*>(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);
                 }
             }
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to