]> git.lyx.org Git - lyx.git/blobdiff - src/iterators.C
include sys/time.h
[lyx.git] / src / iterators.C
index 6ae3a237e28863fb74ab08c2d387b5af57b83c9c..6622fd31ac481531374a231325e57a163318f43e 100644 (file)
@@ -10,7 +10,7 @@ ParIterator & ParIterator::operator++()
                // Does the current inset contain more "cells" ?
                if (p.index >= 0) {
                        ++p.index;
-                       Paragraph * par = (*p.it)->getFirstParagraph(p.index);
+                       Paragraph * par = p.it.getInset()->getFirstParagraph(p.index);
                        if (par) {
                                positions.push(ParPosition(par));
                                return *this;
@@ -20,12 +20,54 @@ ParIterator & ParIterator::operator++()
                        // The following line is needed because the value of
                        // p.it may be invalid if inset was added/removed to
                        // the paragraph pointed by the iterator
-                       p.it = p.par->inset_iterator_begin();
+                       p.it = p.par->insetlist.begin();
 
                // Try to find the next inset that contains paragraphs
-               Paragraph::inset_iterator end = p.par->inset_iterator_end();
+               InsetList::iterator end = p.par->insetlist.end();
                for (; p.it != end; ++p.it) {
-                       Paragraph * par = (*p.it)->getFirstParagraph(0);
+                       Paragraph * par = p.it.getInset()->getFirstParagraph(0);
+                       if (par) {
+                               p.index = 0;
+                               positions.push(ParPosition(par));
+                               return *this;
+                       }
+               }
+               // Try to go to the next paragarph
+               if (p.par->next()) {
+                       p = ParPosition(p.par->next());
+                       return *this;
+               }
+
+               positions.pop();
+       }
+       return *this;
+}
+
+
+ParConstIterator & ParConstIterator::operator++()
+{
+       while (!positions.empty()) {
+               ParPosition & p = positions.top();
+
+               // Does the current inset contain more "cells" ?
+               if (p.index >= 0) {
+                       ++p.index;
+                       Paragraph * par = p.it.getInset()->getFirstParagraph(p.index);
+                       if (par) {
+                               positions.push(ParPosition(par));
+                               return *this;
+                       }
+                       ++p.it;
+               } else
+                       // The following line is needed because the value of
+                       // p.it may be invalid if inset was added/removed to
+                       // the paragraph pointed by the iterator
+                       p.it = p.par->insetlist.begin();
+
+               // Try to find the next inset that contains paragraphs
+               InsetList::iterator end = p.par->insetlist.end();
+               for (; p.it != end; ++p.it) {
+                       Paragraph * par = p.it.getInset()->getFirstParagraph(0);
                        if (par) {
                                p.index = 0;
                                positions.push(ParPosition(par));