sw/source/core/doc/doc.cxx |   39 +++++++++++++++++----------------------
 1 file changed, 17 insertions(+), 22 deletions(-)

New commits:
commit b248260bf88360ff3ca41bb3c0ab6ca5a74f42c4
Author:     Miklos Vajna <vmik...@collabora.com>
AuthorDate: Wed Sep 25 08:23:14 2024 +0200
Commit:     Miklos Vajna <vmik...@collabora.com>
CommitDate: Wed Sep 25 10:33:21 2024 +0200

    sw: extract SwDoc::ForEachCharacterItem() from Underline/ColorItems
    
    This is meant to avoid copy&paste while keeping the public interface
    template-free.
    
    Change-Id: I3bc27d35b135df1693737de6b0e02444a06e4cbf
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173890
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>

diff --git a/sw/source/core/doc/doc.cxx b/sw/source/core/doc/doc.cxx
index fe9a5be66c00..f32c3655b571 100644
--- a/sw/source/core/doc/doc.cxx
+++ b/sw/source/core/doc/doc.cxx
@@ -1433,46 +1433,41 @@ void SwDoc::ForEachCharacterBoxItem( const 
std::function<bool(const SvxBoxItem&)
     }
 }
 
-/// Iterate over all SvxColorItem, if the function returns false, iteration is 
stopped
-void SwDoc::ForEachCharacterColorItem( const std::function<bool(const 
SvxColorItem&)>& rFunc ) const
+namespace
 {
-    for(SwCharFormat* pFormat : *GetCharFormats())
+/// Iterate over all pool item of type T, if the function returns false, 
iteration is stopped
+template<typename T>
+void ForEachCharacterItem(const SwDoc* pDoc, TypedWhichId<T> nWhich, const 
std::function<bool(const T&)>& rFunc )
+{
+    for(SwCharFormat* pFormat : *pDoc->GetCharFormats())
     {
         const SwAttrSet& rAttrSet = pFormat->GetAttrSet();
-        if (const SvxColorItem* pColorItem = 
rAttrSet.GetItemIfSet(RES_CHRATR_COLOR))
+        if (const T* pColorItem = rAttrSet.GetItemIfSet(nWhich))
             if (!rFunc(*pColorItem))
                 return;
     }
     std::vector<std::shared_ptr<SfxItemSet>> aStyles;
     for (auto eFamily : { IStyleAccess::AUTO_STYLE_CHAR, 
IStyleAccess::AUTO_STYLE_RUBY, IStyleAccess::AUTO_STYLE_PARA, 
IStyleAccess::AUTO_STYLE_NOTXT })
     {
-        const_cast<SwDoc*>(this)->GetIStyleAccess().getAllStyles(aStyles, 
eFamily);
+        const_cast<SwDoc*>(pDoc)->GetIStyleAccess().getAllStyles(aStyles, 
eFamily);
         for (const auto & rxItemSet : aStyles)
-            if (const SvxColorItem* pColorItem = 
rxItemSet->GetItemIfSet(RES_CHRATR_COLOR))
+            if (const T* pColorItem = rxItemSet->GetItemIfSet(nWhich))
                 if (!rFunc(*pColorItem))
                     return;
     }
 }
+}
+
+/// Iterate over all SvxColorItem, if the function returns false, iteration is 
stopped
+void SwDoc::ForEachCharacterColorItem( const std::function<bool(const 
SvxColorItem&)>& rFunc ) const
+{
+    ForEachCharacterItem(this, RES_CHRATR_COLOR, rFunc);
+}
 
 /// Iterate over all SvxUnderlineItem, if the function returns false, 
iteration is stopped
 void SwDoc::ForEachCharacterUnderlineItem( const std::function<bool(const 
SvxUnderlineItem&)>& rFunc ) const
 {
-    for(SwCharFormat* pFormat : *GetCharFormats())
-    {
-        const SwAttrSet& rAttrSet = pFormat->GetAttrSet();
-        if (const SvxUnderlineItem* pItem = 
rAttrSet.GetItemIfSet(RES_CHRATR_UNDERLINE))
-            if (!rFunc(*pItem))
-                return;
-    }
-    std::vector<std::shared_ptr<SfxItemSet>> aStyles;
-    for (auto eFamily : { IStyleAccess::AUTO_STYLE_CHAR, 
IStyleAccess::AUTO_STYLE_RUBY, IStyleAccess::AUTO_STYLE_PARA, 
IStyleAccess::AUTO_STYLE_NOTXT })
-    {
-        const_cast<SwDoc*>(this)->GetIStyleAccess().getAllStyles(aStyles, 
eFamily);
-        for (const auto & rxItemSet : aStyles)
-            if (const SvxUnderlineItem* pItem = 
rxItemSet->GetItemIfSet(RES_CHRATR_UNDERLINE))
-                if (!rFunc(*pItem))
-                    return;
-    }
+    ForEachCharacterItem(this, RES_CHRATR_UNDERLINE, rFunc);
 }
 
 /// Iterate over all SvxBrushItem, if the function returns false, iteration is 
stopped

Reply via email to