summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre-Eric Pelloux-Prayer <pierre-eric@lanedo.com>2012-09-20 11:49:29 +0200
committerMiklos Vajna <vmiklos@suse.cz>2012-09-28 15:40:10 +0200
commitd5529ab1e4d2c26c7e609251e2ef2530ab56be73 (patch)
tree9d4f7e4d3b318d3458a72b953b131718f1e5e8dc
parentcefa651967578a6b56ad017272bf62d600b213e2 (diff)
docx import: position table using tblInd OR tblCellMar
Previously cell-margin was unconditionnaly used to compute table position. Office only does so on top-level tables and if tblInd is missing. Change-Id: I183647bcf090d5822b3f2e04e097c8bbd277168d
-rw-r--r--writerfilter/inc/resourcemodel/TableManager.hxx4
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableHandler.cxx24
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableHandler.hxx2
-rw-r--r--writerfilter/source/doctok/WW8ResourceModelImpl.cxx4
-rw-r--r--writerfilter/source/resourcemodel/resourcemodel.cxx4
5 files changed, 29 insertions, 9 deletions
diff --git a/writerfilter/inc/resourcemodel/TableManager.hxx b/writerfilter/inc/resourcemodel/TableManager.hxx
index 5e2af023b606..651cf40d796c 100644
--- a/writerfilter/inc/resourcemodel/TableManager.hxx
+++ b/writerfilter/inc/resourcemodel/TableManager.hxx
@@ -71,7 +71,7 @@ public:
/**
Handle end of table.
*/
- virtual void endTable() = 0;
+ virtual void endTable(unsigned int nestedTableLevel) = 0;
/**
Handle start of row.
@@ -1003,7 +1003,7 @@ void TableManager<T, PropertiesPointer>::resolveCurrentTable()
mpTableDataHandler->endRow();
}
- mpTableDataHandler->endTable();
+ mpTableDataHandler->endTable(mTableDataStack.size() - 1);
}
catch (uno::Exception const& e)
{
diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
index 1e65802387f9..91d652d3b3e4 100644
--- a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
+++ b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
@@ -272,6 +272,7 @@ struct WRITERFILTER_DLLPRIVATE TableInfo
sal_Int32 nRightBorderDistance;
sal_Int32 nTopBorderDistance;
sal_Int32 nBottomBorderDistance;
+ sal_Int32 nNestLevel;
PropertyMapPtr pTableDefaults;
PropertyMapPtr pTableBorders;
TableStyleSheetEntry* pTableStyle;
@@ -282,6 +283,7 @@ struct WRITERFILTER_DLLPRIVATE TableInfo
, nRightBorderDistance(DEF_BORDER_DIST)
, nTopBorderDistance(0)
, nBottomBorderDistance(0)
+ , nNestLevel(0)
, pTableDefaults(new PropertyMap)
, pTableBorders(new PropertyMap)
, pTableStyle(NULL)
@@ -443,7 +445,24 @@ TableStyleSheetEntry * DomainMapperTableHandler::endTableGetTableStyle(TableInfo
lcl_debug_TableBorder(aTableBorder);
#endif
- m_aTableProperties->Insert( PROP_LEFT_MARGIN, false, uno::makeAny( nLeftMargin - nGapHalf - rInfo.nLeftBorderDistance));
+ // Mimic Office behavior : if tlbInd is defined, use it place table.
+ // Otherwise, top-level table's position depends w:tblCellMar attribute (but not nested tables)
+ if (nLeftMargin)
+ {
+ m_aTableProperties->Insert( PROP_LEFT_MARGIN, false, uno::makeAny( nLeftMargin - nGapHalf));
+ }
+ else
+ {
+ // TODO: top-level position depends on w:tblCellMar attribute, not w:cellMar
+ if (rInfo.nNestLevel > 1)
+ {
+ m_aTableProperties->Insert( PROP_LEFT_MARGIN, false, uno::makeAny( - nGapHalf));
+ }
+ else
+ {
+ m_aTableProperties->Insert( PROP_LEFT_MARGIN, false, uno::makeAny( - nGapHalf - rInfo.nLeftBorderDistance));
+ }
+ }
m_aTableProperties->getValue( TablePropertyMap::TABLE_WIDTH, nTableWidth );
if( nTableWidth > 0 )
@@ -682,13 +701,14 @@ RowPropertyValuesSeq_t DomainMapperTableHandler::endTableGetRowProperties()
return aRowProperties;
}
-void DomainMapperTableHandler::endTable()
+void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel)
{
#ifdef DEBUG_DMAPPER_TABLE_HANDLER
dmapper_logger->startElement("tablehandler.endTable");
#endif
TableInfo aTableInfo;
+ aTableInfo.nNestLevel = nestedTableLevel;
aTableInfo.pTableStyle = endTableGetTableStyle(aTableInfo);
// expands to uno::Sequence< Sequence< beans::PropertyValues > >
diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.hxx b/writerfilter/source/dmapper/DomainMapperTableHandler.hxx
index e4e770cfd1d1..689ceee030dd 100644
--- a/writerfilter/source/dmapper/DomainMapperTableHandler.hxx
+++ b/writerfilter/source/dmapper/DomainMapperTableHandler.hxx
@@ -87,7 +87,7 @@ public:
virtual void startTable(unsigned int nRows, unsigned int nDepth,
TablePropertyMapPtr pProps);
- virtual void endTable();
+ virtual void endTable(unsigned int nestedTableLevel);
virtual void startRow(unsigned int nCells, TablePropertyMapPtr pProps);
virtual void endRow();
virtual void startCell(const Handle_t & start, TablePropertyMapPtr pProps);
diff --git a/writerfilter/source/doctok/WW8ResourceModelImpl.cxx b/writerfilter/source/doctok/WW8ResourceModelImpl.cxx
index 60eff4586c2e..1ecb25839bae 100644
--- a/writerfilter/source/doctok/WW8ResourceModelImpl.cxx
+++ b/writerfilter/source/doctok/WW8ResourceModelImpl.cxx
@@ -53,7 +53,7 @@ public:
typedef boost::shared_ptr<WW8TableDataHandler> Pointer_t;
virtual void startTable(unsigned int nRows, unsigned int nDepth,
TablePropsPointer_t pProps);
- virtual void endTable();
+ virtual void endTable(unsigned int nestedTableLevel);
virtual void startRow(unsigned int nCols,
TablePropsPointer_t pProps);
virtual void endRow();
@@ -77,7 +77,7 @@ void WW8TableDataHandler::startTable(unsigned int nRows, unsigned int nDepth,
output.addItem(tmpStr);
}
-void WW8TableDataHandler::endTable()
+void WW8TableDataHandler::endTable(unsigned int /*nestedTableLevel*/)
{
output.addItem("</tabledata.table>");
}
diff --git a/writerfilter/source/resourcemodel/resourcemodel.cxx b/writerfilter/source/resourcemodel/resourcemodel.cxx
index 017fa667d8bf..d0594b13a888 100644
--- a/writerfilter/source/resourcemodel/resourcemodel.cxx
+++ b/writerfilter/source/resourcemodel/resourcemodel.cxx
@@ -110,7 +110,7 @@ public:
typedef boost::shared_ptr<WW8TableDataHandler> Pointer_t;
virtual void startTable(unsigned int nRows, unsigned int nDepth,
TablePropsRef_t pProps);
- virtual void endTable();
+ virtual void endTable(unsigned int nestedTableLevel);
virtual void startRow(unsigned int nCols,
TablePropsRef_t pProps);
virtual void endRow();
@@ -134,7 +134,7 @@ void WW8TableDataHandler::startTable(unsigned int nRows, unsigned int nDepth,
output.addItem(tmpStr);
}
-void WW8TableDataHandler::endTable()
+void WW8TableDataHandler::endTable(unsigned int /*nestedTableLevel*/)
{
output.addItem("</tabledata.table>");
}