summaryrefslogtreecommitdiff
path: root/writerfilter/source/dmapper/DomainMapperTableManager.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'writerfilter/source/dmapper/DomainMapperTableManager.cxx')
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableManager.cxx61
1 files changed, 57 insertions, 4 deletions
diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.cxx b/writerfilter/source/dmapper/DomainMapperTableManager.cxx
index 59ce1eac2d84..6362969ecdb7 100644
--- a/writerfilter/source/dmapper/DomainMapperTableManager.cxx
+++ b/writerfilter/source/dmapper/DomainMapperTableManager.cxx
@@ -50,6 +50,8 @@ DomainMapperTableManager::DomainMapperTableManager(bool bOOXML) :
m_nHeaderRepeat(0),
m_nTableWidth(0),
m_bOOXML( bOOXML ),
+ m_aTmpPosition(),
+ m_aTmpTableProperties(),
m_bPushCurrentWidth(false),
m_nLayoutType(0),
m_nMaxFixedWidth(0),
@@ -386,14 +388,14 @@ bool DomainMapperTableManager::sprm(Sprm & rSprm)
writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
if (pProperties.get())
{
- TablePositionHandlerPtr pHandler = m_aTablePositions.back();
+ TablePositionHandlerPtr pHandler = m_aTmpPosition.back();
if ( !pHandler )
{
- m_aTablePositions.pop_back();
+ m_aTmpPosition.pop_back();
pHandler.reset( new TablePositionHandler );
- m_aTablePositions.push_back( pHandler );
+ m_aTmpPosition.push_back( pHandler );
}
- pProperties->resolve(*pHandler);
+ pProperties->resolve(*m_aTmpPosition.back());
}
}
break;
@@ -457,6 +459,11 @@ void DomainMapperTableManager::startLevel( )
m_aGridSpans.push_back( pNewSpans );
m_aCellWidths.push_back( pNewCellWidths );
m_aTablePositions.push_back( pNewPositionHandler );
+
+ TablePositionHandlerPtr pTmpPosition;
+ TablePropertyMapPtr pTmpProperties( new TablePropertyMap( ) );
+ m_aTmpPosition.push_back( pTmpPosition );
+ m_aTmpTableProperties.push_back( pTmpProperties );
m_nCell.push_back( 0 );
m_nTableWidth = 0;
m_nLayoutType = 0;
@@ -475,6 +482,8 @@ void DomainMapperTableManager::endLevel( )
m_nTableWidth = 0;
m_nLayoutType = 0;
+ m_aTmpPosition.pop_back( );
+ m_aTmpTableProperties.pop_back( );
DomainMapperTableManager_Base_t::endLevel( );
#ifdef DEBUG_DOMAINMAPPER
@@ -511,6 +520,42 @@ void DomainMapperTableManager::endOfRowAction()
dmapper_logger->startElement("endOfRowAction");
#endif
+ // Compare the table position with the previous ones. We may need to split
+ // into two tables if those are different. We surely don't want to do anything
+ // if we don't have any row yet.
+ TablePositionHandlerPtr pTmpPosition = m_aTmpPosition.back();
+ TablePropertyMapPtr pTmpTableProperties = m_aTmpTableProperties.back( );
+ TablePositionHandlerPtr pCurrentPosition = m_aTablePositions.back();
+ bool bSamePosition = ( pTmpPosition == pCurrentPosition ) ||
+ ( pTmpPosition && pCurrentPosition && *pTmpPosition == *pCurrentPosition );
+ if ( !bSamePosition && m_nRow > 0 )
+ {
+ // Save the grid infos to have them survive the end/start level
+ IntVectorPtr pTmpTableGrid = m_aTableGrid.back();
+ IntVectorPtr pTmpGridSpans = m_aGridSpans.back();
+ IntVectorPtr pTmpCellWidths = m_aCellWidths.back();
+
+ // endLevel and startLevel are taking care of the non finished row
+ // to carry it over to the next table
+ setKeepUnfinishedRow( true );
+ endLevel();
+ setKeepUnfinishedRow( false );
+ startLevel();
+
+ m_aTableGrid.pop_back();
+ m_aGridSpans.pop_back();
+ m_aCellWidths.pop_back();
+ m_aTableGrid.push_back(pTmpTableGrid);
+ m_aGridSpans.push_back(pTmpGridSpans);
+ m_aCellWidths.push_back(pTmpCellWidths);
+ }
+
+ // Push the tmp position now that we compared it
+ m_aTablePositions.pop_back();
+ m_aTablePositions.push_back( pTmpPosition );
+ m_aTmpPosition.back().reset( );
+
+
IntVectorPtr pTableGrid = getCurrentGrid( );
IntVectorPtr pCellWidths = getCurrentCellWidths( );
if(!m_nTableWidth && pTableGrid->size())
@@ -645,9 +690,17 @@ void DomainMapperTableManager::endOfRowAction()
insertRowProps(pPropMap);
}
+ // Now that potentially opened table is closed, save the table properties
+ DomainMapperTableManager_Base_t::insertTableProps( pTmpTableProperties );
+
+ m_aTmpTableProperties.pop_back();
+ TablePropertyMapPtr pEmptyTableProps( new TablePropertyMap() );
+ m_aTmpTableProperties.push_back( pEmptyTableProps );
+
++m_nRow;
m_nCell.back( ) = 0;
m_nCellBorderIndex = 0;
+ getCurrentGrid()->clear();
pCurrentSpans->clear();
pCellWidths->clear();