diff options
-rw-r--r-- | sw/inc/SwNumberTree.hxx | 14 | ||||
-rw-r--r-- | sw/inc/doc.hxx | 2 | ||||
-rw-r--r-- | sw/inc/list.hxx | 2 | ||||
-rw-r--r-- | sw/source/core/doc/list.cxx | 19 | ||||
-rw-r--r-- | sw/source/core/doc/poolfmt.cxx | 9 | ||||
-rw-r--r-- | sw/source/filter/writer/writer.cxx | 10 | ||||
-rw-r--r-- | sw/source/filter/ww8/rtfexport.cxx | 2 | ||||
-rw-r--r-- | sw/source/filter/ww8/wrtw8num.cxx | 4 | ||||
-rw-r--r-- | sw/source/uibase/app/docstyle.cxx | 6 |
9 files changed, 52 insertions, 16 deletions
diff --git a/sw/inc/SwNumberTree.hxx b/sw/inc/SwNumberTree.hxx index ad3ffe845110..e3d93a27766f 100644 --- a/sw/inc/SwNumberTree.hxx +++ b/sw/inc/SwNumberTree.hxx @@ -334,6 +334,13 @@ public: void IsSane(bool bRecursive) const; #endif // DBG_UTIL + /** + Returns how many children this node has got. + + @return number of children + */ + tSwNumberTreeChildren::size_type GetChildCount() const; + protected: /** the children */ tSwNumberTreeChildren mChildren; @@ -355,13 +362,6 @@ protected: */ virtual bool IsNotificationEnabled() const = 0; - /** - Returns how many children this node has got. - - @return number of children - */ - tSwNumberTreeChildren::size_type GetChildCount() const; - // #i64010# - made pure virtual virtual bool HasCountedChildren() const = 0; diff --git a/sw/inc/doc.hxx b/sw/inc/doc.hxx index b80e1157a7c9..83651fc8fcb2 100644 --- a/sw/inc/doc.hxx +++ b/sw/inc/doc.hxx @@ -851,7 +851,7 @@ public: bool IsUsed( const SwModify& ) const; /// Query if table style is used. bool IsUsed( const SwTableAutoFormat& ) const; - static bool IsUsed( const SwNumRule& ); + bool IsUsed( const SwNumRule& ); // Set name of newly loaded document template. size_t SetDocPattern(const OUString& rPatternName); diff --git a/sw/inc/list.hxx b/sw/inc/list.hxx index d8b3e16943ea..64d62faa9c93 100644 --- a/sw/inc/list.hxx +++ b/sw/inc/list.hxx @@ -58,6 +58,8 @@ class SwList bool IsListLevelMarked( const int nListLevel ) const; + bool HasNodes() const; + private: SwList( const SwList& ) = delete; SwList& operator=( const SwList& ) = delete; diff --git a/sw/source/core/doc/list.cxx b/sw/source/core/doc/list.cxx index c81eef636ff1..3651e706f4b7 100644 --- a/sw/source/core/doc/list.cxx +++ b/sw/source/core/doc/list.cxx @@ -39,6 +39,8 @@ class SwListImpl const OUString& GetDefaultListStyleName() const { return msDefaultListStyleName;} + bool HasNodes() const; + void InsertListItem( SwNodeNum& rNodeNum, bool isHiddenRedlines, const int nLevel ); static void RemoveListItem( SwNodeNum& rNodeNum ); @@ -122,6 +124,18 @@ SwListImpl::~SwListImpl() COVERITY_NOEXCEPT_FALSE } } +bool SwListImpl::HasNodes() const +{ + for (auto const& rNumberTree : maListTrees) + { + if (rNumberTree.pRoot->GetChildCount() != 0) + { + return true; + } + } + return false; +} + void SwListImpl::InsertListItem( SwNodeNum& rNodeNum, bool const isHiddenRedlines, const int nLevel ) { @@ -225,6 +239,11 @@ SwList::~SwList() { } +bool SwList::HasNodes() const +{ + return mpListImpl->HasNodes(); +} + const OUString & SwList::GetListId() const { return mpListImpl->GetListId(); diff --git a/sw/source/core/doc/poolfmt.cxx b/sw/source/core/doc/poolfmt.cxx index be521cfdccd7..b32dcab95c1c 100644 --- a/sw/source/core/doc/poolfmt.cxx +++ b/sw/source/core/doc/poolfmt.cxx @@ -25,6 +25,8 @@ #include <doc.hxx> #include <IDocumentState.hxx> #include <IDocumentStylePoolAccess.hxx> +#include <IDocumentListsAccess.hxx> +#include <list.hxx> #include <poolfmt.hxx> #include <pagedesc.hxx> #include <fmtcol.hxx> @@ -106,9 +108,14 @@ bool SwDoc::IsUsed( const SwTableAutoFormat& rTableAutoFormat) const // See if the NumRule is used bool SwDoc::IsUsed( const SwNumRule& rRule ) { + SwList const*const pList(getIDocumentListsAccess().getListByName(rRule.GetDefaultListId())); bool bUsed = rRule.GetTextNodeListSize() > 0 || rRule.GetParagraphStyleListSize() > 0 || - rRule.IsUsedByRedline(); + rRule.IsUsedByRedline() + // tdf#135014 default num rule is used if any associated num rule is used + || (pList + && pList->GetDefaultListStyleName() == rRule.GetName() + && pList->HasNodes()); return bUsed; } diff --git a/sw/source/filter/writer/writer.cxx b/sw/source/filter/writer/writer.cxx index fa56eb08f519..cd59f2f445e5 100644 --- a/sw/source/filter/writer/writer.cxx +++ b/sw/source/filter/writer/writer.cxx @@ -359,15 +359,18 @@ void Writer::PutNumFormatFontsInAttrPool() // it can be removed - it is already in the Pool SfxItemPool& rPool = m_pDoc->GetAttrPool(); const SwNumRuleTable& rListTable = m_pDoc->GetNumRuleTable(); - const SwNumRule* pRule; const SwNumFormat* pFormat; const vcl::Font* pFont; const vcl::Font* pDefFont = &numfunc::GetDefBulletFont(); bool bCheck = false; for( size_t nGet = rListTable.size(); nGet; ) - if( SwDoc::IsUsed( *(pRule = rListTable[ --nGet ] ))) + { + SwNumRule const*const pRule = rListTable[ --nGet ]; + if (m_pDoc->IsUsed(*pRule)) + { for( sal_uInt8 nLvl = 0; nLvl < MAXLEVEL; ++nLvl ) + { if( SVX_NUM_CHAR_SPECIAL == (pFormat = &pRule->Get( nLvl ))->GetNumberingType() || SVX_NUM_BITMAP == pFormat->GetNumberingType() ) { @@ -386,6 +389,9 @@ void Writer::PutNumFormatFontsInAttrPool() pFont->GetFamilyName(), pFont->GetStyleName(), pFont->GetPitch(), pFont->GetCharSet(), RES_CHRATR_FONT )); } + } + } + } } void Writer::PutEditEngFontsInAttrPool() diff --git a/sw/source/filter/ww8/rtfexport.cxx b/sw/source/filter/ww8/rtfexport.cxx index 366cc18b3b0c..3072798aed37 100644 --- a/sw/source/filter/ww8/rtfexport.cxx +++ b/sw/source/filter/ww8/rtfexport.cxx @@ -214,7 +214,7 @@ void RtfExport::BuildNumbering() for (auto n = rListTable.size(); n;) { SwNumRule* pRule = rListTable[--n]; - if (!SwDoc::IsUsed(*pRule)) + if (!m_pDoc->IsUsed(*pRule)) continue; if (IsExportNumRule(*pRule)) diff --git a/sw/source/filter/ww8/wrtw8num.cxx b/sw/source/filter/ww8/wrtw8num.cxx index 088f5d445996..d0514482e5e1 100644 --- a/sw/source/filter/ww8/wrtw8num.cxx +++ b/sw/source/filter/ww8/wrtw8num.cxx @@ -96,6 +96,8 @@ sal_uInt16 MSWordExportBase::OverrideNumRule( const sal_uInt16 absnumdef = rListId == rAbstractRule.GetDefaultListId() ? GetNumberingId(rAbstractRule) : DuplicateAbsNum(rListId, rAbstractRule); + assert(numdef != USHRT_MAX); + assert(absnumdef != USHRT_MAX); auto const mapping = std::make_pair(numdef, absnumdef); auto it = m_OverridingNums.insert(std::make_pair(m_pUsedNumTable->size(), mapping)); @@ -125,7 +127,7 @@ sal_uInt16 MSWordExportBase::GetNumberingId( const SwNumRule& rNumRule ) for ( sal_uInt16 n = m_pUsedNumTable->size(); n; ) { const SwNumRule& rRule = *(*m_pUsedNumTable)[ --n ]; - if ( !SwDoc::IsUsed( rRule ) ) + if (!m_pDoc->IsUsed(rRule)) { m_pUsedNumTable->erase( m_pUsedNumTable->begin() + n ); } diff --git a/sw/source/uibase/app/docstyle.cxx b/sw/source/uibase/app/docstyle.cxx index 4326445cd8ec..d1a08912ae56 100644 --- a/sw/source/uibase/app/docstyle.cxx +++ b/sw/source/uibase/app/docstyle.cxx @@ -2247,7 +2247,7 @@ bool SwDocStyleSheet::IsUsed() const case SfxStyleFamily::Page : pMod = pDesc; break; case SfxStyleFamily::Pseudo: - return pNumRule && SwDoc::IsUsed( *pNumRule ); + return pNumRule && rDoc.IsUsed(*pNumRule); case SfxStyleFamily::Table: return pTableFormat && rDoc.IsUsed( *pTableFormat ); @@ -3014,7 +3014,7 @@ SfxStyleSheetBase* SwStyleSheetIterator::First() if ( nSrchMask == SfxStyleSearchBits::Hidden && !rRule.IsHidden( ) ) continue; - bool bUsed = bIsSearchUsed && ( bOrganizer || SwDoc::IsUsed(rRule) ); + bool bUsed = bIsSearchUsed && (bOrganizer || rDoc.IsUsed(rRule)); if( !bUsed ) { if( ( !bSearchHidden && rRule.IsHidden() ) || @@ -3176,7 +3176,7 @@ void SwStyleSheetIterator::AppendStyleList(const std::vector<OUString>& rList, case SwGetPoolIdFromName::NumRule: { SwNumRule* pRule = rDoc.FindNumRulePtr( i ); - bUsed = pRule && SwDoc::IsUsed( *pRule ); + bUsed = pRule && rDoc.IsUsed(*pRule); bHidden = pRule && pRule->IsHidden( ); } break; |