Author: jghali
Date: Wed May 13 23:32:36 2020
New Revision: 23807

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=23807
Log:
Enable PageItemIterator to iterate through table cells

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=23807&path=/trunk/Scribus/scribus/pageitemiterator.cpp
==============================================================================
--- trunk/Scribus/scribus/pageitemiterator.cpp  (original)
+++ trunk/Scribus/scribus/pageitemiterator.cpp  Wed May 13 23:32:36 2020
@@ -8,14 +8,16 @@
 #include "pageitemiterator.h"
 #include "pageitem.h"
 #include "pageitem_group.h"
+#include "pageitem_table.h"
 
-PageItemIterator::PageItemIterator(const QList<PageItem*>& itemList)
+PageItemIterator::PageItemIterator(const QList<PageItem*>& itemList, int 
options) :
+       m_options(options)
 {
        m_current = nullptr;
 
        if (itemList.count() > 0)
        {
-               State state = { &itemList, 0 };
+               State state = { itemList, 0 };
                m_stateStack.push(state);
        }
 }
@@ -25,30 +27,49 @@
        while (m_stateStack.count() > 0)
        {
                State& currentState = m_stateStack.top();
-               if (currentState.currentIndex >= 
currentState.pItemList->count())
+               if (currentState.currentIndex >= currentState.itemList.count())
                {
                        m_stateStack.pop();
                        continue;
                }
 
-               PageItem* item = 
currentState.pItemList->at(currentState.currentIndex);
+               PageItem* item = 
currentState.itemList.at(currentState.currentIndex);
                if (!item)
                {
                        currentState.currentIndex++;
                        continue;
                }
 
-               PageItem_Group* groupItem = item->asGroupFrame();
-               if (groupItem)
+               if (m_options & IterateInGroups)
                {
-                       m_current = groupItem;
-                       currentState.currentIndex++;
-                       if (groupItem->groupItemList.count() > 0)
+                       PageItem_Group* groupItem = item->asGroupFrame();
+                       if (groupItem)
                        {
-                               State groupState = { &groupItem->groupItemList, 
0 };
-                               m_stateStack.push(groupState);
+                               m_current = groupItem;
+                               currentState.currentIndex++;
+                               if (groupItem->groupItemList.count() > 0)
+                               {
+                                       State groupState = { 
groupItem->groupItemList, 0 };
+                                       m_stateStack.push(groupState);
+                               }
+                               break;
                        }
-                       break;
+               }
+
+               if (m_options & IterateInTables)
+               {
+                       PageItem_Table* tableItem = item->asTable();
+                       if (tableItem)
+                       {
+                               m_current = tableItem;
+                               currentState.currentIndex++;
+                               QList<PageItem*> cellItems = 
tableItem->getChildren();
+                               if (cellItems.count() > 0)
+                               {
+                                       State tableState = { cellItems, 0 };
+                                       m_stateStack.push(tableState);
+                               }
+                       }
                }
 
                m_current = item;

Modified: trunk/Scribus/scribus/pageitemiterator.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23807&path=/trunk/Scribus/scribus/pageitemiterator.h
==============================================================================
--- trunk/Scribus/scribus/pageitemiterator.h    (original)
+++ trunk/Scribus/scribus/pageitemiterator.h    Wed May 13 23:32:36 2020
@@ -18,7 +18,12 @@
 class SCRIBUS_API PageItemIterator
 {
 public:
-       PageItemIterator(const QList<PageItem*>& itemList);
+       enum Options
+       {
+               IterateInGroups = 1,
+               IterateInTables = 2
+       };
+       PageItemIterator(const QList<PageItem*>& itemList, int options = 
IterateInGroups);
 
        bool hasCurrent() const { return (m_current != 0); }
        PageItem* current() const { return m_current; }
@@ -31,11 +36,12 @@
 protected:
        struct State
        {
-               const QList<PageItem*> *pItemList;
+               QList<PageItem*> itemList;
                int   currentIndex;
        };
 
-       PageItem* m_current;
+       int m_options { 0 };
+       PageItem* m_current { nullptr };
        QStack<State> m_stateStack;
 };
 


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

Reply via email to