]> git.lyx.org Git - lyx.git/blobdiff - src/undo.C
fix reading the author field.
[lyx.git] / src / undo.C
index b3e3334d37420cba3e79a337687062885afeefe0..d7a36941d0b6769fd933840b2475f3ce4f988c80 100644 (file)
 
 #include <algorithm>
 
-using lyx::paroffset_type;
+using std::advance;
+
+using lyx::par_type;
+
+using std::endl;
 
 
 namespace {
@@ -45,7 +49,7 @@ std::ostream & operator<<(std::ostream & os, Undo const & undo)
 
 
 void recordUndo(Undo::undo_kind kind,
-       LCursor & cur, paroffset_type first_par, paroffset_type last_par,
+       LCursor & cur, par_type first_par, par_type last_par,
        limited_stack<Undo> & stack)
 {
        BOOST_ASSERT(first_par <= cur.lastpar());
@@ -57,7 +61,7 @@ void recordUndo(Undo::undo_kind kind,
        // create the position information of the Undo entry
        Undo undo;
        undo.kind = kind;
-       undo.cursor = StableDocumentIterator(cur);
+       undo.cursor = StableDocIterator(cur);
        undo.from = first_par;
        undo.end = cur.lastpar() - last_par;
 
@@ -91,7 +95,7 @@ void recordUndo(Undo::undo_kind kind,
                undo.pars = ParagraphList(first, last);
        }
 
-       // push the undo entry to undo stack 
+       // push the undo entry to undo stack
        //lyxerr << "undo record: " << stack.top() << std::endl;
        stack.push(undo);
 
@@ -104,7 +108,8 @@ void performUndoOrRedo(BufferView & bv, Undo const & undo)
 {
        LCursor & cur = bv.cursor();
        lyxerr << "undo, performing: " << undo << std::endl;
-       cur.setCursor(undo.cursor.asDocumentIterator(&bv.buffer()->inset()), false);
+       cur.setCursor(undo.cursor.asDocIterator(&bv.buffer()->inset()));
+       cur.selection() = false;
 
        if (cur.inMathed()) {
                // We stored the full cell here as there is not much to be
@@ -151,11 +156,14 @@ bool textUndoOrRedo(BufferView & bv,
 
        // this implements redo
        otherstack.push(undo);
-       DocumentIterator dit =
-               undo.cursor.asDocumentIterator(&bv.buffer()->inset());
+       DocIterator dit =
+               undo.cursor.asDocIterator(&bv.buffer()->inset());
        if (dit.inMathed()) {
-               // not much to be done
+               // Easy way out: store a full cell.
+               otherstack.top().array = asString(dit.cell());
        } else {
+               // As cells might be too large in texted, store just a part
+               // of the paragraph list.
                otherstack.top().pars.clear();
                LyXText * text = dit.text();
                BOOST_ASSERT(text);
@@ -200,7 +208,7 @@ bool textRedo(BufferView & bv)
 
 
 void recordUndo(Undo::undo_kind kind,
-       LCursor & cur, paroffset_type first, paroffset_type last)
+       LCursor & cur, par_type first, par_type last)
 {
        Buffer * buf = cur.bv().buffer();
        recordUndo(kind, cur, first, last, buf->undostack());
@@ -217,20 +225,28 @@ void recordUndo(LCursor & cur, Undo::undo_kind kind)
 }
 
 
+void recordUndoInset(LCursor & cur, Undo::undo_kind kind)
+{
+       LCursor c = cur;
+       c.pop();
+       recordUndo(c, kind);
+}
+
+
 void recordUndoSelection(LCursor & cur, Undo::undo_kind kind)
 {
        recordUndo(kind, cur, cur.selBegin().par(), cur.selEnd().par());
 }
 
 
-void recordUndo(LCursor & cur, Undo::undo_kind kind, paroffset_type from)
+void recordUndo(LCursor & cur, Undo::undo_kind kind, par_type from)
 {
        recordUndo(kind, cur, cur.par(), from);
 }
 
 
 void recordUndo(LCursor & cur, Undo::undo_kind kind,
-       paroffset_type from, paroffset_type to)
+       par_type from, par_type to)
 {
        recordUndo(kind, cur, from, to);
 }