1 /* 2 For general Scribus (>=1.3.2) copyright and licensing information please refer 3 to the COPYING file provided with the program. Following this notice may exist 4 a copyright and/or license notice that predates the release of Scribus 1.3.2 5 for which a new license (GPL+exception) is in place. 6 */ 7 8 #ifndef PAGEITEMITERATOR_H 9 #define PAGEITEMITERATOR_H 10 11 #include <QList> 12 #include <QStack> 13 14 #include "scribusapi.h" 15 16 class PageItem; 17 class ScribusDoc; 18 19 class SCRIBUS_API PageItemIterator 20 { 21 public: 22 enum Options 23 { 24 IterateInGroups = 1, 25 IterateInTables = 2, 26 IterateInDocItems = 4, 27 IterateInMasterItems = 8, 28 IterateInFrameItems = 16, 29 IterateInDocPatterns = 32, 30 IterateInDocNoPatterns = IterateInGroups + IterateInDocItems + IterateInMasterItems + IterateInFrameItems, 31 IterateInDocDefaults = IterateInGroups + IterateInDocItems + IterateInMasterItems + IterateInFrameItems + IterateInDocPatterns, 32 IterateAll = IterateInGroups + IterateInTables + IterateInDocItems + IterateInMasterItems + IterateInFrameItems + IterateInDocPatterns 33 }; 34 PageItemIterator(int options = IterateInGroups); 35 PageItemIterator(const QList<PageItem*>& itemList, int options = IterateInGroups); 36 PageItemIterator(const ScribusDoc* doc, int options = IterateInDocDefaults); 37 isNull()38 bool isNull() const { return (m_current == nullptr); } current()39 PageItem* current() const { return m_current; } 40 41 PageItem* begin(ScribusDoc* doc, int options = IterateInDocDefaults); 42 PageItem* begin(const QList<PageItem*>& itemList); 43 PageItem* next(); 44 45 PageItem* moveTo(PageItem* item); 46 PageItem* movePast(PageItem* item); 47 48 inline PageItem* operator*() const { return m_current; } 49 inline PageItem* operator->() const { return m_current; } 50 PageItemIterator& operator++() { next(); return *this; } 51 52 protected: 53 struct State 54 { 55 QList<PageItem*> itemList; 56 int currentIndex; 57 }; 58 59 int m_options { 0 }; 60 PageItem* m_current { nullptr }; 61 QStack<State> m_stateStack; 62 }; 63 64 #endif // PAGEITEMITERATOR_H