diff options
author | Vasily Melenchuk <vasily.melenchuk@cib.de> | 2020-04-17 12:58:59 +0300 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2020-05-06 22:26:59 +0200 |
commit | c53e212accd8b95ede9a707f44cf88bfbf1ea922 (patch) | |
tree | 4ba0723429e818fe02e9bbd47378990e6aecbea5 /writerfilter/source | |
parent | d93ad67b43e4c7e6e60cc142bc3733f742c81bda (diff) |
tdf#108496: DOCX: redesign of override in lists
List level overrides are not just about numbering,
it is about numbering restart. Thus some changes to DOCX
import/export were added.
Improved support for several lists referring the same
abstract list, especially in situation when one list
have overrides.
In addition some export cleanup is made: less unnecessary
list duplications, less level overrides when no properties
were changed.
Change-Id: Ic7a69bc2e3080b39f5205cb90b46d14247abf305
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/92412
Tested-by: Jenkins
Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Change-Id: I35937449bd563eacceb3753e62b9ff7245f12b89
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/92739
Tested-by: Jenkins
Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93455
Diffstat (limited to 'writerfilter/source')
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 10 | ||||
-rw-r--r-- | writerfilter/source/dmapper/NumberingManager.cxx | 8 | ||||
-rw-r--r-- | writerfilter/source/dmapper/NumberingManager.hxx | 4 |
3 files changed, 18 insertions, 4 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index b04c69d27030..215234f55e89 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -1674,6 +1674,16 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con m_xPreviousParagraph->setPropertyValue("ListId", uno::makeAny(listId)); } } + if (pList->GetCurrentLevel()) + { + sal_Int16 nOverrideLevel = pList->GetCurrentLevel()->GetStartOverride(); + if (nOverrideLevel != -1) + { + // Restart list, it is overriden + m_xPreviousParagraph->setPropertyValue("ParaIsNumberingRestart", uno::makeAny(true)); + m_xPreviousParagraph->setPropertyValue("NumberingStartValue", uno::makeAny(nOverrideLevel)); + } + } } } diff --git a/writerfilter/source/dmapper/NumberingManager.cxx b/writerfilter/source/dmapper/NumberingManager.cxx index 62ca40c99e1a..32dead60a100 100644 --- a/writerfilter/source/dmapper/NumberingManager.cxx +++ b/writerfilter/source/dmapper/NumberingManager.cxx @@ -101,6 +101,9 @@ void ListLevel::SetValue( Id nId, sal_Int32 nValue ) case NS_ooxml::LN_CT_Lvl_start: m_nIStartAt = nValue; break; + case NS_ooxml::LN_CT_NumLvl_startOverride: + m_nStartOverride = nValue; + break; case NS_ooxml::LN_CT_Lvl_numFmt: m_nNFC = nValue; break; @@ -623,7 +626,6 @@ void ListDef::CreateNumberingRules( DomainMapper& rDMapper, aLvlProps.push_back(comphelper::makePropertyValue(getPropertyName(PROP_POSITION_AND_SPACE_MODE), sal_Int16(text::PositionAndSpaceMode::LABEL_ALIGNMENT))); - // Replace the numbering rules for the level m_xNumRules->replaceByIndex(nLevel, uno::makeAny(comphelper::containerToSequence(aLvlProps))); @@ -1076,9 +1078,7 @@ void ListsManager::lcl_sprm( Sprm& rSprm ) { if (ListLevel::Pointer pCurrentLevel = m_pCurrentDefinition->GetCurrentLevel()) { - // <w:num> -> <w:lvlOverride> -> <w:startOverride> is the non-abstract equivalent of - // <w:abstractNum> -> <w:lvl> -> <w:start> - pCurrentLevel->SetValue(NS_ooxml::LN_CT_Lvl_start, nIntValue); + pCurrentLevel->SetValue(NS_ooxml::LN_CT_NumLvl_startOverride, nIntValue); } } } diff --git a/writerfilter/source/dmapper/NumberingManager.hxx b/writerfilter/source/dmapper/NumberingManager.hxx index 4b2083922420..c0e68d9327a5 100644 --- a/writerfilter/source/dmapper/NumberingManager.hxx +++ b/writerfilter/source/dmapper/NumberingManager.hxx @@ -43,6 +43,7 @@ class StyleSheetEntry; class ListLevel : public PropertyMap { sal_Int32 m_nIStartAt; //LN_CT_Lvl_start + sal_Int32 m_nStartOverride; sal_Int32 m_nNFC; //LN_CT_Lvl_numFmt sal_Int16 m_nXChFollow; //LN_IXCHFOLLOW OUString m_sBulletChar; @@ -59,6 +60,7 @@ public: ListLevel() : m_nIStartAt(-1) + ,m_nStartOverride(-1) ,m_nNFC(-1) ,m_nXChFollow(SvxNumberFormat::LISTTAB) ,m_nTabstop( 0 ) @@ -77,7 +79,9 @@ public: // Getters const OUString& GetBulletChar( ) const { return m_sBulletChar; }; const tools::SvRef< StyleSheetEntry >& GetParaStyle( ) const { return m_pParaStyle; }; + sal_Int32 GetStartAt() const { return m_nIStartAt; }; bool isOutlineNumbering() const { return m_outline; } + sal_Int32 GetStartOverride() const { return m_nStartOverride; }; /// Determines if SetValue() was called at least once. bool HasValues() const; |