summaryrefslogtreecommitdiff
path: root/writerfilter/source
diff options
context:
space:
mode:
authorCédric Bosdonnat <cedric.bosdonnat@free.fr>2013-02-21 10:27:31 +0100
committerCédric Bosdonnat <cedric.bosdonnat@free.fr>2013-02-21 11:00:42 +0100
commit9965b124b5631bb0e1bf5be394224251c72fe0e5 (patch)
tree68f6387924d18405b83c8afad65198423464ab9a /writerfilter/source
parentfca2522c576a386535067ed422a90a05ca648f63 (diff)
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
Diffstat (limited to 'writerfilter/source')
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableHandler.cxx2
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableManager.cxx26
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableManager.hxx5
3 files changed, 27 insertions, 6 deletions
diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
index 65a26f9b8c58..9c2d298d4037 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 43a82388ef59..a396d69fac35 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 34a8df596b2b..97866b0f8cc7 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);