Small stuff. Use accessors instead of member variables.
Remove the 'undo_frozen' flag that's no more needed.

Andre'
? .CutAndPaste.C.swp
? .ParagraphList_fwd.h.swp
? 1.diff
? insets/.insettabular.C.swp
Index: cursor.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/cursor.C,v
retrieving revision 1.76
diff -u -p -r1.76 cursor.C
--- cursor.C    18 Mar 2004 16:12:48 -0000      1.76
+++ cursor.C    18 Mar 2004 16:20:27 -0000
@@ -67,12 +67,12 @@ void region(CursorSlice const & i1, Curs
        LCursor::col_type & c1, LCursor::col_type & c2)
 {
        InsetBase & p = i1.inset();
-       c1 = p.col(i1.idx_);
-       c2 = p.col(i2.idx_);
+       c1 = p.col(i1.idx());
+       c2 = p.col(i2.idx());
        if (c1 > c2)
                swap(c1, c2);
-       r1 = p.row(i1.idx_);
-       r2 = p.row(i2.idx_);
+       r1 = p.row(i1.idx());
+       r2 = p.row(i2.idx());
        if (r1 > r2)
                swap(r1, r2);
 }
@@ -418,10 +418,10 @@ string LCursor::grabSelection()
        CursorSlice i1 = selBegin();
        CursorSlice i2 = selEnd();
 
-       if (i1.idx_ == i2.idx_) {
+       if (i1.idx() == i2.idx()) {
                if (i1.inset().asMathInset()) {
                        MathArray::const_iterator it = i1.cell().begin();
-                       return asString(MathArray(it + i1.pos_, it + i2.pos_));
+                       return asString(MathArray(it + i1.pos(), it + i2.pos()));
                } else {
                        return "unknown selection 1";
                }
@@ -456,8 +456,8 @@ void LCursor::eraseSelection()
        CursorSlice const & i2 = selEnd();
 #warning FIXME
        if (i1.inset().asMathInset()) {
-               if (i1.idx_ == i2.idx_) {
-                       i1.cell().erase(i1.pos_, i2.pos_);
+               if (i1.idx() == i2.idx()) {
+                       i1.cell().erase(i1.pos(), i2.pos());
                } else {
                        MathInset * p = i1.asMathInset();
                        row_type r1, r2;
@@ -895,8 +895,8 @@ void LCursor::adjust(pos_type from, int 
 {
        if (pos() > from)
                pos() += diff;
-       if (anchor().pos_ > from)
-               anchor().pos_ += diff;
+       if (anchor().pos() > from)
+               anchor().pos() += diff;
        // just to be on the safe side
        // theoretically unecessary
        normalize();
@@ -932,7 +932,7 @@ MathGridInset * LCursor::enclosingGrid(i
                        return 0;
                MathGridInset * p = m->asGridInset();
                if (p) {
-                       idx = operator[](i).idx_;
+                       idx = operator[](i).idx();
                        return p;
                }
        }
@@ -1100,7 +1100,7 @@ bool LCursor::bruteFind(int x, int y, in
        BOOST_ASSERT(text);
        getParsInRange(text->paragraphs(), ylow, yhigh, beg, end);
 
-       DocumentIterator it = insetBegin(bv().buffer()->inset());
+       DocumentIterator it(bv().buffer()->inset());
        DocumentIterator et;
        lyxerr << "x: " << x << " y: " << y << endl;
        lyxerr << "xlow: " << xlow << " ylow: " << ylow << endl;
@@ -1146,7 +1146,7 @@ void LCursor::bruteFind2(int x, int y)
        DocumentIterator it = *this;
        it.back().pos() = 0;
        DocumentIterator et = *this;
-       et.back().pos() = et.back().asMathInset()->cell(et.back().idx_).size();
+       et.back().pos() = et.back().asMathInset()->cell(et.back().idx()).size();
        for (int i = 0; ; ++i) {
                int xo, yo;
                CursorSlice & cur = it.back();
Index: cursor_slice.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/cursor_slice.C,v
retrieving revision 1.21
diff -u -p -r1.21 cursor_slice.C
--- cursor_slice.C      18 Mar 2004 12:53:32 -0000      1.21
+++ cursor_slice.C      18 Mar 2004 16:20:27 -0000
@@ -37,7 +37,7 @@ CursorSlice::CursorSlice()
 CursorSlice::CursorSlice(InsetBase & p)
        : inset_(&p), idx_(0), par_(0), pos_(0), boundary_(false)
 {
-       ///BOOST_ASSERT(inset_);
+       BOOST_ASSERT(inset_);
 }
 
 
@@ -177,34 +177,34 @@ Paragraph const & CursorSlice::paragraph
 
 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_;
+       return &p.inset() == &q.inset()
+              && p.idx() == q.idx()
+              && p.par() == q.par()
+              && 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_;
+       return &p.inset() != &q.inset()
+              || p.idx() != q.idx()
+              || p.par() != q.par()
+              || 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;
        }
-       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.par() != q.par())
+               return p.par() < q.par();
+       return p.pos() < q.pos();
 }
 
 
@@ -217,12 +217,12 @@ bool operator>(CursorSlice const & p, Cu
 std::ostream & operator<<(std::ostream & os, CursorSlice const & item)
 {
        return os
-          << "inset: " << item.inset_
+          << "inset: " << &item.inset()
 //        << " text: " << item.text()
-          << " idx: " << item.idx_
-          << " par: " << item.par_
-          << " pos: " << item.pos_
-//        << " x: " << item.inset_->x()
-//        << " y: " << item.inset_->y()
+          << " idx: " << item.idx()
+          << " par: " << item.par()
+          << " pos: " << item.pos()
+//        << " x: " << item.inset().x()
+//        << " y: " << item.inset().y()
 ;
 }
Index: cursor_slice.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/cursor_slice.h,v
retrieving revision 1.15
diff -u -p -r1.15 cursor_slice.h
--- cursor_slice.h      18 Mar 2004 12:53:32 -0000      1.15
+++ cursor_slice.h      18 Mar 2004 16:20:27 -0000
@@ -17,11 +17,13 @@
 #ifndef CURSORSLICE_H
 #define CURSORSLICE_H
 
-#include <cstddef>
-#include <iosfwd>
+#include "ParagraphList_fwd.h"
 
 #include "support/types.h"
 
+#include <cstddef>
+#include <iosfwd>
+
 class BufferView;
 class InsetBase;
 class MathInset;
@@ -66,8 +68,12 @@ public:
        idx_type lastidx() const { return nargs() - 1; }
        /// return the paragraph this cursor is in
        par_type par() const;
-       /// return the paragraph this cursor is in
+       /// set the paragraph this cursor is in
        par_type & par();
+       /// increments the paragraph this cursor is in
+       void incrementPar();
+       /// increments the paragraph this cursor is in
+       void decrementPar();
        /// return the position within the paragraph
        pos_type pos() const;
        /// return the position within the paragraph
@@ -112,12 +118,15 @@ public:
        ///
        friend std::ostream & operator<<(std::ostream &, CursorSlice const &);
 public:
-       /// pointer to 'owning' inset
+       /// pointer to 'owning' inset. This is some kind of cache.
        InsetBase * inset_;
+private:
        /// cell index of a position in this inset
        idx_type idx_;
        /// paragraph in this cell (used by texted)
        par_type par_;
+       /// true of 'pit' was properly initialized
+       bool pit_valid_;
        /// position in this cell
        pos_type pos_;
        /**
Index: dociterator.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/dociterator.C,v
retrieving revision 1.5
diff -u -p -r1.5 dociterator.C
--- dociterator.C       18 Mar 2004 12:53:32 -0000      1.5
+++ dociterator.C       18 Mar 2004 16:20:27 -0000
@@ -12,6 +12,16 @@
 #include <boost/assert.hpp>
 
 
+DocumentIterator::DocumentIterator()
+{}
+
+
+DocumentIterator::DocumentIterator(InsetBase & inset)
+{
+       push_back(CursorSlice(inset));
+}
+
+
 InsetBase * DocumentIterator::nextInset()
 {
        if (pos() == lastpos())
@@ -270,7 +280,7 @@ void DocumentIterator::forwardPos()
        pop_back();
        // 'top' is invalid now...
        if (size())
-               ++back().pos_;
+               ++back().pos();
        //else
        //      lyxerr << "... no slice left" << std::endl;
 }
@@ -332,21 +342,7 @@ void DocumentIterator::forwardPar()
        pop_back();
        // 'top' is invalid now...
        if (size())
-               ++back().pos_;
-}
-
-
-DocumentIterator insetBegin(InsetBase & inset)
-{
-       DocumentIterator it;
-       it.push_back(CursorSlice(inset));
-       return it;
-}
-
-
-DocumentIterator insetEnd()
-{
-       return DocumentIterator();
+               ++back().pos();
 }
 
 
Index: dociterator.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/dociterator.h,v
retrieving revision 1.5
diff -u -p -r1.5 dociterator.h
--- dociterator.h       18 Mar 2004 12:53:32 -0000      1.5
+++ dociterator.h       18 Mar 2004 16:20:27 -0000
@@ -49,6 +49,11 @@ public:
        typedef CursorSlice::col_type col_type;
 
 public:
+       ///
+       DocumentIterator();
+       ///
+       explicit DocumentIterator(InsetBase & inset);
+
        //
        // access to slice at tip
        //
@@ -162,12 +167,6 @@ public:
        friend std::ostream &
        operator<<(std::ostream & os, DocumentIterator const & cur);
 };
-
-
-///
-DocumentIterator insetBegin(InsetBase & inset);
-///
-DocumentIterator insetEnd();
 
 
 // The difference to a ('non stable') DocumentIterator is the removed
Index: lyxfunc.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxfunc.C,v
retrieving revision 1.584
diff -u -p -r1.584 lyxfunc.C
--- lyxfunc.C   18 Mar 2004 16:12:48 -0000      1.584
+++ lyxfunc.C   18 Mar 2004 16:20:27 -0000
@@ -444,6 +444,7 @@ FuncStatus LyXFunc::getStatus(FuncReques
                if (!buf)
                        enable = name == "aboutlyx"
                                || name == "file"
+                               || name == "forks"
                                || name == "preferences"
                                || name == "texinfo";
                else if (name == "print")
@@ -502,6 +503,7 @@ FuncStatus LyXFunc::getStatus(FuncReques
        case LFUN_SCREEN_FONT_UPDATE:
        case LFUN_SET_COLOR:
        case LFUN_MESSAGE:
+       case LFUN_FORKS_KILL:
        case LFUN_EXTERNAL_EDIT:
                // these are handled in our dispatch()
                break;
@@ -695,6 +697,14 @@ void LyXFunc::dispatch(FuncRequest const
                        break;
 
                case LFUN_QUIT:
+#if 0
+                       // test speed of DocumentIterator
+                       lyxerr << "start" << endl;
+                       for (DocumentIterator it(owner->buffer()->inset()), end;
+                               it != end; it.forwardPos())
+                               ;
+                       lyxerr << "end" << endl;
+#endif
                        QuitLyX();
                        break;
 
Index: undo.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/undo.C,v
retrieving revision 1.47
diff -u -p -r1.47 undo.C
--- undo.C      18 Mar 2004 16:12:51 -0000      1.47
+++ undo.C      18 Mar 2004 16:20:28 -0000
@@ -32,9 +32,6 @@ using lyx::paroffset_type;
 
 namespace {
 
-/// Whether actions are not added to the undo stacks.
-bool undo_frozen;
-
 /// The flag used by finishUndo().
 bool undo_finished;
 
@@ -153,32 +150,28 @@ bool textUndoOrRedo(BufferView & bv,
        finishUndo();
 
        // this implements redo
-       if (!undo_frozen) {
-               otherstack.push(undo);
-               DocumentIterator dit =
-                       undo.cursor.asDocumentIterator(&bv.buffer()->inset());
-               if (dit.inMathed()) {
-                       // not much to be done
-               } else {
-                       otherstack.top().pars.clear();
-                       LyXText * text = dit.text();
-                       BOOST_ASSERT(text);
-                       ParagraphList & plist = text->paragraphs();
-                       if (undo.from + undo.end <= int(plist.size())) {
-                               ParagraphList::iterator first = plist.begin();
-                               advance(first, undo.from);
-                               ParagraphList::iterator last = plist.begin();
-                               advance(last, plist.size() - undo.end);
-                               
otherstack.top().pars.insert(otherstack.top().pars.begin(), first, last);
-                       }
+       otherstack.push(undo);
+       DocumentIterator dit =
+               undo.cursor.asDocumentIterator(&bv.buffer()->inset());
+       if (dit.inMathed()) {
+               // not much to be done
+       } else {
+               otherstack.top().pars.clear();
+               LyXText * text = dit.text();
+               BOOST_ASSERT(text);
+               ParagraphList & plist = text->paragraphs();
+               if (undo.from + undo.end <= int(plist.size())) {
+                       ParagraphList::iterator first = plist.begin();
+                       advance(first, undo.from);
+                       ParagraphList::iterator last = plist.begin();
+                       advance(last, plist.size() - undo.end);
+                       otherstack.top().pars.insert(otherstack.top().pars.begin(), 
first, last);
                }
-               otherstack.top().cursor = bv.cursor();
-               //lyxerr << " undo other: " << otherstack.top() << std::endl;
        }
+       otherstack.top().cursor = bv.cursor();
+       //lyxerr << " undo other: " << otherstack.top() << std::endl;
 
-       undo_frozen = true;
        performUndoOrRedo(bv, undo);
-       undo_frozen = false;
        return true;
 }
 
@@ -209,8 +202,6 @@ bool textRedo(BufferView & bv)
 void recordUndo(Undo::undo_kind kind,
        LCursor & cur, paroffset_type first, paroffset_type last)
 {
-       if (undo_frozen)
-               return;
        Buffer * buf = cur.bv().buffer();
        recordUndo(kind, cur, first, last, buf->undostack());
        buf->redostack().clear();

Reply via email to