summaryrefslogtreecommitdiff
path: root/writerfilter/source
diff options
context:
space:
mode:
authorVasily Melenchuk <vasily.melenchuk@cib.de>2020-04-17 12:58:59 +0300
committerAndras Timar <andras.timar@collabora.com>2020-05-06 22:26:59 +0200
commitc53e212accd8b95ede9a707f44cf88bfbf1ea922 (patch)
tree4ba0723429e818fe02e9bbd47378990e6aecbea5 /writerfilter/source
parentd93ad67b43e4c7e6e60cc142bc3733f742c81bda (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.cxx10
-rw-r--r--writerfilter/source/dmapper/NumberingManager.cxx8
-rw-r--r--writerfilter/source/dmapper/NumberingManager.hxx4
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;