diff options
author | Miklos Vajna <vmiklos@suse.cz> | 2013-04-02 11:40:11 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@suse.cz> | 2013-04-02 12:02:24 +0200 |
commit | c433a482cf249485e7fa3e71362b107f0eafa705 (patch) | |
tree | 5c9aad9f4bdd1461bec73610b070b167dfc81648 | |
parent | f0d001a378c64ea457e722266e60c96522c72e9b (diff) |
fdo#59273 DOCX import: fix table width when w:tblW is missing
Regression from 6718482c072defe5d885030826fef5ef833732e9, put back the
table width counting in DomainMapperTableManager::endOfRowAction(), in
case the document has no explicit w:tblW token.
Change-Id: I8bd983045e1950451c9afb4f15f1deb87312524e
-rw-r--r-- | sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 5 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapperTableManager.cxx | 10 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapperTableManager.hxx | 7 |
3 files changed, 21 insertions, 1 deletions
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx index f7662ffd3f94..7c4051c1d847 100644 --- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx +++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx @@ -1297,9 +1297,12 @@ void Test::testFdo59273() uno::Reference<text::XTextTablesSupplier> xTablesSupplier(mxComponent, uno::UNO_QUERY); uno::Reference<container::XIndexAccess> xTables(xTablesSupplier->getTextTables( ), uno::UNO_QUERY); uno::Reference<text::XTextTable> xTextTable(xTables->getByIndex(0), uno::UNO_QUERY); + // Was 115596 (i.e. 10 times wider than necessary), as w:tblW was missing and the importer didn't set it. + CPPUNIT_ASSERT_EQUAL(sal_Int32(12961), getProperty<sal_Int32>(xTextTable, "Width")); + uno::Reference<table::XTableRows> xTableRows(xTextTable->getRows(), uno::UNO_QUERY); // Was 9997, so the 4th column had ~zero width - CPPUNIT_ASSERT_EQUAL(sal_Int16(7499), getProperty< uno::Sequence<text::TableColumnSeparator> >(xTableRows->getByIndex(0), "TableColumnSeparators")[2].Position); + CPPUNIT_ASSERT_EQUAL(sal_Int16(7498), getProperty< uno::Sequence<text::TableColumnSeparator> >(xTableRows->getByIndex(0), "TableColumnSeparators")[2].Position); } void Test::testTableWidth() diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.cxx b/writerfilter/source/dmapper/DomainMapperTableManager.cxx index af64ffe6eee7..cb96046c0ef4 100644 --- a/writerfilter/source/dmapper/DomainMapperTableManager.cxx +++ b/writerfilter/source/dmapper/DomainMapperTableManager.cxx @@ -53,6 +53,7 @@ DomainMapperTableManager::DomainMapperTableManager(bool bOOXML) : m_bOOXML( bOOXML ), m_bPushCurrentWidth(false), m_bRowSizeTypeInserted(false), + m_bTableSizeTypeInserted(false), m_nLayoutType(0), m_pTablePropsHandler( new TablePropertiesHandler( bOOXML ) ) { @@ -132,6 +133,7 @@ bool DomainMapperTableManager::sprm(Sprm & rSprm) pPropMap->setValue( TablePropertyMap::TABLE_WIDTH_TYPE, text::SizeType::VARIABLE ); pPropMap->setValue( TablePropertyMap::TABLE_WIDTH, 100 ); } + m_bTableSizeTypeInserted = true; } #ifdef DEBUG_DOMAINMAPPER pPropMap->dumpXml( dmapper_logger ); @@ -493,6 +495,13 @@ void DomainMapperTableManager::endOfRowAction() m_nTableWidth += *aCellIter++; } + if (m_nTableWidth > 0 && !m_bTableSizeTypeInserted) + { + TablePropertyMapPtr pPropMap( new TablePropertyMap ); + pPropMap->setValue( TablePropertyMap::TABLE_WIDTH, m_nTableWidth ); + insertTableProps(pPropMap); + } + #ifdef DEBUG_DOMAINMAPPER dmapper_logger->endElement(); #endif @@ -610,6 +619,7 @@ void DomainMapperTableManager::endOfRowAction() m_nGridBefore = m_nGridAfter = 0; m_bRowSizeTypeInserted = false; + m_bTableSizeTypeInserted = false; #ifdef DEBUG_DOMAINMAPPER dmapper_logger->endElement(); diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.hxx b/writerfilter/source/dmapper/DomainMapperTableManager.hxx index e2fb5f66ac32..d529d5531404 100644 --- a/writerfilter/source/dmapper/DomainMapperTableManager.hxx +++ b/writerfilter/source/dmapper/DomainMapperTableManager.hxx @@ -56,6 +56,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; + /// 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. sal_uInt32 m_nLayoutType; @@ -128,6 +130,11 @@ public: return m_bRowSizeTypeInserted; } + bool IsTableSizeTypeInserted() const + { + return m_bTableSizeTypeInserted; + } + void SetLayoutType(sal_uInt32 nLayoutType) { m_nLayoutType = nLayoutType; |