[Libreoffice-commits] core.git: Branch 'distro/suse/suse-3.6' - writerfilter/source

Cédric Bosdonnat cedric.bosdonnat at free.fr
Thu Feb 21 02:05:29 PST 2013


 writerfilter/source/dmapper/DomainMapperTableHandler.cxx |    2 -
 writerfilter/source/dmapper/DomainMapperTableManager.cxx |   26 ++++++++++++---
 writerfilter/source/dmapper/DomainMapperTableManager.hxx |    5 ++
 3 files changed, 27 insertions(+), 6 deletions(-)

New commits:
commit 9965b124b5631bb0e1bf5be394224251c72fe0e5
Author: Cédric Bosdonnat <cedric.bosdonnat at free.fr>
Date:   Thu Feb 21 10:27:31 2013 +0100

    n#779642: table positions need to be stacked to handle nested table
    
    (cherry picked from commit 36c64bc194714d60a5c18f63bcfc0f721c2056db)
    
    Conflicts:
    	writerfilter/source/dmapper/DomainMapperTableManager.hxx
    
    Change-Id: If592f5a2f29c207daf9a603a4332da9bc8c5ae3b

diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
index 65a26f9..9c2d298 100644
--- a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
+++ b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
@@ -720,7 +720,7 @@ void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel)
         uno::Reference<text::XTextRange> xStart;
         uno::Reference<text::XTextRange> xEnd;
         // If we want to make this table a floating one.
-        uno::Sequence<beans::PropertyValue> aFrameProperties = m_rDMapper_Impl.getTableManager().getTablePosition();
+        uno::Sequence<beans::PropertyValue> aFrameProperties = m_rDMapper_Impl.getTableManager().getCurrentTablePosition();
         bool bFloating = aFrameProperties.hasElements();
         // Additional checks: if we can do this.
         if (bFloating && (*m_pTableSeq)[0].getLength() > 0 && (*m_pTableSeq)[0][0].getLength() > 0)
diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.cxx b/writerfilter/source/dmapper/DomainMapperTableManager.cxx
index 43a8238..a396d69 100644
--- a/writerfilter/source/dmapper/DomainMapperTableManager.cxx
+++ b/writerfilter/source/dmapper/DomainMapperTableManager.cxx
@@ -33,7 +33,6 @@
 #include <CellMarginHandler.hxx>
 #include <ConversionHelper.hxx>
 #include <MeasureHandler.hxx>
-#include <TablePositionHandler.hxx>
 #include <TDefTableHandler.hxx>
 #include <com/sun/star/text/HoriOrientation.hpp>
 #include <com/sun/star/text/SizeType.hpp>
@@ -330,9 +329,14 @@ bool DomainMapperTableManager::sprm(Sprm & rSprm)
                     writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
                     if (pProperties.get())
                     {
-                        TablePositionHandlerPtr pHandler( new TablePositionHandler );
+                        TablePositionHandlerPtr pHandler = m_aTablePositions.back();
+                        if ( !pHandler )
+                        {
+                            m_aTablePositions.pop_back();
+                            pHandler.reset( new TablePositionHandler );
+                            m_aTablePositions.push_back( pHandler );
+                        }
                         pProperties->resolve(*pHandler);
-                        m_aTablePosition = pHandler->getTablePosition();
                     }
                 }
                 break;
@@ -368,6 +372,14 @@ boost::shared_ptr< vector< sal_Int32 > > DomainMapperTableManager::getCurrentCel
     return m_aCellWidths.back( );
 }
 
+const uno::Sequence<beans::PropertyValue> DomainMapperTableManager::getCurrentTablePosition( )
+{
+    if ( !m_aTablePositions.empty( ) && m_aTablePositions.back() )
+        return m_aTablePositions.back( )->getTablePosition();
+    else
+        return uno::Sequence< beans::PropertyValue >( 0 );
+}
+
 void DomainMapperTableManager::startLevel( )
 {
     DomainMapperTableManager_Base_t::startLevel( );
@@ -383,9 +395,11 @@ void DomainMapperTableManager::startLevel( )
     IntVectorPtr pNewGrid( new vector<sal_Int32> );
     IntVectorPtr pNewSpans( new vector<sal_Int32> );
     IntVectorPtr pNewCellWidths( new vector<sal_Int32> );
+    TablePositionHandlerPtr pNewPositionHandler;
     m_aTableGrid.push_back( pNewGrid );
     m_aGridSpans.push_back( pNewSpans );
     m_aCellWidths.push_back( pNewCellWidths );
+    m_aTablePositions.push_back( pNewPositionHandler );
     m_nCell.push_back( 0 );
     m_nTableWidth = 0;
 
@@ -402,6 +416,7 @@ void DomainMapperTableManager::endLevel( )
     m_nCell.pop_back( );
     m_nTableWidth = 0;
 
+
     DomainMapperTableManager_Base_t::endLevel( );
 #ifdef DEBUG_DOMAINMAPPER
     dmapper_logger->startElement("dmappertablemanager.endLevel");
@@ -411,6 +426,10 @@ void DomainMapperTableManager::endLevel( )
 
     dmapper_logger->endElement();
 #endif
+
+    // Pop back the table position after endLevel as it's used
+    // in the endTable method called in endLevel.
+    m_aTablePositions.pop_back();
 }
 
 
@@ -612,7 +631,6 @@ void DomainMapperTableManager::clearData()
     m_nRow = m_nCellBorderIndex = m_nHeaderRepeat = m_nTableWidth = 0;
     m_sTableStyleName = ::rtl::OUString();
     m_pTableStyleTextProperies.reset();
-    m_aTablePosition = uno::Sequence<beans::PropertyValue>(0);
 }
 
 
diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.hxx b/writerfilter/source/dmapper/DomainMapperTableManager.hxx
index 34a8df5..97866b0 100644
--- a/writerfilter/source/dmapper/DomainMapperTableManager.hxx
+++ b/writerfilter/source/dmapper/DomainMapperTableManager.hxx
@@ -29,6 +29,7 @@
 #define INCLUDED_DOMAIN_MAPPER_TABLE_MANAGER_HXX
 
 #include "TablePropertiesHandler.hxx"
+#include <TablePositionHandler.hxx>
 
 #include <resourcemodel/TableManager.hxx>
 #include <PropertyMap.hxx>
@@ -54,7 +55,7 @@ class DomainMapperTableManager : public DomainMapperTableManager_Base_t
     bool            m_bOOXML;
     bool            m_bImplicitMerges;
     ::rtl::OUString m_sTableStyleName;
-    com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> m_aTablePosition;
+    std::vector< TablePositionHandlerPtr > m_aTablePositions;
     PropertyMapPtr  m_pTableStyleTextProperies;
 
     ::std::vector< IntVectorPtr >  m_aTableGrid;
@@ -92,6 +93,8 @@ public:
 
     const ::rtl::OUString& getTableStyleName() const { return m_sTableStyleName; }
     const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> getTablePosition() { return m_aTablePosition; }
+    const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> getCurrentTablePosition();
+
     /// copy the text properties of the table style and its parent into pContext
     void    CopyTextProperties(PropertyMapPtr pContext, StyleSheetTablePtr pStyleSheetTable);
 


More information about the Libreoffice-commits mailing list