Author: jghali
Date: Sat May 16 16:43:08 2020
New Revision: 23814

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=23814
Log:
PageItemIterator: more flexible options for selecting which items are iterated 
in a document

Modified:
    trunk/Scribus/scribus/pageitemiterator.cpp
    trunk/Scribus/scribus/pageitemiterator.h

Modified: trunk/Scribus/scribus/pageitemiterator.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23814&path=/trunk/Scribus/scribus/pageitemiterator.cpp
==============================================================================
--- trunk/Scribus/scribus/pageitemiterator.cpp  (original)
+++ trunk/Scribus/scribus/pageitemiterator.cpp  Sat May 16 16:43:08 2020
@@ -35,7 +35,7 @@
        int stackItemCount = doc->docPatterns.count() + 3;
        m_stateStack.reserve(stackItemCount);
 
-       if (doc->docPatterns.count() > 0)
+       if ((m_options & IterateInDocPatterns) && (doc->docPatterns.count() > 
0))
        {
                auto docPatternEnd = doc->docPatterns.constEnd();
                for (auto it = doc->docPatterns.constBegin(); it != 
docPatternEnd; ++it)
@@ -49,20 +49,20 @@
                }
        }
 
-       if (doc->FrameItems.count() > 0)
+       if ((m_options & IterateInFrameItems) && (doc->FrameItems.count() > 0))
        {
                QList<PageItem*> frameItems = doc->FrameItems.values();
                State state = { frameItems, 0 };
                m_stateStack.push(state);
        }
 
-       if (doc->MasterItems.count() > 0)
+       if ((m_options & IterateInMasterItems) && (doc->MasterItems.count() > 
0))
        {
                State state = { doc->MasterItems, 0 };
                m_stateStack.push(state);
        }
 
-       if (doc->DocItems.count() > 0)
+       if ((m_options & IterateInDocItems) && (doc->DocItems.count() > 0))
        {
                State state = { doc->DocItems, 0 };
                m_stateStack.push(state);
@@ -72,16 +72,17 @@
                m_current = next();
 }
 
-PageItem* PageItemIterator::begin(ScribusDoc* doc)
+PageItem* PageItemIterator::begin(ScribusDoc* doc, int options)
 {
        m_current = nullptr;
+       m_options = options;
        m_stateStack.resize(0); // Not clear in order to keep the already 
allocated memory available
 
        int stackItemCount = doc->docPatterns.count() + 3;
        if (m_stateStack.capacity() < stackItemCount)
                m_stateStack.reserve(stackItemCount);
 
-       if (doc->docPatterns.count() > 0)
+       if ((m_options & IterateInDocPatterns) && (doc->docPatterns.count() > 
0))
        {
                auto docPatternEnd = doc->docPatterns.constEnd();
                for (auto it = doc->docPatterns.constBegin(); it != 
docPatternEnd; ++it)
@@ -95,20 +96,20 @@
                }
        }
 
-       if (doc->FrameItems.count() > 0)
+       if ((m_options & IterateInFrameItems) && (doc->FrameItems.count() > 0))
        {
                QList<PageItem*> frameItems = doc->FrameItems.values();
                State state = { frameItems, 0 };
                m_stateStack.push(state);
        }
 
-       if (doc->MasterItems.count() > 0)
+       if ((m_options & IterateInMasterItems) && (doc->MasterItems.count() > 
0))
        {
                State state = { doc->MasterItems, 0 };
                m_stateStack.push(state);
        }
 
-       if (doc->DocItems.count() > 0)
+       if ((m_options & IterateInDocItems) && (doc->DocItems.count() > 0))
        {
                State state = { doc->DocItems, 0 };
                m_stateStack.push(state);

Modified: trunk/Scribus/scribus/pageitemiterator.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23814&path=/trunk/Scribus/scribus/pageitemiterator.h
==============================================================================
--- trunk/Scribus/scribus/pageitemiterator.h    (original)
+++ trunk/Scribus/scribus/pageitemiterator.h    Sat May 16 16:43:08 2020
@@ -22,16 +22,21 @@
        enum Options
        {
                IterateInGroups = 1,
-               IterateInTables = 2
+               IterateInTables = 2,
+               IterateInDocItems = 4,
+               IterateInMasterItems = 8,
+               IterateInFrameItems = 16,
+               IterateInDocPatterns = 32,
+               IterateInDocDefaults = IterateInGroups + IterateInDocItems + 
IterateInMasterItems + IterateInFrameItems + IterateInDocPatterns
        };
        PageItemIterator(int options = IterateInGroups);
        PageItemIterator(const QList<PageItem*>& itemList, int options = 
IterateInGroups);
-       PageItemIterator(ScribusDoc* doc, int options = IterateInGroups);
+       PageItemIterator(ScribusDoc* doc, int options = IterateInDocDefaults);
 
        bool isNull() const { return (m_current == nullptr); }
        PageItem* current() const { return m_current; }
        
-       PageItem* begin(ScribusDoc* doc);
+       PageItem* begin(ScribusDoc* doc, int options = IterateInDocDefaults);
        PageItem* begin(const QList<PageItem*>& itemList);
        PageItem* next();
 


_______________________________________________
scribus-commit mailing list
[email protected]
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to