X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FUndo.h;h=887f7627e1d54854800a34c00678971f77d1f63e;hb=233cfed3331e2a8fef39e2dff483dadbf011b772;hp=95514ab0b259a1e5685a1cbe4362301b7cff4bc4;hpb=32148586a85518d9c368e807a32a9be54146136f;p=lyx.git diff --git a/src/Undo.h b/src/Undo.h index 95514ab0b2..887f7627e1 100644 --- a/src/Undo.h +++ b/src/Undo.h @@ -22,11 +22,8 @@ namespace lyx { class Buffer; -class BufferParams; class CursorData; class Inset; -class MathData; -class ParagraphList; /// This is used to combine consecutive undo recordings of the same kind. enum UndoKind { @@ -47,6 +44,9 @@ enum UndoKind { class Undo { + /// noncopyable + Undo(Undo const &); + void operator=(Undo const &); public: Undo(Buffer &); @@ -57,10 +57,10 @@ public: void clear(); /// this will undo the last action - returns false if no undo possible - bool textUndo(CursorData &); + bool undoAction(CursorData &); /// this will redo the last undo - returns false if no redo possible - bool textRedo(CursorData &); + bool redoAction(CursorData &); /// End a sequence of INSERT_UNDO or DELETE_UNDO type of undo /// operations (grouping of consecutive characters insertion/deletion). @@ -80,12 +80,23 @@ 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); + /// end abruptly the current group and create a new one wih the same nesting level + void splitUndoGroup(CursorData const & cur); + /// return true if an undo group is open and contains at least one element + bool activeUndoGroup() const; /// The general case: record undo information for an arbitrary range. /** @@ -117,6 +128,29 @@ 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); + + ~UndoGroupHelper(); + + /** Close the current undo group if necessary and create a new one + * for buffer \c buf. + */ + void resetBuffer(Buffer * buf); + +private: + class Impl; + Impl * const d; +}; + + } // namespace lyx