Some Undo cleanup. Functionality should be unchanged

- whitespace and typos in comments
- make sure that the Undo::recordUndoXXX functions all go through
  Undo::Private::recordUndo


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@36771 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Jean-Marc Lasgouttes 2010-12-08 10:04:07 +00:00
parent 838af80834
commit 2661b9b22e

View File

@ -43,27 +43,25 @@ using namespace lyx::support;
namespace lyx { namespace lyx {
/** /**
These are the elements put on the undo stack. Each object contains complete These are the elements put on the undo stack. Each object contains
paragraphs from some cell and sufficient information to restore the cursor complete paragraphs from some cell and sufficient information to
state. restore the cursor state.
The cell is given by a DocIterator pointing to this cell, the 'interesting' The cell is given by a DocIterator pointing to this cell, the
range of paragraphs by counting them from begin and end of cell, 'interesting' range of paragraphs by counting them from begin and end
respectively. of cell, respectively.
The cursor is also given as DocIterator and should point to some place in The cursor is also given as DocIterator and should point to some place
the stored paragraph range. In case of math, we simply store the whole in the stored paragraph range. In case of math, we simply store the
cell, as there usually is just a simple paragraph in a cell. whole cell, as there usually is just a simple paragraph in a cell.
The idea is to store the contents of 'interesting' paragraphs in some The idea is to store the contents of 'interesting' paragraphs in some
structure ('Undo') _before_ it is changed in some edit operation. structure ('Undo') _before_ it is changed in some edit operation.
Obviously, the stored ranged should be as small as possible. However, it Obviously, the stored range should be as small as possible. However,
there is a lower limit: The StableDocIterator pointing stored in the undo there is a lower limit: The StableDocIterator stored in the undo class
class must be valid after the changes, too, as it will used as a pointer must be valid after the changes, too, as it will used as a pointer
where to insert the stored bits when performining undo. where to insert the stored bits when performining undo.
*/ */
struct UndoElement struct UndoElement
{ {
/// ///
@ -73,7 +71,8 @@ struct UndoElement
MathData * ar, BufferParams const & bp, MathData * ar, BufferParams const & bp,
bool ifb, bool lc, size_t gid) : bool ifb, bool lc, size_t gid) :
kind(kin), cursor(cur), cell(cel), from(fro), end(en), kind(kin), cursor(cur), cell(cel), from(fro), end(en),
pars(pl), array(ar), bparams(0), isFullBuffer(ifb), lyx_clean(lc), group_id(gid) pars(pl), array(ar), bparams(0), isFullBuffer(ifb),
lyx_clean(lc), group_id(gid)
{ {
if (isFullBuffer) if (isFullBuffer)
bparams = new BufferParams(bp); bparams = new BufferParams(bp);
@ -186,7 +185,8 @@ struct Undo::Private
group_id(0), group_level(0) {} group_id(0), group_level(0) {}
// Do one undo/redo step // Do one undo/redo step
void doTextUndoOrRedo(DocIterator & cur, UndoElementStack & stack, UndoElementStack & otherStack); void doTextUndoOrRedo(DocIterator & cur, UndoElementStack & stack,
UndoElementStack & otherStack);
// Apply one undo/redo group. Returns false if no undo possible. // Apply one undo/redo group. Returns false if no undo possible.
bool textUndoOrRedo(DocIterator & cur, bool isUndoOperation); bool textUndoOrRedo(DocIterator & cur, bool isUndoOperation);
@ -200,9 +200,11 @@ struct Undo::Private
UndoElementStack & stack); UndoElementStack & stack);
/// ///
void recordUndo(UndoKind kind, void recordUndo(UndoKind kind,
DocIterator const & cur, DocIterator const & cell,
pit_type first_pit, pit_type first_pit,
pit_type last_pit); pit_type last_pit,
DocIterator const & cur,
bool isFullBuffer);
/// ///
Buffer & buffer_; Buffer & buffer_;
@ -332,22 +334,24 @@ void Undo::Private::doRecordUndo(UndoKind kind,
// push the undo entry to undo stack // push the undo entry to undo stack
stack.push(undo); stack.push(undo);
//lyxerr << "undo record: " << stack.top() << endl; //lyxerr << "undo record: " << stack.top() << endl;
// next time we'll try again to combine entries if possible
undo_finished_ = false;
} }
void Undo::Private::recordUndo(UndoKind kind, DocIterator const & cur, void Undo::Private::recordUndo(UndoKind kind,
pit_type first_pit, pit_type last_pit) DocIterator const & cell,
pit_type first_pit, pit_type last_pit,
DocIterator const & cur,
bool isFullBuffer)
{ {
LASSERT(first_pit <= cur.lastpit(), /**/); LASSERT(first_pit <= cell.lastpit(), /**/);
LASSERT(last_pit <= cur.lastpit(), /**/); LASSERT(last_pit <= cell.lastpit(), /**/);
doRecordUndo(kind, cur, first_pit, last_pit, cur, doRecordUndo(kind, cell, first_pit, last_pit, cur,
false, undostack_); isFullBuffer, undostack_);
// next time we'll try again to combine entries if possible
undo_finished_ = false; undo_finished_ = false;
redostack_.clear(); redostack_.clear();
//lyxerr << "undostack:\n"; //lyxerr << "undostack:\n";
//for (size_t i = 0, n = buf.undostack().size(); i != n && i < 6; ++i) //for (size_t i = 0, n = buf.undostack().size(); i != n && i < 6; ++i)
@ -499,7 +503,7 @@ void Undo::endUndoGroup()
void Undo::recordUndo(DocIterator const & cur, UndoKind kind) void Undo::recordUndo(DocIterator const & cur, UndoKind kind)
{ {
d->recordUndo(kind, cur, cur.pit(), cur.pit()); d->recordUndo(kind, cur, cur.pit(), cur.pit(), cur, false);
} }
@ -509,8 +513,7 @@ void Undo::recordUndoInset(DocIterator const & cur, UndoKind kind,
if (!inset || inset == &cur.inset()) { if (!inset || inset == &cur.inset()) {
DocIterator c = cur; DocIterator c = cur;
c.pop_back(); c.pop_back();
d->doRecordUndo(kind, c, c.pit(), c.pit(), d->recordUndo(kind, c, c.pit(), c.pit(), cur, false);
cur, false, d->undostack_);
} else if (inset == cur.nextInset()) } else if (inset == cur.nextInset())
recordUndo(cur, kind); recordUndo(cur, kind);
else else
@ -520,14 +523,14 @@ void Undo::recordUndoInset(DocIterator const & cur, UndoKind kind,
void Undo::recordUndo(DocIterator const & cur, UndoKind kind, pit_type from) void Undo::recordUndo(DocIterator const & cur, UndoKind kind, pit_type from)
{ {
d->recordUndo(kind, cur, cur.pit(), from); d->recordUndo(kind, cur, cur.pit(), from, cur, false);
} }
void Undo::recordUndo(DocIterator const & cur, UndoKind kind, void Undo::recordUndo(DocIterator const & cur, UndoKind kind,
pit_type from, pit_type to) pit_type from, pit_type to)
{ {
d->recordUndo(kind, cur, from, to); d->recordUndo(kind, cur, from, to, cur, false);
} }
@ -536,14 +539,8 @@ void Undo::recordUndoFullDocument(DocIterator const & cur)
// This one may happen outside of the main undo group, so we // This one may happen outside of the main undo group, so we
// put it in its own subgroup to avoid complaints. // put it in its own subgroup to avoid complaints.
beginUndoGroup(); beginUndoGroup();
d->doRecordUndo( d->recordUndo(ATOMIC_UNDO, doc_iterator_begin(&d->buffer_),
ATOMIC_UNDO, 0, d->buffer_.paragraphs().size() - 1, cur, true);
doc_iterator_begin(&d->buffer_),
0, d->buffer_.paragraphs().size() - 1,
cur,
true,
d->undostack_
);
endUndoGroup(); endUndoGroup();
} }