]> git.lyx.org Git - lyx.git/blobdiff - src/PosIterator.C
more cursor dispatch
[lyx.git] / src / PosIterator.C
index 28f7111f8e3890946074f34b1ce12db6f1d75e6f..0dba637dd0c6fd41f587adcaeabbbd81b03f82f5 100644 (file)
 
 #include <boost/next_prior.hpp>
 
+
 using boost::prior;
 
 
+PosIterator::PosIterator(ParagraphList * pl, ParagraphList::iterator pit,
+                        lyx::pos_type pos)
+{
+       stack_.push_back(PosIteratorItem(pl, pit, pos));
+}
+
+
+PosIterator::PosIterator(BufferView & bv)
+{
+       LyXText * text = bv.getLyXText();
+       lyx::pos_type pos = text->cursor().pos();
+       ParagraphList::iterator pit = text->cursorPar();
+
+       ParIterator par = bv.buffer()->par_iterator_begin();
+       ParIterator end = bv.buffer()->par_iterator_end();
+       for (; par != end; ++par) {
+               if (par.pit() == pit)
+                       break;
+       }
+       setFrom(par, pos);
+}
+
+
+PosIterator::PosIterator(ParIterator const & par, lyx::pos_type pos)
+{
+       setFrom(par, pos);
+}
+
+
+void PosIterator::setFrom(ParIterator const & par, lyx::pos_type pos)
+{
+       BOOST_ASSERT(par.size() > 0);
+
+       ParIterator::PosHolder const & ph = par.positions();
+
+       int const last = par.size() - 1;
+       for (int i = 0; i < last; ++i) {
+               ParPosition const & pp = ph[i];
+               stack_.push_back(
+                       PosIteratorItem(const_cast<ParagraphList *>(pp.plist),
+                                       pp.pit, (*pp.it)->pos, *pp.index + 1));
+       }
+       ParPosition const & pp = ph[last];
+       stack_.push_back(
+               PosIteratorItem(const_cast<ParagraphList *>(pp.plist), pp.pit, pos, 0));
+}
+
+
 PosIterator & PosIterator::operator++()
 {
        BOOST_ASSERT(!stack_.empty());
@@ -97,15 +146,8 @@ PosIterator & PosIterator::operator--()
 }
 
 
-bool operator!=(PosIterator const & lhs, PosIterator const & rhs)
-{
-       return !(lhs == rhs);
-}
-
-
 bool operator==(PosIterator const & lhs, PosIterator const & rhs)
 {
-
        PosIteratorItem const & li = lhs.stack_.back();
        PosIteratorItem const & ri = rhs.stack_.back();
 
@@ -120,30 +162,6 @@ bool PosIterator::at_end() const
 }
 
 
-PosIterator::PosIterator(ParagraphList * pl, ParagraphList::iterator pit,
-                        lyx::pos_type pos)
-{
-       stack_.push_back(PosIteratorItem(pl, pit, pos));
-}
-
-
-PosIterator::PosIterator(BufferView & bv)
-{
-       LyXText * text = bv.getLyXText();
-       lyx::pos_type pos = bv.cursor().pos();
-       ParagraphList::iterator pit = text->cursorPar();
-
-       ParIterator par = bv.buffer()->par_iterator_begin();
-       ParIterator end = bv.buffer()->par_iterator_end();
-       for ( ; par != end; ++par) {
-               if (par.pit() == pit)
-                       break;
-       }
-
-       operator=(par.asPosIterator(pos));
-}
-
-
 InsetBase * PosIterator::inset() const
 {
        if (stack_.size() == 1)