X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FUndo.h;h=59f3ca44fc93a58975ee459ffc9440e5889a5ac1;hb=28be7d552f62cc02fa86d7f79201d089bfb2d7b5;hp=789de5f39f69209dd6bae6cf8e0c51e47b035d94;hpb=11ca1406671f3e7b126bbe9b51694e8d32ba161c;p=lyx.git diff --git a/src/Undo.h b/src/Undo.h index 789de5f39f..59f3ca44fc 100644 --- a/src/Undo.h +++ b/src/Undo.h @@ -47,6 +47,9 @@ enum UndoKind { class Undo { + /// noncopyable + Undo(Undo const &); + void operator=(Undo const &); public: Undo(Buffer &); @@ -80,12 +83,19 @@ public: * a single step. This means you can add a group whenever you are not sure. */ void beginUndoGroup(); - + /// open a new group as above and specify a cursor to set as cur_before + /// of the group's undo elements. + /** + * This cursor takes precedence over what is passed to recordUndo. + * In the case of nested groups, only the first cur_before is + * taken into account. The cursor is reset at the end of the + * top-level group. + */ + void beginUndoGroup(CursorData const & cur_before); /// end the current undo group. void endUndoGroup(); - /// end the current undo group and set UndoElement::cur_after if necessary. - void endUndoGroup(CursorData const &); + void endUndoGroup(CursorData const & cur_after); /// The general case: record undo information for an arbitrary range. /** @@ -102,6 +112,9 @@ public: /// paragraph or cell containing the cursor. void recordUndo(CursorData const & cur, UndoKind kind = ATOMIC_UNDO); + /// prepare undo for the inset containing the cursor + void recordUndoInset(CursorData const & cur, Inset const * inset); + /// Convenience: record undo for buffer parameters void recordUndoBufferParams(CursorData const & cur); @@ -114,6 +127,34 @@ private: }; +/** Helper class to simplify the use of undo groups across several buffers. + * + * The undo group is created when the object is instanciated; it is + * then ended as the object goes out of scope or the buffer is reset + * (see below) + */ +class UndoGroupHelper { +public: + UndoGroupHelper(Buffer * buf) : buffer_(0) + { + resetBuffer(buf); + } + + ~UndoGroupHelper() + { + resetBuffer(0); + } + + /** Close the current undo group if necessary and create a new one + * for buffer \c buf. + */ + void resetBuffer(Buffer * buf); + +private: + Buffer * buffer_; +}; + + } // namespace lyx