]> git.lyx.org Git - lyx.git/blobdiff - src/cursor_slice.C
update build instructions (Qt 4.2.2 etc.)
[lyx.git] / src / cursor_slice.C
index ce9b4605c392a04c5f669785ee775dfaa67b286c..02e7b4ab6270d82dbd3b3b8976c68a2ac8668b29 100644 (file)
 
 #include "cursor_slice.h"
 #include "debug.h"
+#include "lyxtext.h"
+#include "paragraph.h"
 
-#include "mathed/math_inset.h"
-#include "mathed/math_data.h"
+#include "mathed/InsetMath.h"
+#include "mathed/MathData.h"
 
-#include "insets/updatableinset.h"
+#include <boost/assert.hpp>
 
 
-#include <boost/assert.hpp>
+namespace lyx {
 
 using std::endl;
 
 
 CursorSlice::CursorSlice()
-       : inset_(0), idx_(0), par_(0), pos_(0), boundary_(false)
+       : inset_(0), idx_(0), pit_(0), pos_(0)
 {}
 
 
-CursorSlice::CursorSlice(InsetBase * p)
-       : inset_(p), idx_(0), par_(0), pos_(0), boundary_(false)
-{
-       ///BOOST_ASSERT(inset_);
-}
-
-
-void CursorSlice::idx(idx_type idx)
-{
-       idx_ = idx;
-}
-
-
-CursorSlice::idx_type CursorSlice::idx() const
-{
-       return idx_;
-}
-
-
-void CursorSlice::par(par_type par)
-{
-       par_ = par;
-}
-
-
-CursorSlice::par_type CursorSlice::par() const
-{
-       return par_;
-}
-
-
-void CursorSlice::pos(pos_type pos)
-{
-       pos_ = pos;
-}
-
-
-CursorSlice::pos_type CursorSlice::pos() const
-{
-       return pos_;
-}
-
-
-void CursorSlice::boundary(bool boundary)
-{
-       boundary_ = boundary;
-}
-
-
-bool CursorSlice::boundary() const
+CursorSlice::CursorSlice(InsetBase & p)
+       : inset_(&p), idx_(0), pit_(0), pos_(0)
 {
-       return boundary_;
+       BOOST_ASSERT(inset_);
 }
 
 
-MathInset * CursorSlice::asMathInset() const
+MathArray & CursorSlice::cell() const
 {
-       return inset_ ? inset_->asMathInset() : 0;
+       return inset_->asInsetMath()->cell(idx_);
 }
 
 
-UpdatableInset * CursorSlice::asUpdatableInset() const
+Paragraph & CursorSlice::paragraph()
 {
-       return inset_ ? inset_->asUpdatableInset() : 0;
+       return text()->getPar(pit_);
 }
 
 
-void CursorSlice::cell(CursorSlice::idx_type idx) const
+Paragraph const & CursorSlice::paragraph() const
 {
-       BOOST_ASSERT(asMathInset());
-       asMathInset()->cell(idx);
+       return text()->getPar(pit_);
 }
 
 
-MathArray & CursorSlice::cell() const
+pos_type CursorSlice::lastpos() const
 {
-       BOOST_ASSERT(asMathInset());
-       return asMathInset()->cell(idx_);
+       BOOST_ASSERT(inset_);
+       return inset_->asInsetMath() ? cell().size() : paragraph().size();
 }
 
 
-void CursorSlice::getScreenPos(int & x, int & y) const
+CursorSlice::row_type CursorSlice::row() const
 {
-       BOOST_ASSERT(asMathInset());
-       asMathInset()->getScreenPos(idx_, pos_, x, y);
+       BOOST_ASSERT(asInsetMath());
+       return asInsetMath()->row(idx_);
 }
 
 
-LyXText * CursorSlice::text() const
+CursorSlice::col_type CursorSlice::col() const
 {
-       return asUpdatableInset() ? asUpdatableInset()->getText(idx_) : 0;
+       BOOST_ASSERT(asInsetMath());
+       return asInsetMath()->col(idx_);
 }
 
 
 bool operator==(CursorSlice const & p, CursorSlice const & q)
 {
        return p.inset_ == q.inset_
-              && p.idx_ == q.idx_
-              && p.par_ == q.par_
-              && p.pos_ == q.pos_;
+              && p.idx() == q.idx()
+              && p.pit() == q.pit()
+              && p.pos() == q.pos();
 }
 
 
 bool operator!=(CursorSlice const & p, CursorSlice const & q)
 {
        return p.inset_ != q.inset_
-              || p.idx_ != q.idx_
-              || p.par_ != q.par_
-              || p.pos_ != q.pos_;
+              || p.idx() != q.idx()
+              || p.pit() != q.pit()
+              || p.pos() != q.pos();
 }
 
 
 bool operator<(CursorSlice const & p, CursorSlice const & q)
 {
-       if (p.inset_ != q.inset_) {
+       if (&p.inset() != &q.inset()) {
                lyxerr << "can't compare cursor and anchor in different insets\n"
                       << "p: " << p << '\n' << "q: " << q << endl;
-               return true;
+               BOOST_ASSERT(false);
        }
-       if (p.idx_ != q.idx_)
-               return p.idx_ < q.idx_;
-       if (p.par_ != q.par_)
-               return p.par_ < q.par_;
-       return p.pos_ < q.pos_;
+       if (p.idx() != q.idx())
+               return p.idx() < q.idx();
+       if (p.pit() != q.pit())
+               return p.pit() < q.pit();
+       return p.pos() < q.pos();
 }
 
 
@@ -165,76 +119,24 @@ bool operator>(CursorSlice const & p, CursorSlice const & q)
 }
 
 
-std::ostream & operator<<(std::ostream & os, CursorSlice const & item)
+bool operator<=(CursorSlice const & p, CursorSlice const & q)
 {
-       os << " inset: " << item.inset_
-          << " text: " << item.text()
-          << " idx: " << item.idx_
-          << " par: " << item.par_
-          << " pos: " << item.pos_
-//        << " x: " << item.inset_->x()
-//        << " y: " << item.inset_->y()
-;
-       return os;
+       return !(q < p);
 }
 
 
-
-
-void increment(CursorBase & it)
-{
-       CursorSlice & top = it.back();
-       MathArray   & ar  = top.asMathInset()->cell(top.idx_);
-
-       // move into the current inset if possible
-       // it is impossible for pos() == size()!
-       MathInset * n = 0;
-       if (top.pos_ != ar.size())
-               n = (ar.begin() + top.pos_)->nucleus();
-       if (n && n->isActive()) {
-               it.push_back(CursorSlice(n));
-               return;
-       }
-
-       // otherwise move on one cell back if possible
-       if (top.pos_ < ar.size()) {
-               // pos() == size() is valid!
-               ++top.pos_;
-               return;
-       }
-
-       // otherwise try to move on one cell if possible
-       while (top.idx_ + 1 < top.asMathInset()->nargs()) {
-               // idx() == nargs() is _not_ valid!
-               ++top.idx_;
-               if (top.asMathInset()->validCell(top.idx_)) {
-                       top.pos_ = 0;
-                       return;
-               }
-       }
-
-       // otherwise leave array, move on one back
-       // this might yield pos() == size(), but that's a ok.
-       it.pop_back();
-       // it certainly invalidates top
-       ++it.back().pos_;
-}
-
-
-CursorBase ibegin(InsetBase * p)
+std::ostream & operator<<(std::ostream & os, CursorSlice const & item)
 {
-       CursorBase it;
-       it.push_back(CursorSlice(p));
-       return it;
+       return os
+          << "inset: " << &item.inset()
+//        << " text: " << item.text()
+          << " idx: " << item.idx()
+          << " par: " << item.pit()
+          << " pos: " << item.pos()
+//        << " x: " << item.inset().x()
+//        << " y: " << item.inset().y()
+;
 }
 
 
-CursorBase iend(InsetBase * p)
-{
-       CursorBase it;
-       it.push_back(CursorSlice(p));
-       CursorSlice & top = it.back();
-       top.idx_ = top.asMathInset()->nargs() - 1;
-       top.pos_ = top.asMathInset()->cell(top.idx_).size();
-       return it;
-}
+} // namespace lyx