diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-08-06 15:12:42 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-08-06 15:20:47 +0200 |
commit | 3c01c88adc359102cb45f46e848bdb1ae652f573 (patch) | |
tree | bfff0f3dee08ac2e03bdf5c5965bff4eaf9b3405 | |
parent | 3067d228cd0db321868d766c917089540d02678d (diff) |
DOCX import: handle <w:cnfStyle> row property
Change-Id: I178cb5591c95cc5587ac56662abf808bfca7a336
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper.cxx | 12 | ||||
-rw-r--r-- | writerfilter/source/dmapper/PropertyIds.cxx | 1 | ||||
-rw-r--r-- | writerfilter/source/dmapper/PropertyIds.hxx | 1 | ||||
-rw-r--r-- | writerfilter/source/dmapper/PropertyMap.cxx | 22 | ||||
-rw-r--r-- | writerfilter/source/dmapper/PropertyMap.hxx | 1 |
5 files changed, 36 insertions, 1 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 7864dd9acdd0..40c3afae8e9d 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -2504,6 +2504,18 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext ) } } break; + case NS_ooxml::LN_CT_TrPrBase_cnfStyle: + { + m_pImpl->enableInteropGrabBag("cnfStyle"); + resourcemodel::resolveSprmProps(*this, rSprm); + + TablePropertyMapPtr pPropMap(new TablePropertyMap()); + pPropMap->Insert(PROP_ROW_CNF_STYLE, uno::makeAny(uno::makeAny(m_pImpl->m_aInteropGrabBag.getAsConstList())), true, ROW_GRAB_BAG); + m_pImpl->getTableManager().insertRowProps(pPropMap); + + m_pImpl->disableInteropGrabBag(); + } + break; case NS_ooxml::LN_CT_TcPrBase_cnfStyle: { m_pImpl->enableInteropGrabBag("cnfStyle"); diff --git a/writerfilter/source/dmapper/PropertyIds.cxx b/writerfilter/source/dmapper/PropertyIds.cxx index c12e97a64370..e95eaec896a9 100644 --- a/writerfilter/source/dmapper/PropertyIds.cxx +++ b/writerfilter/source/dmapper/PropertyIds.cxx @@ -398,6 +398,7 @@ OUString PropertyNameSupplier::GetName( PropertyIds eId ) const case META_PROP_TABLE_LOOK: sName = "TableStyleLook"; break; case PROP_PARA_CNF_STYLE: sName = "ParaCnfStyle"; break; case PROP_CELL_CNF_STYLE: sName = "CellCnfStyle"; break; + case PROP_ROW_CNF_STYLE: sName = "RowCnfStyle"; break; } ::std::pair<PropertyNameMap_t::iterator,bool> aInsertIt = m_pImpl->aNameMap.insert( PropertyNameMap_t::value_type( eId, sName )); diff --git a/writerfilter/source/dmapper/PropertyIds.hxx b/writerfilter/source/dmapper/PropertyIds.hxx index 0ff6ee3ccab8..f9d65dae73b8 100644 --- a/writerfilter/source/dmapper/PropertyIds.hxx +++ b/writerfilter/source/dmapper/PropertyIds.hxx @@ -370,6 +370,7 @@ enum PropertyIds ,META_PROP_TABLE_LOOK ,PROP_PARA_CNF_STYLE ,PROP_CELL_CNF_STYLE + ,PROP_ROW_CNF_STYLE }; struct PropertyNameSupplier_Impl; class PropertyNameSupplier diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx index 62c5ba64dd09..e36dc1c0a825 100644 --- a/writerfilter/source/dmapper/PropertyMap.cxx +++ b/writerfilter/source/dmapper/PropertyMap.cxx @@ -68,6 +68,7 @@ uno::Sequence< beans::PropertyValue > PropertyMap::GetPropertyValues(bool bCharG size_t nParaGrabBag = 0; size_t nCellGrabBag = 0; size_t nCellGrabBagSaved = 0; // How many entries do we save from the returned sequence. + size_t nRowGrabBag = 0; for (MapIterator i = m_vMap.begin(); i != m_vMap.end(); ++i) { if ( i->second.getGrabBagType() == CHAR_GRAB_BAG ) @@ -86,6 +87,8 @@ uno::Sequence< beans::PropertyValue > PropertyMap::GetPropertyValues(bool bCharG nCellGrabBag += aSeq.getLength(); nCellGrabBagSaved++; } + else if ( i->second.getGrabBagType() == ROW_GRAB_BAG ) + nRowGrabBag++; } // In case there are properties to be grab-bagged and we can have a char grab-bag, allocate one slot for it. @@ -94,21 +97,26 @@ uno::Sequence< beans::PropertyValue > PropertyMap::GetPropertyValues(bool bCharG nCharGrabBagSize = nCharGrabBag ? 1 : 0; size_t nParaGrabBagSize = nParaGrabBag ? 1 : 0; size_t nCellGrabBagSize = nCellGrabBag ? 1 : 0; + size_t nRowGrabBagSize = nRowGrabBag ? 1 : 0; // If there are any grab bag properties, we need one slot for them. m_aValues.realloc( m_vMap.size() - nCharGrabBag + nCharGrabBagSize - nParaGrabBag + nParaGrabBagSize - - nCellGrabBagSaved + nCellGrabBagSize); + - nCellGrabBagSaved + nCellGrabBagSize + - nRowGrabBag + nRowGrabBagSize); ::com::sun::star::beans::PropertyValue* pValues = m_aValues.getArray(); uno::Sequence<beans::PropertyValue> aCharGrabBagValues(nCharGrabBag); uno::Sequence<beans::PropertyValue> aParaGrabBagValues(nParaGrabBag); uno::Sequence<beans::PropertyValue> aCellGrabBagValues(nCellGrabBag); + uno::Sequence<beans::PropertyValue> aRowGrabBagValues(nRowGrabBag); beans::PropertyValue* pCharGrabBagValues = aCharGrabBagValues.getArray(); beans::PropertyValue* pParaGrabBagValues = aParaGrabBagValues.getArray(); beans::PropertyValue* pCellGrabBagValues = aCellGrabBagValues.getArray(); + beans::PropertyValue* pRowGrabBagValues = aRowGrabBagValues.getArray(); //style names have to be the first elements within the property sequence //otherwise they will overwrite 'hard' attributes sal_Int32 nValue = 0; + sal_Int32 nRowGrabBagValue = 0; sal_Int32 nCellGrabBagValue = 0; sal_Int32 nParaGrabBagValue = 0; sal_Int32 nCharGrabBagValue = 0; @@ -161,6 +169,12 @@ uno::Sequence< beans::PropertyValue > PropertyMap::GetPropertyValues(bool bCharG pCellGrabBagValues[nCellGrabBagValue].Value = aMapIter->second.getValue(); ++nCellGrabBagValue; } + else if ( aMapIter->second.getGrabBagType() == ROW_GRAB_BAG ) + { + pRowGrabBagValues[nRowGrabBagValue].Name = rPropNameSupplier.GetName( aMapIter->first ); + pRowGrabBagValues[nRowGrabBagValue].Value = aMapIter->second.getValue(); + ++nRowGrabBagValue; + } else { if (aMapIter->first == PROP_CELL_INTEROP_GRAB_BAG) @@ -200,6 +214,12 @@ uno::Sequence< beans::PropertyValue > PropertyMap::GetPropertyValues(bool bCharG pValues[nValue].Value = uno::makeAny(aCellGrabBagValues); ++nValue; } + if (nRowGrabBag) + { + pValues[nValue].Name = "RowInteropGrabBag"; + pValues[nValue].Value = uno::makeAny(aRowGrabBagValues); + ++nValue; + } } return m_aValues; } diff --git a/writerfilter/source/dmapper/PropertyMap.hxx b/writerfilter/source/dmapper/PropertyMap.hxx index 53f306ec0c2b..4c1d2e241d81 100644 --- a/writerfilter/source/dmapper/PropertyMap.hxx +++ b/writerfilter/source/dmapper/PropertyMap.hxx @@ -68,6 +68,7 @@ enum BorderPosition enum GrabBagType { NO_GRAB_BAG, + ROW_GRAB_BAG, CELL_GRAB_BAG, PARA_GRAB_BAG, CHAR_GRAB_BAG |